<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Hexdump</title>
        <description>An interactive terminal portfolio Jekyll theme.</description>
        <link>https://hexdump.netlify.app/</link>
        <atom:link href="https://hexdump.netlify.app/feed.xml" rel="self" type="application/rss+xml"/>
        <pubDate>Mon, 20 Jul 2026 08:43:51 +0000</pubDate>
        <lastBuildDate>Mon, 20 Jul 2026 08:43:51 +0000</lastBuildDate>
        <generator>Jekyll v4.4.1</generator>
        
            <item>
                <title>Why Every Developer Eventually Returns to the Terminal</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/03.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Wed, 27 May 2026 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/why-every-developer-eventually-returns-to-the-terminal</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/why-every-developer-eventually-returns-to-the-terminal</guid>
                
                <category>Linux</category>
                
                <category>CLI</category>
                
                
            </item>
        
            <item>
                <title>Building Dashboards People Actually Understand</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/06.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Tue, 26 May 2026 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/building-dashboards-people-actually-understand</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/building-dashboards-people-actually-understand</guid>
                
                <category>Linux</category>
                
                <category>Security</category>
                
                
            </item>
        
            <item>
                <title>Late Night Deployments and Other Bad Decisions</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/03.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Mon, 25 May 2026 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/late-night-deployments-and-other-bad-decisions</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/late-night-deployments-and-other-bad-decisions</guid>
                
                <category>DevOps</category>
                
                <category>CLI</category>
                
                
            </item>
        
            <item>
                <title>Building a Linux Workspace That Feels Like Home</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/03.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Sun, 24 May 2026 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/building-a-linux-workspace-that-feels-like-home</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/building-a-linux-workspace-that-feels-like-home</guid>
                
                <category>Linux</category>
                
                
            </item>
        
            <item>
                <title>Rust, Fearless Concurrency and Existential Compiler Messages</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/03.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Fri, 20 Dec 2024 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/rust-fearless-concurrency-and-existential-compiler-messages</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/rust-fearless-concurrency-and-existential-compiler-messages</guid>
                
                <category>Programming</category>
                
                <category>Rust</category>
                
                
            </item>
        
            <item>
                <title>From Side Projects to Digital Worlds</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/09.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Wed, 18 Dec 2024 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/from-side-projects-to-digital-worlds</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/from-side-projects-to-digital-worlds</guid>
                
                <category>DevOps</category>
                
                <category>Programming</category>
                
                <category>Linux</category>
                
                
            </item>
        
            <item>
                <title>Why Developers Love Mechanical Keyboards</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/07.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Sun, 15 Dec 2024 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/why-developers-love-mechanical-keyboards</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/why-developers-love-mechanical-keyboards</guid>
                
                <category>Linux</category>
                
                <category>Programming</category>
                
                
            </item>
        
            <item>
                <title>Building on the Internet Without Burning Out</title>
                <description>&lt;p&gt;Every few years a new tool promises to finally replace the terminal. A slicker GUI, a friendlier abstraction, a dashboard that turns commands into buttons. And for a while, it works. Then a project grows, an edge case shows up, or a server needs debugging over SSH — and the terminal is exactly where everyone ends up again.&lt;/p&gt;

&lt;h3 id=&quot;why-the-terminal-keeps-winning&quot;&gt;Why the terminal keeps winning&lt;/h3&gt;

&lt;p&gt;The terminal doesn’t get faster with hype cycles, but it also doesn’t get slower. Commands you learned a decade ago still work today. A script written for one project can automate the next one with a few edits. That kind of compounding value is rare in software.&lt;/p&gt;

&lt;p class=&quot;tip&quot;&gt;Learning your shell’s history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) alone can save more time than most GUI shortcuts combined.&lt;/p&gt;

&lt;p&gt;Muscle memory is part of it too. Once &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt;, and a handful of flags are wired into your fingers, switching to a mouse-driven equivalent feels like a step backwards — one more click, one more window, one more context switch.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The command line isn’t a relic of the past. It’s the one interface that never asked to be redesigned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;setting-up-a-workspace-worth-keeping&quot;&gt;Setting up a workspace worth keeping&lt;/h3&gt;

&lt;p&gt;A good terminal setup is less about the emulator and more about the habits around it: a shell config you actually understand, aliases for the commands you repeat daily, and a prompt that tells you what you need without shouting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/03.jpg&quot; alt=&quot;Terminal setup with multiple panes open&quot; /&gt;
&lt;em&gt;A minimal tiling layout keeps logs, editor, and shell visible at the same time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some habits worth adopting early:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Keep dotfiles in version control, not scattered across machines&lt;/li&gt;
  &lt;li&gt;Alias the commands you type more than five times a day&lt;/li&gt;
  &lt;li&gt;Prefer composable tools (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;awk&lt;/code&gt;) over one-off scripts&lt;/li&gt;
  &lt;li&gt;Learn one multiplexer (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;screen&lt;/code&gt;) so sessions survive disconnects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rough progression most developers go through:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy commands from tutorials without fully understanding them&lt;/li&gt;
  &lt;li&gt;Start reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; pages instead of guessing flags&lt;/li&gt;
  &lt;li&gt;Write small scripts to avoid repeating multi-step commands&lt;/li&gt;
  &lt;li&gt;Build a personal toolkit of aliases and functions&lt;/li&gt;
  &lt;li&gt;Reach for the terminal first, GUI second&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=&quot;note&quot;&gt;None of this requires memorizing hundreds of flags. A dozen commands, used well, cover most daily work.&lt;/p&gt;

