Edition 4 - Journalism from the command line, part 2
Hi! It’s us again!
Last week we spoke about command line tools that we like. Today, in part two of this miniseries we want to show how Jan makes the command line itself feel a bit more like home. Buckle up: it's technical, but you'll learn how to move through the file system swiftly, organize multiple terminals, and set up project-specific work environments.
As always, send your feedback to readwritenewsletter@proton.me. And if you can't find it in your inbox, you can read part one here.
Environment Comfort
Before we jump in, let's establish some basics. When you open Terminal (the software on macOS), Command Prompt (Windows), or any terminal emulator (Linux, anyone?), you're accessing a terminal: It is a text interface to your computer. Inside that terminal runs something called a shell: the program that interprets your commands. Common shells include Bash, Zsh, and Fish. Think of it this way: the terminal is the window, the shell is the command interpreter inside it.
Zsh, oh-my-zsh, and warp-dir
The shell I use is Zsh, extended with the oh-my-zsh framework, plus the warp-dir plugin for navigation. It’s a straightforward setup that makes moving between projects nearly instant.
Zsh provides all the quality-of-life improvements: autosuggestions, syntax highlighting, smarter tab completion, and shared command history across sessions.
And oh-my-zsh adds small but meaningful shortcuts, like git helpers, substring search, you name it. It also comes with nice themes, however, I use Dracula (it's available for a lot of other tools I use, too).
warp-dir adds persistent directory "warps", stored in ~/.warprc. It's pretty neat, if you move between 3+ directories regularly, you should definitely try it:
# add a new project folder
wd add projects
# from anywhere, just 'warp' to that folder
wd projects
Unlike aliases, these shortcuts are persistent, portable, and don’t need shell restarts.
When you switch between datasets, repos, and story folders dozens of times a day, small navigation shortcuts add up.
tmux
tmux is a so-called terminal multiplexer. It lets me create multiple windows and panes within one session, detach from it, and reattach later, even on another machine. When I am on the move, when I close my laptop, when I disconnect from a server, no matter what: I come back to my tmux session and everything is where I expect it to be.
Technically, it manages pseudo-terminals (PTYs) under a single controlling process. When I SSH into a remote server and start long-running tasks, like a multi-hour scrape or a data extraction, I can disconnect safely:
tmux new -s work
The session persists, the processes keep running, and I can rejoin later with a simple command:
tmux a -t work
I often run one pane watching logs (tail -f), another running a Python script or a download, and a third handling quick shell commands or monitoring resource consumption. The layout is saved in a .tmux.conf file, so even the pane structure is reproducible. It’s not glamorous, but it prevents hours of redoing interrupted work.
ProjectSwitcher
I wrote a small utility called ProjectSwitcher to manage project-based environment profiles securely. Each project has its own GPG-encrypted .env file. (It's free on GitHub, installation takes two minutes.)
Your encrypted profiles live their own files:
~/envs/
├── dev.env.gpg
├── prod.env.gpg
└── test.env.gpg
Switching is simple:
project dev
The script decrypts the right file to a temp location, sources it, deletes the temp file, and updates the prompt:
[dev] $
Each profile can contain credentials, API keys, dataset paths - all encrypted at rest. It keeps secrets compartmentalized and avoids leaking .env files into repos or shell history. One command swaps the whole environment. As someone who goes back and forth between multiple projects on any given day, it has made my live easier.
The Compound Effect
None of these tools are revolutionary on their own. But together, they've eliminated a lot of small frictions from my daily workflow: the mental overhead of remembering paths, the anxiety of losing work to a connection outage, the risk of accidentally committing API keys.
If you're spending significant time in the terminal, I'd encourage you to invest a weekend setting up your own version of this stack.