@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
  # Dotfiles Maintenance Runbook
2
6
 
3
7
  This runbook captures recovery and release maintenance operations for this repository.
@@ -27,7 +31,7 @@ This runbook captures recovery and release maintenance operations for this repos
27
31
  ```bash
28
32
  git verify-commit HEAD
29
33
  gh run list --workflow ci.yml --branch master --limit 1
30
- gh release view v0.2.500 --json tagName,targetCommitish,url
34
+ gh release view v0.2.501 --json tagName,targetCommitish,url
31
35
  ```
32
36
 
33
37
  ## Release Closeout Checklist
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Migration and Upgrade Guide
2
6
 
3
7
  ## How to Upgrade
@@ -18,7 +22,8 @@ dot doctor
18
22
 
19
23
  ## Version History
20
24
 
21
- ### v0.2.500 (Current)
25
+ ### v0.2.501 (Current)
26
+
22
27
  - **Wallpaper-driven theme engine** — themes auto-generated from wallpapers via K-Means in CIELAB color space (no hand-crafted themes)
23
28
  - **Dynamic HEIC support** — custom wallpapers ship as Apple-compatible single-file dynamic HEIC; macOS auto-switches dark/light
24
29
  - **System wallpaper discovery** — pulls themes from `/System/Library/Desktop Pictures/` (macOS) and `/usr/share/backgrounds/` (Linux)
@@ -29,7 +34,8 @@ dot doctor
29
34
  - **Build artifact redirection** — Cargo, Go, pip, uv, Zig caches → `/tmp/builds/` (cleared on reboot)
30
35
  - **CI dedup** — `ci-enforced.yml` reuses `reusable-shell-lint.yml` and `reusable-test-suite.yml`
31
36
 
32
- ### v0.2.499
37
+ ### v0.2.500
38
+
33
39
  - Added AI CLIs: Autohand Code, Mistral Vibe, Qwen Code, ZAI
34
40
  - Removed Cline CLI (broken upstream dependency)
35
41
  - Interactive mise installer for missing AI providers
@@ -41,27 +47,29 @@ dot doctor
41
47
  - Auto-prewarm after dot apply
42
48
  - Expanded Atuin history filters
43
49
 
44
- ### v0.2.498
50
+ ### v0.2.497
51
+
45
52
  - Theme system with Catppuccin integration
46
53
  - Linux desktop parity (Niri, Waybar, Fuzzel)
47
54
  - AI tooling expansion (Kiro, OpenCode)
48
55
  - Coverage contracts and QA docs
49
56
 
50
- ### v0.2.497
57
+ ### v0.2.496
58
+
51
59
  - Verified chezmoi installer
52
60
  - Shell startup optimization
53
61
  - Property-based tests
54
62
 
55
63
  ## Breaking Changes
56
64
 
57
- If you are upgrading from v0.2.499 or earlier, note these changes:
65
+ If you are upgrading from v0.2.501 or earlier, note these changes:
58
66
 
59
67
  1. **`themes.toml` is now generated** — do not hand-edit. Run `dot theme rebuild` to regenerate from wallpapers
60
68
  2. **Theme names changed** — old hand-crafted names (e.g. `catppuccin-mocha`, `macos-tahoe-dark` with hardcoded palettes) are replaced by wallpaper-derived names. The picker only shows paired wallpaper themes.
61
69
  3. **Wallpaper format** — custom wallpapers should be dynamic HEIC (single file, both appearances). Use `bash scripts/theme/merge-wallpaper.sh` to merge separate dark/light pairs.
62
70
  4. **Build caches relocated** — Cargo/Go/pip/uv/Zig now write to `/tmp/builds/`. Restart your shell after upgrade so `mise [env]` picks up the new paths.
63
71
 
64
- If you are upgrading from v0.2.498 or earlier:
72
+ If you are upgrading from v0.2.501 or earlier:
65
73
 
66
74
  1. **Cline CLI removed** — if you used `dot cline`, switch to a different AI CLI
67
75
  2. **AI tools now install through mise** — run `mise install` to set up AI providers
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Operations
2
6
 
3
7
  Core workflows for keeping your dotfiles running across platforms.
