@sebastienrousseau/dotfiles 0.2.500 → 0.2.502

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/README.md +113 -45
  3. package/docs/.vitepress/reports/localization-readability-audit.md +4 -0
  4. package/docs/AI.md +8 -2
  5. package/docs/CNAME +1 -0
  6. package/docs/COPYRIGHT +1 -1
  7. package/docs/NAMING_CONVENTIONS.md +7 -0
  8. package/docs/README.md +4 -0
  9. package/docs/_config.yml +59 -0
  10. package/docs/adr/ADR-001-ci-cd-pipeline.md +17 -0
  11. package/docs/adr/ADR-002-shell-performance.md +9 -0
  12. package/docs/adr/ADR-003-security-first.md +18 -0
  13. package/docs/adr/ADR-004-cli-architecture.md +14 -0
  14. package/docs/adr/ADR-005-chezmoi-choice.md +10 -0
  15. package/docs/adr/ADR-006-shell-selection.md +9 -0
  16. package/docs/adr/ADR-007-multi-shell-parity.md +10 -1
  17. package/docs/adr/ADR-008-alias-system-architecture.md +10 -0
  18. package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
  19. package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
  20. package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
  21. package/docs/adr/README.md +7 -0
  22. package/docs/architecture/ARCHITECTURE.md +4 -0
  23. package/docs/architecture/INTEROP.md +8 -0
  24. package/docs/architecture/REPO_LAYOUT.md +5 -1
  25. package/docs/architecture/WALKTHROUGH.md +4 -0
  26. package/docs/architecture/fleet-deployment.md +4 -0
  27. package/docs/archive/EUXIS_2026_REVIEW.md +11 -3
  28. package/docs/archive/LEGACY_ROADMAP.md +45 -27
  29. package/docs/archive/MILESTONE_v0.2.493.md +4 -0
  30. package/docs/archive/PLAN.md +46 -8
  31. package/docs/archive/REPO_AUDIT.md +8 -0
  32. package/docs/guides/INSTALL.md +4 -0
  33. package/docs/guides/NEOVIM_IDE_GUIDE.md +9 -0
  34. package/docs/guides/THEMING.md +8 -0
  35. package/docs/guides/TROUBLESHOOTING.md +28 -0
  36. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +70 -1
  37. package/docs/index.md +6 -2
  38. package/docs/interop/A2A.md +7 -0
  39. package/docs/interop/POWERSHELL.md +102 -0
  40. package/docs/manual/00-introduction.md +5 -1
  41. package/docs/manual/01-concepts/01-architecture.md +4 -0
  42. package/docs/manual/01-concepts/02-trust-model.md +6 -2
  43. package/docs/manual/01-concepts/03-theme-engine.md +4 -0
  44. package/docs/manual/01-concepts/04-fleet.md +7 -1
  45. package/docs/manual/01-concepts/05-self-healing.md +8 -1
  46. package/docs/manual/02-tutorials/01-first-install.md +5 -0
  47. package/docs/manual/02-tutorials/02-add-wallpaper.md +5 -0
  48. package/docs/manual/02-tutorials/03-create-profile.md +6 -0
  49. package/docs/manual/02-tutorials/04-encrypt-secret.md +6 -0
  50. package/docs/manual/02-tutorials/05-deploy-fleet.md +5 -1
  51. package/docs/manual/03-reference/01-dot-cli.md +67 -45
  52. package/docs/manual/03-reference/02-config-files.md +8 -2
  53. package/docs/manual/03-reference/03-environment.md +4 -0
  54. package/docs/manual/03-reference/04-templates.md +7 -1
  55. package/docs/manual/03-reference/05-feature-flags.md +72 -3
  56. package/docs/manual/04-cookbook/01-recipes.md +4 -0
  57. package/docs/manual/04-cookbook/02-troubleshooting.md +32 -0
  58. package/docs/manual/04-cookbook/03-faq.md +8 -0
  59. package/docs/manual/05-appendices/A-platform-matrix.md +4 -0
  60. package/docs/manual/05-appendices/B-security-checklist.md +6 -0
  61. package/docs/manual/05-appendices/C-glossary.md +4 -0
  62. package/docs/manual/05-appendices/D-bibliography.md +5 -1
  63. package/docs/manual/05-appendices/E-license.md +4 -0
  64. package/docs/manual/_toc.yml +1 -1
  65. package/docs/manual/command-index.md +16 -8
  66. package/docs/manual/concept-index.md +4 -0
  67. package/docs/manual/index.md +66 -0
  68. package/docs/operations/ATTESTATION.md +5 -0
  69. package/docs/operations/CI_CADENCE.md +107 -0
  70. package/docs/operations/CI_COMPOSITES.md +156 -0
  71. package/docs/operations/COMPLETIONS.md +123 -0
  72. package/docs/operations/COVERAGE.md +182 -0
  73. package/docs/operations/DRIFT.md +107 -0
  74. package/docs/operations/HARD_AUDIT_2026.md +631 -0
  75. package/docs/operations/MAINTENANCE.md +5 -1
  76. package/docs/operations/MIGRATION.md +14 -6
  77. package/docs/operations/OPERATIONS.md +24 -0
  78. package/docs/operations/PERFORMANCE.md +133 -0
  79. package/docs/operations/REGISTRY.md +89 -0
  80. package/docs/operations/RELIABILITY.md +6 -0
  81. package/docs/operations/ROADMAP.md +36 -18
  82. package/docs/operations/ROADMAP_2026.md +665 -0
  83. package/docs/operations/TESTING.md +4 -0
  84. package/docs/operations/TRACEABILITY.md +7 -0
  85. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +4 -0
  86. package/docs/operations/VERSION_SYNC.md +54 -5
  87. package/docs/reference/ALIASES.md +7 -0
  88. package/docs/reference/ALIASES_CHEATSHEET.md +5 -1
  89. package/docs/reference/ALIASES_DEPRECATIONS.md +5 -1
  90. package/docs/reference/FEATURES.md +4 -0
  91. package/docs/reference/FONTS.md +4 -0
  92. package/docs/reference/POWERSHELL_PARITY.md +80 -0
  93. package/docs/reference/PROFILES.md +4 -0
  94. package/docs/reference/SCREENSHOTS.md +4 -0
  95. package/docs/reference/SCRIPTS.md +4 -0
  96. package/docs/reference/SUPPORT_MATRIX.md +10 -4
  97. package/docs/reference/THEMES.md +4 -0
  98. package/docs/reference/TOOLS.md +4 -0
  99. package/docs/reference/UTILS.md +16 -12
  100. package/docs/registry.json +6 -0
  101. package/docs/security/AI_ACT_COMPLIANCE.md +4 -0
  102. package/docs/security/AUDIT_BYPASS.md +103 -0
  103. package/docs/security/AUTOMATION_SECRETS.md +4 -0
  104. package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
  105. package/docs/security/CI_PINNING.md +113 -0
  106. package/docs/security/COMMIT_SIGNING.md +138 -0
  107. package/docs/security/COMPLIANCE.md +5 -0
  108. package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
  109. package/docs/security/DISCLOSURE.md +130 -0
  110. package/docs/security/ENCRYPTION.md +5 -0
  111. package/docs/security/FMEA.md +4 -0
  112. package/docs/security/HISTORY_FILTERING.md +132 -0
  113. package/docs/security/INCIDENT_RESPONSE.md +4 -0
  114. package/docs/security/INSTALL_VERIFICATION.md +122 -0
  115. package/docs/security/KEYS.md +4 -0
  116. package/docs/security/KEY_ROTATION.md +85 -1
  117. package/docs/security/MCP_POLICY.md +9 -0
  118. package/docs/security/POLICY_RELEASES.md +4 -0
  119. package/docs/security/README.md +4 -0
  120. package/docs/security/SCORECARD.md +140 -0
  121. package/docs/security/SECRETS.md +12 -0
  122. package/docs/security/SECURITY.md +4 -0
  123. package/docs/security/SECURITY_CHECKLIST.md +11 -0
  124. package/docs/security/SHELL_EXEMPTIONS.md +145 -0
  125. package/docs/security/SOUP_REGISTER.md +4 -0
  126. package/docs/security/THREAT_MODEL.md +10 -0
  127. package/docs/security/VERIFICATION_VALIDATION.md +5 -1
  128. package/docs/security/security-pubkey.asc +15 -0
  129. package/docs/themes/README.md +4 -0
  130. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +4 -0
  131. package/dot_config/ai/identity.md +3 -0
  132. package/dot_config/ai/patterns/architect.md +2 -0
  133. package/dot_config/ai/patterns/hardener.md +2 -0
  134. package/dot_config/ai/patterns/refactor.md +2 -0
  135. package/dot_config/alacritty/alacritty.toml.tmpl +3 -3
  136. package/dot_config/atuin/config.toml.tmpl +47 -0
  137. package/dot_config/dotfiles/agent-card.json +1 -1
  138. package/dot_config/dotfiles/boot/README.md +2 -0
  139. package/dot_config/dotfiles/grub/README.md +2 -0
  140. package/dot_config/dotfiles/lock/README.md +2 -0
  141. package/dot_config/fish/conf.d/direnv.fish +4 -0
  142. package/dot_config/fish/conf.d/init.fish.tmpl +21 -0
  143. package/dot_config/fish/conf.d/mise-activate.fish +5 -0
  144. package/dot_config/fish/functions/_cached_eval.fish +84 -11
  145. package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
  146. package/dot_config/foot/foot.ini.tmpl +3 -3
  147. package/dot_config/fuzzel/fuzzel.ini.tmpl +2 -2
  148. package/dot_config/ghostty/config.tmpl +3 -3
  149. package/dot_config/git/hooks/executable_commit-msg +146 -0
  150. package/dot_config/goose/config.yaml +2 -2
  151. package/dot_config/gtk-3.0/gtk.css.tmpl +2 -2
  152. package/dot_config/gtk-3.0/settings.ini.tmpl +2 -2
  153. package/dot_config/gtk-4.0/gtk.css.tmpl +2 -2
  154. package/dot_config/gtk-4.0/settings.ini.tmpl +2 -2
  155. package/dot_config/kitty/kitty.conf.tmpl +3 -3
  156. package/dot_config/mise/config.toml +1 -1
  157. package/dot_config/niri/config.kdl.tmpl +2 -2
  158. package/dot_config/nushell/cached_eval.nu +80 -0
  159. package/dot_config/nushell/env.nu.tmpl +21 -13
  160. package/dot_config/shell/00-core-paths.sh.tmpl +9 -1
  161. package/dot_config/shell/05-core-safety.sh +1 -0
  162. package/dot_config/shell/10-secrets.sh +1 -0
  163. package/dot_config/shell/40-fzf-defaults.sh.tmpl +1 -0
  164. package/dot_config/shell/40-ls-colors.sh +1 -0
  165. package/dot_config/shell/50-logic-functions-core.sh.tmpl +1 -0
  166. package/dot_config/shell/50-logic-functions.sh.tmpl +1 -0
  167. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +1 -0
  168. package/dot_config/shell/90-ux-aliases.sh.tmpl +1 -0
  169. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +1 -0
  170. package/dot_config/shell/README.md +25 -8
  171. package/dot_config/starship.toml.tmpl +2 -2
  172. package/dot_config/tmux/tmux.conf.tmpl +3 -3
  173. package/dot_config/user-dirs.dirs +1 -0
  174. package/dot_config/vscode/settings.json.tmpl +2 -2
  175. package/dot_config/waybar/config.jsonc.tmpl +2 -2
  176. package/dot_config/waybar/style.css.tmpl +2 -2
  177. package/dot_config/wezterm/wezterm.lua.tmpl +3 -3
  178. package/dot_config/zsh/dot_zshrc.tmpl +207 -17
  179. package/dot_config/zsh/rc.d/00-alias-shims.zsh +28 -6
  180. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +27 -7
  181. package/dot_local/bin/executable_bm +2 -0
  182. package/dot_local/bin/executable_dot +56 -9
  183. package/dot_local/bin/executable_dot-bootstrap +0 -1
  184. package/dot_local/bin/executable_dot-load-benchmark +1 -1
  185. package/dot_local/bin/executable_dot-theme-sync +8 -8
  186. package/dot_local/bin/executable_notify +2 -0
  187. package/dot_local/bin/executable_open +2 -0
  188. package/dot_local/bin/executable_tour +4 -2
  189. package/dot_local/bin/executable_up +3 -1
  190. package/dot_local/share/man/man1/dot.1 +1 -1
  191. package/dot_local/share/zsh/completions/_dot +4 -0
  192. package/install.sh +53 -38
  193. package/package.json +1 -1
  194. package/scripts/ci/check-dangerous-chmod.sh +19 -0
  195. package/scripts/ci/check-deps-dev.sh +236 -0
  196. package/scripts/ci/check-insecure-tls.sh +61 -0
  197. package/scripts/ci/check-regression-traceability.sh +67 -0
  198. package/scripts/ci/check-shell-preamble.sh +106 -0
  199. package/scripts/ci/dot-cli-startup-bench.sh +126 -0
  200. package/scripts/ci/install-chezmoi-verified.sh +4 -1
  201. package/scripts/ci/lint-reusable-pins.sh +78 -0
  202. package/scripts/ci/run-coverage.sh +451 -0
  203. package/scripts/ci/validate-chezmoidata.sh +25 -0
  204. package/scripts/ci/windows-smoke-test.ps1 +136 -0
  205. package/scripts/diagnostics/doctor.sh +203 -5
  206. package/scripts/diagnostics/drift-dashboard.sh +177 -13
  207. package/scripts/diagnostics/health.sh +21 -4
  208. package/scripts/diagnostics/perf.sh +304 -77
  209. package/scripts/diagnostics/workstation-attestation.sh +6 -1
  210. package/scripts/dot/commands/agent.sh +33 -27
  211. package/scripts/dot/commands/agents.sh +325 -0
  212. package/scripts/dot/commands/ai.sh +75 -10
  213. package/scripts/dot/commands/aliases.sh +10 -8
  214. package/scripts/dot/commands/core.sh +10 -4
  215. package/scripts/dot/commands/fleet.sh +278 -3
  216. package/scripts/dot/commands/init.sh +184 -0
  217. package/scripts/dot/commands/meta.sh +7 -4
  218. package/scripts/dot/commands/registry.sh +263 -0
  219. package/scripts/dot/commands/tools.sh +49 -1
  220. package/scripts/dot/lib/bento.sh +2 -1
  221. package/scripts/dot/lib/log.sh +6 -0
  222. package/scripts/dot/lib/platform.sh +22 -8
  223. package/scripts/dot/lib/ui.sh +145 -2
  224. package/scripts/dot/lib/utils.sh +6 -1
  225. package/scripts/git-hooks/pre-commit-audit.sh +1 -1
  226. package/scripts/git-hooks/pre-push +66 -3
  227. package/scripts/lib/secrets_provider.sh +32 -6
  228. package/scripts/ops/heal-chezmoi.sh +41 -6
  229. package/scripts/ops/rollback.sh +14 -0
  230. package/scripts/qa/powershell-contract.ps1 +95 -0
  231. package/scripts/security/check-disclosure-key-expiry.sh +110 -0
  232. package/scripts/security/lock-configs.sh +11 -2
  233. package/scripts/theme/merge-wallpaper.sh +4 -0
  234. package/scripts/theme/switch.sh +20 -10
  235. package/scripts/version-sync.sh +3 -0
  236. package/dot_config/atuin/config.toml +0 -40
  237. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Self-Healing
