My macOS terminal setup. Everything is themed with Catppuccin Mocha and managed as symlinks from this repo into ~ and ~/.config/. Catppuccin themes are pulled in as git submodules and applied automatically by the setup script.
| Tool | Description |
|---|---|
| Ghostty | GPU-accelerated terminal emulator |
| zsh | Shell with fast-syntax-highlighting, history-substring-search, and tab completions |
| Starship | Minimal, fast prompt with git status, Kubernetes context, and AWS profile |
| tmux | Terminal multiplexer (prefix C-y, integrated with vim-tmux-navigator) |
| Neovim | Editor via the LazyVim distribution -- Copilot, fzf-lua, neo-tree, harpoon, and ~40 plugin configs |
| Git | Configured with delta for diffs, lazygit for TUI, and extensive aliases |
| lazygit | Terminal UI for git operations |
| delta | Syntax-highlighted git diffs, blame, and merge conflicts |
| bat | cat replacement with syntax highlighting and git integration |
| eza | Modern ls replacement with git status and icons |
| fzf | Fuzzy finder -- integrated into file, branch, PR, and process selection |
| ripgrep | Fast code search, paired with fzf for interactive grep |
| atuin | SQLite-backed shell history with fuzzy search and context filtering |
| mise | Runtime version manager and per-directory env vars (replaces asdf + direnv) |
| yazi | Terminal file manager with vim keybindings and image previews |
| glow | Markdown renderer for the terminal (Catppuccin themed via glamour) |
| chafa | Terminal image viewer (used by the p preview command and yazi) |
| btop | System and process monitor |
These are defined in zshrc. A curated selection of the ones you'll use most:
| Alias | What it does |
|---|---|
v |
Opens Neovim (nvim) |
vp |
Fuzzy-find a file with preview, open in Neovim |
g |
Git shorthand -- bare g runs git status -s; g <args> passes through to git |
gfo |
Fuzzy-find a git branch and check it out |
ghpr |
Fuzzy-find a GitHub PR, preview it, open in browser |
ghco |
Fuzzy-find a GitHub PR and check it out locally |
l / ll / la |
List files with eza (git status + icons; ll = long, la = all) |
y |
Open yazi file manager (cd to last directory on exit) |
z |
Fuzzy directory jump (fd + fzf) |
rgf / rgp |
Fuzzy file search / fuzzy content search with bat preview |
p <file> |
Preview a file -- markdown via glow, images via chafa, code via bat (opens in tmux popup when available) |
pfk |
Fuzzy-find a running process and kill it |
work |
Start the work tmux layout via tmuxinator |
.. / ... / .... |
Navigate up 1, 2, or 3 directories |
The most common git aliases are in gitconfig. Highlights:
| Alias | Command |
|---|---|
g a |
git add |
g au |
git add -u |
g b |
git branch |
g c |
git commit --verbose |
g d / g dc |
git diff / git diff --cached |
g f / g fa |
git fetch / git fetch --all |
g l / g la |
git log --oneline / --all |
g o / g ob |
git checkout / git checkout -b |
g p |
git push |
g u |
git pull |
g sh / g sp |
git stash / git stash pop |
See gitconfig for the full list (~40 aliases).
- Install Homebrew
brew bundleto install everything from the Brewfile- Set zsh as your default shell:
sudo sh -c 'echo /usr/local/bin/zsh >> /etc/shells' chsh -s /usr/local/bin/zsh
./setup
This script:
- Initializes all git submodules (ZSH plugins and Catppuccin themes)
- Symlinks tool configs (
bat,btop,ghostty,nvim,starship.toml, etc.) into~/.config/ - Symlinks shell dotfiles (
zshrc,gitconfig,tmux.conf, etc.) into~/with a.prefix - Links Catppuccin theme files from submodules into each tool's config directory
- Sets up lazygit and k9s configs in
~/Library/Application Support/
Warning: This script
rm -rfs existing files and directories at each target path before creating symlinks. If you have a real~/.config/nvimdirectory (or any other config), it will be permanently deleted, not just overwritten. Back up anything you want to keep before running this. Read through thesetupscript to see exactly which paths are affected.
./update
This script:
- Pulls the latest ZSH plugins and Catppuccin theme submodules
- Re-applies any changed theme configurations (lazygit, starship, bat cache)
- Runs
git pullto fetch upstream dotfile changes
After it finishes, review the changes with git diff and commit anything you want to keep.
To update Neovim plugins separately, open Neovim and run :Lazy to open the LazyVim plugin manager.
If you want to add your own settings without modifying tracked files, both zsh and tmux support .local overrides that are sourced automatically:
~/.zshrc.local-- sourced at the end ofzshrc. Add your own aliases, environment variables, or PATH entries here.~/.tmux.conf.local-- sourced at the end oftmux.conf. Override keybindings, status bar settings, etc.
These files are not tracked by git, so they'll survive updates and won't show up as changes in the repo.
A few things that might trip you up if you're used to defaults:
- tmux prefix is
C-y(not the defaultC-b). There's also a secondary prefix bound toC-space. Seetmux.conf. ;and:are swapped in Neovim, so you tap;to enter command mode. Seenvim/lua/config/keymaps.lua.- The
galias disables zsh globbing vianoglob, so wildcards (*,?) in git commands are passed through literally instead of being expanded by the shell.
The ZSH configuration draws heavily from prezto.
