macOS Setup¶
Originally I wrote this guide to remind myself how to setup my M1 Macbook the way I like it. A few friends and coworkers expressed interest in my setup, so I cleaned up the notes (a bit) and created this guide. You don't need to follow this guide completely, I encourage you to pick-and-choose the pieces you want to use and to tweak things to fit your needs. I also love to see how other people have setup their systems, so please share your configs!
Recommended Software¶
Download and install these following the instructions on their websites:
Command Line Tools¶
Btop++¶
TUI resource monitoring. C++ version and continuation of bashtop and bpytop.
brew install btop
https://github.com/aristocratos/btop
Mosh¶
Better SSH for high latency or unreliable connections.
brew install mosh
mtr (traceroute)¶
TUI traceroute utility.
brew install mtr
https://github.com/traviscross/mtr
nano¶
A small and friendly editor. As of macOS 12.3 nano was replaced with a symlink to pico.
brew install nano
Nmap¶
Network scanner.
brew install nmap
jq¶
Command line JSON parser.
brew install jq
https://stedolan.github.io/jq/
fq¶
Like JQ but for binary formats.
brew install wader/tap/fq
bat¶
A cat(1) clone with syntax highlighting and Git integration.
brew install bat
brew install eth-p/software/bat-extras
While it's optional, I recommend installing the bat-extras, it's a collection of bash scripts that integrate bat
with various command line tools.
To easily format help output from a command, I put the following alias and function in my ~/.zshrc
file:
alias bathelp='bat --plain --language=help'
help() {
"$@" --help 2>&1 | bathelp
}
https://github.com/sharkdp/bat
fd¶
A simple, fast and user-friendly alternative to find
brew install fd
Vim Plugins¶
vim-plug: Minimalist Vim Plugin Manager.
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
~/.vimrc
call plug#begin()
" The default plugin directory will be as follows:
" - Vim (Linux/macOS): '~/.vim/plugged'
" - Vim (Windows): '~/vimfiles/plugged'
" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'
" You can specify a custom plugin directory by passing it as the argument
" - e.g. `call plug#begin('~/.vim/plugged')`
" - Avoid using standard Vim directory names like 'plugin'
" Make sure you use single quotes
Plug 'tpope/vim-sensible'
" Uncomment to enable catppuccin theme
" Plug 'catppuccin/vim', { 'as': 'catppuccin' }
" Initialize plugin system
" - Automatically executes `filetype plugin indent on` and `syntax enable`.
call plug#end()
" You can revert the settings after the call like so:
" filetype indent off " Disable file-type-specific indentation
" syntax off " Disable syntax highlighting
set termguicolors
colorscheme catppuccin_mocha
Afterwards you'll need to run :PlugInstall
from within vim.
https://github.com/junegunn/vim-plug
Version Managers¶
There are helpful tools to install and run multiple versions of various programming languages.
Python (uv)¶
An extremely fast Python package and project manager, written in Rust.
curl -LsSf https://astral.sh/uv/install.sh | sh
Python (pyenv)¶
Note
I've stopped using pyenv
in favor of uv
.
brew install pyenv
https://github.com/pyenv/pyenv
NodeJS (nvm)¶
Once the install completes, be sure to follow the instructions provided and add the required lines to your ~/.zhsrc file.
brew install nvm
Terraform (tfenv)¶
brew install tfenv
https://github.com/tfutils/tfenv
Developer Tools¶
PostgreSQL¶
Database software.
brew install postgresql
Lefthook¶
Git hooks manager, useful for development.
brew install lefthook
https://github.com/evilmartians/lefthook
Poetry¶
Note
I've stopped using poetry
in favor of uv
.
A Python dependency manager and packaging tool.
curl -sSL https://install.python-poetry.org | python3 -
If you chose to install pyenv
, I suggest enabling this option so that Poetry will default to the active/global version of Python:
poetry config virtualenvs.prefer-active-python true
git-delta¶
A syntax-highlighting pager for git, diff, and grep output.
brew install git-delta
Update your ~/.gitconfig
file:
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[add.interactive]
useBuiltin = false # required for git 2.37.0
[delta]
navigate = true # use n and N to move between diff sections
light = false # set to true if you're in a terminal w/ a light background color (e.g. the default macOS terminal)
[merge]
conflictstyle = diff3
[diff]
colorMoved = default
https://github.com/dandavison/delta
Prettier¶
Code formatter for JavaScript, CSS, JSON, GraphQL, Markdown, YAML.
brew install prettier
hadolint¶
Dockerfile linter, validate inline bash, written in Haskell.
brew install hadolint
https://github.com/hadolint/hadolint
dive¶
A tool for exploring each layer in a docker image.
brew install dive
https://github.com/wagoodman/dive
Kubernetes Tools¶
kubectl¶
Basic Kubernetes command line tools, such as kubectl.
brew install kubernetes-cli
krew¶
Krew is the plugin manager for kubectl command-line tool.
Follow the install instructions: https://krew.sigs.k8s.io/docs/user-guide/setup/install/
The list of available plugins can be found here: https://krew.sigs.k8s.io/plugins/
Plugins¶
get-all: Like kubectl get all
but really everything
kubectl krew install get-all
kubectx¶
Switch between Kubernetes contexts faster and easier.
brew install kubectx
https://github.com/ahmetb/kubectx
Helm¶
Kubernetes package manager.
brew install helm
k9s¶
TUI for Kubernetes.
brew install derailed/k9s/k9s
Fonts¶
brew tap homebrew/cask-fonts
brew install font-hack-nerd-font font-meslo-lg-nerd-font font-ubuntu-mono-nerd-font