Issue #1023
The default Terminal.app works, but it lacks the speed and features that modern development demands. A well-configured terminal setup makes navigation faster, Git operations visual, and file searching instant. This guide walks through setting up Ghostty, Zsh with Prezto, and the CLI tools that experienced developers rely on daily.
Install Homebrew First
Everything here installs through Homebrew. If you don’t have it yet, open Terminal and run:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Follow the post-install instructions to add Homebrew to your PATH.
Terminal Emulator: Ghostty
Ghostty is a GPU-accelerated terminal built in Zig by Mitchell Hashimoto (HashiCorp co-founder). It has 2ms input latency, native macOS rendering, and built-in split panes. Unlike Warp, it requires no account and collects no data.
brew install --cask ghosttyCreate a config file at ~/.config/ghostty/config:
theme = Catppuccin Mocha
font-family = MesloLGS Nerd Font Mono
font-size = 14
window-padding-x = 16
window-padding-y = 16
macos-titlebar-style = tabsInstall the font with brew install --cask font-meslo-lg-nerd-font. Browse themes with ghostty +list-themes and reload config with Cmd+Shift+Comma.
Shell: Zsh with Prezto
macOS ships with Zsh, but it needs configuration. Prezto is faster and leaner than Oh-My-Zsh. Where Oh-My-Zsh can add over a second to shell startup, Prezto keeps things snappy.
Clone Prezto and set up the config files:
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"Load prezto configuration in ~/.zshrc file
source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"Set the prompt theme in the same file:
zstyle ':prezto:module:prompt' theme 'pure'Restart your terminal. Autosuggestions appear as you type, syntax highlighting colors valid commands green, and history-substring-search lets you press up arrow to find previous commands matching what you’ve typed.
Essential CLI Tools
These replace slow built-in commands with faster, smarter alternatives.
ripgrep
Searches file contents recursively and respects .gitignore. Ten to fifty times faster than grep.
brew install ripgreprg "useState" # Search in current directory
rg -t js "import" # Search only JavaScript files
rg -i "error" # Case-insensitive search
rg -l "TODO" # Show only filenames
rg -C 3 "function" # Show 3 lines contextfd
A faster, friendlier find command. Ignores hidden files and .gitignore by default.
brew install fdfd config # Find files with "config" in name
fd -e json # Find by extension
fd -t d node_modules # Find directories only
fd -H ".env" # Include hidden files
fd --changed-within 24h # Files modified recentlyzoxide
Replaces cd with a smarter alternative that learns your habits. Jump to frequently-used directories with just a few characters.
brew install zoxideAdd to ~/.zshrc: eval "$(zoxide init zsh)"
z project # Jump to frequently-used directory
z src # Jump to most recent match
zi # Interactive selection with fzftmux
Terminal multiplexer for managing sessions, splits, and keeping processes alive when you disconnect.
brew install tmuxtmux # Start new session
tmux new -s project # Start named session
tmux attach -t project # Attach to session
tmux ls # List sessionslazygit
Visual Git interface in the terminal. Stage files, commit, push, resolve conflicts, interactive rebase—all without memorizing commands.
brew install lazygitlazygit # Launch in current repoPress ? for help. Use Space to stage, c to commit, P to push.
Additional Tools Worth Installing
fzf
Fuzzy finder that works with files, command history, and anything else you pipe to it.
brew install fzf
$(brew --prefix)/opt/fzf/install# Ctrl+R # Fuzzy search command history
vim $(fzf) # Find and open file
fzf --preview 'bat {}' # Preview files while searchingbat
A cat replacement with syntax highlighting, line numbers, and Git integration.
brew install batbat script.js # View with syntax highlighting
bat -n file.py # Show line numbers
bat --line-range 10:20 file.ts # Show specific lineseza
Modern ls replacement with Git status, icons, and color-coded output.
brew install ezaeza -la # List all with details
eza --tree --level=2 # Tree view
eza -la --git --icons # With git status and iconsatuin
Replaces shell history with a searchable SQLite database. Optional encrypted sync across machines.
brew install atuinAdd to ~/.zshrc: eval "$(atuin init zsh)"
# Ctrl+R # Full-screen history search
atuin search "git" # Search history
atuin stats # Show history statstldr
Community-maintained examples for common commands. Shows practical usage instead of dense man pages.
brew install tldrtldr tar # Get examples for tar
tldr git stash # Get examples for git stashdelta
Makes git diff output readable with syntax highlighting and side-by-side view.
brew install git-deltaAdd to ~/.gitconfig:
[core]
pager = delta
[delta]
side-by-side = true
line-numbers = truebtop
System monitor with CPU, memory, disk, and network graphs. Better looking and more informative than htop.
brew install btopbtop # Launch monitorjq
Command-line JSON processor. Filter, transform, and format JSON data.
brew install jqcat data.json | jq . # Pretty-print JSON
cat data.json | jq '.name' # Extract a field
cat data.json | jq '.[].id' # Get all IDs from array
curl -s api.com/data | jq . # Format API responsePower User Tools
mole
All-in-one Mac cleaner that combines CleanMyMac, AppCleaner, and DaisyDisk functionality.
curl -fsSL https://raw.githubusercontent.com/tw93/mole/main/install.sh | bashmo clean --dry-run # Preview cleanup
mo clean # Clean system junk
mo uninstall # Uninstall app completely
mo analyze # Analyze disk usage
mo purge # Clean node_modules, build foldersyazi
Blazing-fast file manager with image previews, vim keybindings, and async I/O.
brew install yaziyazi # Launch file managerNavigate with h/j/k/l, press ? for help.
zellij
Modern tmux alternative with built-in layouts, floating panes, and real-time shortcut hints.
brew install zellijzellij # Start zellij
zellij -s project # Start named session
zellij attach project # Attach to sessionShortcuts are shown in the toolbar.
dust
Visual disk usage analyzer. Shows what’s eating your disk space in a tree view.
brew install dustdust # Analyze current directory
dust ~/Library # Analyze specific directory
dust -n 20 # Show top 20 entriessd
Simple find-and-replace. Easier syntax than sed.
brew install sdsd 'old' 'new' file.txt # Replace in file
sd -p 'old' 'new' file.txt # Preview changes
sd 'func' 'fn' src/*.js # Replace across filesglow
Render markdown beautifully in the terminal.
brew install glowglow README.md # View markdown file
glow # Browse markdown fileshyperfine
Benchmark CLI commands with statistical analysis.
brew install hyperfinehyperfine 'fd' 'find .' # Compare two commands
hyperfine --warmup 3 'cmd' # Benchmark with warmupNode.js Version Management
Different projects often require different Node.js versions. Rather than manually installing and switching between versions, Volta handles this automatically.
Volta is a JavaScript toolchain manager written in Rust. It installs Node.js, npm, and yarn, then seamlessly switches between versions based on your project. The Rust foundation makes it noticeably faster than alternatives like nvm.
Install Volta with a single command:
curl https://get.volta.sh | bashAfter installation, restart your terminal or source your shell config. Then install Node:
volta install nodeThis grabs the latest LTS version and sets it as your default. For a specific version:
volta install nodeManaging Dotfiles
Once you’ve configured all these tools, you’ll want to backup and sync your dotfiles across machines. The most popular tool for this is chezmoi.
chezmoi
Manage your dotfiles across multiple machines securely. Supports templates for machine-specific configs and encryption for secrets.
brew install chezmoichezmoi init # Initialize in ~/.local/share/chezmoi
chezmoi add ~/.zshrc # Add a dotfile to manage
chezmoi add ~/.config/ghostty # Add entire directory
chezmoi edit ~/.zshrc # Edit managed file
chezmoi diff # See pending changes
chezmoi apply # Apply changes to home directory
chezmoi cd # Go to source directoryPush to GitHub:
chezmoi cd
git add .
git commit -m "Add dotfiles"
git remote add origin git@github.com:username/dotfiles.git
git push -u origin mainOn a new machine:
chezmoi init --apply https://github.com/username/dotfiles.gitAlternatives: yadm (Git wrapper, simpler), GNU Stow (symlink manager, minimal)
Shell Aliases
Add these to ~/.zshrc for common shortcuts:
# Better defaults
alias ls="eza --icons"
alias ll="eza -la --icons --git"
alias cat="bat"
alias grep="rg"
alias find="fd"
alias top="btop"
# Git shortcuts
alias g="git"
alias gs="git status"
alias gp="git push"
alias lg="lazygit"
# Navigation
alias ..="cd .."
alias ...="cd ../.."Restart your shell or run source ~/.zshrc to apply changes.
Start the conversation