@sebastienrousseau/dotfiles 0.2.499 → 0.2.501

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 (567) hide show
  1. package/CHANGELOG.md +452 -0
  2. package/LICENSE +1283 -0
  3. package/README.md +322 -0
  4. package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
  5. package/docs/AI.md +108 -0
  6. package/docs/CNAME +1 -0
  7. package/docs/COPYRIGHT +4 -3
  8. package/docs/NAMING_CONVENTIONS.md +102 -0
  9. package/docs/README.md +82 -0
  10. package/docs/_config.yml +59 -0
  11. package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
  12. package/docs/adr/ADR-002-shell-performance.md +130 -0
  13. package/docs/adr/ADR-003-security-first.md +158 -0
  14. package/docs/adr/ADR-004-cli-architecture.md +171 -0
  15. package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
  16. package/docs/adr/ADR-006-shell-selection.md +124 -0
  17. package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
  18. package/docs/adr/ADR-008-alias-system-architecture.md +95 -0
  19. package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
  20. package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
  21. package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
  22. package/docs/adr/README.md +39 -0
  23. package/docs/architecture/ARCHITECTURE.md +117 -0
  24. package/docs/architecture/INTEROP.md +44 -0
  25. package/docs/architecture/REPO_LAYOUT.md +241 -0
  26. package/docs/architecture/WALKTHROUGH.md +86 -0
  27. package/docs/architecture/fleet-deployment.md +77 -0
  28. package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
  29. package/docs/archive/LEGACY_ROADMAP.md +160 -0
  30. package/docs/archive/MILESTONE_v0.2.493.md +47 -0
  31. package/docs/{PLAN.md → archive/PLAN.md} +50 -12
  32. package/docs/archive/REPO_AUDIT.md +31 -0
  33. package/docs/guides/INSTALL.md +144 -0
  34. package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
  35. package/docs/guides/THEMING.md +230 -0
  36. package/docs/guides/TROUBLESHOOTING.md +176 -0
  37. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
  38. package/docs/index.md +43 -0
  39. package/docs/interop/A2A.md +39 -0
  40. package/docs/interop/POWERSHELL.md +102 -0
  41. package/docs/manual/00-introduction.md +89 -0
  42. package/docs/manual/01-concepts/01-architecture.md +138 -0
  43. package/docs/manual/01-concepts/02-trust-model.md +182 -0
  44. package/docs/manual/01-concepts/03-theme-engine.md +186 -0
  45. package/docs/manual/01-concepts/04-fleet.md +148 -0
  46. package/docs/manual/01-concepts/05-self-healing.md +204 -0
  47. package/docs/manual/02-tutorials/01-first-install.md +197 -0
  48. package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
  49. package/docs/manual/02-tutorials/03-create-profile.md +244 -0
  50. package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
  51. package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
  52. package/docs/manual/03-reference/01-dot-cli.md +417 -0
  53. package/docs/manual/03-reference/02-config-files.md +265 -0
  54. package/docs/manual/03-reference/03-environment.md +124 -0
  55. package/docs/manual/03-reference/04-templates.md +190 -0
  56. package/docs/manual/03-reference/05-feature-flags.md +128 -0
  57. package/docs/manual/04-cookbook/01-recipes.md +285 -0
  58. package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
  59. package/docs/manual/04-cookbook/03-faq.md +175 -0
  60. package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
  61. package/docs/manual/05-appendices/B-security-checklist.md +84 -0
  62. package/docs/manual/05-appendices/C-glossary.md +40 -0
  63. package/docs/manual/05-appendices/D-bibliography.md +58 -0
  64. package/docs/manual/05-appendices/E-license.md +38 -0
  65. package/docs/manual/_toc.yml +58 -0
  66. package/docs/manual/command-index.md +62 -0
  67. package/docs/manual/concept-index.md +168 -0
  68. package/docs/operations/ATTESTATION.md +44 -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 +148 -0
  73. package/docs/operations/DRIFT.md +107 -0
  74. package/docs/operations/MAINTENANCE.md +63 -0
  75. package/docs/operations/MIGRATION.md +109 -0
  76. package/docs/operations/OPERATIONS.md +188 -0
  77. package/docs/operations/PERFORMANCE.md +133 -0
  78. package/docs/operations/RELIABILITY.md +122 -0
  79. package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
  80. package/docs/operations/TESTING.md +199 -0
  81. package/docs/operations/TRACEABILITY.md +35 -0
  82. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
  83. package/docs/operations/VERSION_SYNC.md +393 -0
  84. package/docs/reference/ALIASES.md +131 -0
  85. package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
  86. package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
  87. package/docs/reference/FEATURES.md +66 -0
  88. package/docs/reference/FONTS.md +112 -0
  89. package/docs/reference/PROFILES.md +69 -0
  90. package/docs/reference/SCREENSHOTS.md +121 -0
  91. package/docs/reference/SCRIPTS.md +71 -0
  92. package/docs/reference/SUPPORT_MATRIX.md +80 -0
  93. package/docs/reference/THEMES.md +117 -0
  94. package/docs/reference/TOOLS.md +109 -0
  95. package/docs/reference/UTILS.md +155 -0
  96. package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
  97. package/docs/security/AUDIT_BYPASS.md +103 -0
  98. package/docs/security/AUTOMATION_SECRETS.md +26 -0
  99. package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
  100. package/docs/security/COMPLIANCE.md +458 -0
  101. package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
  102. package/docs/security/ENCRYPTION.md +57 -0
  103. package/docs/security/FMEA.md +159 -0
  104. package/docs/security/HISTORY_FILTERING.md +132 -0
  105. package/docs/security/INCIDENT_RESPONSE.md +579 -0
  106. package/docs/security/INSTALL_VERIFICATION.md +122 -0
  107. package/docs/security/KEYS.md +49 -0
  108. package/docs/security/KEY_ROTATION.md +223 -0
  109. package/docs/security/MCP_POLICY.md +78 -0
  110. package/docs/security/POLICY_RELEASES.md +37 -0
  111. package/docs/security/README.md +28 -0
  112. package/docs/security/SCORECARD.md +80 -0
  113. package/docs/security/SECRETS.md +158 -0
  114. package/docs/security/SECURITY.md +45 -0
  115. package/docs/security/SECURITY_CHECKLIST.md +55 -0
  116. package/docs/security/SHELL_EXEMPTIONS.md +145 -0
  117. package/docs/security/SOUP_REGISTER.md +36 -0
  118. package/docs/security/THREAT_MODEL.md +130 -0
  119. package/docs/security/VERIFICATION_VALIDATION.md +228 -0
  120. package/docs/themes/README.md +10 -0
  121. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
  122. package/docs/themes/hero-shot.svg +78 -0
  123. package/dot_config/.module-manifest.json +69 -0
  124. package/dot_config/ai/identity.md +23 -0
  125. package/dot_config/ai/patterns/architect.md +16 -0
  126. package/dot_config/ai/patterns/hardener.md +15 -0
  127. package/dot_config/ai/patterns/refactor.md +15 -0
  128. package/dot_config/aider/aider.conf.yml +32 -0
  129. package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
  130. package/dot_config/ansible/ansible.cfg +11 -0
  131. package/dot_config/atuin/config.toml.tmpl +47 -0
  132. package/dot_config/bat/config +23 -0
  133. package/dot_config/brave-flags.conf.tmpl +7 -0
  134. package/dot_config/btop/btop.conf +16 -0
  135. package/dot_config/btop/themes/tokyonight.theme +34 -0
  136. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  137. package/dot_config/claude/mcp_servers.json +20 -0
  138. package/dot_config/containers/containers.conf +14 -0
  139. package/dot_config/curl/dot_curlrc +18 -0
  140. package/dot_config/dlv/config.yml +39 -0
  141. package/dot_config/docker/config.json +15 -0
  142. package/dot_config/dotfiles/agent-card.json +29 -0
  143. package/dot_config/dotfiles/agent-profiles.json +92 -0
  144. package/dot_config/dotfiles/boot/README.md +13 -0
  145. package/dot_config/dotfiles/grub/README.md +13 -0
  146. package/dot_config/dotfiles/lock/README.md +13 -0
  147. package/dot_config/dotfiles/mcp-lock.json +33 -0
  148. package/dot_config/dotfiles/mcp-policy.json +52 -0
  149. package/dot_config/dotfiles/mcp-registry.json +47 -0
  150. package/dot_config/dotfiles/model-registry.json +20 -0
  151. package/dot_config/dotfiles/policy-bundles.json +38 -0
  152. package/dot_config/dotfiles/prompt-registry.json +16 -0
  153. package/dot_config/dotfiles/versions.env +18 -0
  154. package/dot_config/duf/duf.conf +6 -0
  155. package/dot_config/duti/defaults.duti +5 -0
  156. package/dot_config/emoji/emoji.txt +34 -0
  157. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  158. package/dot_config/environment.d/90-wayland.conf +19 -0
  159. package/dot_config/fastfetch/config.jsonc +28 -0
  160. package/dot_config/firefox/user.js.tmpl +58 -0
  161. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  162. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  163. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  164. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  165. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  166. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  167. package/dot_config/fish/conf.d/init.fish.tmpl +172 -0
  168. package/dot_config/fish/config.fish.tmpl +44 -0
  169. package/dot_config/fish/fish_plugins +1 -0
  170. package/dot_config/fish/functions/_.fish +3 -0
  171. package/dot_config/fish/functions/_cached_eval.fish +131 -0
  172. package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
  173. package/dot_config/fish/functions/als.fish +46 -0
  174. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  175. package/dot_config/fish/functions/c.fish +3 -0
  176. package/dot_config/fish/functions/cat.fish +9 -0
  177. package/dot_config/fish/functions/d.fish +7 -0
  178. package/dot_config/fish/functions/dot.fish +34 -0
  179. package/dot_config/fish/functions/h.fish +3 -0
  180. package/dot_config/fish/functions/l.fish +7 -0
  181. package/dot_config/fish/functions/la.fish +7 -0
  182. package/dot_config/fish/functions/ll.fish +7 -0
  183. package/dot_config/fish/functions/log_error.fish +13 -0
  184. package/dot_config/fish/functions/log_info.fish +13 -0
  185. package/dot_config/fish/functions/lr.fish +7 -0
  186. package/dot_config/fish/functions/lra.fish +7 -0
  187. package/dot_config/fish/functions/ls.fish +7 -0
  188. package/dot_config/fish/functions/lt.fish +7 -0
  189. package/dot_config/fish/functions/lta.fish +7 -0
  190. package/dot_config/fish/functions/notify-run.fish +11 -0
  191. package/dot_config/fish/functions/q.fish +3 -0
  192. package/dot_config/fish/functions/silent-run.fish +7 -0
  193. package/dot_config/fish/functions/yy.fish +8 -0
  194. package/dot_config/flatpak/flatpak.list +4 -0
  195. package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
  196. package/dot_config/foot/foot.ini.tmpl +33 -0
  197. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  198. package/dot_config/fzf/fzf.zsh +48 -0
  199. package/dot_config/gem/gemrc +9 -0
  200. package/dot_config/gh/config.yml +12 -0
  201. package/dot_config/ghostty/config.tmpl +165 -0
  202. package/dot_config/git/allowed_signers.tmpl +18 -0
  203. package/dot_config/git/attributes +12 -0
  204. package/dot_config/git/commit-template +10 -0
  205. package/dot_config/git/hooks/executable_commit-msg +146 -0
  206. package/dot_config/git/ignore +27 -0
  207. package/dot_config/gnupg/gpg-agent.conf +11 -0
  208. package/dot_config/go/golangci.yml +118 -0
  209. package/dot_config/go/gopls.json +30 -0
  210. package/dot_config/goose/config.yaml +29 -0
  211. package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
  212. package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
  213. package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
  214. package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
  215. package/dot_config/htop/htoprc +20 -0
  216. package/dot_config/inputrc +2 -0
  217. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  218. package/dot_config/just/justfile +122 -0
  219. package/dot_config/k9s/config.yaml +65 -0
  220. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  221. package/dot_config/kanshi/config.tmpl +22 -0
  222. package/dot_config/karabiner/karabiner.json +14 -0
  223. package/dot_config/kitty/kitty.conf.tmpl +53 -0
  224. package/dot_config/lazydocker/config.yml +186 -0
  225. package/dot_config/lazygit/config.yml +35 -0
  226. package/dot_config/mako/config +47 -0
  227. package/dot_config/mas/masapps.txt +5 -0
  228. package/dot_config/micro/settings.json +3 -0
  229. package/dot_config/mimeapps.list +77 -0
  230. package/dot_config/minikube/config.json +13 -0
  231. package/dot_config/mise/config.toml +99 -0
  232. package/dot_config/mongosh/mongoshrc.js +68 -0
  233. package/dot_config/mpv/input.conf +47 -0
  234. package/dot_config/mpv/mpv.conf +47 -0
  235. package/dot_config/mycli/myclirc +67 -0
  236. package/dot_config/nano/nanorc +28 -0
  237. package/dot_config/ncdu/config +12 -0
  238. package/dot_config/niri/config.kdl.tmpl +327 -0
  239. package/dot_config/nushell/aliases.nu +18 -0
  240. package/dot_config/nushell/cached_eval.nu +80 -0
  241. package/dot_config/nushell/completions.nu.tmpl +52 -0
  242. package/dot_config/nushell/config.nu.tmpl +86 -0
  243. package/dot_config/nushell/env.nu.tmpl +102 -0
  244. package/dot_config/nushell/functions.nu.tmpl +17 -0
  245. package/dot_config/nvim/init.lua +18 -0
  246. package/dot_config/nvim/lazy-lock.json +58 -0
  247. package/dot_config/nvim/lua/config/autocmds.lua +107 -0
  248. package/dot_config/nvim/lua/config/keymaps.lua +92 -0
  249. package/dot_config/nvim/lua/config/lazy.lua +44 -0
  250. package/dot_config/nvim/lua/config/options.lua +49 -0
  251. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  252. package/dot_config/nvim/lua/plugins/coding.lua +216 -0
  253. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  254. package/dot_config/nvim/lua/plugins/dap.lua +412 -0
  255. package/dot_config/nvim/lua/plugins/editor.lua +55 -0
  256. package/dot_config/nvim/lua/plugins/git.lua +10 -0
  257. package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
  258. package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
  259. package/dot_config/nvim/lua/plugins/rust.lua +34 -0
  260. package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
  261. package/dot_config/nvim/lua/plugins/ui.lua +509 -0
  262. package/dot_config/paru/paru.conf +10 -0
  263. package/dot_config/pip/pip.conf.tmpl +32 -0
  264. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  265. package/dot_config/pueue/pueue.yml +34 -0
  266. package/dot_config/pypoetry/config.toml +6 -0
  267. package/dot_config/pyrightconfig.json +5 -0
  268. package/dot_config/raycast/README.md +13 -0
  269. package/dot_config/redis/redisclirc +41 -0
  270. package/dot_config/ripgrep/ripgreprc +21 -0
  271. package/dot_config/shell/00-core-paths.sh.tmpl +134 -0
  272. package/dot_config/shell/05-core-safety.sh +48 -0
  273. package/dot_config/shell/10-secrets.sh +41 -0
  274. package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
  275. package/dot_config/shell/40-ls-colors.sh +49 -0
  276. package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
  277. package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
  278. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
  279. package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
  280. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -0
  281. package/dot_config/shell/Brewfile +207 -0
  282. package/dot_config/shell/Brewfile.cask +92 -0
  283. package/dot_config/shell/Brewfile.cli +127 -0
  284. package/dot_config/shell/README.md +284 -0
  285. package/dot_config/shell/als_data.txt.tmpl +65 -0
  286. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  287. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  288. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  289. package/dot_config/sops/dot_sops.yaml +23 -0
  290. package/dot_config/starship.toml.tmpl +202 -0
  291. package/dot_config/swaylock/config +43 -0
  292. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  293. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  294. package/dot_config/systemd/user/pueued.service +12 -0
  295. package/dot_config/systemd/user/ssh-agent.service +12 -0
  296. package/dot_config/task/Taskfile.yml +86 -0
  297. package/dot_config/tflint/tflint.hcl +9 -0
  298. package/dot_config/tmux/tmux.conf.tmpl +223 -0
  299. package/dot_config/topgrade.toml.tmpl +54 -0
  300. package/dot_config/user-dirs.dirs +10 -0
  301. package/dot_config/vscode/extensions.txt +11 -0
  302. package/dot_config/vscode/settings.json.tmpl +82 -0
  303. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  304. package/dot_config/waybar/style.css.tmpl +211 -0
  305. package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
  306. package/dot_config/wget/wgetrc +12 -0
  307. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  308. package/dot_config/yarn/yarnrc.yml +36 -0
  309. package/dot_config/yazi/keymap.toml +67 -0
  310. package/dot_config/yazi/theme.toml +102 -0
  311. package/dot_config/yazi/yazi.toml +40 -0
  312. package/dot_config/zathura/zathurarc +52 -0
  313. package/dot_config/zellij/config.kdl.tmpl +79 -0
  314. package/dot_config/zsh/dot_zprofile +7 -0
  315. package/dot_config/zsh/dot_zshenv +5 -0
  316. package/dot_config/zsh/dot_zshrc.tmpl +635 -0
  317. package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -0
  318. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
  319. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  320. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  321. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +214 -0
  322. package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
  323. package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
  324. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  325. package/dot_local/bin/executable_ai-update +195 -0
  326. package/dot_local/bin/executable_ai_core +152 -0
  327. package/dot_local/bin/executable_antigravity +11 -0
  328. package/dot_local/bin/executable_b64 +84 -0
  329. package/dot_local/bin/executable_bm +79 -0
  330. package/dot_local/bin/executable_cb +39 -0
  331. package/dot_local/bin/executable_dot +596 -0
  332. package/dot_local/bin/executable_dot-ai +36 -0
  333. package/dot_local/bin/executable_dot-bootstrap +77 -0
  334. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  335. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  336. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  337. package/dot_local/bin/executable_dot-theme-sync +952 -0
  338. package/dot_local/bin/executable_dot_completion +57 -0
  339. package/dot_local/bin/executable_dtags +28 -0
  340. package/dot_local/bin/executable_epoch +67 -0
  341. package/dot_local/bin/executable_extract +41 -0
  342. package/dot_local/bin/executable_gbd +52 -0
  343. package/dot_local/bin/executable_gd +42 -0
  344. package/dot_local/bin/executable_git-ai-commit +175 -0
  345. package/dot_local/bin/executable_git-ai-diff +169 -0
  346. package/dot_local/bin/executable_gl +101 -0
  347. package/dot_local/bin/executable_hash +161 -0
  348. package/dot_local/bin/executable_hashsum +160 -0
  349. package/dot_local/bin/executable_hex +115 -0
  350. package/dot_local/bin/executable_jsonv +78 -0
  351. package/dot_local/bin/executable_jwt +94 -0
  352. package/dot_local/bin/executable_kill-port +75 -0
  353. package/dot_local/bin/executable_lorem +118 -0
  354. package/dot_local/bin/executable_mkscript +35 -0
  355. package/dot_local/bin/executable_monitor +56 -0
  356. package/dot_local/bin/executable_myip +51 -0
  357. package/dot_local/bin/executable_notify +24 -0
  358. package/dot_local/bin/executable_open +38 -0
  359. package/dot_local/bin/executable_pw +27 -0
  360. package/dot_local/bin/executable_rec-start +46 -0
  361. package/dot_local/bin/executable_rec-stop +35 -0
  362. package/dot_local/bin/executable_regex +132 -0
  363. package/dot_local/bin/executable_start-niri +8 -0
  364. package/dot_local/bin/executable_tmux-sessionizer +314 -0
  365. package/dot_local/bin/executable_tour +177 -0
  366. package/dot_local/bin/executable_up +23 -0
  367. package/dot_local/bin/executable_update +142 -0
  368. package/dot_local/bin/executable_uuid +87 -0
  369. package/dot_local/bin/executable_win +32 -0
  370. package/dot_local/bin/executable_yamlv +57 -0
  371. package/dot_local/share/bash-completion/completions/dot +72 -0
  372. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  373. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  374. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  375. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  376. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  382. package/dot_local/share/man/man1/dot.1 +149 -0
  383. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  384. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  385. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  386. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  387. package/dot_local/share/zsh/completions/.keep +0 -0
  388. package/dot_local/share/zsh/completions/_dot +283 -0
  389. package/install.sh +350 -0
  390. package/package.json +1 -1
  391. package/scripts/ci/check-copyright-headers.sh +96 -0
  392. package/scripts/ci/check-dangerous-chmod.sh +19 -0
  393. package/scripts/ci/check-deps-dev.sh +236 -0
  394. package/scripts/ci/check-insecure-tls.sh +61 -0
  395. package/scripts/ci/check-regression-traceability.sh +67 -0
  396. package/scripts/ci/check-shell-preamble.sh +106 -0
  397. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  398. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  399. package/scripts/ci/run-coverage.sh +362 -0
  400. package/scripts/ci/validate-chezmoidata.sh +25 -0
  401. package/scripts/ci/validate-ci-config.sh +224 -0
  402. package/scripts/demo/record.sh +42 -0
  403. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  404. package/scripts/diagnostics/alias-governance.sh +137 -0
  405. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  406. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  407. package/scripts/diagnostics/benchmark.sh +381 -0
  408. package/scripts/diagnostics/conflicts.sh +72 -0
  409. package/scripts/diagnostics/doctor-unified.sh +38 -0
  410. package/scripts/diagnostics/doctor.sh +709 -0
  411. package/scripts/diagnostics/drift-dashboard.sh +201 -0
  412. package/scripts/diagnostics/health.sh +614 -0
  413. package/scripts/diagnostics/history-analysis.sh +85 -0
  414. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  415. package/scripts/diagnostics/perf.sh +452 -0
  416. package/scripts/diagnostics/scorecard.sh +118 -0
  417. package/scripts/diagnostics/secret-governance.sh +58 -0
  418. package/scripts/diagnostics/security-score.sh +438 -0
  419. package/scripts/diagnostics/smoke-test.sh +87 -0
  420. package/scripts/diagnostics/snapshot.sh +89 -0
  421. package/scripts/diagnostics/verify.sh +107 -0
  422. package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
  423. package/scripts/diagnostics/version-locks.sh +79 -0
  424. package/scripts/diagnostics/workstation-attestation.sh +186 -0
  425. package/scripts/docs/build-manual.sh +883 -0
  426. package/scripts/docs/check-manual.sh +213 -0
  427. package/scripts/dot/commands/agent.sh +474 -0
  428. package/scripts/dot/commands/ai.sh +481 -0
  429. package/scripts/dot/commands/aliases.sh +250 -0
  430. package/scripts/dot/commands/appearance.sh +80 -0
  431. package/scripts/dot/commands/core.sh +185 -0
  432. package/scripts/dot/commands/diagnostics.sh +229 -0
  433. package/scripts/dot/commands/fleet.sh +399 -0
  434. package/scripts/dot/commands/lint.sh +177 -0
  435. package/scripts/dot/commands/manual.sh +168 -0
  436. package/scripts/dot/commands/meta.sh +248 -0
  437. package/scripts/dot/commands/patterns.sh +54 -0
  438. package/scripts/dot/commands/restore.sh +231 -0
  439. package/scripts/dot/commands/secrets.sh +223 -0
  440. package/scripts/dot/commands/security.sh +76 -0
  441. package/scripts/dot/commands/tools.sh +469 -0
  442. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  443. package/scripts/dot/lib/bento.sh +50 -0
  444. package/scripts/dot/lib/log.sh +200 -0
  445. package/scripts/dot/lib/platform.sh +99 -0
  446. package/scripts/dot/lib/ui.sh +518 -0
  447. package/scripts/dot/lib/utils.sh +377 -0
  448. package/scripts/fonts/install-nerd-fonts.sh +68 -0
  449. package/scripts/fonts/patch-fonts.sh +35 -0
  450. package/scripts/git-hooks/install.sh +11 -0
  451. package/scripts/git-hooks/pre-commit +12 -0
  452. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  453. package/scripts/git-hooks/pre-push +92 -0
  454. package/scripts/git-hooks/prepare-commit-msg +29 -0
  455. package/scripts/lib/secrets_provider.sh +158 -0
  456. package/scripts/maintenance/check-updates.sh +131 -0
  457. package/scripts/ops/ai-setup.sh +55 -0
  458. package/scripts/ops/bundle.sh +77 -0
  459. package/scripts/ops/chaos.sh +49 -0
  460. package/scripts/ops/chezmoi-apply.sh +270 -0
  461. package/scripts/ops/chezmoi-diff.sh +15 -0
  462. package/scripts/ops/chezmoi-remove.sh +45 -0
  463. package/scripts/ops/chezmoi-update.sh +48 -0
  464. package/scripts/ops/heal-chezmoi.sh +86 -0
  465. package/scripts/ops/heal-system.sh +128 -0
  466. package/scripts/ops/heal-tools.sh +340 -0
  467. package/scripts/ops/heal.sh +222 -0
  468. package/scripts/ops/post-apply-repair.sh +106 -0
  469. package/scripts/ops/prewarm.sh +127 -0
  470. package/scripts/ops/release.sh +252 -0
  471. package/scripts/ops/rollback.sh +589 -0
  472. package/scripts/ops/setup.sh +137 -0
  473. package/scripts/ops/teleport.sh +33 -0
  474. package/scripts/qa/coverage-baseline.sh +60 -0
  475. package/scripts/qa/docs-coverage.sh +111 -0
  476. package/scripts/qa/powershell-contract.ps1 +95 -0
  477. package/scripts/qa/reliability-audit.sh +138 -0
  478. package/scripts/qa/traceability-coverage.sh +116 -0
  479. package/scripts/qa/validate-examples.sh +26 -0
  480. package/scripts/qa/wsl-contract.sh +11 -0
  481. package/scripts/release/package-policy-bundles.sh +125 -0
  482. package/scripts/secrets/age-init.sh +70 -0
  483. package/scripts/secrets/create-secrets-file.sh +45 -0
  484. package/scripts/secrets/encrypt-ssh-key.sh +43 -0
  485. package/scripts/security/backup.sh +57 -0
  486. package/scripts/security/dns-doh.sh +51 -0
  487. package/scripts/security/encryption-check.sh +54 -0
  488. package/scripts/security/enforce-policies.sh +334 -0
  489. package/scripts/security/firewall.sh +90 -0
  490. package/scripts/security/lock-configs.sh +57 -0
  491. package/scripts/security/lock-screen.sh +55 -0
  492. package/scripts/security/manage-secrets.sh +428 -0
  493. package/scripts/security/ssh-cert.sh +203 -0
  494. package/scripts/security/telemetry-kill.sh +50 -0
  495. package/scripts/security/usb-safety.sh +51 -0
  496. package/scripts/theme/apply-gnome-theme.sh +328 -0
  497. package/scripts/theme/extract-theme.py +677 -0
  498. package/scripts/theme/install-boot-logo.sh +62 -0
  499. package/scripts/theme/install-catppuccin-themes.sh +370 -0
  500. package/scripts/theme/install-cursors.sh +25 -0
  501. package/scripts/theme/install-file-icons.sh +26 -0
  502. package/scripts/theme/install-grub-theme.sh +61 -0
  503. package/scripts/theme/install-lock-icon.sh +30 -0
  504. package/scripts/theme/merge-wallpaper.sh +145 -0
  505. package/scripts/theme/rebuild-themes.sh +309 -0
  506. package/scripts/theme/switch.sh +431 -0
  507. package/scripts/theme/wallpaper-rotate.sh +136 -0
  508. package/scripts/theme/wallpaper-sync.sh +397 -0
  509. package/scripts/tools/cmatrix.sh +21 -0
  510. package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
  511. package/scripts/tools/emoji-picker.sh +48 -0
  512. package/scripts/tools/figlet-banner.sh +18 -0
  513. package/scripts/tools/log-rotate.sh +30 -0
  514. package/scripts/tools/lolcat-wrap.sh +19 -0
  515. package/scripts/tools/pipes.sh +48 -0
  516. package/scripts/tuning/linux.sh +185 -0
  517. package/scripts/tuning/macos.sh +55 -0
  518. package/scripts/uninstall.sh +85 -0
  519. package/scripts/version-sync.sh +487 -0
  520. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  521. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  522. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  523. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  524. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  525. package/templates/projects/go/README.md +4 -0
  526. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  527. package/templates/projects/go/go.sum +0 -0
  528. package/templates/projects/molecule/README.md +7 -0
  529. package/templates/projects/molecule/converge.yml +7 -0
  530. package/templates/projects/molecule/molecule.yml +16 -0
  531. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  532. package/templates/projects/node/README.md +4 -0
  533. package/templates/projects/node/package-lock.json +12 -0
  534. package/templates/projects/node/src/index.js +1 -0
  535. package/templates/projects/packer/README.md +15 -0
  536. package/templates/projects/packer/main.pkr.hcl +15 -0
  537. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  538. package/templates/projects/python/README.md +4 -0
  539. package/templates/projects/python/pyproject.toml +15 -0
  540. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  541. package/templates/projects/python/tests/test_basic.py +1 -0
  542. package/docs/ARCHITECTURE.md +0 -62
  543. package/docs/COMPLIANCE.md +0 -47
  544. package/docs/OPERATIONS.md +0 -103
  545. package/docs/PR_DESCRIPTION.md +0 -150
  546. package/docs/ROADMAP_legacy.md +0 -556
  547. package/docs/SECURITY_CHECKLIST.md +0 -25
  548. package/docs/TASK.md +0 -99
  549. package/docs/WALKTHROUGH.md +0 -46
  550. package/scripts/backup.sh +0 -142
  551. package/scripts/banner.sh +0 -20
  552. package/scripts/benchmark.sh +0 -20
  553. package/scripts/build.sh +0 -41
  554. package/scripts/clean.sh +0 -31
  555. package/scripts/compile.sh +0 -54
  556. package/scripts/copy.sh +0 -108
  557. package/scripts/doctor.sh +0 -79
  558. package/scripts/dotfiles.sh +0 -63
  559. package/scripts/download.sh +0 -35
  560. package/scripts/help.sh +0 -57
  561. package/scripts/lock-configs.sh +0 -57
  562. package/scripts/package.sh +0 -46
  563. package/scripts/ssh.sh +0 -55
  564. package/scripts/teleport.sh +0 -23
  565. package/scripts/test-aliases.sh +0 -25
  566. package/scripts/test_smoke.sh +0 -88
  567. package/scripts/unpack.sh +0 -28