@@ -11,9 +15,11 @@ Core workflows for keeping your dotfiles running across platforms.
11
15
  **Primary manager**: `Homebrew`
12
16
 
13
17
  - **Update**:
18
+
14
19
  ```bash
15
20
  chezmoi update
16
21
  ```
22
+
17
23
  This runs `brew bundle install` behind the scenes to reconcile against the declared Brewfiles.
18
24
  - **Permission issues**: `sudo chown -R $(whoami) $(brew --prefix)/*`
19
25
  - **Drift**: Run `brew bundle cleanup` to remove unmanaged packages.
@@ -23,10 +29,12 @@ Core workflows for keeping your dotfiles running across platforms.
23
29
  **Primary manager**: `apt-get` / `snap`
24
30
 
25
31
  - **Update**:
32
+
26
33
  ```bash
27
34
  sudo apt update && sudo apt upgrade -y
28
35
  chezmoi update
29
36
  ```
37
+
30
38
  On Linux, `chezmoi` focuses on configuration. Package updates work best through the OS package manager to avoid `sudo` conflicts.
31
39
  - **Font issues**: If icons are missing, run `./install/provision/run_onchange_50-install-fonts.sh.tmpl` manually via `chezmoi apply` or source directly with `bash`.
32
40
 
@@ -61,6 +69,7 @@ dot doctor
61
69
  ```
62
70
 
63
71
  `dot apply` includes post-apply checks that:
72
+
64
73
  - Remove stale read-only zsh cache files (`~/.config/shell/*.zwc`, `~/.config/zsh/**/*.zwc`)
65
74
  - Validate that `dot` resolves to `~/.local/bin/dot` in a fresh login shell
66
75
 
@@ -109,38 +118,53 @@ dot prewarm
109
118
  If something's slow or broken:
110
119
 
111
120
  1. **Check health**:
121
+
112
122
  ```bash
113
123
  dot doctor
114
124
  dot health --fix
115
125
  ```
126
+
116
127
  2. **Smoke test**:
128
+
117
129
  ```bash
118
130
  dot smoke-test
119
131
  ```
132
+
120
133
  3. **Scorecard**:
134
+
121
135
  ```bash
122
136
  dot scorecard
123
137
  ```
138
+
124
139
  4. **Chaos testing (self-healing)**:
140
+
125
141
  ```bash
126
142
  dot chaos --force
127
143
  dot heal --force
128
144
  ```
145
+
129
146
  5. **Startup profiling**:
147
+
130
148
  ```bash
131
149
  dot perf --profile
132
150
  ```
151
+
133
152
  6. **Post-merge verification**:
153
+
134
154
  ```bash
135
155
  dot verify
136
156
  ```
157
+
137
158
  7. **Inspect alias behavior**:
159
+
138
160
  ```bash
139
161
  dot aliases list
140
162
  dot aliases why dprune
141
163
  DOTFILES_ALIAS_POLICY=strict bash ~/.dotfiles/scripts/diagnostics/alias-governance.sh
142
164
  ```
165
+
143
166
  8. **Verbose mode**:
167
+
144
168
  ```bash
145
169
  DOTFILES_DEBUG=1 dot apply
