My personal dotfiles for macOS. This is a living config that changes as I try new tools and workflows. If you found this from one of my YouTube videos, you're in the right place.
Catppuccin Mocha is applied across the entire stack: Ghostty, Tmux, Neovim, Starship, and Eza. One palette, everywhere.
Ghostty is the terminal emulator. Font size 18, with a quick terminal toggle bound to Alt+t.
Zsh is the shell, managed with Zinit. Four plugins, all turbo-loaded:
zsh-autosuggestionszsh-syntax-highlightingzsh-completionszsh-history-substring-search
Starship handles the prompt. Minimal layout with the directory on the left and git info (branch, state, status) on the right.
Key settings:
- Prefix:
Ctrl-s - Status bar at the top
- Vi mode for copy
- Mouse enabled
- Sessions persist and auto-restore via resurrect + continuum
Plugins managed by TPM:
| Plugin | Purpose |
|---|---|
| tmux-sensible | Sensible defaults |
| tmux-yank | System clipboard integration |
| tmux-resurrect | Save and restore sessions |
| tmux-continuum | Automatic session saving |
| tmux-battery | Battery status in status bar |
| tmux-fzf | Fuzzy finder integration |
| tmux-fzf-url | Open URLs from the terminal |
| tmux-sessionx | Session management with fzf and zoxide |
| tmux-floax | Floating pane toggle |
| tmux-huckleberry | Git branch switcher |
Neovim with LazyVim as the base distribution. Catppuccin colorscheme, leader key set to ,.
LazyVim extras enabled:
- Copilot
- mini-surround
- DAP (core)
- FZF
- Scala
- SQL
- Test (core)
Additional plugins:
- nvim-metals for Scala LSP via Metals
- nvim-dap configured for Scala debugging
| Tool | Purpose |
|---|---|
| Eza | Modern ls with git integration |
| Zoxide | Smart cd that learns directories |
| Atuin | Interactive shell history with sync |
| Mise | Dev tool version manager |
| fzf | Fuzzy finder (used in Tmux and Neovim) |
AeroSpace is a tiling window manager for macOS with i3-style keybindings. Workspaces are bound to Ctrl+1-9, window focus uses Alt+j/k/l/;, and Alt+Enter opens a new Ghostty window.
Core settings:
- Fast-forward only merges (
merge.ff = only) - Autosquash on rebase (
rebase.autosquash = true) pfalias forpush --force-with-lease
Custom scripts in .local/bin/:
git upfetches origin and rebases onto the primary branchgit delete-branchremoves a branch from both remote and local
Global Claude Code configuration lives in .claude/. This includes a global CLAUDE.md with cross-project context, slash commands, and reusable skills (marketing, content strategy, CRO, SEO, and more).
Run the setup script to symlink everything into ~/.claude/:
./setup-claude.shThe script also sets up a ~/vault symlink to your Obsidian vault for private skills and business context that shouldn't live in a public repo.
.zshrcat the repo root- Tool configs under
.config/(Ghostty, Tmux, Neovim, Starship, AeroSpace) - Custom scripts in
.local/bin/ .claude/for Claude Code global config (skills, commands, CLAUDE.md)