2026-08-09 14:57:20 -04:00
|
|
|
# dotfiles
|
|
|
|
|
|
|
|
|
|
Managed with [chezmoi](https://chezmoi.io). One command on any machine:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply git@github.com:prdlk/dotfiles
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
First apply prompts once for name, email, and machine role
|
|
|
|
|
(`desktop` | `laptop` | `mac` | `server`). Role gates the Linux desktop
|
|
|
|
|
layer (niri, noctalia, fontconfig, systemd user units) — `mac` and
|
|
|
|
|
`server` get the universal toolset only.
|
|
|
|
|
|
|
|
|
|
## Prerequisites
|
|
|
|
|
|
|
|
|
|
- **Arch**: `paru` for AUR packages (optional — the install script warns
|
|
|
|
|
and skips AUR if missing). `sudo` for pacman.
|
|
|
|
|
- **macOS**: [Homebrew](https://brew.sh).
|
|
|
|
|
- **Secrets**: `age`-encrypted files need the key at
|
|
|
|
|
`~/.config/chezmoi/key.txt`. Copy it there **before** `chezmoi apply`
|
|
|
|
|
(distributed manually, never committed):
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
mkdir -p ~/.config/chezmoi
|
|
|
|
|
scp <existing-machine>:.config/chezmoi/key.txt ~/.config/chezmoi/key.txt
|
|
|
|
|
chmod 600 ~/.config/chezmoi/key.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## What's managed
|
|
|
|
|
|
2026-08-10 14:09:40 -04:00
|
|
|
Universal: fish, bash + zsh (starship prompt, shared aliases), nvim
|
|
|
|
|
(AstroNvim), tmux, kitty, yazi, lazygit, lazydocker, gh (+ extensions),
|
|
|
|
|
starship, git, ssh config, Claude Code (settings/commands/hooks/skills).
|
|
|
|
|
Packages declared in `.chezmoidata/packages.yaml`, installed by
|
|
|
|
|
`.chezmoiscripts` (idempotent, re-run when the manifest changes).
|
|
|
|
|
|
|
|
|
|
Aliases are defined once in `.chezmoidata/aliases.yaml` and rendered
|
|
|
|
|
into fish (`fish/conf.d/20-aliases.fish`) and bash/zsh
|
|
|
|
|
(`~/.config/shell/aliases.sh`, sourced by `.bashrc`/`.zshrc`).
|
2026-08-09 14:57:20 -04:00
|
|
|
|
2026-08-10 15:15:06 -04:00
|
|
|
Shell utilities live as standalone sh/bash executables in
|
|
|
|
|
`~/.local/bin` (ai, c2p, fab, gdc, gho, ghn, ghg-clone, git-summary,
|
|
|
|
|
mdp, mdcp, pj, …) so all shells share one implementation. Helpers that
|
|
|
|
|
must mutate shell state (`cd`-style: yy, c, cd, ghg/ghn/gho wrappers,
|
|
|
|
|
clip-last) are per-shell functions in `fish/functions/`,
|
|
|
|
|
`bash/functions/`, and `zsh/functions/`.
|
|
|
|
|
|
|
|
|
|
`~/.agents/skills` (agent skill library) is managed directly; the
|
|
|
|
|
symlinks under `~/.claude/skills` resolve against it.
|
|
|
|
|
|
2026-08-09 14:57:20 -04:00
|
|
|
Linux desktop (role `desktop`/`laptop` only): niri, noctalia,
|
|
|
|
|
fontconfig, mimeapps, systemd user units, niri-launch.
|
|
|
|
|
|
|
|
|
|
`gh` needs `gh auth login` once per machine; the extension install
|
|
|
|
|
script skips gracefully until then, and re-runs on the next apply.
|
|
|
|
|
|
|
|
|
|
See `MIGRATION-NOTES.md` for the dotstate → chezmoi migration record.
|