146
170
  ```
@@ -0,0 +1,133 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Performance — Budgets, Baselines, Regression Detection
6
+
7
+ This page documents the per-shell startup budget, the baseline
8
+ lifecycle, and the regression-alert pipeline. Managed under
9
+ [#863](https://github.com/sebastienrousseau/dotfiles/issues/863).
10
+
11
+ ## Targets
12
+
13
+ | Shell | Target (mean ms) | Override env var |
14
+ |---|---|---|
15
+ | **zsh** | 250 | `DOTFILES_PERF_TARGET_ZSH_MS` |
16
+ | **bash** | 60 | `DOTFILES_PERF_TARGET_BASH_MS` |
17
+ | **fish** | 200 | `DOTFILES_PERF_TARGET_FISH_MS` |
18
+ | **nu** | 500 | `DOTFILES_PERF_TARGET_NU_MS` |
19
+ | **pwsh** | 600 | `DOTFILES_PERF_TARGET_PWSH_MS` |
20
+
21
+ `dot perf` measures every installed shell and flags any whose mean
22
+ exceeds its target. The numbers come from
23
+ [`scripts/diagnostics/perf.sh`](../../scripts/diagnostics/perf.sh) —
24
+ warm-up + 3 runs by default.
25
+
26
+ ## The baseline
27
+
28
+ `$XDG_CACHE_HOME/dotfiles/perf-baseline.json` records the per-shell
29
+ means at a known-good point in time. The file is a JSON object:
30
+
31
+ ```json
32
+ {
33
+ "recorded_at": "2026-05-13T00:00:00Z",
34
+ "regression_pct": 10,
35
+ "shells": {
36
+ "zsh": 41,
37
+ "bash": 28,
38
+ "fish": 190
39
+ }
40
+ }
41
+ ```
42
+
43
+ ### Recording a baseline
44
+
45
+ ```bash
46
+ dot perf --baseline # all installed shells
47
+ dot perf --baseline --shell zsh # just one shell
48
+ ```
49
+
50
+ Do this after:
51
+
52
+ - A fresh chezmoi apply on a new machine.
53
+ - Any deliberate startup-cost change (deferred-load PRs, new plugin).
54
+ - A `mise install` that bumps a hot-path tool's version.
55
+
56
+ ### Regression detection
57
+
58
+ Every subsequent `dot perf` invocation compares the current
59
+ measurement against the baseline. When any shell exceeds the
60
+ baseline by more than `DOTFILES_PERF_REGRESSION_PCT` (default 10%),
61
+ the run reports under a "Baseline regressions" section. JSON output
62
+ includes a `regressions: [...]` array and a `regression_count`
63
+ counter so dashboards can alert.
64
+
65
+ ```bash
66
+ dot perf # warns on regression
67
+ dot perf --no-baseline-check # skip the comparison entirely
68
+ DOTFILES_PERF_REGRESSION_PCT=5 dot perf # tighter threshold
69
+ ```
70
+
71
+ ## Per-tool timings
72
+
73
+ `_cached_eval` (the zsh/fish primitive that caches expensive tool
74
+ init like `starship init zsh`) writes one JSONL row per call to
75
+ `$XDG_STATE_HOME/dotfiles/eval-timings.jsonl` when
76
+ `EVALCACHE_TIMING=1` is set in the environment. Aggregating that log
77
+ gives a per-tool breakdown of where startup time goes.
78
+
79
+ ```bash
80
+ EVALCACHE_TIMING=1 zsh -i -c exit # generate data
81
+ dot perf --by-tool # see the aggregation
82
+ dot perf --reset # clear the log
83
+ ```
84
+
85
+ The aggregator reports `count / total / mean / p50 / p95 / p99`
86
+ per `_cached_eval` label. P95 + P99 surface the tail-latency cases
87
+ that mean alone misses (e.g. a cache miss after a tool upgrade
88
+ spiking from 5ms steady-state to 200ms once).
89
+
90
+ ## `dot doctor` Performance section
91
+
92
+ `dot doctor` surfaces (when each data source is available):
93
+
94
+ - Whether `_cached_eval`'s on-disk tool caches are fresh vs stale
95
+ for mise, starship, zoxide, atuin, fzf, direnv.
96
+ - Any installed slow-init tools NOT yet wrapped in `_cached_eval`
97
+ (nvm, fnm, pyenv, pnpm, …).
98
+ - Hyperfine-measured startup latency vs target.
99
+ - Baseline age + top-3 slowest tools from the EVALCACHE_TIMING log.
100
+
101
+ ## CI workflow
102
+
103
+ [`.github/workflows/perf-baseline.yml`](../../.github/workflows/perf-baseline.yml)
104
+ runs weekly on Sunday at 03:00 UTC on `ubuntu-latest`. It:
105
+
106
+ 1. Restores the previous week's baseline from a workflow artifact.
107
+ 2. Runs `dot perf --json` against the freshly-applied dotfiles.
108
+ 3. Compares current vs restored baseline; opens (or comments on) a
109
+ tracking issue if any shell regressed by >10%.
110
+ 4. Uploads the new measurement as the next week's restore source.
111
+
112
+ The CI workflow always runs against the same `ubuntu-latest` image
113
+ so the comparison is machine-stable; per-developer baselines live on
114
+ each developer's box and aren't synced.
115
+
116
+ ## Adjusting the budget
117
+
118
+ Per-shell targets live in
119
+ [`scripts/diagnostics/perf.sh`](../../scripts/diagnostics/perf.sh)
120
+ under `shell_target_for()`. Bumping a target should always come with:
121
+
122
+ - A commit-message rationale explaining why slower is acceptable
123
+ (e.g. "added a required Carapace completion at startup").
124
+ - A new baseline recording (`dot perf --baseline`).
125
+ - A note here under "Targets" with the new value.
126
+
127
+ ## References
128
+
129
+ - [`scripts/diagnostics/perf.sh`](../../scripts/diagnostics/perf.sh)
130
+ - [`tests/unit/diagnostics/test_perf_percentiles.sh`](../../tests/unit/diagnostics/test_perf_percentiles.sh) — percentile math contract
131
+ - [`.github/workflows/perf-baseline.yml`](../../.github/workflows/perf-baseline.yml)
132
+ - ADR-002 (Shell Performance Optimization)
133
+ - Issue [#863](https://github.com/sebastienrousseau/dotfiles/issues/863)
@@ -0,0 +1,89 @@
1
+ ---
2
+ render_with_liquid: false
3
+ title: "Dot Module Registry"
4
+ description: "How to publish and consume reusable dotfile modules."
5
+ ---
6
+
7
+ # Dot Module Registry
8
+
9
+ The `dot registry` command discovers reusable dotfile modules from a JSON index published over HTTPS. The default registry is hosted by this repo at:
10
+
11
+ ```
12
+ https://sebastienrousseau.github.io/dotfiles/registry.json
13
+ ```
14
+
15
+ This page documents the JSON contract and the contribution flow. It is the §3 / Months 12-18 deliverable from [HARD_AUDIT_2026.md](./HARD_AUDIT_2026.md) — the registry is the network-effect feature that turns the framework into a category, not just one person's setup.
16
+
17
+ ## Quick start (consumer side)
18
+
19
+ ```sh
20
+ dot registry list # list every published module
21
+ dot registry search rust # filter by keyword
22
+ dot registry info rust-dev-setup # full metadata for one module
23
+ dot registry install rust-dev-setup # apply to this workstation (scaffold)
24
+ dot registry url # show active registry URL
25
+ dot registry set-url <url> # point at a different registry
26
+ ```
27
+
28
+ The registry index is cached locally at `${XDG_CACHE_HOME:-~/.cache}/dotfiles/registry/index.json` with a 6 hour TTL. Override the URL one-off via `DOTFILES_REGISTRY_URL=<url> dot registry list`.
29
+
30
+ ## JSON contract
31
+
32
+ A registry index is a single JSON document:
33
+
34
+ ```json
35
+ {
36
+ "version": 1,
37
+ "updated": "2026-05-15T16:30:00Z",
38
+ "registry": "sebastienrousseau/dotfiles",
39
+ "modules": [
40
+ {
41
+ "name": "rust-dev-setup",
42
+ "description": "Rust toolchain + cargo plugins + Helix/Neovim editor config",
43
+ "repo": "https://github.com/example/rust-dev-setup",
44
+ "version": "1.2.0",
45
+ "tags": ["rust", "language", "dev"],
46
+ "maintainer": "alice@example.com",
47
+ "sha256": "f9a2c1b…",
48
+ "license": "MIT"
49
+ }
50
+ ]
51
+ }
52
+ ```
53
+
54
+ Required keys: `name` (kebab-case, ≤ 32 chars), `description` (≤ 200 chars), `repo` (HTTPS clone URL), `version` (semver).
55
+
56
+ Recommended keys: `tags` (lower-case array), `maintainer`, `sha256` (pinned at publish time so installers can verify), `license` (SPDX identifier).
57
+
58
+ ## Contributing a module
59
+
60
+ 1. Build your module as a chezmoi-source-compatible directory at `https://github.com/<you>/<module>.git`. The contents are overlaid onto the consumer's chezmoi source dir during install.
61
+ 2. Open a PR against `sebastienrousseau/dotfiles` adding one entry to `docs/registry.json` (alphabetical by `name`).
62
+ 3. The PR runs CI checks for:
63
+ - Schema validity (`jq` against the JSON contract).
64
+ - `repo` URL resolves and is a public git repo.
65
+ - `sha256` matches the latest tag at `repo`.
66
+ 4. Once merged, the GitHub Pages workflow re-deploys the registry; `dot registry list` picks it up within 6 hours (or immediately if the consumer purges the cache).
67
+
68
+ ## Install pipeline (scaffold today, full in Phase 2)
69
+
70
+ `dot registry install <name>` currently prints what *would* happen. The full pipeline lands as follows:
71
+
72
+ 1. Resolve the module entry from the registry index.
73
+ 2. Clone the module to `$XDG_DATA_HOME/dotfiles/modules/<name>/<version>`.
74
+ 3. Verify the clone's HEAD matches `sha256` from the registry.
75
+ 4. Source the module's `module.toml` (if present) for declared profiles + feature flags.
76
+ 5. Merge the module's chezmoi source into the consumer's chezmoi source dir under a namespaced subtree (`/registry/<name>/...`).
77
+ 6. Run `chezmoi apply --include /registry/<name>/**` so only the module's files are written.
78
+
79
+ The sandboxed apply (point 6) requires changes to `dot sync` to accept an include filter — that is its own roadmap issue and tracked separately.
80
+
81
+ ## Security model
82
+
83
+ - Modules execute with the consumer's user privileges via chezmoi `run_onchange_*` scripts. The trust contract is identical to consuming any third-party dotfiles repo.
84
+ - Pinning `sha256` lets a consumer verify the registry entry hasn't been tampered with between publish and install.
85
+ - The registry index itself is fetched over HTTPS; the GitHub Pages cert chain provides transport integrity.
86
+
87
+ ## Why this lives in this repo (for now)
88
+
89
+ A vendor-neutral registry would be ideal but adds operations cost. Hosting `registry.json` under this repo's `docs/` directory and serving it via GitHub Pages keeps the maintenance burden near zero while the registry is small. If/when the registry outgrows GitHub Pages, the JSON contract is stable and the index can move to a dedicated subdomain.
@@ -1,3 +1,8 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
1
6
  # Reliability
