My MacBook is my primary tool for building software. When I get a new machine, I want to go from a fresh macOS install to a fully functional development environment in under an hour. Over the years, I've refined a script and a set of tools that make this process seamless.
This post isn't just a list of applications to download. It's a look at the modern CLI tools that have replaced my old workflows, how I manage environments per-project without global conflicts, and the aliases I rely on for speed.
Below is the exact sequence of commands I run, followed by a breakdown of why these tools are worth your time.
- 1. The Setup Sequence — Only commands copy and paste, no nonsense.
- 2. The Tools Explained — Why these tools are worth your time.
- 3. My Zsh Cheat Sheet — Daily aliases and shortcuts.
1. The Setup Sequence
I prefer to script my environment setup. If I get a new MacBook, this is the sequence I run to go from zero to a fully productive environment in under an hour.
$/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"$brew install --cask font-fira-code-nerd-font
$brew install starship zsh-autosuggestions zsh-syntax-highlighting$echo 'eval "$(starship init zsh)"' >> ~/.zshrc$echo 'source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh' >> ~/.zshrc$echo 'source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' >> ~/.zshrc$brew install eza bat ripgrep fd fzf zoxide jq yq tldr tree wget$echo 'eval "$(zoxide init zsh)"' >> ~/.zshrc$echo 'alias ls="eza --icons=auto"' >> ~/.zshrc$echo 'alias ll="eza -la --icons=auto --git"' >> ~/.zshrc$echo 'alias lt="eza --tree --level=2 --icons=auto"' >> ~/.zshrc$brew install btop
$brew install gh lazygit git-delta$echo 'alias lg="lazygit"' >> ~/.zshrc
$brew install mise$echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.zshrc$echo 'eval "$(mise activate zsh)"' >> ~/.zshrc$mise use --global node@lts java@21 python@3.12 go@latest terraform@latest
$brew install --cask orbstack$brew install kubectl helm minikube k9s kubectx$echo 'alias docksock="eval \$(minikube docker-env)"' >> ~/.zshrc
$brew install --cask bruno dbeaver-community tableplus obsidian meld$brew install httpie maven gradle visualvm
$brew install --cask raycast alt-tab shottr
$source ~/.zshrc
2. The Tools Explained
A list of commands isn't helpful without knowing why I use these tools. Here's a breakdown of the most critical replacements in my workflow.
miseReplaces: nvm, pyenv, sdkman, asdf
The front-end to your dev environment. It manages environment variables and tool versions (Node, Python, Java, etc.) per project.
mise use node@20ezaReplaces: ls
A modern replacement for ls. It has colors, icons, and understands Git statuses natively.
eza -lah --iconsbatReplaces: cat
A cat clone with syntax highlighting and Git integration. It paginates output automatically if it's too long.
bat package.jsonzoxideReplaces: cd
A smarter cd command. It remembers which directories you use most frequently, so you can jump to them in just a few keystrokes.
z portripgrep (rg)Replaces: grep
An incredibly fast line-oriented search tool that recursively searches your current directory for a regex pattern. It respects your .gitignore.
rg 'export function'fzf
A general-purpose command-line fuzzy finder. I pipe things into it, or use it to reverse-search my command history (Ctrl+R).
history | fzfk9s
A terminal UI to interact with your Kubernetes clusters. Makes it trivial to view logs, shell into pods, and manage resources without typing long kubectl commands.
k9sMinikube
Local Kubernetes, focusing on making it easy to learn and develop for Kubernetes.
docksock3. My Zsh Cheat Sheet
I keep my `.zshrc` clean by relying on tools like `mise`, but aliases are essential for muscle memory. Here are the shortcuts I use hundreds of times a day.
..cd .....cd ../..lseza --iconslleza -lh --iconslaeza -lah --iconstreeeza --tree --iconsWhat's Next?
You might notice a distinct lack of IDE installations (VS Code, Cursor, IntelliJ) in the script above. I prefer to download them as I need them, rather than cluttering my machine on day one.
I also didn't cover my AI setup here. Setting up Antigravity 2.0 and the Antigravity IDE is a workflow of its own, and I'll be releasing a deep dive on that as part of my upcoming paid content.