2
6
 
3
7
  `.dotfiles` detects, diagnoses, and repairs configuration drift, missing tools, broken symlinks, and environmental damage — often without user intervention.
@@ -124,11 +128,13 @@ dot rollback clean # delete snapshots older than 30 days
124
128
  ```
125
129
 
126
130
  Snapshots include:
131
+
127
132
  - Every file chezmoi would have overwritten
128
133
  - The previous `.chezmoidata.toml` and `chezmoi.toml`
129
134
  - A pointer to the Git SHA at apply time
130
135
 
131
136
  They do **not** include:
137
+
132
138
  - Generated caches (`~/.cache/`)
133
139
  - Tool binaries (Mise-managed)
134
140
  - External state (databases, remote repos)
@@ -138,7 +144,7 @@ They do **not** include:
138
144
  `dot bundle` creates a self-contained archive that can restore the workstation without network access:
139
145
 
140
146
  ```
141
- dotfiles-bundle-v0.2.500-20260416.tar.zst
147
+ dotfiles-bundle-v0.2.501-20260416.tar.zst
142
148
  ├── source/ # Full git clone at current HEAD
143
149
  ├── tools/ # Pre-built chezmoi binary + mise
144
150
  ├── secrets/ # Age-encrypted snapshot of ~/.config/age/
