Terminal-first, agent-first macOS dotfiles.
Neovim · tmux · Zsh · kitty · git · Claude Code — managed with GNU Stow.
I live in the terminal and work almost entirely through Claude Code across many repos. This setup is tuned for that: fast pane/session switching, a session hub that shows what each agent is doing, parallel git worktrees, and a Claude Code config that travels between machines.
-
🔮 Session hub (
prefix + s) — one fzf popup over running tmux sessions and launchable projects, sorted so whatever needs you is on top.Ctrl-Xkills one.🔮 ▮ ● ozone needs you 4m ┌ preview: git status ───────── ● alchemy done 2h │ main ↑2 7 changed ● dotfiles working │ M src/app/page.tsx ○ alaska2 │ ?? BLOG_STYLE.md ○ peptide │ ── recent ── ○ ... │ a1b2c3 3d Fix nav overflow ● needs you ● done ● working ○ launch ^X kill -
🔔 Cross-project agent alerts: a Claude Code lifecycle hook marks each session blocked, done, or working, and reports it without ever leaving tmux. A dot sits next to the window name,
status-rightlists every other session waiting on you, and a toast flashes across the status bar when one you aren't looking at needs you.∞ stax ● claude nvim shell ● ozone ● alchemy 2026-08-05 1:47 -
🌲 Parallel worktrees (
wt add <branch>) — sibling git worktree with your gitignored.env*copied in, a free devPORTassigned, and a Claude/nvim/shell session opened. -
🤖 Portable Claude Code config — settings, stack-aware
CLAUDE.md, skills, agents, a powerline statusline, a post-edit formatter hook, and the notifier, all synced via Stow. -
⚡ Tuned editing — Neovim on the
vim.lsp.configAPI (vtsls, elixir-ls, tailwind, biome), format-on-save, diffview + octo for in-terminal review; tmux vi copy-mode → system clipboard.
| Package | Sets up |
|---|---|
nvim/ |
Neovim — lazy.nvim, LSP (vtsls · elixir-ls · tailwindcss · biome), telescope, gitsigns, diffview, octo, treesitter, format-on-save |
tmux/ |
tmux — C-a prefix, the session hub, smug templates, wt worktrees, vi copy-mode, vim-tmux-navigator |
zsh/ |
Zsh — oh-my-zsh, mise, zoxide, fzf keys, autosuggestions + syntax highlighting, bat/fd/eza |
kitty/ |
kitty terminal — JetBrains Mono + Nerd Font |
git/ |
git — GPG signing, delta pager, lazygit, handy aliases |
claude/ |
Claude Code — portable config, statusline, format hook, claude-bootstrap |
brain/ |
Second brain wiring — brain CLI launcher, brain-hook lifecycle glue, brain-bootstrap (the vault itself is a private repo) |
dots/ |
One-shot installer |
# 1. Homebrew (if needed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. Clone + install (brew bundle, then `stow --no-folding */`)
git clone https://github.com/kelleyco2/dotfiles.git ~/dotfiles
~/dotfiles/dots/.local/bin/dotsThen, once per machine:
claude-bootstrap # register Claude plugins/marketplaces + user-scope MCP servers
brain-bootstrap # clone the private second-brain vault to ~/brain
~/dotfiles/git/setup-gpg.sh # generate a signing key + wire up git signing
# in a tmux session, press `C-a I` to install tmux pluginstmux (prefix C-a)
| Key | Action |
|---|---|
prefix s |
Session hub (switch ● / launch ○ / Ctrl-X kill) |
prefix | · prefix - |
Split vertical · horizontal |
C-h/j/k/l |
Move between panes (vim-tmux-navigator) |
prefix ! |
Kill session |
prefix r |
Reload tmux.conf |
v · y (copy-mode) |
Select · yank to clipboard |
Neovim (leader Space, ;↔: swapped)
| Key | Action |
|---|---|
<CR> · K |
Go to definition · hover |
<leader>gd |
Diffview (working tree) |
<leader>gr · <leader>gi |
Octo: GitHub PRs · issues |
<leader>e |
File picker (nnn) |
Shell
| Command | Does |
|---|---|
wt add|rm|ls <branch> |
Parallel git worktrees |
icat <img> |
Render an image inline (kitty) |
lazygit · lazysql |
Git / database TUIs |
Each top-level directory is a Stow package whose contents mirror $HOME; stow --no-folding */
symlinks them in per-file, so files Claude or a tool regenerates stay out of the repo. See
CLAUDE.md for the full architecture and conventions.