THE BEST Mac Terminal Setup for 2022
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
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 theBrewfile
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.
Zsh
I was a late adopter of zsh
but now that it is the default on Mac I took the plunge. My minimal .zshrc
can be found here but there are a few pieces worth pointing out.
Starship
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.
base16-shell
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
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
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
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 fzf-tab
plugin.
Antigen
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.
topgrade
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
git
which adds GitHub niceties likeopen
to jump to the repo on github.com. You’ll want to use this fix to makehub
andzsh
play nicely together. - bat — A syntax highlighting clone of
cat
and can stand in forless
- delta — A syntax highlighting pager for
diff
-ing - fd — A user-friendly version of
find
- htop — An interactive replacement for
top
- procs — A modern replacement for
ps
- exa — A modern replacement for
ls
- ripgrep — An improved
grep
- dust — A more intuitive version of
du
- duf — A better
df
alternative - prettyping —A pretty wrapper around
ping
Happy Hacking
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.