@@ -173,6 +179,7 @@ Recovery use case: you're stranded on a new machine with no internet. Copy the b
173
179
  | Compliance (policy hash match) | 15 |
174
180
 
175
181
  Scores:
182
+
176
183
  - 90-100 — healthy
177
184
  - 70-89 — minor issues
178
185
  - 50-69 — needs attention
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Tutorial: First Install
2
6
 
3
7
  End-to-end installation and verification, from zero to a fully-working environment in under 5 minutes.
@@ -16,6 +20,7 @@ bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfil
16
20
  ```
17
21
 
18
22
  The installer:
23
+
19
24
  1. Verifies prerequisites (`git`, `curl`, write access to `~`)
20
25
  2. Downloads chezmoi via the SHA256-verified installer
21
26
  3. Clones the dotfiles source to `~/.dotfiles`
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Tutorial: Add a Wallpaper → Theme
2
6
 
3
7
  Drop an image. Get a fully-WCAG-AAA terminal theme.
@@ -57,6 +61,7 @@ bash scripts/theme/merge-wallpaper.sh mytheme
57
61
  ```
58
62
 
59
63
  This:
64
+
60
65
  1. Resizes both to 6016×6016 (preserving aspect ratio, center-cropped)
61
66
  2. Encodes both into a single `.heic` via `heif-enc`
