<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="377532" data-post-id="377532">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="AstonJ" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/AstonJ/120/15_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  AstonJ
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks Sam, <a href="https://forum.elixirforum.com/t/do-you-use-any-zsh-plugins/73222/" rel="nofollow">added</a>! <img src="https://forum.elixirforum.com/uploads/default/original/2X/4/425cf8a2af1868cc834c0a12b6f0c9ef0e530de9.gif?v=15" title=":icon_biggrin:" class="emoji emoji-custom" alt=":icon_biggrin:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377532" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-377532" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377532"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #21"></div>
  </section>
</div>
    <div class="postbit" id="377601" data-post-id="377601">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="nikfp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/nikfp/120/37207_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  nikfp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I love using <code>mix hex.docs</code> and often need them offline. So I set up a helper to fetch project docs for any dependencies as follows:</p>
<p>in <code>~/elixir_utils/docs_loader.exs</code> I put this little code block in:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule OfflineSetupUtils do
  def run_mix_task(args, opts \\ []) do
    IO.puts("Running Mix Command: mix #{Enum.join(args, " ")}")
    {output, exit_status} = System.cmd("mix", args, opts)
    IO.puts(output)
    IO.puts("Finished mix task with exit code #{exit_status}\n\n")
  end
end

Mix.Project.config()
|&gt; Keyword.get(:deps)
|&gt; Enum.map(fn dep -&gt;
  Tuple.to_list(dep)
  |&gt; List.first()
  |&gt; Atom.to_string()
end)
|&gt; Enum.each(fn name -&gt;
  OfflineSetupUtils.run_mix_task(["hex.docs", "fetch", name])
end)

</code></pre>
<p>then when I’m in a mix project directory, run <code>iex -S mix</code> to get an iex session scoped to the mix project, then run <code>Code.eval_file(System.user_home!() &lt;&gt; “/elixir_utils/docs_loader.exs”)</code>, and watch it pull all the docs at the correct versions for me.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377601" data-batch-url="/posts/batch_likers">
                        7
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-377601" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377601"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #22"></div>
  </section>
</div>
    <div class="postbit" id="377609" data-post-id="377609">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="christhekeele" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/christhekeele/120/1039_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  christhekeele
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="nikfp" data-post="23" data-topic="73131">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/nikfp/48/37207_2.png" class="avatar"> nikfp:</div>
<blockquote>
<p>I love using <code>mix hex.docs</code> and often need them offline. So I set up a helper to fetch project docs for any dependencies as follows:</p>
<p>in <code>~/elixir_utils/docs_loader.exs</code> I put this little code block in:</p>
</blockquote>
</aside>
<p>This is nicer than my own nasty bash version I hacked together a while back! <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"> Stealing it, rest in peace <code>~/bin/airplane_mode.sh</code></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377609" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-377609" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377609"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #23"></div>
  </section>
</div>
    <div class="postbit" id="377725" data-post-id="377725">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Doerge" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Doerge/120/19632_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Doerge
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Good tips here already!</p>
<p>Here are 2 from me:</p>
<ul>
<li>Mise for managing binary versions <a href="https://mise.jdx.dev/" rel="noopener nofollow ugc">https://mise.jdx.dev/</a> Similar to asdf (and mostly compat) but faster. <code>.tool-versions</code> are compatible. Super useful if you are working on multiple projects with different versions of Elixir (or Python, or Node, etc).</li>
<li>Aerospace for a nice tiling window manager for OS X <a href="https://github.com/nikitabobko/AeroSpace" class="inline-onebox" rel="noopener nofollow ugc">GitHub - nikitabobko/AeroSpace: AeroSpace is an i3-like tiling window manager for macOS · GitHub</a></li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377725" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-377725" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377725"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #24"></div>
  </section>