2
7
 
3
8
  ## Reliability scorecard
@@ -114,3 +119,4 @@ jobs:
114
119
  For a lightweight repository-wide snapshot, run `bash ./scripts/qa/coverage-baseline.sh --with-module-coverage`.
115
120
 
116
121
  Core internal behaviors are traced through `bash ./scripts/qa/traceability-coverage.sh`.
122
+ {% endraw %}
@@ -1,3 +1,7 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
1
5
  # Roadmap
2
6
 
3
7
  This roadmap steers the project from a "feature-rich dotfiles repo" to an **Enterprise-Grade Shell Distribution**. The structure is organized by strategic pillars (**Trust**, **Predictability**, **Observability**) rather than linear phases, though the original 100-Phase vision is preserved within these categories.
@@ -5,6 +9,7 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
5
9
  ---
6
10
 
7
11
  ## Reproducibility
12
+
8
13
  **Goal:** "Reproducible Shell Environments".
9
14
  > *This distribution aims for deterministic rebuilds: the same tag yields the same environment across machines.*
10
15
 
@@ -17,6 +22,7 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
17
22
  - [ ] **Terraform Provider (Phase 28)**: Custom provider to provision dotfiles state.
18
23
 
19
24
  ## Observability
25
+
20
26
  **Goal:** "Observable Shell Lifecycle".
