My terminal setup on macOS: zsh with Oh My Zsh, the Starship prompt, Ghostty with the Catppuccin Mocha theme, and fzf wired into history, files and tab completion. CHEATSHEET.md lists every shortcut, and cheat shows it in the terminal.
You need macOS, Homebrew and Oh My Zsh. The files expect to live in ~/dotfiles.
git clone https://github.com/BashamL/dotfiles ~/dotfiles
~/dotfiles/install.shThen open a new terminal tab. install.sh is safe to run again. It:
- links
starship.toml, the Ghostty config and the yazi config into~/.config, moving any existing file aside - adds a line to
~/.zshenv,~/.zprofileand~/.zshrcthat loads its copy inzsh/: PATH for every shell, Homebrew for login shells, the rest for the prompt - includes
git/gitconfigfrom~/.gitconfig: delta for diffs, zdiff3 conflict markers and a few aliases - installs the
Brewfile(all of it, apps included: trim it first on your Mac), two Oh My Zsh plugins (fzf-tab and you-should-use), the yazi theme and the gh-dash extension - adds
agents/machine.mdto~/.claude/CLAUDE.md, and copies it into~/.codex/AGENTS.mdand~/AGENTS.mdif they exist, so coding agents know what's installed
agents/machine.md describes my Mac. Edit it, or remove that part of install.sh, before you run it on yours.
| Path | What it does |
|---|---|
zsh/ |
History, plugins, aliases, fzf helpers (fe, rge, fbr, wt), the menu launcher and Mac-style text selection on the command line |
starship/ |
Two-line prompt. prompt-link makes the folder and git branch Cmd-clickable in Ghostty |
ghostty/ |
Terminal config and a cursor-trail shader |
yazi/ |
File manager config, opened with y |
git/gitconfig |
Git defaults and aliases |
agents/machine.md |
Notes for coding agents about this machine |
Brewfile |
Everything Homebrew installs on my Mac: command-line tools, apps, App Store apps and VS Code extensions |
zsh/local.zsh loads last and git ignores it. Put aliases and work shortcuts there. Define a _menu_rows_local function in it to add rows to the top of menu.
Brewfile.local works the same way for Homebrew: git ignores it and Brewfile loads it at the end.
When Cursor's agent terminal or Claude Code runs the shell (CURSOR_AGENT, CLAUDECODE, AI_AGENT or CODEX_SANDBOX is set), it gets a plain prompt, only the git plugin, PAGER=cat and GIT_EDITOR=true, so no command waits for a keyboard.