There’s an overarching theme here, and it’s this: don’t settle. If you are a software engineer, you’re using a lot of tools in your terminal that mostly haven’t been updated since the 80s. Modernized alternatives to many of these tools exist; with very little effort, you can remove a great deal of the typing and friction from everyday tasks.
z
makes changing directories less of a typing chore. It learns which directories you use often and lets you jump into them by typing just a few characters. I use it constantly and consider it the most time-saving tool I use.
A general purpose fuzzy finder. I have mine integrated with zsh
as a tool for searching through shell history. I also use it to fuzzy find files deeply nested in directories – like Command-P search in VS Code, but in the terminal.
https://github.com/junegunn/fzf
Bat is a better cat
, featuring syntax highlighting, line numbers, and a built in pager (so you don’t have to pipe it to less
). It’s also smart enough to know when it’s being used in a pipe, so it can also be used as a drop-in replacement for cat
in almost all contexts.
https://github.com/sharkdp/bat
Exa is a better ls
, with colorization, human-readable file sizes, git status, etc.
tmux is a Terminal Multiplexer. It lets you run a whole bunch of shells inside a single terminal window. I find it’s a lot more sane and organized than having 37 different terminal windows open. It also keeps stuff running after the terminal is closed; you can just reattach to your session later (even on another machine).
ripgrep is a replacement for the tools grep
, fgrep
, and git grep
. It is incredibly fast and accurate.
https://github.com/BurntSushi/ripgrep
tig is a curses-based interface to git
. I use it instead of git status
most of the time. It has interactive tools for staging/unstaging/committing chunks and files, and they’re extremely ergonomic.
Neovim is a modern fork of Vim. It’s extensible with Lua and has a built in Language Server Protocol client, so it can give you an IDE-like environment along with all the power of Vi/Vim under the hood.
If you’re working on a remote host in an interactive terminal, you want mosh. It’s an order of magnitude better than a plain ssh connection – your typing shows up right away, for example, and it can survive network switches and auto-resume after connection drops.
Prezto is a plug-in framework for zsh
. It has similarities to oh-my-zsh
, in that it gives you a batteries-included shell with lots of neat features that are easy to turn on. I found it to be simpler, faster, and more modular than oh-my-zsh
, despite the latter’s greater popularity.
https://github.com/sorin-ionescu/prezto
This is a Git pager that makes diffs much easier to read (and prettier). It can be configured as the default Git pager, so that you don’t even have to remember to run it – after installation, commands you use all the time like git diff
will have beautiful output.
https://github.com/so-fancy/diff-so-fancy
fd is a replacement for find
that makes it fast and easy to locate files in a tree and do things with them. I use it all the time instead of find . -iname ...
to look up paths and locations.
Password Store (or just “pass”) is a password manager that lives in your shell and is implemented almost entirely in plain bash
. It uses gnupg
for encryption and git
for synchronization, so it can be installed pretty much anywhere. It’s become so popular that people have made GUIs for it.
https://www.passwordstore.org/
Obsidian is a Personal Knowledge Management system. I use it to write down what I plan to do and what I’ve done each day, and to keep a kind of lab journal while debugging or spelunking. I also use it to store bookmarks, track my reading, and write drafts of longer-form Markdown content. My favorite thing about it is that the notes are just Markdown files stored in Git, so they are easy to read and search using other tools.
Alfred is a macOS app launcher that’s much faster than Spotlight, but it has a wealth of other tools that make keyboard driven workflows possible. I use it as a snippet expander for text I type frequently, like my Zoom room ID, as a clipboard history manager, and as a way to quickly dump tasks and ideas for later processing.
WezTerm is a replacement for Terminal.app. It adds GPU rendering, fancy fonts, and a lot of other quality of life improvements. Developers just love writing new terminal apps (they are secondly only to text editors); I formerly used iTerm2 and Alacritty.
https://github.com/wez/wezterm
Warp is a unique take on modernizing the terminal. It adds predictive command completion, a cell/block based interface, and an AI command generator that is remarkably good.
Rectangle makes it really easy to snap and align windows in macOS; wonderful for making two windows exactly side by side or moving a window to where you want it with a keyboard gesture.