A polished macOS terminal setup with Catppuccin Mocha, hybrid tmux workspaces, and Claude Code integration.
╭─────────────────────────────────────────────────────╮
│ │
│ ~/Desktop/boighor-app main +2 ~1 │
│ ❯ ls │
│ docs src tests │
│ README.md pyproject.toml │
│ │
│ ❯ work . │
│ [tmux: work] code │ git │ edit │
│ │
╰─────────────────────────────────────────────────────╯
Ghostty + Starship + Catppuccin Mocha
git clone https://github.com/YOUR_USERNAME/mocha-dotfiles.git ~/Desktop/mocha-dotfiles
cd ~/Desktop/mocha-dotfiles
chmod +x install.sh
./install.shThe installer handles everything: Homebrew packages, font, configs, plugins, themes.
Using Claude Code? See prompt.md for the exact prompt that builds this setup from scratch on any Mac.
| Tool | Role | Category |
|---|---|---|
| Ghostty | Terminal emulator — fast, GPU-accelerated | Aesthetic + Productivity |
| Starship | Prompt — shows git, conda, duration | Aesthetic + Productivity |
| tmux | Session persistence + workspace layouts | Productivity |
| Neovim | Lightweight editor for learning + quick edits | Productivity |
| fzf | Fuzzy finder — history, files, projects | Productivity |
| zoxide | Smart cd that learns your directories | Productivity |
| eza | ls replacement with icons and colors | Aesthetic + Productivity |
| bat | cat replacement with syntax highlighting | Aesthetic + Productivity |
| ripgrep | Fast grep replacement | Productivity |
| fd | Fast find replacement | Productivity |
| lazygit | Git TUI | Productivity |
| direnv | Auto-load .envrc per directory | Productivity |
| mise | Tool version manager (Node, Ruby, etc.) | Productivity |
Ghostty (terminal emulator)
│ Catppuccin Mocha · JetBrainsMono Nerd Font · 92% opacity + blur
│
└── zsh (no framework — lean and fast)
│
├── Starship (prompt)
│ └── dir · git branch/status · conda env · command duration
│
├── ~/.config/shell/aliases.zsh — ls, cat, grep, find, git, editors
├── ~/.config/shell/functions.zsh — codepick, tmuxpick, mkproject
├── ~/.config/shell/tmux-workspaces.zsh — work, ai, data, side, game, notes
├── ~/.config/shell/notes.zsh — note, note new, note idea, note today
├── ~/.config/shell/shell-help.zsh — shell-help dashboard command
├── ~/.config/shell/conda.zsh — conda init + aliases
├── ~/.config/shell/tools.zsh — fzf, zoxide, direnv, mise, starship
│
└── tmux (on-demand workspaces)
├── work — Claude Code + shell │ lazygit │ edit
├── ai — Claude Code │ Python lab │ lazygit
├── data — Analysis │ Claude Code │ lazygit
├── side — Claude Code + shell │ build │ lazygit
├── game — Claude Code + shell │ build │ lazygit
└── notes — Neovim │ shell
Neovim (beginner config — 6 plugins)
├── catppuccin/nvim — theme (transparent background)
├── nvim-treesitter — syntax highlighting
├── mini.files — file explorer (h/l navigation)
├── telescope.nvim — fuzzy finder
├── Comment.nvim — toggle comments (gcc/gbc)
└── nvim-autopairs — auto-close brackets
Add your own screenshots! Take screenshots of your terminal and replace the placeholder images below.
| View | Screenshot |
|---|---|
| Terminal + Starship Prompt | ![]() |
| tmux Workspace | ![]() |
| Neovim | ![]() |
| shell-help Dashboard | ![]() |
| Command | Description |
|---|---|
z <dir> |
Smart cd (learns your directories) |
zi |
Interactive directory picker |
ls / ll / la / lt |
List files with icons (eza) |
| Command | Description |
|---|---|
Ctrl-T |
fzf file picker |
Ctrl-R |
fzf history search |
Alt-C |
fzf cd into directory |
fd <pattern> |
Find files fast (aliased as find) |
rg <pattern> |
Search file contents (aliased as grep) |
| Command | Description |
|---|---|
codepick |
Fuzzy pick project from ~/Desktop → VS Code |
tmuxpick |
Fuzzy pick project from ~/Desktop → tmux session |
mkproject <name> |
Create new project scaffold |
c |
Open current dir in VS Code |
| Command | Layout |
|---|---|
work [dir] |
Claude Code + shell | lazygit | edit |
ai [dir] |
Claude Code | Python lab | lazygit |
data [dir] |
Analysis | Claude Code | lazygit |
side [dir] |
Claude Code + shell | build | lazygit |
game [dir] |
Same as side |
notes |
Neovim | shell (in ~/Desktop/notes) |
Inside tmux: Ctrl-a 1/2/3 to switch windows. Ctrl-a d to detach.
| Command | Description |
|---|---|
lg |
LazyGit TUI |
gs / ga / gc / gp |
git status / add / commit / push |
gl |
git log (graph, 15 entries) |
gd |
git diff |
| Command | Description |
|---|---|
ca <env> |
conda activate |
cda |
conda deactivate |
cel |
conda env list |
cec <name> |
conda create -n |
| Command | Description |
|---|---|
note |
Open notes dir in Neovim |
note new <name> |
New timestamped note |
note idea |
Quick idea capture |
note search <term> |
Fuzzy search across notes |
note today |
Daily scratch note |
| Keymap | Description |
|---|---|
Space+e |
File explorer (mini.files) |
Space+ff |
Find files (Telescope) |
Space+fg |
Live grep (Telescope) |
Space+fb |
Open buffers |
Space+w |
Save file |
Space+q |
Quit |
gcc |
Toggle line comment |
gbc |
Toggle block comment |
~/.config/
├── ghostty/config # Terminal emulator
├── starship.toml # Prompt
├── nvim/init.lua # Editor
└── shell/ # Modular zsh configs
├── aliases.zsh # All aliases
├── conda.zsh # Conda init + aliases
├── functions.zsh # codepick, tmuxpick, mkproject
├── tmux-workspaces.zsh # Workspace launchers
├── notes.zsh # Notes workflow
├── shell-help.zsh # Help dashboard
└── tools.zsh # Tool initializations
~/.tmux.conf # Tmux config
~/.zshrc # Thin orchestrator (~45 lines)
The ~/.zshrc is intentionally minimal — it sets PATH, zsh options, and completion, then sources each module from ~/.config/shell/. All logic lives in the modules.
The Catppuccin Mocha theme is applied in 6 places. To switch themes, update all of them:
| File | What to change |
|---|---|
ghostty/config |
Replace all hex color values with your theme's palette |
starship/starship.toml |
Replace the [palettes.catppuccin_mocha] section |
tmux/tmux.conf |
Change @catppuccin_flavor to latte, frappe, or macchiato |
nvim/init.lua |
Change flavour = "mocha" in catppuccin setup |
zsh/shell/tools.zsh |
Change FZF_DEFAULT_OPTS colors and BAT_THEME |
zsh/shell/shell-help.zsh |
Change ANSI color codes in the printf statements |
Catppuccin has official configs for Ghostty, Starship, tmux, Neovim, fzf, and bat.
In ghostty/config, change:
font-family = JetBrainsMono Nerd Font
To any Nerd Font — icons require a Nerd Font variant.
Popular alternatives: FiraCode Nerd Font, CaskaydiaCove Nerd Font, Hack Nerd Font.
In ghostty/config:
background-opacity = 0.92 # 0.0 (fully transparent) to 1.0 (opaque)
background-blur-radius = 20 # 0 (no blur) to 40+ (heavy blur)
If your projects aren't in ~/Desktop, update these files:
zsh/shell/functions.zsh— change~/Desktopincodepick,tmuxpick,mkprojectzsh/shell/tmux-workspaces.zsh— change the default$HOME/Desktopin each functionzsh/shell/notes.zsh— changeNOTES_DIR
Edit zsh/shell/tmux-workspaces.zsh. Copy any existing function and change:
- The function name
- The session name in quotes
- The window names and commands
The Neovim config is intentionally minimal. Here's the upgrade path:
- LSP —
nvim-lspconfig+mason.nvim(auto-install language servers) - Completion —
nvim-cmp+ sources (snippets, LSP, buffer, path) - Formatting —
conform.nvim(format on save) - Linting —
nvim-lint(inline diagnostics) - Status line —
lualine.nvimwith Catppuccin integration - Git signs —
gitsigns.nvim(inline git diff markers)
Or start from kickstart.nvim or LazyVim for a batteries-included experience.
This entire setup was built using Claude Code. You can reproduce it on any Mac by giving Claude Code the prompt in prompt.md.
The prompt is designed to be customizable — change the theme, project directory, editor, or workspace names before running.
After installation, verify everything works:
| # | Check | How |
|---|---|---|
| 1 | Ghostty launches | Open Ghostty.app |
| 2 | Font renders correctly | Look for icons in ls output |
| 3 | Background is translucent | See desktop behind terminal |
| 4 | Starship prompt shows | See ❯ with directory path |
| 5 | Git info in prompt | cd into a git repo |
| 6 | Conda env in prompt | ca <env> and check prompt |
| 7 | ls shows icons |
Run ls |
| 8 | cat highlights syntax |
cat ~/.zshrc |
| 9 | Ctrl-R fzf history |
Press Ctrl-R |
| 10 | z navigation |
z Desktop |
| 11 | Autosuggestions | Type partial command |
| 12 | Syntax highlighting | Type ls (should be green) |
| 13 | lg opens lazygit |
Run in a git repo |
| 14 | v opens Neovim |
Catppuccin theme, transparent |
| 15 | Space+e in nvim |
File explorer opens |
| 16 | Space+ff in nvim |
File picker opens |
| 17 | work workspace |
Creates tmux session |
| 18 | notes workspace |
Opens nvim in notes dir |
| 19 | tmux Catppuccin bar | Visual check |
| 20 | Ctrl-a 1/2/3 |
Switch tmux windows |
| 21 | shell-help |
Dashboard prints |
| 22 | codepick |
Project picker appears |
| 23 | note today |
Creates daily note |
| 24 | mise --version |
Tool manager active |
| 25 | direnv --version |
Dir env manager active |
| Issue | Cause | Fix |
|---|---|---|
| Prompt symbols broken / boxes | Wrong font in Ghostty | Set font-family = JetBrainsMono Nerd Font |
| Not translucent | Opacity not applied | Check background-opacity = 0.92 in ghostty config |
cat no colors |
bat theme missing | Run bat cache --build |
| conda not found | Init block not personalized | Run conda init zsh |
| tmux bar wrong theme | Old plugin cached | Delete ~/.tmux/plugins/tmux-tokyo-night/, press Ctrl-a I |
| Neovim errors on first open | Plugins still installing | Wait for lazy.nvim to finish, reopen |
| Old Powerlevel10k prompt | Old .zshrc still active | Ensure new .zshrc doesn't source Oh My Zsh |
| Starship slow in large repos | Git scan timeout | Add command_timeout = 500 to starship.toml |
| Workspace creates nested tmux | Old config without fix | Update tmux-workspaces.zsh (this repo has the fix) |
| Shell broken after removing a tool | Old config without guards | Update tools.zsh (this repo has guards) |
- No Oh My Zsh — Direct tool initialization is faster and every line is intentional
- No Powerlevel10k — Starship is config-file based (TOML), cross-shell, and faster
- Modular shell configs — Each concern in its own file, not one giant .zshrc
- tmux windows over panes — 3 named windows (switch with Ctrl-a 1/2/3) beat cramped 4-way splits
- No Neovim LSP — VS Code is the primary editor; Neovim is for learning and quick edits
- All tool inits guarded — A missing tool won't break your shell
- Nested tmux handled — Workspace commands use
switch-clientinside tmux,attachoutside
- Catppuccin — The theme that ties it all together
- Ghostty — Terminal emulator by Mitchell Hashimoto
- Starship — Cross-shell prompt
- lazy.nvim — Neovim plugin manager
- mini.files — Lightweight file explorer
- Telescope — Fuzzy finder for Neovim
- TPM — tmux plugin manager
Built with Claude Code.



