Terminals are very personal. For a while, heavyweight, “batteries included” frameworks like omyzsh were the hot thing while others preferred their own hand-rolled config files that stretched into the hundreds or thousands of lines long. My approach instead features minimalism; front and center.
Homebrew is the inescapable package manager for Mac. However, very few folks take full advantage of it. Homebrew’s core feature is installing CLI tools. Slightly less well-known, but still quite popular, is its ability to install Mac apps via the
cask command. What is even less well-known is Homebrew’s
bundle command which dumps a full list of everything you’ve installed to a
Brewfile. (Check out my
Brewfile here.) This is useful to back up a list of all your installed apps but it really shines on a new computer. Homebrew can read the
Brewfile and install all of its contents in one go ensuring you have all of your favorite apps within reach. As a cherry on top,
bundle plays nicely with
mas allowing you to manage your Mac App Store apps as well.
If you want a minimal shell prompt with no fuss I highly recommend Starship. Out of the box, the defaults are basically perfect. My only config has been to disable a few plugins.
A lovely and minimal approach to color themes that works across a huge variety of different apps and tools. By picking a base16 theme you can be sure it will work across shells, editors, emulators, etc. I personally like the base16 version of gruvbox.
zoxide is the most recent player in a long history of “better
cd commands” that stretch back at least to
autojump. All of these tools quickly “jump” you to the directory that matches your search string. Once you pick up the muscle memory for this it's impossible to go back.
asdf solves the problem of each language having its own runtime version manager holy war. Rather than remember which is the new hot runtime version manager for each language you can just use
asdf to keep all your languages up to date.
fzf is the default fuzzy finder for all things these days. Many tools leverage it for their fuzzy search functionality making it very handy to have installed. There are way too many ways to use and customize it but the defaults work great out of the box. The only additional setup I have is the
I tried to stay away from a
zsh plugin manager. Yet, even with just three plugins, it was worth picking one up and Antigen was the right balance of minimalistic yet supported. Besides the
fzf-tab plugin, I only use
zsh-autosuggestions which provides lovely command autosuggestions and the complementary
zsh-prioritize-cwd-history plugin which makes the autosuggestions context-specific depending on the current working directory.
I’m in camp “always be upgrading” and
topgrade helps me scratch that itch.
topgrade is your one-stop upgrade tool. It knows how to update homebrew, mac app store apps, mac os updates, vim plugins, zsh plugins, dotfiles, asdf, pip, npm, rubygems, and so much more.
Better CLI Tools
The one place I stretch beyond minimalism is collecting CLI tools. I’m a sucker for a better CLI tool replacement and there has been an explosion of new ones recently, primarily from the Rust community.
- hub — A wrapper around
gitwhich adds GitHub niceties like
opento jump to the repo on github.com. You’ll want to use this fix to make
zshplay nicely together.
- bat — A syntax highlighting clone of
catand can stand in for
- delta — A syntax highlighting pager for
- fd — A user-friendly version of
- htop — An interactive replacement for
- procs — A modern replacement for
- exa — A modern replacement for
- ripgrep — An improved
- dust — A more intuitive version of
- duf — A better
- prettyping —A pretty wrapper around
Let me know if there are other terminal tools out there that you can’t live without. I’m always on the hunt for the next improvement to my setup.