THE BEST Mac Terminal Setup for 2022

Ben Darfler
4 min readJun 6, 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 zshbut 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-tabplugin.

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 like open to jump to the repo on github.com. You’ll want to use this fix to make huband zsh play nicely together.
  • bat — A syntax highlighting clone of cat and can stand in for less
  • 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.

--

--

Ben Darfler

Engineering Leader, Father, Meditator, Elected Official, He/Him. Currently Director @ Honeycomb.io