One command gives you a fully configured development machine — Fish shell with smart completions, Git with SSH-signed commits and per-host identity, Neovim, Kubernetes tooling (kubectl, helm, k9s, argocd), cloud CLIs, AeroSpace tiling on macOS, Ghostty terminal, and ~65 Homebrew packages. Works on Linux/WSL (Ubuntu) and macOS.
Warning
This will overwrite existing config files. Back up your dotfiles first.
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply lvlcn-tThis configures passwordless sudo for your user, installs all
packages, and sets up the shell. Afterwards, a wizard asks for Git
tokens and optional proxy settings:
You can retrigger the wizard anytime by running:
uv run python3 scripts/configure.py- Shell: Fish (primary) with fzf, Zoxide, starship prompt; Zsh as
fallback with Powerlevel10k; Passwordless
sudosetup for convenience - Git: SSH signing, auto-signoff, difftastic diffs, separate identities for GitHub / GitLab / work
- Editor: Neovim (kickstart.nvim config, pulled automatically)
- Terminal: Ghostty config, tmux with
C-aprefix - macOS: AeroSpace tiling window manager
- Kubernetes: k9s with custom aliases and plugins
- AI: opencode assistant with MCP servers and custom agents (lvlcn-t/agents)
- VS Code: Dozens of extensions bundled in
Brewfile.vscode
| Command | What it does |
|---|---|
make install |
Fresh apply (wipes state, re-runs bootstrap scripts) |
make debug |
Test the full bootstrap in Docker |
make bundle |
Snapshot current brew/vscode packages into Brewfiles |
The wizard writes ~/.config/chezmoi/chezmoi.toml. Key settings:
| Variable | Purpose |
|---|---|
machine.proxy.enabled |
Toggle proxy in npmrc/wgetrc/env |
machine.proxy.http |
HTTP proxy URL |
netrc.github_token |
GitHub PAT for private repos |
netrc.gitlab_token |
GitLab PAT for private repos |
Things that break silently or look like bugs but aren't:
| Trap | Fix |
|---|---|
| Bootstrap scripts won't re-run | make install (wipes chezmoi state) |
GH_TOKEN set in env |
Breaks gh copilot. Keep it commented in env.zsh.tmpl |
| Zsh keybindings don't work | history-substring-search needs defer:3 (after syntax-highlighting) |
| Config wizard keeps triggering | Intentional — it deletes config when identical to template |
| Neovim/agents missing after apply | Network required — .chezmoiexternal.toml pulls them at apply time |
- AGENTS.md — repo internals, code style, CI
- chezmoi documentation