@@ -0,0 +1,156 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # CI Composite Actions
6
+
7
+ This page documents the repo-local composite actions under
8
+ `.github/actions/`. These exist so the most-repeated CI setup blocks
9
+ have one canonical implementation, one cache key shape, and one place
10
+ to bump pins. Managed under
11
+ [#879](https://github.com/sebastienrousseau/dotfiles/issues/879).
12
+
13
+ ## Available actions
14
+
15
+ ### `setup-chezmoi`
16
+
17
+ Path: `.github/actions/setup-chezmoi/action.yml`
18
+
19
+ Installs the pinned `chezmoi` binary (using the SHA256-verified
20
+ installer at `scripts/ci/install-chezmoi-verified.sh` when the repo is
21
+ checked out, falling back to `get.chezmoi.io` otherwise), caches the
22
+ result, and appends the bin-dir to `$GITHUB_PATH`.
23
+
24
+ ```yaml
25
+ - name: Setup Chezmoi
26
+ uses: ./.github/actions/setup-chezmoi
27
+ # `version` defaults to env.CHEZMOI_VERSION. Override explicitly when
28
+ # the calling workflow has no env block (e.g. drift-detection):
29
+ with:
30
+ version: '2.70.3'
31
+ ```
32
+
33
+ Inputs:
34
+
35
+ | Name | Default | Purpose |
36
+ |---|---|---|
37
+ | `version` | `env.CHEZMOI_VERSION` | Pinned release tag (no leading `v`). |
38
+ | `cache` | `true` | When `false`, skip `actions/cache`. |
39
+ | `cache-key-prefix` | `chezmoi` | Override if a workflow wants a private cache scope. |
40
+ | `bin-dir` | `~/.local/bin` | Install location. |
41
+
42
+ Outputs:
43
+
44
+ | Name | Purpose |
45
+ |---|---|
46
+ | `version` | The version that ended up installed. |
47
+ | `path` | Absolute path to the chezmoi binary. |
48
+
49
+ Cache key shape: `<prefix>-<runner.os>-<runner.arch>-<version>`.
50
+ `runner.arch` is included explicitly so the Apple-Silicon (arm64) and
51
+ Intel (x64) macOS runners don't share a cache entry — that previously
52
+ caused subtle binary-mismatch failures.
53
+
54
+ ### `setup-mise`
55
+
56
+ Path: `.github/actions/setup-mise/action.yml`
57
+
58
+ Installs `mise` (jdx/mise) and optionally runs `mise install` against
59
+ `mise.toml` to materialise the managed toolchain. Caches both the
60
+ mise binary and `~/.local/share/mise` (the tool install root, keyed
61
+ by lockfile hash).
62
+
63
+ ```yaml
64
+ - name: Setup mise
65
+ uses: ./.github/actions/setup-mise
66
+ with:
67
+ install-tools: 'true'
68
+ ```
69
+
70
+ Inputs:
71
+
72
+ | Name | Default | Purpose |
73
+ |---|---|---|
74
+ | `version` | `latest` | mise version to install. Specify a pinned version to enable bin caching. |
75
+ | `cache` | `true` | Cache the mise binary + tool root. |
76
+ | `cache-key-prefix` | `mise` | Override the cache scope. |
77
+ | `install-tools` | `false` | When `true`, run `mise install` after setup. |
78
+ | `bin-dir` | `~/.local/bin` | Install location for the mise binary. |
79
+
80
+ Outputs: `version` (installed mise version) and `path` (absolute path
81
+ to the mise binary).
82
+
83
+ ## Why composite actions (vs reusable workflows)
84
+
85
+ The repo already uses reusable workflows for big-grain CI steps
86
+ (`reusable-shell-lint.yml`, `reusable-test-suite.yml`, etc.). Composite
87
+ actions cover a different need:
88
+
89
+ - **Reusable workflows** wrap a whole job — same triggers, same runner,
90
+ same job name. Useful for "lint shell" or "run the test suite".
91
+ - **Composite actions** wrap a step sequence. Cheap to drop into any
92
+ job without restructuring the job graph.
93
+
94
+ Setup steps (install + cache + path) are the textbook composite-action
95
+ case: they're short, every caller wants the same behaviour, and
96
+ inlining them everywhere creates exactly the duplication this issue
97
+ called out.
98
+
99
+ ## Current adopters
100
+
101
+ `setup-chezmoi` is wired into:
102
+
103
+ | Workflow | Job(s) |
104
+ |---|---|
105
+ | `ci-enforced.yml` | `test-matrix` |
106
+ | `ci.yml` | `test-linux`, `test-macos`, `quality-idempotency`, `performance` |
107
+ | `nightly.yml` | `extended-os-matrix`, `nightly-perf-bench` |
108
+ | `drift-detection.yml` | `drift-scan` |
109
+
110
+ Total: 8 call sites converted. The net workflow LOC delta is
111
+ ~−34 lines (52 deletions, 18 additions); ongoing additions to either
112
+ workflow set will widen the gap.
113
+
114
+ `setup-mise` ships ready for use but has zero current callers because
115
+ no workflow currently installs mise (the maintainer relies on it
116
+ locally only). When a future workflow needs `cargo`, `bun`, `go`, or
117
+ `rust` toolchains via the canonical version manager, this composite
118
+ is the canonical entry point.
119
+
120
+ ## Pinning policy
121
+
122
+ Both composite actions internally pin every external action they use
123
+ to a 40-char commit SHA (e.g.
124
+ `actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5`).
125
+ Dependabot picks these up via the standard `github-actions` ecosystem
126
+ configuration in `.github/dependabot.yml`.
127
+
128
+ ## Bumping a pin
129
+
130
+ To upgrade `chezmoi` for every CI job at once:
131
+
132
+ ```bash
133
+ # Find the new release:
134
+ gh api repos/twpayne/chezmoi/releases/latest --jq '.tag_name'
135
+
136
+ # Update the three workflow-level env declarations:
137
+ for f in .github/workflows/{ci.yml,ci-enforced.yml,nightly.yml}; do
138
+ sed -i.bak 's/CHEZMOI_VERSION: "[^"]*"/CHEZMOI_VERSION: "X.Y.Z"/' "$f"
139
+ rm "$f.bak"
140
+ done
141
+
142
+ # Drift-detection has its own pin (no env block):
143
+ sed -i.bak "s/version: '[^']*'/version: 'X.Y.Z'/" .github/workflows/drift-detection.yml
144
+ rm .github/workflows/drift-detection.yml.bak
145
+ ```
146
+
147
+ Or rely on `update-deps.yml`, which already automates the env-block
148
+ bump on a weekly schedule.
149
+
150
+ ## References
151
+
152
+ - `.github/actions/setup-chezmoi/action.yml`
153
+ - `.github/actions/setup-mise/action.yml`
154
+ - `scripts/ci/install-chezmoi-verified.sh` — the SHA-pinned installer
155
+ the chezmoi composite prefers when available.
156
+ - Issue [#879](https://github.com/sebastienrousseau/dotfiles/issues/879).
@@ -0,0 +1,123 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Zsh Completion Cache Lifecycle
6
+
7
+ This page documents how zsh completion compilation works in this repo
8
+ and how to force a rebuild. Managed under
9
+ [#864](https://github.com/sebastienrousseau/dotfiles/issues/864).
10
+
11
+ ## The Pieces
12
+
13
+ Three caches cooperate to keep `compinit` fast without compromising
14
+ correctness:
15
+
16
+ 1. **The compinit dump** —
17
+ `$XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION`. Built by
18
+ `compinit -d <path>` from the fpath corpus. Encodes which file
19
+ provides each completion function. Per-zsh-version so an OS upgrade
20
+ doesn't silently serve a stale binary index.
21
+
22
+ 2. **The compinit dump bytecode** — `<dump>.zwc`. Built by
23
+ `zcompile` in the background after the dump is rebuilt. Zsh prefers
24
+ the `.zwc` form on subsequent shells, skipping re-parse.
25
+
26
+ 3. **fpath bytecode siblings** — `_<tool>.zwc` next to each
27
+ `_<tool>` source file under `~/.local/share/zsh/completions/`.
28
+ Built once per chezmoi apply by
29
+ `run_onchange_after_zcompile-completions.sh.tmpl` (so this happens
30
+ *outside* the critical shell-start path). Zsh prefers the `.zwc`
31
+ when autoloading the corresponding completion function.
32
+
33
+ ## Flow on Shell Start
34
+
35
+ ```
36
+ zsh starts
37
+ → sources rc.d (no compinit yet)
38
+ → registers a `preexec` (or `precmd`) hook
39
+ → returns to prompt
40
+ user presses Tab (or `precmd` fires)
41
+ → `compinit -d $XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION`
42
+ or `compinit -C -d <dump>` if the dump is < 24 hours old
43
+ → background `zcompile` of the dump
44
+ → first tab-completion uses the precompiled `.zwc` for each tool
45
+ ```
46
+
47
+ ## Flow on Chezmoi Apply
48
+
49
+ ```
50
+ chezmoi apply
51
+ → if completion sources changed, run_onchange fires
52
+ run_onchange_after_zcompile-completions.sh.tmpl
53
+ → walks ~/.local/share/zsh/completions/
54
+ → for each _<tool> file whose .zwc is missing or stale:
55
+ zsh -c "zcompile <file>"
56
+ → reports compiled=N skipped=M
57
+ ```
58
+
59
+ ## Configuration Surface
60
+
61
+ | Variable | Default | Purpose |
62
+ |---|---|---|
63
+ | `DOTFILES_ENABLE_COMPINIT` | 1 on `laptop`/`desktop` profiles, 0 elsewhere | Whether to load the completion subsystem at all. Non-laptop profiles skip the runtime cost but still benefit from precompiled `.zwc` files if present. |
64
+ | `DOTFILES_DEFER_COMPINIT` | 1 | When 1, compinit runs on first `preexec`. When 0, runs on `precmd`. |
65
+ | `DOTFILES_FAST` | 0 | When 1, the entire completion path is skipped. |
66
+ | `DOTFILES_ULTRA_FAST` | 0 | Same as `DOTFILES_FAST` but more aggressive. |
67
+ | `DOTFILES_SKIP_ZCOMPILE` | 0 | When 1, the run_onchange hook does not precompile fpath files. Used in CI / minimal images where bytecode isn't needed. |
68
+ | `XDG_CACHE_HOME` | `$HOME/.cache` | Standard XDG override; the dump path is `$XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION`. |
69
+
70
+ ## Force Rebuild
71
+
72
+ When completions go stale (e.g., after a tool upgrade):
73
+
74
+ ```bash
75
+ # Invalidate the compinit dump — next shell rebuilds it.
76
+ rm -f "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/zcompdump-${ZSH_VERSION}"
77
+ rm -f "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/zcompdump-${ZSH_VERSION}.zwc"
78
+
79
+ # Force regeneration of fpath bytecode siblings:
80
+ find ~/.local/share/zsh/completions -name '*.zwc' -delete
81
+ chezmoi apply ~ # re-runs the run_onchange hook
82
+ ```
83
+
84
+ Or, equivalently, `dot heal` (which calls both in sequence).
85
+
86
+ ## Measured Cost
87
+
88
+ The current dotfiles ship with `compinit` deferred to first-prompt,
89
+ which means shell *startup* time is already nearly minimal — zsh
90
+ doesn't parse the fpath corpus until tab-completion is invoked. The
91
+ precompiled `.zwc` files cut down the *first tab-completion* latency
92
+ per tool, not shell-start latency. On a 2026 M-series macOS host the
93
+ P50 for `time zsh -i -c exit` measured at 39 ms before this change
94
+ and 39 ms after — the change pays off when the user starts typing,
95
+ not before.
96
+
97
+ This makes the lifecycle policy still worth shipping:
98
+
99
+ - Cleaner cache layout (XDG-cache, version-keyed).
100
+ - Bytecode siblings auto-picked on non-laptop profiles (which skip
101
+ compinit entirely) so completion is still fast even without the
102
+ full subsystem.
103
+ - A documented force-rebuild path.
104
+
105
+ ## Skip Rules
106
+
107
+ The run_onchange hook skips itself when:
108
+
109
+ - `DOTFILES_SKIP_ZCOMPILE=1` (CI / minimal images).
110
+ - `zsh` is not on PATH (servers without an interactive shell).
111
+ - `~/.local/share/zsh/completions/` doesn't exist.
112
+
113
+ System fpath directories (Homebrew, `/usr/local/share/zsh`) are
114
+ intentionally NOT precompiled — the package manager already manages
115
+ their lifecycle.
116
+
117
+ ## References
118
+
119
+ - [`dot_config/zsh/rc.d/30-options.zsh.tmpl`](../../dot_config/zsh/rc.d/30-options.zsh.tmpl) — the deferred-compinit logic.
120
+ - [`run_onchange_after_zcompile-completions.sh.tmpl`](../../run_onchange_after_zcompile-completions.sh.tmpl) — the apply-time precompile hook.
121
+ - [`zsh` completion docs](https://zsh.sourceforge.io/Doc/Release/Completion-System.html).
122
+ - ADR-002 (Shell Performance Optimization).
123
+ - Issue [#864](https://github.com/sebastienrousseau/dotfiles/issues/864).
@@ -0,0 +1,148 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Code Coverage
6
+
7
+ This page documents how coverage is measured, what the threshold is,
8
+ how to run it locally, and how to triage a regression. Closes the
9
+ docs slice of [#856](https://github.com/sebastienrousseau/dotfiles/issues/856).
10
+
11
+ ## Why pure bash xtrace (and not kcov)
12
+
13
+ The repo's primary code surface is bash (~140 shell files under
14
+ `scripts/`, hundreds more in `.chezmoitemplates/`). Standard
15
+ language-specific coverage tools (`coverage.py`, `cargo tarpaulin`,
16
+ `go cover`) don't apply.
17
+
18
+ We originally targeted [kcov](https://github.com/SimonKagstrom/kcov),
19
+ but kcov v43 on Ubuntu 24.04 + bash 5.2 cannot produce bash-script
20
+ coverage in any configuration we tried:
21
+
22
+ - Without bash debug symbols, kcov's ptrace backend fails to resolve
23
+ breakpoints and emits zero lines.
24
+ - With `bash-dbgsym` installed, kcov switches into C-binary tracking
25
+ mode and emits coverage entries for bash's internal C headers
26
+ (`ctype.h`, `stdio.h`, `wchar.h`) instead of the `.sh` files we
27
+ want measured.
28
+
29
+ Instead we use bash's own xtrace mechanism:
30
+
31
+ ```bash
32
+ PS4='+@COV@:${LINENO}:${BASH_SOURCE}:@ ' # encode line + source
33
+ BASH_ENV=/tmp/cov-setup.sh # `set -x` in every bash
34
+ bash test.sh 2>traces/test.trace # capture stderr per test
35
+ ```
36
+
37
+ `BASH_ENV` is inherited by every non-interactive bash invocation, so
38
+ subprocess `bash $SCRIPT_FILE` calls inside tests are also traced
39
+ automatically. The runner parses every trace for `:LINENO:FILE:`
40
+ matches and emits standard `lcov.info` that Codecov ingests natively.
41
+
42
+ ## Where it runs
43
+
44
+ | Surface | What runs |
45
+ |---|---|
46
+ | **PR + push to master** | `.github/workflows/coverage.yml` → `Coverage / kcov` job → uploads lcov.info to Codecov and fails the build below `MIN_COVERAGE_PCT` (currently `0`, ratcheted up each slice). |
47
+ | **Local dev** | `bash scripts/ci/run-coverage.sh` — works on Linux + macOS (xtrace is a bash primitive, no platform tools needed). |
48
+ | **macOS dev** | Supported. xtrace-based instrumentation runs on macOS bash 3.2+ and Homebrew bash 5.x. |
49
+
50
+ ## The current floor
51
+
52
+ `MIN_COVERAGE_PCT=0` in `.github/workflows/coverage.yml`. Slice 1
53
+ of [#883](https://github.com/sebastienrousseau/dotfiles/issues/883)
54
+ established the baseline at **~2.7% measured** (~613 of ~22 500 lines
55
+ across 231 files). Each subsequent slice raises the floor by ~10–15
56
+ percentage points until the target of ≥95% is reached.
57
+
58
+ To tighten:
59
+
60
+ 1. Land a slice that bumps measured coverage.
61
+ 2. Wait until two-three Codecov runs report a stable value (no
62
+ per-PR jitter).
63
+ 3. Edit `MIN_COVERAGE_PCT` upward, ideally by ≤15 percentage points
64
+ per bump.
65
+ 4. Note the floor change in the commit message + this page.
66
+
67
+ ## Running locally
68
+
69
+ ```bash
70
+ bash scripts/ci/run-coverage.sh # Linux or macOS
71
+
72
+ # Output:
73
+ # coverage/traces/<file>.trace — per-test xtrace logs
74
+ # coverage/lcov.info — lcov-format report Codecov ingests
75
+ ```
76
+
77
+ Open `coverage/lcov.info` in any lcov visualizer
78
+ (`genhtml coverage/lcov.info -o coverage/html`) for the per-file
79
+ heatmap.
80
+
81
+ ## Triaging a regression
82
+
83
+ When the `Coverage / kcov` PR check fails:
84
+
85
+ 1. Pull the workflow's `coverage-lcov` artifact (30-day retention).
86
+ 2. Compare against the previous master run by downloading its
87
+ `coverage-lcov` artifact too.
88
+ 3. Identify the file(s) where the line-coverage dropped.
89
+ 4. Either:
90
+ - Add tests covering the new code, or
91
+ - If the new code is provably unreachable in the test corpus
92
+ (e.g., a platform-specific branch only macOS tests exercise),
93
+ update the test suite to invoke it. Don't carve out global
94
+ exemptions — they accumulate.
95
+
96
+ ## Why not 100% yet
97
+
98
+ The previous workflow advertised "100% Coverage" without measuring
99
+ anything. Going from `0% measured` to `100% enforced` overnight is a
100
+ recipe for either:
101
+
102
+ - Suppressing the gate to ship anything ("just lower the threshold,
103
+ we'll fix it later"), or
104
+ - Padding the test suite with assertions that don't actually
105
+ exercise the code under test.
106
+
107
+ So this page documents a graduated approach: start with a measured
108
+ floor at 50%, ratchet upward as the test surface catches up to the
109
+ code surface. The previous aspirational "100%" labels in CI/job
110
+ names + branch-protection contexts have been renamed to match
111
+ reality (`Test / Unit Tests` instead of `Test / Unit Tests (100%
112
+ Coverage)`).
113
+
114
+ ## Codecov integration
115
+
116
+ Codecov (free OSS tier) is the canonical badge + PR-comment source.
117
+ The upload uses the
118
+ [`codecov/codecov-action`](https://github.com/codecov/codecov-action)
119
+ in tokenless mode (works for public repos out of the box; private
120
+ repos need `CODECOV_TOKEN`).
121
+
122
+ The Codecov GitHub App posts a status check on each PR with the
123
+ line-by-line diff coverage. Combine with this workflow's job-level
124
+ threshold to get two independent signals.
125
+
126
+ ## Excluded paths
127
+
128
+ `scripts/ci/run-coverage.sh` excludes:
129
+
130
+ - `tests/**` itself (don't measure coverage of the tests).
131
+ - `.git/`, `node_modules/`.
132
+ - Paths matched by `KCOV_EXCLUDE_PATTERN` (defaults reasonable).
133
+
134
+ Included paths (`KCOV_INCLUDE_PATH`):
135
+
136
+ - `scripts/`
137
+ - `.chezmoitemplates/functions/`
138
+ - `dot_local/bin/`
139
+
140
+ Adjust via the env vars at the top of `run-coverage.sh`.
141
+
142
+ ## References
143
+
144
+ - [Bash xtrace + PS4 + BASH_ENV docs](https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html).
145
+ - [`scripts/ci/run-coverage.sh`](../../scripts/ci/run-coverage.sh).
146
+ - [`.github/workflows/coverage.yml`](../../.github/workflows/coverage.yml).
147
+ - Issue [#856](https://github.com/sebastienrousseau/dotfiles/issues/856) (closed) /
148
+ [#883](https://github.com/sebastienrousseau/dotfiles/issues/883) (coverage roadmap).
@@ -0,0 +1,107 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Drift Detection & Remediation
6
+
7
+ This page documents how this repo detects drift between the chezmoi
8
+ source-of-truth and what's actually deployed on a host, how to read
9
+ the report, and how to remediate. Managed under
10
+ [#875](https://github.com/sebastienrousseau/dotfiles/issues/875).
11
+
12
+ ## What "drift" means here
13
+
14
+ Four distinct classes are tracked. The same `dot drift` command (and
15
+ the nightly CI workflow) surfaces all four.
16
+
17
+ | Class | Meaning | How to detect | Typical fix |
18
+ |---|---|---|---|
19
+ | **Managed drift** | A chezmoi-managed file's deployed copy differs from what a fresh `chezmoi apply` would produce. The standard case. | `chezmoi status` (M / MM / A / R rows) | Either update the source so apply is idempotent, or accept the deployed change and re-add. |
20
+ | **Untracked source** | The chezmoi source tree contains files git doesn't know about — usually in-progress local edits that haven't been committed. | `git -C <source-dir> ls-files --others --exclude-standard` | Commit, stash, or `.gitignore` the file. |
21
+ | **Orphan deployed** | A file under `$HOME` was previously chezmoi-managed but the source has since been deleted. Chezmoi no longer claims it, so a fresh apply leaves it behind silently. | Inventoried in `${XDG_STATE_HOME}/dotfiles/orphans` (populated by `dot heal` / `dot drift`) | `chezmoi remove --force` the path, or re-add the source if the file is still wanted. |
22
+ | **Stale source** | The deployed file is *newer* than its source. The next `chezmoi apply` would silently revert the user's hand-edit. Reverse-drift trap. | Compare mtimes for each managed target vs the resolved source-path | Promote the deployed change into the source (`chezmoi re-add`) or revert the deployed file. |
23
+
24
+ ## Reading the report
25
+
26
+ ```bash
27
+ dot drift # human-readable (uses the ui.sh formatting)
28
+ dot drift --json # single JSON object — used by the nightly workflow
29
+ dot drift --diff # also print `chezmoi diff` for managed drift
30
+ ```
31
+
32
+ JSON shape:
33
+
34
+ ```json
35
+ {
36
+ "managed_drift": 0,
37
+ "untracked_source": 0,
38
+ "orphan_deployed": 0,
39
+ "stale_source": 0,
40
+ "total": 0
41
+ }
42
+ ```
43
+
44
+ Exit code: `0` if every class is clean; `1` if any drift is found;
45
+ `2` if a prerequisite (chezmoi, git) is missing.
46
+
47
+ ## How the nightly check works
48
+
49
+ `.github/workflows/drift-detection.yml` runs `dot drift --json` against
50
+ a fresh checkout of `master` every day at 04:00 UTC. If `total != 0`
51
+ it opens (or updates) a tracking issue labelled
52
+ `type:chore + priority:medium` with the JSON summary, full
53
+ `chezmoi diff`, and `chezmoi status` attached as a workflow artifact.
54
+
55
+ The workflow itself ignores the failing exit code (`|| true`) for the
56
+ dashboard step — the actionable signal is the issue, not a red CI
57
+ indicator.
58
+
59
+ ## Force a local drift check
60
+
61
+ ```bash
62
+ dot drift # default — what you'd run before opening a PR
63
+ dot drift --json | jq '.' # for scripting / dashboards
64
+ ```
65
+
66
+ To force a full re-comparison after a tool upgrade or a force-apply:
67
+
68
+ ```bash
69
+ chezmoi apply --refresh-externals # refetch external sources
70
+ dot drift # re-scan
71
+ ```
72
+
73
+ ## Historical incidents
74
+
75
+ ### 2026-05-12 — `core.hooksPath` drift
76
+
77
+ The deployed `~/.gitconfig` contained a `hooksPath = ~/.git-templates/hooks`
78
+ line that wasn't in `dot_gitconfig.tmpl`. The line had been added
79
+ directly to the deployed file (manually, not via chezmoi), then sat
80
+ silently for weeks while the global `commit-msg` hook (at
81
+ `~/.config/git/hooks/commit-msg`) never fired — because `hooksPath`
82
+ was pointing at an empty directory. The result: every commit
83
+ authored on this machine silently shipped without the
84
+ `Assisted-by:` trailer mandated by `dot_claude/CLAUDE.md`.
85
+
86
+ Detection failure: no nightly drift check existed at the time.
87
+
88
+ Resolution: commit `f060683b` brought `hooksPath` into the chezmoi
89
+ template; this drift class is exactly what the new `stale_source`
90
+ signal catches going forward.
91
+
92
+ This incident is the canonical worked example for why the four-class
93
+ report exists rather than just `chezmoi status`.
94
+
95
+ ## Configuration surface
96
+
97
+ | Variable | Default | Purpose |
98
+ |---|---|---|
99
+ | `DOTFILES_DRIFT_SHOW_DIFF` | `0` | When `1`, append `chezmoi diff` (excluding scripts/install/tests) to the report. Equivalent to `--diff`. |
100
+
101
+ ## References
102
+
103
+ - `scripts/diagnostics/drift-dashboard.sh` — the dashboard itself.
104
+ - `.github/workflows/drift-detection.yml` — the nightly scanner.
105
+ - `tests/unit/diagnostics/test_drift_dashboard.sh` — JSON contract test.
106
+ - `dot heal` / `dot rollback` — drift remediation commands.
107
+ - Issue [#875](https://github.com/sebastienrousseau/dotfiles/issues/875).
@@ -0,0 +1,63 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Dotfiles Maintenance Runbook
6
+
7
+ This runbook captures recovery and release maintenance operations for this repository.
8
+
9
+ ## Signed History Recovery (February 19, 2026)
10
+
11
+ **Purpose:** Recover from strict signature enforcement failures caused by legacy/non-compliant commit history.
12
+
13
+ **When to use:**
14
+
15
+ - Pushes are blocked by signature policy on historical commits.
16
+ - Merge ancestry contains commits that can't be validated by the current principal/key policy.
17
+
18
+ **Procedure:**
19
+
20
+ 1. Create a backup ref for current `master`.
21
+ 2. Build a rewritten signed baseline commit from the current tree.
22
+ 3. Push the rewritten branch to remote.
23
+ 4. Temporarily allow force-push on `master` protections/rulesets.
24
+ 5. Force-update `master` to the rewritten signed baseline.
25
+ 6. Disable force-push again immediately.
26
+ 7. Re-run CI and verify required checks are green.
27
+ 8. Repoint the release tag/target as needed.
28
+
29
+ **Verification commands:**
30
+
31
+ ```bash
32
+ git verify-commit HEAD
33
+ gh run list --workflow ci.yml --branch master --limit 1
34
+ gh release view v0.2.501 --json tagName,targetCommitish,url
35
+ ```
36
+
37
+ ## Release Closeout Checklist
38
+
39
+ For every release update:
40
+
41
+ 1. `master` branch is clean and synced.
42
+ 2. CI is green on the release commit.
43
+ 3. Annotated release tag points to the intended commit.
44
+ 4. GitHub release target is correct (`master` or explicit commit).
45
+ 5. Branch protections/rulesets are restored to strict state.
46
+ 6. Local apply has completed:
47
+
48
+ ```bash
49
+ CHEZMOI_SOURCE_DIR="$HOME/.dotfiles" ./dot_local/bin/executable_dot apply
50
+ ```
51
+
52
+ ## Security Scan Guardrails
53
+
54
+ We prevent gitleaks historical-scan regressions with:
55
+
56
+ - Shallow checkout (`fetch-depth: 1`, `fetch-tags: false`) in gitleaks jobs.
57
+ - A workflow-dispatch guard script: `scripts/ci/guard-gitleaks-checkout.sh`.
58
+
59
+ **Manual verification:**
60
+
61
+ ```bash
62
+ bash scripts/ci/guard-gitleaks-checkout.sh
63
+ ```