@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,55 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Security Release Checklist
6
+
7
+ Use this checklist before cutting any new release (e.g., `v0.x.x`) to ensure supply-chain integrity.
8
+
9
+ ## 1. Supply Chain & Installer
10
+
11
+ - [ ] **Pinned Version**: Update `install.sh` `VERSION` variable to match the release tag.
12
+ - [ ] **Docs Sync**: Ensure `README.md` and `.github/PULL_REQUEST_TEMPLATE.md` installer URLs point to the new tag (not `main`).
13
+ - [ ] **Clean Build**: Verify `install.sh` does not curl random scripts from third parties without pinning.
14
+ - [ ] **SOUP Register**: Review [SOUP_REGISTER.md](/home/seb/.dotfiles/docs/security/SOUP_REGISTER.md) and confirm all active external components have an owner and validation path.
15
+
16
+ ## 2. Secrets & Leak Prevention
17
+
18
+ - [ ] **SSH Keys**: Scan `dot_ssh/` to ensure no private keys (`id_rsa`, `id_ed25519`) are committed.
19
+ - [ ] **Env Vars**: Check for hardcoded API tokens in `dot_config/` (use `age` encryption or environment variables instead).
20
+ - [ ] **Git History**: Run `git secrets` or similar to scan for accidental commits of credentials.
21
+
22
+ ## 3. Platform Safety
23
+
24
+ - [ ] **WSL Check**: Verify `install.sh` detects WSL and does not try to install systemd services or macOS defaults.
25
+ - [ ] **Root usage**: Ensure no script requires `sudo` unnecessarily (Principle of Least Privilege).
26
+
27
+ ## 4. Toolchain
28
+
29
+ - [ ] **Binary Integrity**: Check that `dot_local/bin/` scripts are pure shell/executable and match expected checksums (no binary blobs).
30
+ - [ ] **Dependency Scan**: Run `npm audit` / `cargo audit` if applicable (currently Node.js legacy is removed).
31
+
32
+ ## 5. MCP (Model Context Protocol) Hardening
33
+
34
+ - [ ] **Launcher Policy**: Verify `dot mcp` shows only allowlisted launchers (`npx`, `node`, `uvx`).
35
+ - [ ] **Filesystem Scope**: Ensure no MCP server has broad access (`/`, `/home`, `/Users`).
36
+ - [ ] **Default Profile**: Confirm only the `strict-local` server set is enabled by default.
37
+ - [ ] **Token Validation**: Confirm required API tokens are set (`GITHUB_TOKEN`, `BRAVE_API_KEY`).
38
+ - [ ] **Arg Policy**: No wildcard (`*`) or `--unsafe` arguments in MCP server configs.
39
+ - [ ] **Env Placeholders**: All `${VAR}` references in MCP config have corresponding environment variables.
40
+
41
+ Run `dot mcp --strict --json` to validate all MCP server configurations and capture an audit artifact.
42
+
43
+ ## 6. Release Attestation
44
+
45
+ - [ ] **SBOM Generation**: Verify `dotfiles-sbom.spdx.json` is generated in release workflow.
46
+ - [ ] **Attestation Signing**: Confirm `actions/attest-build-provenance` signs the release artifacts.
47
+ - [ ] **Attestation Verification**: Verify with `gh attestation verify <artifact> --repo sebastienrousseau/dotfiles`.
48
+ - [ ] **Branch Protection**: Ensure `security-attestation` is a required status check on master.
49
+ - [ ] **Automation Keying**: Confirm `ACTIONS_BOT_SIGNING_KEY` exists and matches the signer in `dot_config/git/allowed_signers`.
50
+
51
+ ## 7. Final Verification
52
+
53
+ - [ ] **Docker Test**: Run `docker build -f Dockerfile.test .` to verify clean install.
54
+ - [ ] **Doctor**: Run `dot doctor` locally.
55
+ - [ ] **MCP Check**: Run `dot mcp` to verify MCP configuration.
@@ -0,0 +1,145 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Shell Preamble Exemptions
6
+
7
+ Every bash script in this repo must include `set -euo pipefail` (or
8
+ `set -eu` for POSIX `sh`) within its first 50 lines. The rule is
9
+ enforced by
10
+ [`scripts/ci/check-shell-preamble.sh`](../../scripts/ci/check-shell-preamble.sh),
11
+ wired into `pre-commit` and the `reusable-shell-lint.yml` CI job.
12
+ Tests pin the contract under
13
+ [`tests/unit/security/test_shell_preamble_lint.sh`](../../tests/unit/security/test_shell_preamble_lint.sh).
14
+
15
+ ## Why the preamble is mandatory
16
+
17
+ `set -e` fails the script on the first error. `set -u` rejects
18
+ reads of unset variables. `set -o pipefail` propagates the exit
19
+ code of the last failing command in a pipeline rather than only the
20
+ final command's. Together they convert silent failures into loud
21
+ ones — which is the only way to catch them.
22
+
23
+ Real example from this repo's history: `executable_dot-load-benchmark`
24
+ shipped with only `set -e`. A failing pipeline (e.g. `cmd | grep`)
25
+ where `grep` succeeded would still report success even when `cmd`
26
+ crashed. The full triple catches this. The benchmark was upgraded
27
+ in commit 970b631d under #854.
28
+
29
+ ## Exemption categories
30
+
31
+ Two kinds of files legitimately can't enforce the preamble locally:
32
+
33
+ ### 1. Sourced libraries
34
+
35
+ Files loaded via `source` / `.` into a caller's shell context. The
36
+ caller already has `set -euo pipefail`; the library inherits it.
37
+ Adding `set -e` locally would persist after the library returns and
38
+ break the caller's own error-handling logic.
39
+
40
+ These files must carry a comment header in their first 15 lines:
41
+
42
+ ```bash
43
+ # Sourced by <parent>.sh; inherits set -euo pipefail.
44
+ ```
45
+
46
+ The lint accepts files with this marker regardless of preamble
47
+ state. Current adopters:
48
+
49
+ | Path | Sourced by |
50
+ |---|---|
51
+ | `dot_config/shell/00-core-paths.sh.tmpl` | shell init (zsh/bash/fish) |
52
+ | `dot_config/shell/05-core-safety.sh` | shell init |
53
+ | `dot_config/shell/10-secrets.sh` | shell init |
54
+ | `dot_config/shell/40-fzf-defaults.sh.tmpl` | shell init |
55
+ | `dot_config/shell/40-ls-colors.sh` | shell init |
56
+ | `dot_config/shell/50-logic-functions-core.sh.tmpl` | shell init + fish bridge |
57
+ | `dot_config/shell/50-logic-functions.sh.tmpl` | shell init + fish bridge |
58
+ | `dot_config/shell/51-logic-functions-extra.sh.tmpl` | shell init (lazy) |
59
+ | `dot_config/shell/90-ux-aliases.sh.tmpl` | shell init + fish bridge |
60
+ | `dot_config/shell/91-ux-aliases-lazy.sh.tmpl` | shell init (lazy) |
61
+ | `scripts/dot/lib/bento.sh` | dot CLI commands |
62
+ | `scripts/dot/lib/log.sh` | dot CLI + diagnostics |
63
+ | `scripts/dot/lib/platform.sh` | dot CLI commands |
64
+ | `scripts/dot/lib/ui.sh` | dot CLI + diagnostics + ops |
65
+ | `scripts/dot/lib/utils.sh` | dot CLI |
66
+ | `scripts/ops/heal-chezmoi.sh` | `scripts/ops/heal.sh` |
67
+ | `scripts/ops/heal-system.sh` | `scripts/ops/heal.sh` |
68
+ | `scripts/ops/heal-tools.sh` | `scripts/ops/heal.sh` |
69
+
70
+ ### 2. Bulk-sourced fragments (path-skipped)
71
+
72
+ Three directories contain hundreds of alias / function / PATH
73
+ snippets that are sourced into the shell. Annotating each one
74
+ individually would be 300+ marker comments with no extra signal.
75
+ The lint skips them by path:
76
+
77
+ | Path | Contents |
78
+ |---|---|
79
+ | `.chezmoitemplates/aliases/**/*.aliases.sh` | alias definitions sourced into the user's shell. |
80
+ | `.chezmoitemplates/functions/**` | shell-function definitions sourced into the user's shell. |
81
+ | `.chezmoitemplates/paths/**` | `PATH=…:$PATH` snippets concatenated by the shell init. |
82
+
83
+ ### 3. Test scripts (path-skipped)
84
+
85
+ `tests/**` — every file under the test tree is invoked through
86
+ `tests/framework/test_runner.sh` which manages shell options for its
87
+ children. The runner itself has the full preamble; children that
88
+ source the framework inherit it.
89
+
90
+ ### 4. Explicit opt-outs
91
+
92
+ Init fragments and completion scripts that must NOT carry their own
93
+ preamble (e.g., `dot_local/bin/executable_dot_completion`, a zsh
94
+ completion sourced into the interactive shell) can carry an
95
+ explicit marker:
96
+
97
+ ```bash
98
+ # preamble:skip — opt-out for completion / init fragments.
99
+ ```
100
+
101
+ The lint accepts these. Use sparingly.
102
+
103
+ ## Adding a new exemption
104
+
105
+ When you need to mark a new file:
106
+
107
+ 1. **Decide whether it's actually sourced or executed.** If a user
108
+ ever invokes it directly (chmod +x + `./file.sh`), add the
109
+ preamble. If it's only ever `source`d, mark it.
110
+
111
+ 2. **Pick the right marker.**
112
+ - Sourced library: `# Sourced by <caller>; inherits set -euo pipefail.`
113
+ - Completion / init fragment: `# preamble:skip — <why>.`
114
+
115
+ 3. **Run the checker:**
116
+
117
+ ```bash
118
+ ./scripts/ci/check-shell-preamble.sh path/to/file.sh
119
+ ```
120
+
121
+ Exit 0 = lint passes.
122
+
123
+ 4. **If you're adding a new entire directory of fragments**
124
+ (rare — alias buckets, plugin trees), edit the path-skip rule
125
+ in `scripts/ci/check-shell-preamble.sh` and document it in this
126
+ page's "Bulk-sourced fragments" table above.
127
+
128
+ ## CI integration
129
+
130
+ - **Pre-commit hook** (`config/pre-commit-config.yaml` →
131
+ `shell-preamble-check`): blocks `git commit` if a staged shell
132
+ file fails the lint.
133
+ - **CI** (`.github/workflows/reusable-shell-lint.yml`): runs the
134
+ full-repo scan on every PR.
135
+
136
+ A change to either the checker or the marker convention must update
137
+ this page in the same PR.
138
+
139
+ ## References
140
+
141
+ - `scripts/ci/check-shell-preamble.sh` — the lint.
142
+ - `tests/unit/security/test_shell_preamble_lint.sh` — contract test.
143
+ - `config/pre-commit-config.yaml` (`shell-preamble-check` hook).
144
+ - `.github/workflows/reusable-shell-lint.yml` — CI invocation.
145
+ - Issue [#854](https://github.com/sebastienrousseau/dotfiles/issues/854).
@@ -0,0 +1,36 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # SOUP Register
6
+
7
+ ## Purpose
8
+
9
+ Controlled inventory for software of unknown pedigree used by the dotfiles platform.
10
+
11
+ ## Active components
12
+
13
+ | Component | Source | Version control | Verification path | Owner | Status |
14
+ | :--- | :--- | :--- | :--- | :--- | :--- |
15
+ | Homebrew installer | `raw.githubusercontent.com/Homebrew/install` | Moving upstream script, gated by `HOMEBREW_INSTALLER_SHA256` | SHA-256 in [package_managers.sh](/home/seb/.dotfiles/install/lib/package_managers.sh) | Repo maintainer | Conditional |
16
+ | Chezmoi installer | `get.chezmoi.io` | Pinned by `CHEZMOI_INSTALLER_SHA256` when used | SHA-256 in `install/lib/chezmoi.sh` | Repo maintainer | Controlled |
17
+ | GitHub Actions marketplace actions | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pins | Repo maintainer | Controlled |
18
+ | Grype container | `anchore/grype` | Pinned tag in workflow | Container tag in [security-enhanced.yml](/home/seb/.dotfiles/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
19
+ | Trivy container | `aquasec/trivy` | Pinned tag in workflow | Container tag in [security-enhanced.yml](/home/seb/.dotfiles/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
20
+ | Checkov action | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pin | Repo maintainer | Controlled |
21
+ | Nix inputs | GitHub flakes | Locked in [flake.lock](/home/seb/.dotfiles/flake.lock) | `narHash` and revision lock | Repo maintainer | Controlled |
22
+ | GitHub release metadata queries | GitHub API | Discovery only, not release validation | `update-deps.yml` query path | Repo maintainer | Monitored |
23
+
24
+ ## Validation record
25
+
26
+ 1. Record version or commit SHA.
27
+ 2. Record checksum, signature, or attestation method.
28
+ 3. Record workflow or script that consumes the component.
29
+ 4. Record owner and review date.
30
+ 5. Reject moving inputs in production or release paths unless checksum-gated.
31
+
32
+ ## Exit criteria
33
+
34
+ - No unsigned automation commits.
35
+ - No unverified executable download in installer or release path.
36
+ - Every SOUP item has owner, version control method, and validation record.
@@ -0,0 +1,130 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Threat Model
6
+
7
+ Security analysis of the dotfiles distribution. Covers trust boundaries, threat actors, attack surfaces, and mitigations.
8
+
9
+ ## Trust Boundary
10
+
11
+ The primary trust boundary is the **local machine**. Dotfiles are deployed to and executed on the user's own system. All configuration files, scripts, and templates run with the user's privileges.
12
+
13
+ ```text
14
+ ┌─────────────────────────────────────────────────┐
15
+ │ Local Machine (trusted zone) │
16
+ │ ┌─────────────────┐ ┌──────────────────────┐ │
17
+ │ │ ~/.dotfiles/ │ │ ~/.config/ (deployed)│ │
18
+ │ │ (source repo) │──│ Shell configs, nvim │ │
19
+ │ └─────────────────┘ └──────────────────────┘ │
20
+ │ │
21
+ │ ┌─────────────────┐ ┌──────────────────────┐ │
22
+ │ │ ~/.local/bin/ │ │ ~/.cache/shell/ │ │
23
+ │ │ (user scripts) │ │ (cached eval output) │ │
24
+ │ └─────────────────┘ └──────────────────────┘ │
25
+ └─────────────────────────────────────────────────┘
26
+
27
+ ─────┼──────── Trust boundary ────────
28
+
29
+ ┌─────────────────────────────────────────────────┐
30
+ │ External (untrusted zone) │
31
+ │ GitHub (repo hosting), Homebrew, Nix, │
32
+ │ Zinit plugins, Neovim plugins, npm, pip │
33
+ └─────────────────────────────────────────────────┘
34
+ ```
35
+
36
+ ## Threat Actors
37
+
38
+ | Actor | Motivation | Capability |
39
+ |-------|-----------|------------|
40
+ | Supply chain attacker | Inject malicious code via dependency | Compromise upstream packages (Homebrew, npm, Zinit plugins) |
41
+ | Secrets harvester | Steal API keys, SSH keys, tokens | Scrape git history, shell history, env vars |
42
+ | Privilege escalation | Gain root access | Exploit `sudo` aliases, writable scripts in PATH |
43
+ | Network attacker | Intercept credentials | MITM on install scripts, curl-pipe-bash |
44
+
45
+ ## Attack Surfaces
46
+
47
+ ### 1. Shell Startup Scripts
48
+
49
+ **Risk:** Malicious code in sourced files executes with user privileges on every shell start.
50
+
51
+ **Mitigations:**
52
+
53
+ - All shell scripts pass `shellcheck --severity=error`
54
+ - `set -euo pipefail` enforced in all operational scripts
55
+ - `eval` usage hardened with process substitution (`. /dev/stdin`)
56
+ - Input validation on dynamic function generation
57
+ - `DOTFILES_ULTRA_FAST=1` bypasses all non-core sourcing
58
+
59
+ ### 2. Secrets Exposure
60
+
61
+ **Risk:** API keys, tokens, and SSH keys leaked via git history, shell history, or environment.
62
+
63
+ **Mitigations:**
64
+
65
+ - [Gitleaks](https://github.com/gitleaks/gitleaks) pre-commit hook blocks secrets in commits
66
+ - Atuin `history_filter` excludes sensitive patterns
67
+ - Age encryption for local secret storage
68
+ - `dot secrets set` uses secure prompts (no shell history)
69
+ - `.gitignore` excludes `key.txt`, `.env`, credential files
70
+
71
+ ### 3. Supply Chain Dependencies
72
+
73
+ **Risk:** Compromised upstream packages injected into the toolchain.
74
+
75
+ **Mitigations:**
76
+
77
+ - Nix Flakes provide reproducible, pinned dependencies
78
+ - Zinit plugin versions pinned (`ver"0.8.0"`)
79
+ - Neovim plugin versions locked via `lazy-lock.json`
80
+ - `install.sh` uses HTTPS for all downloads
81
+ - Homebrew formula integrity via bottle checksums
82
+
83
+ ### 4. Path Manipulation
84
+
85
+ **Risk:** Attacker places malicious binary in a PATH directory that shadows legitimate tools.
86
+
87
+ **Mitigations:**
88
+
89
+ - PATH construction is deterministic (template-generated)
90
+ - `~/.local/bin` is user-controlled and checked for writability
91
+ - No world-writable directories in PATH
92
+ - `prependpath` function validates directory existence
93
+
94
+ ### 5. Template Injection
95
+
96
+ **Risk:** Chezmoi template variables could inject shell code if not properly quoted.
97
+
98
+ **Mitigations:**
99
+
100
+ - Template variables come from `.chezmoidata.toml` (user-controlled)
101
+ - No external/network data used in templates
102
+ - Template validation via `chezmoi apply --dry-run` in CI
103
+
104
+ ### 6. Cached Eval Files
105
+
106
+ **Risk:** Stale or tampered cache files in `~/.cache/shell/` sourced at startup.
107
+
108
+ **Mitigations:**
109
+
110
+ - `_cached_eval` validates cache against binary mtime
111
+ - Cache files are user-owned (0644)
112
+ - Cache directory is under `$XDG_CACHE_HOME` (user-controlled)
113
+ - Cache can be cleared with `rm -rf ~/.cache/shell/`
114
+
115
+ ## Residual Risks
116
+
117
+ | Risk | Likelihood | Impact | Status |
118
+ |------|-----------|--------|--------|
119
+ | Zinit plugin compromise | Low | High | Mitigated by version pinning |
120
+ | Shell history leak | Medium | Medium | Mitigated by Atuin filter |
121
+ | Stale Nix closure | Low | Low | Accepted (manual `nix flake update`) |
122
+ | macOS Keychain access | Low | Medium | Accepted (OS-level protection) |
123
+
124
+ ## Recommendations
125
+
126
+ 1. Run `gitleaks detect` before every push (pre-commit hook enforced)
127
+ 2. Rotate secrets on a 90-day schedule
128
+ 3. Audit `lazy-lock.json` diffs when updating Neovim plugins
129
+ 4. Pin Homebrew versions for security-critical tools
130
+ 5. Use `DOTFILES_ULTRA_FAST=1` in CI to minimize attack surface
@@ -0,0 +1,228 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Verification and Validation Report
6
+
7
+ ## Document Control
8
+
9
+ | Field | Value |
10
+ |-------|-------|
11
+ | Document ID | VV-DOT-001 |
12
+ | Version | 0.2.501 |
13
+ | Date | 2026-03-20 |
14
+ | Author | Repository Maintainer |
15
+ | Status | Active |
16
+ | Classification | Internal |
17
+ | Standard | ISO 13485:2016 Sections 7.3.6 / 7.3.7 (adapted) |
18
+
19
+ ---
20
+
21
+ ## Purpose
22
+
23
+ This document constitutes the formal Verification and Validation (V&V) report for the chezmoi-managed dotfiles repository, adapted from ISO 13485:2016 Sections 7.3.6 (Design and Development Verification) and 7.3.7 (Design and Development Validation) for infrastructure-as-code.
24
+
25
+ **Verification** confirms that each design output meets its corresponding design input requirement through inspection, analysis, and testing. **Validation** confirms that the deployed system satisfies its intended use under representative operating conditions (Linux, macOS, WSL).
26
+
27
+ All verification activities are executed through automated CI pipelines, pre-commit hooks, and the repository test framework. Evidence is retained in CI logs, test output, and this document.
28
+
29
+ ---
30
+
31
+ ## Verification Matrix
32
+
33
+ | Req ID | Requirement | Verification Method | Test File(s) | Result |
34
+ |--------|-------------|---------------------|--------------|--------|
35
+ | VR-01 | Shell scripts pass ShellCheck (severity=error) | Static analysis via `shellcheck --severity=error -e SC1091 -e SC2030 -e SC2031` | `ci.yml`, `ci-enforced.yml`, pre-commit hook | Pass |
36
+ | VR-02 | All scripts have `set -euo pipefail` | Pattern scan across all `.sh` files; CI enforcement | `ci-enforced.yml`, `compliance-guard.yml` | Pass |
37
+ | VR-03 | No secrets in source control (gitleaks clean) | Gitleaks scan with `config/gitleaks.toml` ruleset | Pre-commit hook, `security-enhanced.yml` | Pass |
38
+ | VR-04 | Cross-platform compatibility (BSD + GNU) | Dual-platform CI matrix (ubuntu-latest, macos-latest) | `cross-platform-test.yml` | Pass |
39
+ | VR-05 | TLS enforcement (no insecure curl/wget) | Pattern blocking for `curl -k`, `--insecure`, `wget --no-check-certificate` | Pre-commit hook, `compliance-guard.yml` | Pass |
40
+ | VR-06 | Permission controls (no chmod 777/666) | CI pattern scan blocks world-writable permissions | Pre-commit hook, `compliance-guard.yml` | Pass |
41
+ | VR-07 | Signed commits enforced | Pre-push hook verifies `git verify-commit` for all commits in range | `scripts/git-hooks/pre-push`, `compliance-guard.yml` | Pass |
42
+ | VR-08 | Conventional commit format | Pre-commit hook validates `feat:`, `fix:`, `docs:` prefixes | Pre-commit hook (conventional-commits) | Pass |
43
+ | VR-09 | Template rendering correctness | `chezmoi apply --dry-run` on Linux and macOS CI runners | `ci.yml` (Linux + macOS matrix), `tests/unit/test_*.sh` | Pass |
44
+ | VR-10 | Alias system functional | Unit tests source alias files and verify command availability | `tests/unit/aliases/test_*.sh` (104 files) | Pass |
45
+ | VR-11 | Neovim config loads without errors | Headless Neovim launch with error detection | `tests/unit/neovim/test_*.sh` (15 files) | Pass |
46
+ | VR-12 | Fish/Zsh/Nushell configs valid | Syntax validation and functional tests per shell | `tests/unit/fish/` (33), `tests/unit/shell/` (12), `tests/unit/nushell/` (5) | Pass |
47
+ | VR-13 | CI pipelines execute successfully | GitHub Actions workflow status across all triggers | `ci.yml`, `ci-enforced.yml`, `compliance-guard.yml`, `cross-platform-test.yml`, `security-enhanced.yml`, `codeql.yml` | Pass |
48
+ | VR-14 | Pre-commit hooks functional | Hook execution via `pre-commit run --all-files` | `config/pre-commit-config.yaml` | Pass |
49
+ | VR-15 | Age encryption operational | Chezmoi age-encrypted file decryption during apply | `chezmoi apply --dry-run` (encrypted targets), integration tests | Pass |
50
+
51
+ ---
52
+
53
+ ## Validation Summary
54
+
55
+ ### Coverage Metrics
56
+
57
+ | Metric | Value | Threshold | Status |
58
+ |--------|-------|-----------|--------|
59
+ | Total test files | 430 | N/A | Measured |
60
+ | Total assertions | 2,217 | N/A | Measured |
61
+ | Pass rate | 100% | 100% | Pass |
62
+ | Module coverage | 100% | >= 95% | Pass |
63
+
64
+ ### Category Breakdown
65
+
66
+ | Category | Test Files | Status |
67
+ |----------|-----------|--------|
68
+ | Alias files | 104 | Tested |
69
+ | Function files | 76 | Tested |
70
+ | Fish functions + conf.d | 33 | Tested |
71
+ | Misc / compliance | 34 | Tested |
72
+ | Dot CLI | 30 | Tested |
73
+ | Diagnostics | 28 | Tested |
74
+ | Shell configs | 20 | Tested |
75
+ | Ops | 18 | Tested |
76
+ | Install | 17 | Tested |
77
+ | Security | 16 | Tested |
78
+ | Neovim Lua configs | 15 | Tested |
79
+ | Theme | 11 | Tested |
80
+ | Tools | 7 | Tested |
81
+ | Nushell configs | 6 | Tested |
82
+ | Secrets | 5 | Tested |
83
+ | Integration tests | 10 | Tested |
84
+ | **Total** | **430** | **All pass** |
85
+
86
+ ### Validation Environments
87
+
88
+ | Environment | OS | Shell | Bash Version | Status |
89
+ |-------------|-----|-------|--------------|--------|
90
+ | CI (Linux) | Ubuntu latest | Bash | 5.x | Validated |
91
+ | CI (macOS) | macOS latest | Zsh | 3.2 (system) | Validated |
92
+ | Local (Linux) | CachyOS / Arch | Fish, Zsh, Bash | 5.x | Validated |
93
+ | Local (WSL) | Ubuntu | Bash | 5.x | Validated |
94
+
95
+ ---
96
+
97
+ ## Test Framework Architecture
98
+
99
+ ### Directory Structure
100
+
101
+ ```
102
+ tests/
103
+ ├── framework/
104
+ │ ├── test_runner.sh # Test executor — discovers and runs all test_*.sh files
105
+ │ ├── assertions.sh # 16 assertion functions (assert_equals, assert_contains, etc.)
106
+ │ └── mocks.sh # Mock utilities for isolating external dependencies
107
+ ├── unit/
108
+ │ ├── aliases/ # Alias and command-surface tests
109
+ │ ├── functions/ # Function behavior tests
110
+ │ ├── dot-cli/ # `dot` command workflow tests
111
+ │ ├── shell/ # Shell integration and completion tests
112
+ │ ├── fish/ # Fish function and completion tests
113
+ │ ├── nushell/ # Nushell configuration tests
114
+ │ ├── nvim/ # Neovim configuration tests
115
+ │ └── test_*.sh # 425 unit test files total
116
+ ├── integration/
117
+ │ └── test_*.sh # 11 integration test files
118
+ └── performance/
119
+ └── benchmark_runner.sh # Performance regression benchmarks
120
+ ```
121
+
122
+ ### Execution Model
123
+
124
+ 1. `test_runner.sh` recursively discovers all `test_*.sh` files under `tests/`.
125
+ 2. Each test file is executed in a subshell with `assertions.sh` sourced.
126
+ 3. Tests source bash files directly from the repository (not Go templates).
127
+ 4. `mocks.sh` provides stubs for external tools (`chezmoi`, `git`, `brew`, etc.).
128
+ 5. Exit codes and assertion counts are aggregated into a final report.
129
+
130
+ ### Assertion Library
131
+
132
+ | Function | Purpose |
133
+ |----------|---------|
134
+ | `assert_equals` | Exact string equality |
135
+ | `assert_not_equals` | String inequality |
136
+ | `assert_contains` | Substring match |
137
+ | `assert_not_contains` | Substring absence |
138
+ | `assert_starts_with` | Prefix match |
139
+ | `assert_ends_with` | Suffix match |
140
+ | `assert_matches` | Regex match |
141
+ | `assert_file_exists` | File presence |
142
+ | `assert_file_not_exists` | File absence |
143
+ | `assert_directory_exists` | Directory presence |
144
+ | `assert_command_exists` | Command availability |
145
+ | `assert_exit_code` | Process exit code |
146
+ | `assert_empty` | Empty string |
147
+ | `assert_not_empty` | Non-empty string |
148
+ | `assert_true` | Boolean truth |
149
+ | `assert_false` | Boolean false |
150
+
151
+ ---
152
+
153
+ ## Traceability Matrix
154
+
155
+ This matrix maps compliance controls from COMPLIANCE.md to verification requirements defined in this document.
156
+
157
+ ### SOC 2 Type II Traceability
158
+
159
+ | SOC 2 Control | Description | Verification Requirement(s) |
160
+ |---------------|-------------|----------------------------|
161
+ | CC6.1 | Logical Access Security | VR-06 (Permission controls), VR-15 (Age encryption) |
162
+ | CC6.8 | Unauthorized Code Protection | VR-07 (Signed commits), VR-03 (No secrets) |
163
+ | CC7.1 | System Operations | VR-05 (TLS enforcement), VR-13 (CI pipelines) |
164
+ | CC7.2 | Change Detection | VR-14 (Pre-commit hooks), VR-08 (Conventional commits) |
165
+ | CC8.1 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits), VR-13 (CI pipelines) |
166
+ | A1.2 | Audit Logs | VR-13 (CI pipelines — logs retained in GitHub Actions) |
167
+
168
+ ### ISO 27001 Traceability
169
+
170
+ | ISO Control | Description | Verification Requirement(s) |
171
+ |-------------|-------------|----------------------------|
172
+ | A.9.1.1 | Access Control Policy | VR-06 (Permission controls), VR-15 (Age encryption) |
173
+ | A.9.4.1 | Information Access Restriction | VR-06 (No chmod 777/666) |
174
+ | A.12.1.2 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits) |
175
+ | A.12.6.1 | Technical Vulnerability Management | VR-03 (Gitleaks), VR-05 (TLS enforcement) |
176
+ | A.13.1.1 | Network Controls | VR-05 (TLS enforcement) |
177
+ | A.14.2.5 | Secure Engineering | VR-01 (ShellCheck), VR-02 (set -euo pipefail), VR-04 (Cross-platform) |
178
+ | A.14.2.8 | System Security Testing | VR-09 (Template rendering), VR-10 (Aliases), VR-11 (Neovim), VR-12 (Shell configs) |
179
+
180
+ ### GDPR / Privacy Traceability
181
+
182
+ | Requirement | Description | Verification Requirement(s) |
183
+ |-------------|-------------|----------------------------|
184
+ | Data Minimization | Limit data collection | VR-03 (No secrets in source) |
185
+ | Integrity | Protect against tampering | VR-07 (Signed commits), VR-14 (Pre-commit hooks) |
186
+ | Encryption | Protect data at rest | VR-15 (Age encryption operational) |
187
+
188
+ ---
189
+
190
+ ## Acceptance Criteria
191
+
192
+ All of the following criteria must be satisfied for this V&V report to remain valid.
193
+
194
+ | Criterion | Verification Method | Required Outcome |
195
+ |-----------|---------------------|------------------|
196
+ | All unit and integration tests pass | `./tests/framework/test_runner.sh` | Exit code 0, 0 failures |
197
+ | ShellCheck clean | `shellcheck --severity=error` on all `.sh` files | Zero findings |
198
+ | Gitleaks clean | `gitleaks detect --config config/gitleaks.toml` | Zero findings |
199
+ | Chezmoi dry-run clean | `chezmoi apply --dry-run` on Linux and macOS | Exit code 0, no errors |
200
+ | Pre-commit hooks pass | `pre-commit run --all-files` | Exit code 0 |
201
+ | Cross-platform CI green | `cross-platform-test.yml` on ubuntu-latest and macos-latest | All jobs pass |
202
+ | Module coverage at threshold | Test runner coverage report | >= 95% (currently 100%) |
203
+ | No world-writable permissions | `compliance-guard.yml` pattern scan | Zero `chmod 777` or `chmod 666` matches |
204
+ | No insecure TLS patterns | `compliance-guard.yml` pattern scan | Zero `curl -k` or `wget --no-check-certificate` matches |
205
+ | All commits signed | `git verify-commit` on HEAD~50..HEAD range | All commits verified |
206
+
207
+ ---
208
+
209
+ ## Sign-off
210
+
211
+ | Role | Name | Date | Signature |
212
+ |------|------|------|-----------|
213
+ | Repository Owner | | | |
214
+ | Security Reviewer | | | |
215
+ | Quality Assurance | | | |
216
+ | Release Manager | | | |
217
+
218
+ ---
219
+
220
+ ## References
221
+
222
+ - [ISO 13485:2016](https://www.iso.org/standard/59752.html) — Medical devices, Quality management systems
223
+ - [ISO 27001:2022](https://www.iso.org/standard/27001) — Information security management
224
+ - [SOC 2 Type II](https://www.aicpa.org/soc2) — Trust Services Criteria
225
+ - [SLSA Framework](https://slsa.dev/) — Supply chain Levels for Software Artifacts
226
+ - [ShellCheck](https://www.shellcheck.net/) — Static analysis for shell scripts
227
+ - [Gitleaks](https://gitleaks.io/) — Secrets detection
228
+ - [Chezmoi](https://www.chezmoi.io/) — Dotfiles manager
@@ -0,0 +1,10 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Theme Gallery
6
+
7
+ Themes are auto-generated from your wallpapers — the available set depends on what's present on your system. Run `dot theme list` to see what's discovered.
8
+
9
+ See [Theme Reference](../reference/THEMES.md) for the wallpaper-driven engine.
10
+ See [Theming Guide](../guides/THEMING.md) for setup, switching, and the K-Means CIELAB pipeline.
@@ -0,0 +1,30 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Visual Integrity Report
6
+
7
+ Generated: 2026-04-08
8
+ Scope: terminal theme SSOT, shell first-paint path, font rendering, and cross-platform template intent.
9
+
10
+ | Metric | Current | Target | Status |
11
+ | :--- | :--- | :--- | :--- |
12
+ | Contrast (APCA) | `macos-monterey-dark` body text `Lc 90+`, critical UI `Lc 95+` | `Lc 75+` body, `Lc 90+` critical | Pass |
13
+ | Startup Time | `bash 25ms`, `zsh 35ms`, `fish 25ms` | `< 100ms` | Pass |
14
+ | Color DeltaE | SSOT palette unified across Ghostty/Kitty/Alacritty/WezTerm; no runtime probe yet | `< 2.0` | Needs instrumentation |
15
+
16
+ ## Findings
17
+
18
+ - Theme colors are already centralized in `.chezmoidata/themes.toml`, but accessibility intent was implicit. The active theme now carries explicit OKLCH/APCA metadata.
19
+ - First-prompt Fish initialization still performed live CLI work when cache artifacts were present. The prompt path now sources prewarmed cache files first and only regenerates on cache miss.
20
+ - Terminal templates were palette-consistent, but rendering policy was inconsistent. macOS now prefers Display P3 and CoreText-friendly metrics; Linux/Wayland templates prefer more conservative opacity and FreeType-safe fallbacks.
21
+
22
+ ## Edge Cases
23
+
24
+ - Wayland fontconfig now sets `rgba` declaratively from feature flags to avoid color fringing on mixed-density Linux panels.
25
+ - Ghostty, Kitty, Alacritty, and WezTerm now share the same terminal ramp while allowing platform-specific font fallback and window-compositor behavior.
26
+ - WSL parity is still template-capable, but DeltaE validation is not yet automated against Windows Terminal serialization.
27
+
28
+ ## Next Step
29
+
30
+ Implement a small palette audit utility that computes APCA and DeltaE from `.chezmoidata/themes.toml` so the report can become test-backed rather than declarative.