Personal configuration files + tooling, synced across machines via Git and browsable as a static Astro site.
This repo collects the dotfiles, scripts, and editor configs I carry between machines — plus a small Astro site that renders the tree so anyone can browse it from the web without cloning. Everything inside files/ is symlinked into $HOME by files/install.sh; the web/ folder builds the static site that ships to dotfiles.equero.dev.
| Config | Target | Highlights |
|---|---|---|
| Claude Code | ~/.claude/ |
Global rules, model-routed subagents, /audit and /ssh commands, Catppuccin status line with context and plan usage |
| Neovim | ~/.config/nvim |
kickstart.nvim on Neovim 0.12's built-in vim.pack, plugin versions pinned in a lock file, web-dev LSPs, file tree, session restore |
| Bash | ~/.bashrc |
mise activation, dev helper for the distrobox container, Catppuccin prompt |
| Git | ~/.gitconfig |
Identity, main as default branch |
| kitty | ~/.config/kitty/kitty.conf |
Catppuccin Mocha, JetBrainsMono Nerd Font, splits and tabs keymaps |
| mise | ~/.config/mise/config.toml |
Node LTS |
Everything is themed with Catppuccin Mocha. The main machine is a Steam Deck (SteamOS + an Arch distrobox called dev), but nothing depends on it.
- Astro — static site generator for the browsable view
- TypeScript — type-safe tree walker and renderers
- Tailwind CSS — utility-first styling
- Shiki — syntax highlighting for code previews
- Biome — lint + format
- Vercel — deploy + hosting
.
├── files/ ← actual dotfiles content (symlinked to $HOME)
│ ├── .claude/ ← Claude Code settings, statusline, commands, agents
│ │ ├── keybindings.json ← custom key bindings (vim editor mode)
│ │ ├── commands/ ← user-invocable /commands
│ │ └── agents/ ← orchestrator subagents (model-routed)
│ ├── nvim/ ← Neovim configuration (kickstart.nvim based)
│ ├── bash/bashrc ← ~/.bashrc (mise, `dev` distrobox helper, prompt)
│ ├── git/gitconfig ← ~/.gitconfig (identity, default branch)
│ ├── kitty/kitty.conf ← kitty terminal (Catppuccin Mocha, splits)
│ ├── mise/config.toml ← mise tool versions (node LTS)
│ └── install.sh ← symlink installer
│
├── web/ ← Astro app that renders files/ as a static site
│ ├── src/
│ ├── public/
│ ├── astro.config.mjs
│ └── package.json
│
└── package.json ← root (version + web scripts)
git clone git@github.com:equero/dotfiles.git ~/dotfiles
bash ~/dotfiles/files/install.shThe script creates symlinks from $HOME into files/, so edits stay in sync with Git. It's safe to run again: an existing real file is renamed to .bak before it's replaced, and existing symlinks are just updated.
Requirements: git, node (for the Claude Code status line) and whatever each config is for (Neovim 0.12+, kitty, mise). The Neovim requirements are listed in files/nvim/README.md. On Windows (Git Bash) everything except kitty is linked.
Heads-up: your live configs point into this working copy. Checking out a branch or tag that lacks one of them breaks it until you switch back (for example, git loses your identity if
files/git/gitconfigis missing). Keep the clone ondevelopormain.
files/.claude/agents/ ships an orchestrator + subagent setup so Claude Code routes work to the cheapest capable model instead of running everything on Opus.
| Agent | Model | Use for |
|---|---|---|
commit-fast |
haiku | git diff → Conventional Commits message + commit |
pr-describe |
haiku | branch diff → PR title + body |
quick-search |
haiku | one-shot symbol/file lookups |
test-writer |
sonnet | write tests matching repo style |
refactor-clean |
sonnet | behavior-preserving refactors |
architect |
sonnet | everyday design / planning multi-file changes (~95% of cases) |
senior-architect |
opus | hard design problems — invoke with "senior architect" phrase |
bug-investigator |
sonnet | static root-cause analysis from a bug description / stack trace |
js-console-debugger |
sonnet | two-phase JS/TS debugging — instruments code, diagnoses logs |
git-diff-commit-analyzer |
sonnet | deep diff analysis → conventional commit message + split advice |
files/.claude/settings.json pins the defaults carried across machines: model: opus, effortLevel: medium, editorMode: vim, fullscreen TUI, the status line, and the enabled plugins (official code-review, code-simplifier, frontend-design, github, playground, vercel, plus the third-party caveman marketplace). Machine-local permission grants live in settings.local.json, which is gitignored on purpose.
files/.claude/statusline.cjs is a dependency-free Node script (Windows, macOS and Linux) that renders one line in Catppuccin Mocha colors:
🤖 Opus | 📁 dotfiles | 🌿 develop +12 -3 | ████░░░░░░ 42% | ⏳ 5h 23% (2h05m) · 7d 41%
Model, folder, git branch (and worktree) with uncommitted line changes, context window usage, and plan usage for the 5-hour and 7-day limits (Pro/Max plans). The bars turn yellow at 60% and red at 80%. It needs a truecolor terminal.
files/.claude/keybindings.json holds the custom key bindings. Global rules (~/.claude/CLAUDE.md) are personal and kept out of this repo.
The main agent acts as the router — it reads each subagent's description and delegates. Edit any .md file in files/.claude/agents/ to tune routing or swap models (model: haiku | sonnet | opus | inherit).
npm run install:web # installs web/ dependencies
npm run dev # local dev at http://localhost:4321
npm run build # static build into web/dist/
npm run previewThe Astro app walks files/ at build time, respects per-folder .dotignore entries, and renders any README.md it finds. The Vercel project's Root Directory is set to web/.
The repo follows a develop → main flow. Releases are done with synkro:
synkro status # what the next release would contain
synkro sync --patch # merge develop into main, bump patch, tag, push (the usual)
synkro sync # same, minor bump (--major for major)
synkro sync --dry-run # show what would happen, change nothingEach release is a single merge commit on main that also carries the new version, tagged vX.Y.Z with a changelog. develop is fast-forwarded to it afterwards.
This is a personal repo, but it's open source under the GPL-3.0 license — feel free to fork it as a starting point for your own dotfiles.
- Follow the existing code style (enforced by Biome inside
web/). - Use Conventional Commits (
feat:,fix:,docs:,chore:, …). - Branch off
develop; never commit directly tomain. - Update the relevant
README.mdinsidefiles/<subdir>/when you change something user-facing.
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.
- Website: equero.dev
- GitHub: @equero
- LinkedIn: equerodev
If you find this repo useful, consider giving it a star on GitHub!