21
27
  > *The shell is instrumented: failures, timing, and lifecycle events are visible by design.*
22
28
 
@@ -28,6 +34,7 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
28
34
  - [ ] **Update Manager (Phase 39)**: Visual interface for tool updates and migration.
29
35
 
30
36
  ## Secrets
37
+
31
38
  **Goal:** "Explicit Secrets Model".
32
39
  > *Secrets are never committed; sensitive state is encrypted or host-local by default.*
33
40
 
@@ -39,6 +46,7 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
39
46
  - [ ] **OIDC Auth (Phase 29)**: Keyless authentication via GitHub OIDC.
40
47
 
41
48
  ## Toolchain
49
+
42
50
  **Goal:** "Composable Shell Layers".
43
51
  > *The distribution is layered: core safety is mandatory, advanced features are opt-in.*
44
52
 
@@ -46,62 +54,67 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
46
54
  - [ ] **UX Layer**: Prompt (Starship), Aliases, Completions.
47
55
  - [ ] **Toolchain Layer**: Rust replacements (`eza`, `bat`, `ripgrep`).
48
56
  - [ ] **Cross-Compiler Toolchain (Phase 34)**:
49
- - [ ] **Multi-Arch**: `qemu-user-static` for ARM64/AMD64.
50
- - [ ] **Wasm Target**: WebAssembly toolchain setup.
51
- - [ ] **Embedded Dev**: Presets for Arduino/ESP32.
57
+ - [ ] **Multi-Arch**: `qemu-user-static` for ARM64/AMD64.
58
+ - [ ] **Wasm Target**: WebAssembly toolchain setup.
59
+ - [ ] **Embedded Dev**: Presets for Arduino/ESP32.
52
60
 