&lt;h3 id=&quot;a-quick-look-at-the-setup&quot;&gt;A quick look at the setup&lt;/h3&gt;

&lt;p&gt;Here’s a small snippet from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; that wires up a faster prompt and a couple of aliases:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;autoload &lt;span class=&quot;nt&quot;&gt;-Uz&lt;/span&gt; vcs_info
precmd&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; vcs_info &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
setopt PROMPT_SUBST
&lt;span class=&quot;nv&quot;&gt;PROMPT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;%F{cyan}%~%f ${vcs_info_msg_0_} %# &apos;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git status&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;git commit&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ls -lah&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p class=&quot;important&quot;&gt;Be careful with aliases that shadow built-in commands — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias cp=&quot;cp -i&quot;&lt;/code&gt; is safe, overriding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; rarely is.&lt;/p&gt;

&lt;p&gt;Terminal multiplexers, editors, and shells all come with trade-offs worth comparing before committing to one for years:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Good for&lt;/th&gt;
      &lt;th&gt;Learning curve&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;tmux&lt;/td&gt;
      &lt;td&gt;Persistent sessions, pane layouts&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vim / Neovim&lt;/td&gt;
      &lt;td&gt;Fast editing, remote-friendly&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zsh + Oh My Zsh&lt;/td&gt;
      &lt;td&gt;Sane defaults, plugins&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fish&lt;/td&gt;
      &lt;td&gt;Autosuggestions out of the box&lt;/td&gt;
      &lt;td&gt;Low&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-parts-people-forget-to-show&quot;&gt;The parts people forget to show&lt;/h3&gt;

&lt;p&gt;Screenshots of terminals always look clean, but the real day-to-day setup includes plenty of clutter: half-finished scripts, test servers running in the background, logs streaming past faster than anyone actually reads them.&lt;/p&gt;

&lt;div class=&quot;gallery-box&quot;&gt;
  &lt;div class=&quot;gallery gallery-columns-3&quot;&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/04.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Server rack&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;A home server used for testing deploy scripts&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/05.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Multiple monitors&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;Logs on one screen, editor on the other&lt;/figcaption&gt;
  
&lt;/figure&gt;
    &lt;figure class=&quot;gallery__image&quot;&gt;
  &lt;img src=&quot;/images/02.jpg&quot; loading=&quot;lazy&quot; alt=&quot;Workspace&quot; /&gt;
  
  &lt;figcaption class=&quot;gallery__image__caption&quot;&gt;The whole setup fits in a single window when it has to&lt;/figcaption&gt;
  
&lt;/figure&gt;
  &lt;/div&gt;
  &lt;p&gt;Gallery&lt;/p&gt;
&lt;/div&gt;

&lt;p class=&quot;warning&quot;&gt;Don’t mistake a minimal setup for a fragile one — back up your dotfiles before switching machines.&lt;/p&gt;

&lt;h3 id=&quot;why-it-sticks-around&quot;&gt;Why it sticks around&lt;/h3&gt;

&lt;p&gt;Every generation of developers rediscovers the same thing: GUIs change every few years, but a well-chosen set of terminal habits keeps paying off long after the tool that inspired them is gone&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That’s not nostalgia — it’s just a good return on the time invested in learning it.&lt;/p&gt;

&lt;p class=&quot;caution&quot;&gt;Treat this as a starting point, not a rulebook. The best terminal setup is the one you’ll actually keep using.&lt;/p&gt;

&lt;p&gt;Pick one habit from this list, use it for a week, and see if the terminal earns its place back on your desktop&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is also why terminal-based tools tend to have unusually long-lived user bases — see the continued popularity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh&lt;/code&gt; decades after their first release. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;If nothing else, learning reverse history search (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+R&lt;/code&gt;) is the single highest-value five minutes you can spend this week. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
                <pubDate>Sat, 19 Oct 2024 12:01:35 +0000</pubDate>
                <link>https://hexdump.netlify.app/posts/building-on-the-internet-without-burning-out</link>
                <guid isPermaLink="true">https://hexdump.netlify.app/posts/building-on-the-internet-without-burning-out</guid>
                
                <category>Programming</category>
                
                <category>CLI</category>
                
                <category>DevOps</category>
                
                
            </item>
        
    </channel>
</rss>