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:

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

bash
brew install --cask ghostty

Create a config file at ~/.config/ghostty/config:

text
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:

bash
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

Load prezto configuration in ~/.zshrc file

bash
source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"

Set the prompt theme in the same file:

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

bash
brew install ripgrep
bash
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.

bash
brew install fd
bash
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.

bash
brew install zoxide

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

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

bash
brew install tmux
bash
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.

bash
brew install lazygit
bash
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.

bash
brew install fzf
$(brew --prefix)/opt/fzf/install
bash
# 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.

bash
brew install bat
bash
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.

bash
brew install eza
bash
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.

bash
brew install atuin

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

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

bash
brew install tldr
bash
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.

bash
brew install git-delta

Add to ~/.gitconfig:

text
[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.

bash
brew install btop
bash
btop                             # Launch monitor

jq

jqlang/jq

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

bash
brew install jq
bash
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.

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

bash
brew install yazi
bash
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.

bash
brew install zellij
bash
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.

bash
brew install dust
bash
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.

bash
brew install sd
bash
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.

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

hyperfine

sharkdp/hyperfine

Benchmark CLI commands with statistical analysis.

bash
brew install hyperfine
bash
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:

bash
curl https://get.volta.sh | bash

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

bash
volta install node

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

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

bash
brew install chezmoi
bash
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:

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

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

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