Skip to content

sleipnir029/mocha-dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mocha-dotfiles

A polished macOS terminal setup with Catppuccin Mocha, hybrid tmux workspaces, and Claude Code integration.

macOS Zsh Catppuccin Built with Claude Code

  ╭─────────────────────────────────────────────────────╮
  │                                                     │
  │   ~/Desktop/boighor-app   main +2 ~1               │
  │   ❯ ls                                              │
  │    docs    src    tests                             │
  │    README.md    pyproject.toml                      │
  │                                                     │
  │   ❯ work .                                          │
  │   [tmux: work] code │ git │ edit                    │
  │                                                     │
  ╰─────────────────────────────────────────────────────╯
       Ghostty + Starship + Catppuccin Mocha

Quick Start

git clone https://github.com/YOUR_USERNAME/mocha-dotfiles.git ~/Desktop/mocha-dotfiles
cd ~/Desktop/mocha-dotfiles
chmod +x install.sh
./install.sh

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


What's Inside

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

Architecture

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

Screenshots

Add your own screenshots! Take screenshots of your terminal and replace the placeholder images below.

View Screenshot
Terminal + Starship Prompt prompt
tmux Workspace tmux
Neovim neovim
shell-help Dashboard help

Key Commands

Navigation

Command Description
z <dir> Smart cd (learns your directories)
zi Interactive directory picker
ls / ll / la / lt List files with icons (eza)

File Search

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)

Projects

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

Tmux Workspaces

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.

Git

Command Description
lg LazyGit TUI
gs / ga / gc / gp git status / add / commit / push
gl git log (graph, 15 entries)
gd git diff

Conda / Python

Command Description
ca <env> conda activate
cda conda deactivate
cel conda env list
cec <name> conda create -n

Notes

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

Neovim

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

File Structure

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


Customization

Change the color theme

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.

Change the font

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.

Change opacity and blur

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)

Change the project directory

If your projects aren't in ~/Desktop, update these files:

  • zsh/shell/functions.zsh — change ~/Desktop in codepick, tmuxpick, mkproject
  • zsh/shell/tmux-workspaces.zsh — change the default $HOME/Desktop in each function
  • zsh/shell/notes.zsh — change NOTES_DIR

Add or remove tmux workspaces

Edit zsh/shell/tmux-workspaces.zsh. Copy any existing function and change:

  1. The function name
  2. The session name in quotes
  3. The window names and commands

Grow Neovim

The Neovim config is intentionally minimal. Here's the upgrade path:

  1. LSPnvim-lspconfig + mason.nvim (auto-install language servers)
  2. Completionnvim-cmp + sources (snippets, LSP, buffer, path)
  3. Formattingconform.nvim (format on save)
  4. Lintingnvim-lint (inline diagnostics)
  5. Status linelualine.nvim with Catppuccin integration
  6. Git signsgitsigns.nvim (inline git diff markers)

Or start from kickstart.nvim or LazyVim for a batteries-included experience.


Reproduce with Claude Code

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.


Verification Checklist

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

Troubleshooting

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)

Design Decisions

  • 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-client inside tmux, attach outside

Credits

Built with Claude Code.


License

MIT

About

Catppuccin Mocha dotfiles for macOS - Ghostty, Starship, tmux, Neovim, modular zsh, hybrid workspaces, and a one-command installer. Built with Claude Code.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors