A chezmoi-managed dotfiles repository covering Neovim, Zsh, Tmux, a fleet of AI coding agents, and the CLI tools that hold it all together. Templated for both macOS (AeroSpace + SketchyBar) and Linux (niri / Hyprland + Waybar), with Catppuccin Mocha theming throughout.
Be sure to ⭐️ or 🔱 this repo if you find it useful! 😃
| Dotfile manager | chezmoi |
| Shell | Zsh + Zinit, carapace completions |
| Prompt | Oh-My-Posh (with a custom transient prompt) |
| Terminal | Ghostty, Kitty, Warp |
| Editor | Neovim + lazy.nvim |
| Multiplexer | Tmux + TPM, sesh, tmuxp |
| File manager | Yazi |
| Git UI | Lazygit + delta |
| Theme | Catppuccin Mocha, everywhere |
The agent setup is the part that moves fastest. All of these are configured here:
| Orca | Worktree-based agentic IDE — the primary driver (docs) |
| Claude Code | ~/.claude settings, plugins, statusline, MCP servers |
| Codex | ~/.codex config, plus CodexBar in the menu bar |
| OpenCode | ~/.config/opencode |
| T3 Code | Minimal desktop GUI for driving coding agents |
| Pi | ~/.pi agent config — see docs/pi-workflow.md |
| aichat | Inline shell command generation (Alt-e) |
| Neovim | sidekick.nvim, avante.nvim, Copilot |
Skills are vendored once in dot_agents/skills/ → ~/.agents/skills/, so
chezmoi apply reproduces every skill on a new machine with no network access.
See Agent skills below.
| Navigate | zoxide · eza · fd |
| Search | ripgrep · ast-grep · fzf · television |
| Read | bat · glow · rich-cli · tealdeer |
| Inspect | btop · procs · dua-cli · fastfetch |
| Data | jq · yq · jc |
| Git | gh · git-delta · git-cliff · git-extras |
| Shell | atuin · carapace · direnv · vivid |
| Run | just · entr · lazydocker · OrbStack |
| Languages | uv · pixi · pipx · Node · Go · Rust · Lua |
| Misc | ouch · age · aria2 · ffmpeg |
Full list: pkgs/Brewfile.
- macOS: AeroSpace (tiling), SketchyBar, borders, AltTab, Raycast
- Linux: niri or Hyprland, Waybar, walker/wofi, swaync
Install Homebrew, then chezmoi:
brew install chezmoi# 1. Initialize, preview, apply
chezmoi init git@github.com:dileep-kishore/zendots.git
chezmoi diff
chezmoi apply
# 2. Install packages
cd ~/.local/share/chezmoi/pkgs
brew bundle install # Homebrew formulae, casks, fonts
./pipx_packages.sh # Python CLI tools
./download_yazi_plugins.sh # Yazi plugins
./misc_setup.sh # bat cache, TPM cloneLinux hosts use the platform scripts under pkgs/arch/ and pkgs/fedora/
instead of the Brewfile.
Then start tmux and press Ctrl-a + Shift-i to install the tmux plugins.
Fonts install from the Brewfile (Monaspace, Maple Mono NF, SF Mono/Pro, and
several Nerd Fonts). Licensed fonts kept outside Homebrew — Dank Mono,
MonaLisa, Cartograph, IA Writer — install manually with font-install.sh.
This repository is the source. Edit files here, never in ~/.config.
chezmoi edit ~/.zshrc # Edit (handles the dot_ prefix for you)
chezmoi diff ~/.zshrc # Preview
chezmoi apply ~/.zshrc # Apply — always scope to the paths you changed
chezmoi edit --apply ~/.config/nvim/init.luajust apply # chezmoi apply
just diff # chezmoi diff
just install # brew bundle install
just dump # regenerate the Brewfile from installed packages
just skills add … # install an agent skill
just link-skills # relink ~/.agents/skills into Claude Code
just capture codex # capture live config keys back into the managed fragment~/.agents/skills/ is the single store for every harness. Always install
through the wrapper so the result gets recorded in chezmoi:
agent-skills.sh add mattpocock/skills # or: just skills add …
agent-skills.sh update
agent-skills.sh sync # after hand-authoring a skillOnly Claude Code needs symlinks (link-agent-skills.sh, run on every apply) —
Codex and OpenCode resolve ~/.agents/skills natively. Install a given skill on
one machine only; the source syncs over Syncthing.
Tmux — prefix is Ctrl-a
prefix + h / v |
Split horizontally / vertically |
prefix + o |
Session manager (sesh + tmuxp) |
prefix + r |
Reload config |
Ctrl-Shift-h / l |
Switch windows |
Alt + arrows |
Resize panes |
Sessions
ta <name\|path>— attach to a tmux/sesh session, or create a standard one for a directorytnew <name> [dir]— register in~/.config/sesh/sesh.toml, then create/attach
sesh.toml is machine-local and intentionally unmanaged.
Zsh
Ctrl-r |
atuin history search |
Ctrl-t |
fuzzy file finder |
Alt-e |
aichat command generation |
Neovim — leader is Space
<leader>ff |
Find files |
<leader>fg |
Find git files |
<leader>sg |
Grep search |
<leader>gl |
Lazygit |
Full keymaps: private_dot_config/nvim/lua/keymaps/.
work-sync(tools/work-sync/) — manages Syncthing project folders across machines:.stignoregeneration, conflict scanning, and Orca worktree handoff.chezmoi-sync-from-home.sh— pull drifted changes back from~into the repo.cfg-capture.py— capture keys from a live tool config into its managed fragment.
brew update && brew upgrade # packages
nvim +Lazy sync # Neovim plugins
ya pkg upgrade # Yazi plugins
agent-skills.sh update # agent skills
# tmux plugins: prefix + USyncing the repo itself:
chezmoi cd && git pull && chezmoi applyChanges not applying — make sure you edited the chezmoi source, not ~.
chezmoi cd gets you there.
Tmux plugins not loading — git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm, then prefix + I.
Neovim LSP not working — :Mason, install the missing server.
Shell completions broken — rm ~/.zcompdump* && exec zsh.
chezmoi · Catppuccin · the Neovim plugin community · and a long tail of dotfiles repos across GitHub.
MIT. Use and modify as you wish.
Note: This is a personal dotfiles repository. Take it as inspiration rather than something to apply wholesale — you will want to adjust it to your own machines and preferences.