53
61
  ## Opt-in features
62
+
54
63
  **Goal:** "Explicit Feature Flags".
55
64
  > *Advanced features are gated behind explicit opt-in flags.*
56
65
 
57
66
  - [ ] **Feature Toggles**: Environment variables (e.g., `ENABLE_AI=0`, `ENABLE_HISTORY_SYNC=0`).
58
67
  - [ ] **Lazy Loading**: Strict lazy-loading for all non-core plugins.
59
68
  - [ ] **Plugin Ecosystem (Phase 35)**:
60
- - [ ] **Module Registry**: Public index of dotfiles modules.
61
- - [ ] **Dependency Solving**: Semantic versioning for modules.
62
- - [ ] **Verified Publishers**: Cryptographic signing for "Official" modules.
69
+ - [ ] **Module Registry**: Public index of dotfiles modules.
70
+ - [ ] **Dependency Solving**: Semantic versioning for modules.
71
+ - [ ] **Verified Publishers**: Cryptographic signing for "Official" modules.
63
72
 
64
73
  ## Safety
74
+
65
75
  **Goal:** "Documented Threat Model".
66
76
  > *Security decisions are driven by an explicit, documented threat model.*
67
77
 
68
78
  - [x] **Threat Model Doc**: A lightweight document defining the trust boundary (Local Machine). See `docs/security/THREAT_MODEL.md`.
69
79
  - [ ] **Supply Chain**: Verification steps for upstream dependencies.
70
80
  - [ ] **Identity & Access (Phase 40)**:
71
- - [ ] **SSH Certs**: Short-lived SSH Certificates.
72
- - [ ] **YubiKey Bio**: Biometric enforcement for `sudo`.
73
- - [ ] **PAM Modules**: Custom auth modules.
74
- - [ ] **Auditd Rules**: Pre-configured audit rules.
81
+ - [ ] **SSH Certs**: Short-lived SSH Certificates.
82
+ - [ ] **YubiKey Bio**: Biometric enforcement for `sudo`.
83
+ - [ ] **PAM Modules**: Custom auth modules.
84
+ - [ ] **Auditd Rules**: Pre-configured audit rules.
75
85
 
76
86
  ## Validation
87
+
77
88
  **Goal:** "Self-Validating Environment".
78
89
  > *The environment can validate itself after installation or update.*
79
90
 
80
91
  - [x] **Smoke Tests**: Automated verification of key aliases (`ls`, `git`, `docker`).
81
92
  - [x] **CI Validation**: GitHub Actions workflow to boot and verify the shell syntax.
82
93
  - [x] **Chaos Engineering (Phase 41)**:
83
- - [ ] **Config Chaos**: Randomly corrupt config files to test recovery.
84
- - [ ] **Network Simulation**: Simulate high latency/packet loss.
85
- - [ ] **Permission Fuzzing**: Verify strict umask behavior.
94
+ - [ ] **Config Chaos**: Randomly corrupt config files to test recovery.
95
+ - [ ] **Network Simulation**: Simulate high latency/packet loss.
96
+ - [ ] **Permission Fuzzing**: Verify strict umask behavior.
86
97
 
