How to setup Terminal tools for Mac

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-org/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 ghostty

Create 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 = tabs

Install 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

sorin-ionescu/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

BurntSushi/ripgrep

Searches file contents recursively and respects .gitignore. Ten to fifty times faster than grep.

brew install ripgrep
rg "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 context

fd

sharkdp/fd

A faster, friendlier find command. Ignores hidden files and .gitignore by default.

brew install fd
fd 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 recently

zoxide

ajeetdsouza/zoxide

Replaces cd with a smarter alternative that learns your habits. Jump to frequently-used directories with just a few characters.

brew install zoxide

Add to ~/.zshrc: eval "$(zoxide init zsh)"

z project                        # Jump to frequently-used directory
z src                            # Jump to most recent match
zi                               # Interactive selection with fzf

tmux

tmux/tmux

Terminal multiplexer for managing sessions, splits, and keeping processes alive when you disconnect.

brew install tmux
tmux                             # Start new session
tmux new -s project              # Start named session
tmux attach -t project           # Attach to session
tmux ls                          # List sessions

lazygit

jesseduffield/lazygit

Visual Git interface in the terminal. Stage files, commit, push, resolve conflicts, interactive rebase—all without memorizing commands.

brew install lazygit
lazygit                          # Launch in current repo

Press ? for help. Use Space to stage, c to commit, P to push.

Additional Tools Worth Installing

fzf

junegunn/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 searching

bat

sharkdp/bat

A cat replacement with syntax highlighting, line numbers, and Git integration.

brew install bat
bat script.js                    # View with syntax highlighting
bat -n file.py                   # Show line numbers
bat --line-range 10:20 file.ts   # Show specific lines

eza

eza-community/eza

Modern ls replacement with Git status, icons, and color-coded output.

brew install eza
eza -la                          # List all with details
eza --tree --level=2             # Tree view
eza -la --git --icons            # With git status and icons

atuin

atuinsh/atuin

Replaces shell history with a searchable SQLite database. Optional encrypted sync across machines.

brew install atuin

Add to ~/.zshrc: eval "$(atuin init zsh)"

# Ctrl+R                         # Full-screen history search
atuin search "git"               # Search history
atuin stats                      # Show history stats

tldr

tldr-pages/tldr

Community-maintained examples for common commands. Shows practical usage instead of dense man pages.

brew install tldr
tldr tar                         # Get examples for tar
tldr git stash                   # Get examples for git stash

delta

dandavison/delta

Makes git diff output readable with syntax highlighting and side-by-side view.

brew install git-delta

Add to ~/.gitconfig:

[core]
    pager = delta
[delta]
    side-by-side = true
    line-numbers = true

btop

aristocratos/btop

System monitor with CPU, memory, disk, and network graphs. Better looking and more informative than htop.

brew install btop
btop                             # Launch monitor

jq

jqlang/jq

Command-line JSON processor. Filter, transform, and format JSON data.

brew install jq
cat 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 response

Power User Tools

mole

tw93/mole

All-in-one Mac cleaner that combines CleanMyMac, AppCleaner, and DaisyDisk functionality.

curl -fsSL https://raw.githubusercontent.com/tw93/mole/main/install.sh | bash
mo 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 folders

yazi

sxyazi/yazi

Blazing-fast file manager with image previews, vim keybindings, and async I/O.

brew install yazi
yazi                             # Launch file manager

Navigate with h/j/k/l, press ? for help.

zellij

zellij-org/zellij

Modern tmux alternative with built-in layouts, floating panes, and real-time shortcut hints.

brew install zellij
zellij                           # Start zellij
zellij -s project                # Start named session
zellij attach project            # Attach to session

Shortcuts are shown in the toolbar.

dust

bootandy/dust

Visual disk usage analyzer. Shows what’s eating your disk space in a tree view.

brew install dust
dust                             # Analyze current directory
dust ~/Library                   # Analyze specific directory
dust -n 20                       # Show top 20 entries

sd

chmln/sd

Simple find-and-replace. Easier syntax than sed.

brew install sd
sd 'old' 'new' file.txt          # Replace in file
sd -p 'old' 'new' file.txt       # Preview changes
sd 'func' 'fn' src/*.js          # Replace across files

glow

charmbracelet/glow

Render markdown beautifully in the terminal.

brew install glow
glow README.md                   # View markdown file
glow                             # Browse markdown files

hyperfine

sharkdp/hyperfine

Benchmark CLI commands with statistical analysis.

brew install hyperfine
hyperfine 'fd' 'find .'          # Compare two commands
hyperfine --warmup 3 'cmd'       # Benchmark with warmup

Node.js Version Management

volta-cli/volta

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 | bash

After installation, restart your terminal or source your shell config. Then install Node:

volta install node

This grabs the latest LTS version and sets it as your default. For a specific version:

volta install node

Managing 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

twpayne/chezmoi

Manage your dotfiles across multiple machines securely. Supports templates for machine-specific configs and encryption for secrets.

brew install chezmoi
chezmoi 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 directory

Push 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 main

On a new machine:

chezmoi init --apply https://github.com/username/dotfiles.git

Alternatives: 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.

Written by

I’m open source contributor, writer, speaker and product maker.

Start the conversation