62
67
  3. Injects `apple_desktop:apr` XMP metadata (image 0 = light, image 1 = dark)
@@ -1,3 +1,8 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
1
6
  # Tutorial: Create a Machine Profile
2
7
 
3
8
  Machine profiles tell chezmoi how to render templates differently on each host — display scale, keyboard layout, performance preset, available features.
@@ -236,3 +241,4 @@ Profiles let one source tree produce correctly-configured output on every host y
236
241
  - [Concept: Fleet Architecture](../01-concepts/04-fleet.md)
237
242
  - [Reference: Templates](../03-reference/04-templates.md)
238
243
  - [Reference: Feature Flags](../03-reference/05-feature-flags.md)
244
+ {% endraw %}
@@ -1,3 +1,8 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
1
6
  # Tutorial: Encrypt a Secret
2
7
 
3
8
  How to store an API key (or any secret) encrypted in the repository using Age and SOPS — decrypted automatically on `dot apply`.
@@ -273,3 +278,4 @@ chezmoi apply --verbose dot_tmp/stripe-key.txt
273
278
  - [Concept: Trust Model](../01-concepts/02-trust-model.md) — the security architecture
274
279
  - [Reference: Secret operations](../03-reference/01-dot-cli.md#secrets)
275
280
  - [Security: Secret management](../../security/SECRETS.md)
281
+ {% endraw %}
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Tutorial: Deploy to a Fleet
2
6
 
3
7
  Roll out `.dotfiles` across multiple workstations and verify they're in sync.
@@ -111,7 +115,7 @@ dot fleet attest
111
115
  Expected output:
112
116
 
113
117
  ```
114
- Fleet Attestation — v0.2.500
118
+ Fleet Attestation — v0.2.501
115
119
 
116
120
  Host Git SHA Policy Tools OK Drift Verified
117
121
  -------------- ---------- --------- ---------- ------- --------
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Reference: The `dot` CLI
2
6
 
3
7
  Complete command reference. Every subcommand, every flag, every exit code.
@@ -147,19 +151,6 @@ dot attest [--output|-o <file>] [--sign|-s]
147
151
 
148
152
  Default output: `~/.local/state/dotfiles/attestation/YYYY-MM-DD-HHMMSS.json`. With `--sign`, the JSON is signed with the user's SSH ED25519 key.
149
153
 
150
- ### `dot verify`
151
-
152
- Verify integrity of the installation.
153
-
154
- ```
155
- dot verify [--security|-s] [--attestation <path>]
156
- ```
157
-
158
- | Flag | Effect |
159
- |:---|:---|
160
- | `--security`, `-s` | Run gitleaks + signature checks + policy hash |
161
- | `--attestation <path>` | Verify an external attestation file |
162
-
163
154
  ### `dot lint`
164
155
 
165
156
  Lint shell scripts (shellcheck, shfmt).
@@ -170,24 +161,6 @@ dot lint [--path <glob>] [--strict]
170
161
 
171
162
  ## Performance
172
163
 
173
- ### `dot benchmark`
174
-
175
- Measure shell startup time.
176
-
177
- ```
178
- dot benchmark [--detailed|-d] [--profile|-p] [--compare|-c] [--waterfall|-w] [--runs|-r <n>]
179
- ```
180
-
181
- | Flag | Effect |
182
- |:---|:---|
183
- | `--detailed`, `-d` | Per-module timing breakdown |
184
- | `--profile`, `-p` | Profile with `$SHELL -ixc ""` |
185
- | `--compare`, `-c` | Compare against baseline |
186
- | `--waterfall`, `-w` | Waterfall visualization |
187
- | `--runs`, `-r <n>` | Number of hyperfine runs (default 10) |
188
-
189
- Exit codes: 0 (<500ms target), 1 (regression).
190
-
191
164
  ### `dot perf`
192
165
 
193
166
  Quick performance snapshot.
@@ -196,17 +169,9 @@ Quick performance snapshot.
196
169
  dot perf [--json|-j] [--profile|-p] [--runs|-r <n>] [--target|-t <ms>]
197
170
  ```
198
171
 
199
- ### `dot prewarm`
200
-
201
- Regenerate shell init caches for fast startup.
202
-
203
172
  ### `dot cache-refresh`
204
173
 
205
- Rebuild generated shell state (cold-start alternative to prewarm).
206
-
207
- ### `dot clean-cache`
208
-
209
- Clear generated shell initialization caches. Next shell startup will be slow; use `dot prewarm` afterward.
174
+ Regenerate shell caches for ultra-fast startup.
210
175
 
211
176
  ### `dot score`
212
177
 
@@ -318,11 +283,72 @@ Multi-node status, drift, and namespace.
318
283
  dot fleet # show all known hosts
319
284
  dot fleet attest # collect signed attestations
320
285
  dot fleet diff # compare rendered config across hosts
321
- dot fleet sync # run `dot update` on every host
286
+ dot fleet sync # run `dot upgrade` on every host
287
+ dot fleet apply # SSH out to every host in fleet.toml and run 'dot sync'
322
288
  ```
323
289
 
324
290
  Fleet hosts are configured in `~/.config/dotfiles/fleet.toml`.
325
291
 
292
+ ### `dot fleet apply`
293
+
294
+ Push dotfiles state to every host registered in `~/.config/dotfiles/fleet.toml`.
295
+
296
+ ```
297
+ dot fleet apply [--host <name>] [--cmd <shell>] [--dry-run] [--jobs <n>]
298
+ ```
299
+
300
+ | Flag | Effect |
301
+ |:---|:---|
302
+ | `--host <name>` | Apply to a single host only (matches the `[hosts.<name>]` stanza key). |
303
+ | `--cmd <shell>` | Run a custom command on every host instead of the default `dot sync && dot doctor --quiet`. **Warning:** this is arbitrary shell on remote hosts; the value is your trust boundary. |
304
+ | `--dry-run`, `-n` | Print the resolved hosts + planned command without opening SSH. |
305
+ | `--jobs <n>` | Parallelism (default 4). |
306
+
307
+ Hostnames in `fleet.toml` are validated against `[A-Za-z0-9._@:+/-]+` before fan-out; entries containing other characters abort the apply. First-time SSH connections use `StrictHostKeyChecking=accept-new` (TOFU); pre-populate `~/.ssh/known_hosts` if your threat model requires no TOFU window.
308
+
309
+ Example `fleet.toml`:
310
+
311
+ ```toml
312
+ [hosts.laptop]
313
+ ssh = "user@laptop.local"
314
+ profile = "workstation"
315
+ ```
316
+
317
+ ## Agents
318
+
319
+ ### `dot agents`
320
+
321
+ Multi-harness AI agent configuration manager. `CLAUDE.md` is canonical; `dot agents render` keeps `AGENTS.md` (the cross-harness standard read by Codex / Copilot / Cursor / Windsurf / Amp / Devin) plus `.cursor/rules/dotfiles.mdc` and `.codex/config.toml` in sync.
322
+
323
+ ```
324
+ dot agents list # show which harnesses are recognised + their target paths
325
+ dot agents check # exit 0 if AGENTS.md tracks CLAUDE.md; 1 if drifted
326
+ dot agents render # regenerate AGENTS.md + 10 harness-specific files
327
+ ```
328
+
329
+ Harnesses covered: `AGENTS.md` (canonical cross-harness), Cursor (`.cursor/rules/dotfiles.mdc`), Codex (`.codex/config.toml`), Windsurf (`.windsurf/rules.md`), Zed (`.zed/agent-config.toml`), Roo (`.roo/rules.md`), Cline (`.clinerules`), Aider (`.aider.conf.yml`), Continue (`.continuerc.json`), Jules (`.jules/system.md`), Gemini (`.gemini/GEMINI.md`).
330
+
331
+ Edit `CLAUDE.md` first, then run `dot agents render`; do not hand-edit `AGENTS.md` or any of the per-harness files. The check subcommand is suitable for pre-commit hooks.
332
+
333
+ ## Registry
334
+
335
+ ### `dot registry`
336
+
337
+ JSON-indexed module registry. Discover and install reusable dotfile modules from a registry hosted via GitHub Pages (or any HTTPS URL via `set-url`).
338
+
339
+ ```
340
+ dot registry list # list modules in the configured registry
341
+ dot registry search <query> # filter modules by keyword
342
+ dot registry info <name> # full metadata for one module
343
+ dot registry install <name> # apply a module (scaffold today)
344
+ dot registry url # show the active registry URL
345
+ dot registry set-url <url> # override the registry URL (HTTPS-only)
346
+ ```
347
+
348
+ Default registry: `https://sebastienrousseau.github.io/dotfiles/registry.json`. Cache lives at `${XDG_CACHE_HOME:-~/.cache}/dotfiles/registry/index.json` with a 6h TTL. One-off override: `DOTFILES_REGISTRY_URL=<url> dot registry list`.
349
+
350
+ The JSON contract + module-contribution flow live in [`docs/operations/REGISTRY.md`](../../operations/REGISTRY.md).
351
+
326
352
  ## Reference
327
353
 
328
354
  ### `dot version`
@@ -357,10 +383,6 @@ dot add --encrypt ~/.somefile # encrypted with Age
357
383
  dot add --template ~/.somefile # templatize
358
384
  ```
359
385
 
360
- ### `dot remove <path>`
361
-
362
- Safely remove a managed file (removes from source and unmanages).
363
-
364
386
  ### `dot cd`
365
387
 
366
388
  Print the source directory path. Useful for `cd $(dot cd)`.
@@ -1,3 +1,8 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
1
6
  # Reference: Configuration Files
2
7
 
3
8
  Every config file read or written by `.dotfiles`, with its schema and purpose.
@@ -28,7 +33,7 @@ Every config file read or written by `.dotfiles`, with its schema and purpose.
28
33
 
29
34
  ```toml
30
35
  # Version — bumped by version-sync.sh at release time
31
- dotfiles_version = "0.2.500"
36
+ dotfiles_version = "0.2.502"
32
37
 
33
38
  # Machine preset — override in ~/.config/chezmoi/chezmoi.toml per host
34
39
  machine = ""
@@ -214,7 +219,7 @@ Agent Card (MCP A2A spec):
214
219
  ```json
215
220
  {
216
221
  "name": "dotfiles-agent",
217
- "version": "0.2.500",
222
+ "version": "0.2.502",
218
223
  "capabilities": ["chezmoi.apply", "theme.switch", "secrets.decrypt"],
219
224
  "policy_hash": "0x7f2a..."
220
225
  }
@@ -257,3 +262,4 @@ _build/
257
262
  - [Template Variables](04-templates.md)
258
263
  - [Feature Flags](05-feature-flags.md)
259
264
  - [First Install Tutorial](../02-tutorials/01-first-install.md)
265
+ {% endraw %}
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Reference: Environment Variables
2
6
 
3
7
  All environment variables that affect `.dotfiles` behaviour.
@@ -1,3 +1,8 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
1
6
  # Reference: Template Variables
2
7
 
3
8
  Every variable available to chezmoi templates (`.tmpl` files).
@@ -8,7 +13,7 @@ Flat top-level keys:
8
13
 
9
14
  | Variable | Type | Example |
10
15
  |:---|:---|:---|
11
- | `.dotfiles_version` | string | `"0.2.500"` |
16
+ | `.dotfiles_version` | string | `"0.2.501"` |
12
17
  | `.theme` | string | `"tahoe-dark"` |
13
18
  | `.machine` | string | `"macbook-t2"` |
14
19
  | `.profile` | string | `"laptop"` |
@@ -182,3 +187,4 @@ If any template fails to render, the build breaks before merge.
182
187
  - [Chezmoi template reference](https://www.chezmoi.io/reference/templates/)
183
188
  - [Configuration Files](02-config-files.md)
184
189
  - [Create a Profile tutorial](../02-tutorials/03-create-profile.md)
190
+ {% endraw %}
@@ -1,3 +1,8 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
1
6
  # Reference: Feature Flags
2
7
 
3
8
  Feature flags toggle optional subsystems. Set in `.chezmoidata.toml`, override per-preset in `.chezmoidata/hardware.toml`.
@@ -6,10 +11,19 @@ Feature flags toggle optional subsystems. Set in `.chezmoidata.toml`, override p
6
11
 
7
12
  ```toml
8
13
  [features]
9
- dms = false # Dank Material Shell (Niri desktop)
14
+ alias_wrapper = false # Wrap selected aliases with safer defaults
15
+ dms = true # Dank Material Shell (Niri desktop)
16
+ zellij = false # Zellij terminal multiplexer config
10
17
  linux_desktop = false # Linux-specific desktop configs
11
- niri = false # Niri window manager
12
- waybar = false # Waybar status bar
18
+ niri = false # Niri window manager
19
+ waybar = false # Waybar status bar
20
+ fuzzel = false # Fuzzel application launcher (Wayland)
21
+ mako = false # Mako notification daemon (Wayland)
22
+ foot = false # Foot terminal emulator (Wayland)
23
+ kanshi = false # Kanshi monitor profile manager (Wayland)
24
+ touch = false # Touchscreen-friendly tweaks (Surface, etc.)
25
+ t2 = false # Apple T2 hardware-specific tweaks
26
+ surface = false # Microsoft Surface hardware-specific tweaks
13
27
  ```
14
28
 
15
29
  ## Per-Preset Overrides (`.chezmoidata/hardware.toml`)
@@ -28,6 +42,7 @@ The effective value is `mergeOverwrite` of global + preset features.
28
42
  ### `dms` — Dank Material Shell
29
43
 
30
44
  When `true`:
45
+
31
46
  - Configures DMS IPC for theme sync
32
47
  - Enables Quickshell templates
33
48
  - Sets up per-monitor wallpaper via `dms ipc wallpaper`
@@ -37,6 +52,7 @@ Requires: Niri + Quickshell + DMS installed.
37
52
  ### `linux_desktop` — Linux Desktop Configs
38
53
 
39
54
  When `true`:
55
+
40
56
  - Enables GTK 3/4 theme generation from `themes.toml`
41
57
  - Configures `gsettings color-scheme` behaviour
42
58
  - Generates desktop file entries for installed tools
@@ -46,6 +62,7 @@ No effect on macOS.
46
62
  ### `niri` — Niri Window Manager
47
63
 
48
64
  When `true`:
65
+
49
66
  - Generates `~/.config/niri/config.kdl`
50
67
  - Enables Niri keybindings from `keybinds.toml`
51
68
  - Configures workspace rules per preset
@@ -55,11 +72,62 @@ Requires: Niri installed.
55
72
  ### `waybar` — Waybar Status Bar
56
73
 
57
74
  When `true`:
75
+
58
76
  - Generates `~/.config/waybar/config.jsonc` + `style.css`
59
77
  - Hooks into theme switching via `dot-theme-sync`
60
78
 
61
79
  Requires: Waybar installed.
62
80
 
81
+ ### `alias_wrapper` — Safer Alias Defaults
82
+
83
+ When `true`, opt-in wrappers replace selected aliases with confirmation-prompt
84
+ variants (e.g., `rm -i`, `mv -i`). Default `false` for power-user ergonomics.
85
+
86
+ ### `zellij` — Zellij Terminal Multiplexer
87
+
88
+ When `true`:
89
+
90
+ - Generates `~/.config/zellij/config.kdl` from the active theme
91
+ - Wires the `dot mux` alias to launch a profile-aware session
92
+
93
+ Requires: Zellij installed.
94
+
95
+ ### `fuzzel` — Fuzzel Application Launcher (Wayland)
96
+
97
+ When `true`, generates `~/.config/fuzzel/fuzzel.ini` using the active theme.
98
+ Requires: Fuzzel installed (Wayland-only). No effect on macOS.
99
+
100
+ ### `mako` — Mako Notification Daemon (Wayland)
101
+
102
+ When `true`, generates `~/.config/mako/config` with theme-derived colors.
103
+ Requires: Mako installed (Wayland-only). No effect on macOS.
104
+
105
+ ### `foot` — Foot Terminal Emulator (Wayland)
106
+
107
+ When `true`, generates `~/.config/foot/foot.ini` from `themes.toml`.
108
+ Requires: Foot installed (Wayland-only). No effect on macOS.
109
+
110
+ ### `kanshi` — Kanshi Monitor Profile Manager (Wayland)
111
+
112
+ When `true`, generates `~/.config/kanshi/config` with per-host monitor layouts.
113
+ Requires: Kanshi installed (Wayland-only). No effect on macOS.
114
+
115
+ ### `touch` — Touchscreen-Friendly Tweaks
116
+
117
+ When `true`, enables larger UI scaling and touch-friendly input mappings.
118
+ Typically combined with `surface` for Microsoft Surface devices.
119
+
120
+ ### `t2` — Apple T2 Hardware Tweaks
121
+
122
+ When `true`, enables `t2linux` kernel-module hints, audio routing fixes, and
123
+ Touch-Bar utilities for Intel Macs with the T2 chip on Linux. Set by the
124
+ `macbook-t2` hardware preset in `.chezmoidata/hardware.toml`.
125
+
126
+ ### `surface` — Microsoft Surface Hardware Tweaks
127
+
128
+ When `true`, enables `linux-surface` kernel parameters, touchpad gestures, and
129
+ pen-input mappings. Set by the `surface-pro` hardware preset.
130
+
63
131
  ## Using a Flag in a Template
64
132
 
65
133
  ```go
@@ -116,3 +184,4 @@ Flags can be deprecated without breaking existing hosts. The deprecation process
116
184
 
117
185
  - [Configuration Files](02-config-files.md)
118
186
  - [Create a Profile](../02-tutorials/03-create-profile.md)
187
+ {% endraw %}
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Cookbook: Recipes
2
6
 
3
7
  Thirty short recipes for common tasks.
@@ -1,3 +1,8 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
1
6
  # Cookbook: Troubleshooting
2
7
 
3
8
  Symptom → cause → fix.
@@ -9,6 +14,7 @@ Symptom → cause → fix.
9
14
  **Cause**: `/usr/local/bin` or `~/.local/bin` not in PATH at install time.
10
15
 
11
16
  **Fix**:
17
+
12
18
  ```sh
13
19
  export PATH="$HOME/.local/bin:$PATH"
14
20
  bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)"
@@ -19,6 +25,7 @@ bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfil
19
25
  **Cause**: Permission issue on `~/.local`.
20
26
 
21
27
  **Fix**:
28
+
22
29
  ```sh
23
30
  mkdir -p ~/.local/share ~/.local/state ~/.local/bin
24
31
  chmod 755 ~/.local ~/.local/share
@@ -29,6 +36,7 @@ chmod 755 ~/.local ~/.local/share
29
36
  **Cause**: Slow network or corporate proxy.
30
37
 
31
38
  **Fix**:
39
+
32
40
  ```sh
33
41
  export https_proxy=$HTTP_PROXY # if applicable
34
42
  # Or pre-download chezmoi manually
@@ -43,6 +51,7 @@ apt install chezmoi # Debian 13+
43
51
  **Cause**: Chezmoi detected local drift on a managed file.
44
52
 
45
53
  **Fix**:
54
+
46
55
  ```sh
47
56
  dot diff # see what differs
48
57
  dot apply --force # overwrite local
@@ -55,10 +64,13 @@ dot add <path> # import local change to source
55
64
  **Cause**: A template references a missing data field.
56
65
 
57
66
  **Fix**: Check that your `.chezmoidata.toml` has the required field. For example:
67
+
58
68
  ```sh
59
69
  chezmoi execute-template '{{- $hw := index .hardware .machine -}}{{ $hw.wm }}'
60
70
  ```
71
+
61
72
  If `machine` is not set in your `~/.config/chezmoi/chezmoi.toml`, `index` returns nil. Set:
73
+
62
74
  ```toml
63
75
  [data]
64
76
  machine = "macbook-t2"
@@ -69,6 +81,7 @@ machine = "macbook-t2"
69
81
  **Cause**: Cached init scripts are stale.
70
82
 
71
83
  **Fix**:
84
+
72
85
  ```sh
73
86
  dot clean-cache
74
87
  dot prewarm
@@ -82,6 +95,7 @@ exec $SHELL -l
82
95
  **Cause**: No wallpapers discovered, themes.toml not generated.
83
96
 
84
97
  **Fix**:
98
+
85
99
  ```sh
86
100
  dot theme rebuild --force
87
101
  ```
@@ -91,6 +105,7 @@ dot theme rebuild --force
91
105
  **Cause**: Theme name doesn't exist in `themes.toml`.
92
106
 
93
107
  **Fix**:
108
+
94
109
  ```sh
95
110
  dot theme list # see valid names
96
111
  dot theme rebuild --force # regenerate if expected but missing
@@ -101,10 +116,12 @@ dot theme rebuild --force # regenerate if expected but missing
101
116
  **Cause**: System Settings UI cached the old value.
102
117
 
103
118
  **Fix**: `dot-theme-sync` now calls `killall cfprefsd SystemUIServer Dock "System Settings"`. If it still doesn't refresh:
119
+
104
120
  ```sh
105
121
  killall -KILL Dock SystemUIServer
106
122
  sudo killall -KILL cfprefsd
107
123
  ```
124
+
108
125
  Or log out and back in.
109
126
 
110
127
  ### Symptom: Wallpaper not applying
@@ -112,6 +129,7 @@ Or log out and back in.
112
129
  **Cause**: Wrong format or missing DE support on Linux.
113
130
 
114
131
  **Fix**:
132
+
115
133
  ```sh
116
134
  # Check the wallpaper file exists
117
135
  ls -la ~/Pictures/Wallpapers/
@@ -127,6 +145,7 @@ sudo apt install imagemagick-7
127
145
  **Cause**: Ghostty DBus or SIGUSR2 signaling failed.
128
146
 
129
147
  **Fix**:
148
+
130
149
  ```sh
131
150
  # Restart Ghostty manually, or:
132
151
  pkill -USR2 ghostty 2>/dev/null
@@ -140,6 +159,7 @@ pkill -USR2 ghostty 2>/dev/null
140
159
  **Cause**: `~/.config/age/keys.txt` missing or unreadable.
141
160
 
142
161
  **Fix**:
162
+
143
163
  ```sh
144
164
  ls -la ~/.config/age/keys.txt
145
165
  # Should be: -rw------- 1 user user
@@ -153,6 +173,7 @@ chmod 600 ~/.config/age/keys.txt
153
173
  **Cause**: Your Age public key isn't listed in the file's recipients.
154
174
 
155
175
  **Fix**:
176
+
156
177
  ```sh
157
178
  # Add your public key to .sops.yaml
158
179
  sops updatekeys path/to/file.sops.yaml
@@ -165,6 +186,7 @@ sops updatekeys path/to/file.sops.yaml
165
186
  **Cause**: A secret was committed to Git history.
166
187
 
167
188
  **Fix**:
189
+
168
190
  ```sh
169
191
  # Immediate mitigation
170
192
  dot verify --security # confirm which file
@@ -184,6 +206,7 @@ git filter-repo --path <file> --invert-paths
184
206
  **Cause**: Heavy modules loaded synchronously.
185
207
 
186
208
  **Fix**:
209
+
187
210
  ```sh
188
211
  dot benchmark --detailed
189
212
  # Identify which module is slow
@@ -200,6 +223,7 @@ dot prewarm
200
223
  **Cause**: Multiple health issues.
201
224
 
202
225
  **Fix**:
226
+
203
227
  ```sh
204
228
  dot doctor --verbose # see every failure
205
229
  dot heal # auto-fix what's possible
@@ -211,6 +235,7 @@ dot doctor # recheck
211
235
  **Cause**: Mise shim not activated.
212
236
 
213
237
  **Fix**:
238
+
214
239
  ```sh
215
240
  eval "$(mise activate zsh)" # or fish, bash
216
241
  dot doctor # confirm
@@ -223,6 +248,7 @@ dot doctor # confirm
223
248
  **Cause**: `~/.cargo/config.toml` not managed or was overridden.
224
249
 
225
250
  **Fix**:
251
+
226
252
  ```sh
227
253
  chezmoi apply ~/.cargo/config.toml
228
254
  cat ~/.cargo/config.toml | grep target-dir
@@ -234,6 +260,7 @@ cat ~/.cargo/config.toml | grep target-dir
234
260
  **Cause**: Created by shell init, but shell wasn't restarted.
235
261
 
236
262
  **Fix**:
263
+
237
264
  ```sh
238
265
  mkdir -p /tmp/builds
239
266
  # Or restart shell
@@ -247,6 +274,7 @@ exec $SHELL -l
247
274
  **Cause**: A fleet host is unreachable.
248
275
 
249
276
  **Fix**:
277
+
250
278
  ```sh
251
279
  # Check connectivity to each host
252
280
  for host in macbook-t2 surface-pro geekom-a9; do
@@ -261,6 +289,7 @@ done
261
289
  **Cause**: Remote host's SSH public key not in local `~/.ssh/allowed_signers`.
262
290
 
263
291
  **Fix**:
292
+
264
293
  ```sh
265
294
  # On the remote host:
266
295
  ssh remote-host 'cat ~/.ssh/id_ed25519.pub'
@@ -274,6 +303,7 @@ ssh remote-host 'cat ~/.ssh/id_ed25519.pub'
274
303
  **Cause**: `shfmt` formatting differs from canonical.
275
304
 
276
305
  **Fix**:
306
+
277
307
  ```sh
278
308
  shfmt -w -i 2 -ci scripts/**/*.sh install.sh .chezmoitemplates/**/*.sh
279
309
  # Commit the changes
@@ -284,6 +314,7 @@ shfmt -w -i 2 -ci scripts/**/*.sh install.sh .chezmoitemplates/**/*.sh
284
314
  **Cause**: New code added without tests.
285
315
 
286
316
  **Fix**:
317
+
287
318
  ```sh
288
319
  bash examples/example-coverage-gate.sh
289
320
  # Identifies uncovered modules
@@ -317,3 +348,4 @@ chezmoi --version
317
348
  - [Self-Healing concept](../01-concepts/05-self-healing.md)
318
349
  - [FAQ](03-faq.md)
319
350
  - [Security: Incident Response](../../security/INCIDENT_RESPONSE.md)
351
+ {% endraw %}