87
98
  ## Distribution
99
+
88
100
  **Goal:** "Supported Platforms Matrix".
89
101
  > *Only listed platforms are guaranteed to work; others are best-effort.*
90
102
 
91
103
  - [x] **Support Matrix**: Explicit table of OS/Version support. See `docs/reference/SUPPORT_MATRIX.md`.
92
104
  - [ ] **Windows Deep Integration (Phase 53)**:
93
- - [ ] **PowerShell Profile**: Mirror Zsh functionality.
94
- - [ ] **WinGet**: Declarative package management.
95
- - [ ] **WSL Bridge**: Seamless interop.
105
+ - [ ] **PowerShell Profile**: Mirror Zsh functionality.
106
+ - [ ] **WinGet**: Declarative package management.
107
+ - [ ] **WSL Bridge**: Seamless interop.
96
108
  - [ ] **Linux Deep Integration (Phase 55)**:
97
- - [x] **Systemd User Units**: User service management.
98
- - [ ] **Desktop Envs**: GNOME/KDE/Sway configs.
109
+ - [x] **Systemd User Units**: User service management.
110
+ - [ ] **Desktop Envs**: GNOME/KDE/Sway configs.
99
111
 
100
112
  ---
101
113
 
102
114
  ## Future
103
115
 
104
116
  ### Domain-Specific Environments
117
+
105
118
  - [ ] **Data Science (Phase 38)**: Conda/Mamba, GPU Config, Jupyter.
106
119
  - [ ] **Network Topologies (Phase 56)**: Mesh Networks, Tor, Private VPNs.
107
120
  - [ ] **Build Systems (Phase 57)**: Bazel, Maven/Gradle, CMake.
@@ -112,6 +125,7 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
112
125
  - [ ] **Bio-Informatics (Phase 70)**: Genomics, PDB, FASTA.
113
126
 
114
127
  ### Enterprise & Operations
128
+
115
129
  - [ ] **Collaborations (Phase 45)**: Pair Programming, Team Sync, ChatOps.
116
130
  - [ ] **Database DevOps (Phase 46)**: DB Clients, Local Docker DBs, Migrations.
117
131
  - [ ] **Serverless (Phase 47)**: Lambda, Edge Workers, Wasm.
@@ -120,6 +134,7 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
120
134
  - [ ] **Recruiting & HR (Phase 94)**: Resume Generators, coding interview sets.
121
135
 
122
136
  ### Accessibility & Legacy
137
+
123
138
  - [ ] **Accessibility (Phase 36)**: Screen Reader optimization, High Contrast.
124
139
  - [ ] **Legacy Modernization (Phase 42)**: Mainframe/Unix support, PowerShell Core.
125
140
 
@@ -128,12 +143,14 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
128
143
  ## Completed
129
144
 
130
145
  ### Core Foundations
146
+
131
147
  - [x] **Universal Config (Chezmoi) (Phase 1)**
132
148
  - [x] **Shell Environment (Phase 2)**
133
149
  - [x] **Tool Modernization (Phase 3)**
134
150
  - [x] **Performance Optimization (Phase 4)**
135
151
 
136
152
  ### Hardened Security
153
+
137
154
  - [x] **Security & Validation (Phase 5)**
138
155
  - [x] **Package Management (Phase 6)**
139
156
  - [x] **Hardened Security (Phase 21)**
@@ -141,6 +158,7 @@ This roadmap steers the project from a "feature-rich dotfiles repo" to an **Ente
141
158
  - [x] **Legal & Licensing (Phase 92)**: FOSSology, Headers, CLA.
142
159
 
143
160
  ### Experience
161
+
144
162
  - [x] **Documentation (Phase 25)**: DocSite, Interactive Tour.
145
163
  - [x] **Self-Healing (Phase 27)**: Doctor, Auto-Repair.
146
164
  - [x] **OS Bundling (Phase 26)**: XDG Compliance, Vendor Hooks.