</div>
    <div class="postbit" id="377728" data-post-id="377728">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Awlexus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Awlexus/120/12355_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Awlexus
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Sometimes I want to look at the debug logs of tests, to get a better idea of what might be the issue, so I update my test configs like this and use <code>LOG_LEVEL=debug mix test</code></p>
<pre data-code-wrap="diff"><code class="lang-diff">- config :logger, level: :warning
+ config :logger, level: System.get_env("LOG_LEVEL", "warning") |&gt; String.to_atom()
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377728" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-377728" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377728"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #25"></div>
  </section>
</div>
    <div class="postbit" id="377733" data-post-id="377733">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="LostKobrakai" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/LostKobrakai/120/3072_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  LostKobrakai
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Just <code>mix hex.docs fetch</code> does this built in.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377733" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-377733" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377733"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #26"></div>
  </section>
</div>
    <div class="postbit" id="377742" data-post-id="377742">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wmnnd" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wmnnd/120/4985_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wmnnd
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>It’s common for Phoenix context functions to take a URL generator function. To test them better, you can use Agents:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">test "verify something from a token", %{conn: conn} do
  {:ok, agent_pid} = Agent.start_link(fn -&gt; nil end)
  capture_token = fn token -&gt;
    Agent.update(agent_pid, fn _ -&gt; token end)
  end

  MyApp.SomeContext.send_verification_email(&amp;capture_token.(&amp;1))
  token = Agent.get(token_agent, &amp; &amp;1)

  assert something(token)
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377742" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-377742" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377742"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #27"></div>
  </section>
</div>
    <div class="postbit" id="378221" data-post-id="378221">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="adamu" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/adamu/120/31482_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  adamu
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>You can use <a href="https://www.erlang.org/doc/apps/erts/tty" rel="nofollow">various commands</a> for navigating around in <code>iex</code> (<code>M</code> in the docs is <code>Esc</code>).</p>
<p>I think <code>CTRL+r</code> (search history), <code>CTRL+a</code> (start of line), <code>CTRL+e</code> (end of line), <code>ESC+b</code> (start of word), <code>ESC+f</code> (end of word), <code>ESC+d</code> (delete to end of word) are particularly useful.</p>
<p>edit: also <code>ESC+c</code> is great if you want to get out of the middle of an input:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(1)&gt; "part of a string
...(1)&gt; # &lt;-- ESC+c here
iex(1)&gt; Enum.map([], fn -&gt;
...(1)&gt; # &lt;-- ESC+c here
iex(1)&gt; :hi
:hi
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378221" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-378221" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378221"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #28"></div>
  </section>
</div>
    <div class="postbit" id="378266" data-post-id="378266">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="codeanpeace" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/codeanpeace/120/10278_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  codeanpeace
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Handy way to pipe a result from within IEx to your macOS system clipboard when you have <a href="https://www.unix.com/man_page/osx/1/pbcopy/" rel="noopener nofollow ugc"><code>pbcopy</code></a> installed and shell history enabled</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Helpers do
  # pipe expression result to clipboard e.g. ... |&gt; Helpers.copy
  def copy(term) do
    text =
      if is_binary(term) do
        term
      else
        inspect(term, limit: :infinity, pretty: true)
      end

    port = Port.open({:spawn, "pbcopy"}, [])
    true = Port.command(port, text)
    true = Port.close(port)

    IO.inspect(term, label: "copied to clipboard")
    IEx.dont_display_result()
  end
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378266" data-batch-url="/posts/batch_likers">
                        9
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-378266" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378266"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #29"></div>
  </section>
</div>
    <div class="postbit" id="378267" data-post-id="378267">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bunnylushington" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bunnylushington/120/31344_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bunnylushington
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The <a href="https://atuin.sh" rel="noopener nofollow ugc">atuin</a> shell history manager has various ways of grouping shell history.  I find the “workspace” option particularly useful.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378267" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/share-an-elixir-or-dev-env-tip-a-day/73131/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-378267" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378267"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>