The Terminal Is the Workshop
Every tool in a developer's terminal is a deliberate choice. Here's the setup I've built — and why each piece earns its place.
It starts with a blank terminal.
Not a blank page. Not a blank canvas. A blinking cursor in the dark, waiting. Most people see a command line and feel friction. I feel like I’ve sat down at my bench.
The environment you build around your work shapes the work itself. That’s not mysticism — that’s physics. A cluttered workshop produces cluttered output. A sharp, deliberate setup, one you’ve tuned over months and years, eventually becomes invisible. And when your tools disappear, the thinking expands.
Here’s mine.
The Shell
Ghostty is my terminal. Mitchell Hashimoto — the man behind Vagrant and Terraform — built it in Zig because he wanted something that felt genuinely native, not a browser engine wearing a dark theme. The difference is hard to explain until you feel it. Ghostty is fast the way good hardware is fast: quietly, without ceremony. You only notice it when you switch back to something else.
Inside Ghostty, Zellij handles the workspace. It replaced tmux for me — not because tmux isn’t powerful, but because Zellij’s layout system thinks the way I think. Panes, tabs, persistent sessions. The terminal closes; the session stays. The work is always mid-sentence, never cold-started.
The Editor
LazyVim is where the code actually gets written. Neovim, pre-configured with real taste — LSP, fuzzy finding, Git integration, the whole thing out of the box. People who commit to Vim eventually stop explaining why. The key bindings stop being a language you translate and start being the way thought moves. Hands on the home row. Mind on the problem.
The Small Things That Aren’t Small
The small tools are where philosophy lives.
z replaces cd. Powered by zoxide, it learns where you go and routes you there. Type z web and you’re in the project. No full paths. No muscle memory wasted on directory structure.
lsd replaces ls — color, icons, tree views. It sounds cosmetic until you’re scanning a folder at 11pm and your eyes find what they need in half a second instead of two.
bat replaces cat. Syntax highlighting, line numbers, Git indicators inline. Reading a file becomes actual reading — not squinting at a monochrome wall of text.
Atuin rewires shell history. Every command, timestamped, searchable, synced across machines. It sounds like a minor upgrade. It becomes essential the moment you’re trying to reconstruct what you ran three weeks ago at 1am to fix that one strange deploy.
glow renders markdown right in the terminal. Documentation stays readable without leaving the shell — no browser tab, no broken focus.
jq is a scalpel for JSON. Pipe any response through it and the structure reveals itself cleanly. One of those tools you use once and immediately wonder how you tolerated the alternative.
The Pure prompt keeps everything quiet: directory, branch, exit status. Nothing else. Noise is the enemy of flow.
The Collaborator
Claude Code lives in the terminal too. Not a sidebar, not a floating widget — in the shell, where the work happens. It reads the codebase, writes code, runs commands, and holds the whole project in context at once. Less autocomplete, more second engineer.
The terminal was always a conversation — you and the machine, turn by turn. Claude Code makes that conversation worth having.
The Runtimes
bun for JavaScript. Fast the way good tooling should be — not flashy fast, just done before you notice. Installs that used to take a minute take seconds. nvm handles Node versions when legacy projects demand it. Go is there for the things built once and trusted indefinitely.
- Your terminal is your workshop — every alias, every replacement tool is a decision about how you want to think. Tend it deliberately.
- Invisible tools are the best tools — when the environment stops demanding attention, the ideas get more of it.
- Small optimizations compound — two seconds saved, five hundred times a day. The math is straightforward.
- Curate, don’t collect — every tool here earns its place. If it adds friction or cognitive load, it goes.
The terminal isn’t where code lives. It’s where thinking happens.
Build the environment that makes yours sharper. Then ship the thing.