@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,171 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # ADR-004: Chezmoi + Custom CLI Wrapper Architecture
6
+
7
+ **Status**: Accepted
8
+ **Date**: 2026-02-09
9
+ **Authors**: @sebastienrousseau
10
+
11
+ ## Context
12
+
13
+ Managing dotfiles requires:
14
+
15
+ - Tracking file changes and applying them consistently
16
+ - Handling platform-specific configurations
17
+ - Supporting encrypted secrets
18
+ - Providing a good developer experience
19
+
20
+ Options considered:
21
+
22
+ 1. **Bare git repository**: Simple but poor UX, no templating
23
+ 2. **GNU Stow**: Symlink-based, limited features
24
+ 3. **Chezmoi only**: Powerful but complex CLI
25
+ 4. **Custom from scratch**: High maintenance burden
26
+ 5. **Chezmoi + wrapper**: Best of both worlds
27
+
28
+ ## Decision
29
+
30
+ Use **Chezmoi as the core engine** with a **custom `dot` CLI wrapper** that:
31
+
32
+ ### Architecture
33
+
34
+ ```text
35
+ ┌─────────────────────────────────────────────┐
36
+ │ dot CLI │
37
+ │ (User-friendly interface, custom commands) │
38
+ ├─────────────────────────────────────────────┤
39
+ │ Command Modules │
40
+ │ core │ diagnostics │ tools │ appearance │
41
+ │ secrets │ security │ meta │
42
+ ├─────────────────────────────────────────────┤
43
+ │ Shared Library │
44
+ │ utils.sh (resolve_source_dir, run_script) │
45
+ ├─────────────────────────────────────────────┤
46
+ │ Chezmoi │
47
+ │ (Template engine, state management, apply) │
48
+ └─────────────────────────────────────────────┘
49
+ ```
50
+
51
+ ### Core Principles
52
+
53
+ **1. Chezmoi handles complexity:**
54
+
55
+ - Template rendering with Go text/template
56
+ - Encrypted secrets with age
57
+ - State tracking (what's applied vs source)
58
+ - Cross-platform path handling
59
+
60
+ **2. dot CLI handles UX:**
61
+
62
+ - Memorable command names (`dot sync` vs `chezmoi apply`)
63
+ - Domain-specific commands (`dot doctor`, `dot theme`)
64
+ - Integration with external tools (Nix, Docker, Neovim)
65
+ - Consistent help and error messages
66
+
67
+ **3. Modular command structure:**
68
+
69
+ ```text
70
+ scripts/dot/
71
+ ├── lib/
72
+ │ └── utils.sh # Shared functions
73
+ └── commands/
74
+ ├── core.sh # apply, sync, update, add, diff
75
+ ├── diagnostics.sh # doctor, heal, health, benchmark
76
+ ├── tools.sh # tools, new, packages
77
+ ├── appearance.sh # theme, wallpaper, fonts
78
+ ├── secrets.sh # secrets-init, secrets
79
+ ├── security.sh # firewall, backup, encrypt-check
80
+ └── meta.sh # upgrade, docs, learn
81
+ ```
82
+
83
+ **4. Delegation pattern:**
84
+
85
+ ```bash
86
+ # Main dispatcher in dot CLI
87
+ dispatch() {
88
+ local module="$1" cmd="$2"
89
+ shift 2
90
+ exec bash "$src_dir/scripts/dot/commands/$module.sh" "$cmd" "$@"
91
+ }
92
+ ```
93
+
94
+ ### Chezmoi Integration Points
95
+
96
+ | Feature | Chezmoi | dot CLI |
97
+ |---------|---------|---------|
98
+ | Apply changes | `chezmoi apply` | `dot sync` |
99
+ | View diff | `chezmoi diff` | `dot diff` |
100
+ | Edit secrets | `chezmoi edit --encrypted` | `dot secrets` |
101
+ | Source directory | `chezmoi source-path` | `dot cd` |
102
+ | Health check | `chezmoi doctor` | `dot doctor` (extended) |
103
+
104
+ ### Extension Points
105
+
106
+ Custom commands can:
107
+
108
+ 1. Wrap chezmoi commands with better defaults
109
+ 2. Add entirely new functionality (benchmarks, themes)
110
+ 3. Integrate with system tools (nix, docker, brew)
111
+ 4. Provide interactive experiences (tour, learn)
112
+
113
+ ## Consequences
114
+
115
+ ### Positive
116
+
117
+ - Leverage Chezmoi's battle-tested engine
118
+ - User-friendly interface for common tasks
119
+ - Easy to add domain-specific commands
120
+ - Modular structure enables testing and maintenance
121
+ - Single entry point (`dot`) for all operations
122
+
123
+ ### Negative
124
+
125
+ - Two layers to understand (chezmoi + dot)
126
+ - Version coupling between chezmoi and scripts
127
+ - Some chezmoi features not exposed via dot
128
+
129
+ ### Neutral
130
+
131
+ - Advanced users can still use chezmoi directly
132
+ - Documentation needed for both layers
133
+ - Upgrade path when chezmoi adds new features
134
+
135
+ ## Implementation Notes
136
+
137
+ ### Adding a New Command
138
+
139
+ 1. Identify the appropriate module (or create new one)
140
+ 2. Add function `cmd_<name>()` to module
141
+ 3. Add case to module's dispatch
142
+ 4. Add case to main dot CLI dispatcher
143
+ 5. Update help text
144
+ 6. Add tests if complex
145
+
146
+ ### Module Template
147
+
148
+ ```bash
149
+ #!/usr/bin/env bash
150
+ # Dotfiles CLI - <Category> Commands
151
+
152
+ set -e
153
+
154
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
155
+ source "$SCRIPT_DIR/../lib/utils.sh"
156
+
157
+ cmd_example() {
158
+ # Implementation
159
+ }
160
+
161
+ case "${1:-}" in
162
+ example) shift; cmd_example "$@" ;;
163
+ *) echo "Unknown command: ${1:-}" >&2; exit 1 ;;
164
+ esac
165
+ ```
166
+
167
+ ## References
168
+
169
+ - [Chezmoi Documentation](https://www.chezmoi.io/)
170
+ - [Command Pattern](https://refactoring.guru/design-patterns/command)
171
+ - [Unix Philosophy](https://en.wikipedia.org/wiki/Unix_philosophy)
@@ -0,0 +1,99 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
6
+ # ADR-005: Chezmoi as Dotfiles Manager
7
+
8
+ **Status**: Accepted
9
+ **Date**: 2026-02-09
10
+ **Authors**: @sebastienrousseau
11
+
12
+ ## Context
13
+
14
+ Managing dotfiles across multiple machines requires:
15
+
16
+ - Version control for configuration files
17
+ - Template support for machine-specific values
18
+ - Cross-platform compatibility (macOS, Linux, WSL)
19
+ - Encrypted secrets management
20
+ - Easy installation and updates
21
+
22
+ Several approaches were considered for dotfiles management.
23
+
24
+ ## Decision
25
+
26
+ Use **chezmoi** as the primary dotfiles management tool.
27
+
28
+ ### Alternatives Considered
29
+
30
+ | Tool | Pros | Cons |
31
+ |------|------|------|
32
+ | **GNU Stow** | Simple, no dependencies | No templating, symlink-only |
33
+ | **yadm** | Git-based, encryption | Limited templating |
34
+ | **Bare Git** | Simple, no tools | No templating, manual management |
35
+ | **Ansible** | Powerful, idempotent | Heavy, complex for dotfiles |
36
+ | **Nix Home Manager** | Declarative, reproducible | Steep learning curve, Nix dependency |
37
+
38
+ ### Why Chezmoi
39
+
40
+ 1. **Template Support**: Go text/template for machine-specific configuration
41
+ 2. **Encryption**: Built-in age/gpg encryption for secrets
42
+ 3. **Cross-Platform**: Native support for macOS, Linux, Windows
43
+ 4. **Single Binary**: No runtime dependencies
44
+ 5. **Git Integration**: Works with any Git host
45
+ 6. **Dry-Run**: Preview changes before applying
46
+ 7. **Active Development**: Well-maintained with responsive maintainer
47
+
48
+ ## Implementation
49
+
50
+ ```bash
51
+ # Installation
52
+ sh -c "$(curl -fsLS get.chezmoi.io)"
53
+
54
+ # Initialize from repository
55
+ chezmoi init https://github.com/user/dotfiles.git
56
+
57
+ # Apply configuration
58
+ chezmoi apply
59
+ ```
60
+
61
+ ### Template Example
62
+
63
+ ```go
64
+ {{- if eq .chezmoi.os "darwin" }}
65
+ # macOS-specific configuration
66
+ {{- else if eq .chezmoi.os "linux" }}
67
+ # Linux-specific configuration
68
+ {{- end }}
69
+ ```
70
+
71
+ ## Consequences
72
+
73
+ ### Positive
74
+
75
+ - Consistent configuration across all machines
76
+ - Secure secrets management with age encryption
77
+ - Easy to add new machines to the fleet
78
+ - Template-driven configuration reduces duplication
79
+ - Built-in diff and dry-run for safe updates
80
+
81
+ ### Negative
82
+
83
+ - Learning curve for Go templates
84
+ - Additional abstraction layer over raw Git
85
+ - Requires chezmoi binary installation
86
+ - Some features (scripts) require careful ordering
87
+
88
+ ### Neutral
89
+
90
+ - Configuration stored in `~/.local/share/chezmoi` by default
91
+ - Custom wrapper CLI (`dot`) provides simpler interface
92
+ - Regular `git` commands still work in source directory
93
+
94
+ ## References
95
+
96
+ - [Chezmoi Documentation](https://www.chezmoi.io/)
97
+ - [Chezmoi Quick Start](https://www.chezmoi.io/quick-start/)
98
+ - [Comparison with Other Tools](https://www.chezmoi.io/comparison-table/)
99
+ {% endraw %}
@@ -0,0 +1,124 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # ADR-006: Zsh as Default Shell
6
+
7
+ **Status**: Accepted
8
+ **Date**: 2026-02-09
9
+ **Authors**: @sebastienrousseau
10
+
11
+ ## Context
12
+
13
+ Choosing a default shell impacts:
14
+
15
+ - Developer productivity and workflow
16
+ - Plugin ecosystem and extensibility
17
+ - Cross-platform compatibility
18
+ - Startup performance
19
+ - Learning curve for new users
20
+
21
+ ## Decision
22
+
23
+ Use **Zsh** as the default interactive shell with **Zinit** as the plugin manager.
24
+
25
+ ### Alternatives Considered
26
+
27
+ | Shell | Pros | Cons |
28
+ |-------|------|------|
29
+ | **Bash** | Universal, stable, POSIX | Limited interactive features |
30
+ | **Zsh** | Rich features, great plugins | Slower than bash (mitigated) |
31
+ | **Fish** | Modern, user-friendly | Not POSIX, less portable |
32
+ | **Nushell** | Structured data, modern | Breaking changes, immature |
33
+
34
+ ### Why Zsh
35
+
36
+ 1. **Default on macOS**: Pre-installed since Catalina
37
+ 2. **Plugin Ecosystem**: Massive library of plugins and themes
38
+ 3. **Compatibility**: POSIX-compatible, smooth migration from bash
39
+ 4. **Completion System**: Superior tab completion
40
+ 5. **Customization**: Highly configurable prompt and behavior
41
+ 6. **Community**: Large community, well-documented
42
+
43
+ ### Why Zinit
44
+
45
+ | Plugin Manager | Load Time | Features |
46
+ |----------------|-----------|----------|
47
+ | Oh-My-Zsh | ~800ms | Monolithic, many plugins |
48
+ | Prezto | ~400ms | Faster, modular |
49
+ | **Zinit** | ~200ms | Turbo mode, fine control |
50
+ | Antibody | ~300ms | Simple, fast |
51
+
52
+ Zinit provides:
53
+
54
+ - **Turbo Mode**: Deferred loading after prompt
55
+ - **Ice Modifiers**: Fine-grained control over plugin loading
56
+ - **Binary Installation**: Install completions and binaries
57
+ - **Profiling**: Built-in load time profiling
58
+
59
+ ## Implementation
60
+
61
+ ### Shell Layer System
62
+
63
+ ```text
64
+ dot_config/zsh/rc.d/
65
+ ├── 00-10: Core (env, history, options)
66
+ ├── 20-49: Middleware (zinit, completions)
67
+ ├── 50-89: Toolchain (languages, tools)
68
+ └── 90-99: UX (prompt, aliases, keybindings)
69
+ ```
70
+
71
+ ### Zinit Configuration
72
+
73
+ ```zsh
74
+ # Turbo mode: load after prompt displays
75
+ zinit ice wait lucid
76
+ zinit light zsh-users/zsh-autosuggestions
77
+
78
+ # Synchronous: needed immediately
79
+ zinit light zdharma-continuum/fast-syntax-highlighting
80
+ ```
81
+
82
+ ### Performance Targets
83
+
84
+ | Metric | Target | Achieved |
85
+ |--------|--------|----------|
86
+ | Cold Start | <500ms | ~300ms |
87
+ | Warm Start | <200ms | ~150ms |
88
+ | Plugin Load | Async | Yes |
89
+
90
+ ## Consequences
91
+
92
+ ### Positive
93
+
94
+ - Fast, responsive shell experience
95
+ - Rich plugin ecosystem (autosuggestions, syntax highlighting)
96
+ - Powerful completion system
97
+ - Compatible with existing bash scripts
98
+ - Modern prompt with Starship
99
+
100
+ ### Negative
101
+
102
+ - Requires zsh installation on some Linux distros
103
+ - Plugin manager adds complexity
104
+ - Some bash-isms need adjustment
105
+ - Turbo mode can cause brief visual delay
106
+
107
+ ### Neutral
108
+
109
+ - Users can still use bash for scripts
110
+ - Configuration more complex than vanilla shell
111
+ - Performance monitoring needed
112
+
113
+ ## Performance Optimizations
114
+
115
+ 1. **Caching**: Compile zsh files to `.zwc` bytecode
116
+ 2. **Lazy Loading**: Defer heavy tools (nvm, rvm) until first use
117
+ 3. **Turbo Mode**: Load plugins after prompt displays
118
+ 4. **Conditional Loading**: Skip unused features
119
+
120
+ ## References
121
+
122
+ - [Zsh Documentation](https://zsh.sourceforge.io/Doc/)
123
+ - [Zinit Wiki](https://zdharma-continuum.github.io/zinit/wiki/)
124
+ - [Starship Prompt](https://starship.rs/)
@@ -0,0 +1,62 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # ADR-007: Multi-Shell Parity Strategy
6
+
7
+ ## Status
8
+
9
+ Accepted
10
+
11
+ ## Date
12
+
13
+ 2026-03-08
14
+
15
+ ## Context
16
+
17
+ The dotfiles distribution supports three shells: Zsh (default since macOS Catalina), Fish (modern interactive shell), and Nushell (structured data shell). The codebase has 98 alias files and 52+ functions written in POSIX/Bash. Without a parity strategy, each shell gets a fragmented subset of functionality.
18
+
19
+ **Problem:** Fish had zero access to the alias/function library until v0.2.501 added bridge templates. Nushell had only 6 hardcoded aliases and no function access.
20
+
21
+ **Constraints:**
22
+
23
+ - Nushell's `source` is parse-time evaluated (no dynamic sourcing)
24
+ - Fish syntax differs significantly from POSIX (no `$()`, different `if`, no `[[`)
25
+ - Maintaining N copies of every alias/function is unsustainable
26
+
27
+ ## Decision
28
+
29
+ Adopt a **hub-and-spoke bridge architecture**:
30
+
31
+ 1. **Hub:** Canonical definitions live in `.chezmoitemplates/aliases/` (Bash/POSIX) and `.chezmoitemplates/functions/` (Bash)
32
+ 2. **Bash/Zsh spoke:** Direct inclusion via `90-ux-aliases.sh.tmpl` and `50-logic-functions.sh.tmpl`
33
+ 3. **Fish spoke:** Runtime bash bridge with caching (`aliases.fish.tmpl`, `functions.fish.tmpl`)
34
+ 4. **Nushell spoke:** Hybrid approach:
35
+ - Aliases: Runtime bash extraction cached to `~/.cache/nushell/bash-aliases.nu` (in `env.nu.tmpl`), sourced by `aliases.nu.tmpl`
36
+ - Functions: Chezmoi template-generated `def` wrappers delegating to bash (in `functions.nu.tmpl`)
37
+
38
+ **Parity tiers:**
39
+
40
+ - **Tier 1 (Full):** Zsh, Bash — all aliases, functions, lazy loading, cached eval
41
+ - **Tier 2 (Bridged):** Fish — all simple aliases, all functions via wrappers, `_cached_eval` caching
42
+ - **Tier 3 (Compatible):** Nushell — simple aliases (no complex bash syntax), all functions via bash delegation
43
+
44
+ ## Consequences
45
+
46
+ ### Positive
47
+
48
+ - Single source of truth for aliases and functions
49
+ - Adding a new alias/function automatically propagates to all shells
50
+ - Nushell users get access to 40+ functions that were previously unavailable
51
+ - Fish users get mtime-aware caching via `_cached_eval`
52
+
53
+ ### Negative
54
+
55
+ - Complex bash aliases (pipes, conditionals) are skipped for Nushell
56
+ - Function calls in Fish/Nushell incur bash subprocess overhead (~5ms per call)
57
+ - Cache invalidation requires shell restart or manual cache clear
58
+
59
+ ### Risks
60
+
61
+ - Nushell's rapid development may break bridge syntax in future versions
62
+ - Very large alias sets may slow Nushell startup during cache generation
@@ -0,0 +1,95 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # ADR-008: Alias System Architecture
6
+
7
+ ## Status
8
+
9
+ Accepted
10
+
11
+ ## Date
12
+
13
+ 2026-03-08
14
+
15
+ ## Context
16
+
17
+ The dotfiles manage 98 alias files across 30+ categories (git, docker, kubernetes, python, security, etc.). These need to load fast, support per-machine toggling, and work across Zsh, Bash, Fish, and Nushell.
18
+
19
+ **Design questions:**
20
+
21
+ 1. How to organize alias files for maintainability?
22
+ 2. How to control which aliases load on which machines?
23
+ 3. How to balance startup speed with alias availability?
24
+ 4. How to bridge POSIX aliases to non-POSIX shells?
25
+
26
+ ## Decision
27
+
28
+ ### Organization
29
+
30
+ Aliases are organized by tool/domain in `.chezmoitemplates/aliases/<category>/<name>.aliases.sh`:
31
+
32
+ ```text
33
+ aliases/
34
+ git/git.aliases.sh, signing.aliases.sh
35
+ docker/docker.aliases.sh
36
+ kubernetes/kubernetes.aliases.sh
37
+ security/crypto-utils.aliases.sh, ssh-keys.aliases.sh, ...
38
+ default/default.aliases.sh
39
+ ...
40
+ ```
41
+
42
+ ### Profile Tiers
43
+
44
+ Three profiles control alias scope (set in `.chezmoidata.toml`):
45
+
46
+ | Profile | Scope | Use Case |
47
+ |---------|-------|----------|
48
+ | `minimal` | Core only, excludes interactive/sudo | Servers, containers |
49
+ | `standard` | All core + selected ecosystem | Laptops, workstations |
50
+ | `full` | Everything including heavy/specialized | Dev machines |
51
+
52
+ ### Bucket Toggles
53
+
54
+ Per-category flags in `.chezmoidata.toml` under `[aliases.buckets]`:
55
+
56
+ ```toml
57
+ [aliases.buckets]
58
+ system = true
59
+ svn = false # disable on machines without SVN
60
+ ```
61
+
62
+ ### Two-Phase Loading
63
+
64
+ 1. **Eager (90-ux-aliases.sh):** Core categories loaded at shell startup (~40KB). Includes: archives, cd, clear, configuration, default, diagnostics, disk-usage, editor, git, interactive, installer, mkdir, modern, ps, rsync, sudo, system.
65
+
66
+ 2. **Lazy (91-ux-aliases-lazy.sh):** Ecosystem aliases deferred until first prompt via `precmd` hook. Includes: docker, kubernetes, terraform, gcloud, python, npm, rust, security, etc.
67
+
68
+ ### Function Groups (groups.json)
69
+
70
+ Functions use a parallel system with `groups.json` as a registry:
71
+
72
+ - Groups: api, curl, text, system, files, interactive, nav, security, misc
73
+ - Lazy-loaded per group on first invocation
74
+ - Stub functions replaced with real implementations on first call
75
+
76
+ ## Consequences
77
+
78
+ ### Positive
79
+
80
+ - Adding aliases is self-service: create a file in the right category
81
+ - Per-machine customization without forking
82
+ - Lazy loading keeps startup under 200ms even with 98 alias files
83
+ - `groups.json` enables automated bridge generation for Fish/Nushell
84
+
85
+ ### Negative
86
+
87
+ - Alias definitions wrap in functions (`set_default_aliases()`) for sourcing safety, adding complexity
88
+ - Two-phase loading means some aliases aren't available until after first prompt
89
+ - Profile/bucket system requires understanding .chezmoidata.toml
90
+
91
+ ### Trade-offs
92
+
93
+ - Chose file-per-category over monolithic alias file for maintainability
94
+ - Chose runtime extraction for Fish/Nushell over maintaining parallel definitions
95
+ - Chose lazy loading over compile-time bundling for flexibility
@@ -0,0 +1,131 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # ADR-009: Wallpaper-Driven Theming Engine
6
+
7
+ ## Status
8
+
9
+ Accepted
10
+
11
+ ## Date
12
+
13
+ 2026-05-12
14
+
15
+ ## Context
16
+
17
+ Most dotfiles distributions ship a small fixed palette (Solarized, Gruvbox,
18
+ Tokyo Night) chosen once and recycled across every terminal, editor, and
19
+ status bar. When the user changes wallpapers — a daily occurrence on macOS
20
+ with HEIC dark/light variants and on Linux with `swww`/`hyprpaper` —
21
+ terminal chrome stays static, creating visual incoherence between the
22
+ chosen wallpaper and the surrounding tooling.
23
+
24
+ Manual palette switching solves coherence but adds friction: it requires
25
+ the user to (a) generate a palette, (b) regenerate config for every tool
26
+ (`alacritty.toml`, `kitty.conf`, `wezterm.lua`, neovim themes, …), and
27
+ (c) reload each tool. Tools like pywal/wal automate (a) and (b), but
28
+ pywal palettes routinely fail WCAG contrast thresholds (especially for
29
+ bright wallpapers) and lack support for many of the format files this
30
+ project ships.
31
+
32
+ **Problem:** Reuse the user's chosen wallpaper as the single source of
33
+ truth for terminal + status-bar colors, with accessibility guaranteed and
34
+ no manual regeneration step.
35
+
36
+ **Constraints:**
37
+
38
+ - Output must satisfy **WCAG 2.2 AAA contrast** (≥ 7:1 for normal text,
39
+ ≥ 4.5:1 for large text) — non-negotiable, the dotfiles ship as
40
+ workstation infrastructure.
41
+ - Palette extraction must work offline on both macOS (HEIC, dynamic
42
+ wallpapers with embedded dark/light variants) and Linux (PNG/JPEG via
43
+ `swww`, `hyprpaper`, `feh`, GNOME).
44
+ - Total time from "user changes wallpaper" → "all terminals retinted"
45
+ must be ≤ 3 seconds (rebuild trigger + write of templated configs).
46
+ - Targets include Warp, iTerm2, Alacritty, Ghostty, Kitty, Wezterm,
47
+ Tmux, Neovim (multiple themes), VS Code, Firefox theme JSON, Niri
48
+ borders, Waybar, GTK/Qt (matugen pipeline).
49
+
50
+ ## Decision
51
+
52
+ Build a self-contained theming engine — `dot theme rebuild` —
53
+ implemented in `scripts/theme/` with the following pipeline:
54
+
55
+ 1. **Source detection** — locate the active wallpaper across macOS
56
+ (`defaults read … wallpaper`), GNOME/dconf, KDE, Niri, swww,
57
+ hyprpaper. HEIC dynamic wallpapers decompose into dark and light
58
+ variants; both feed the engine.
59
+
60
+ 2. **Color extraction** — **K-Means clustering in CIELAB** (not RGB).
61
+ CIELAB is perceptually uniform, so distances correlate with the way
62
+ humans see color similarity. 8-cluster K-Means yields a 16-color
63
+ ANSI palette (8 normal + 8 bright) plus 4 accent slots.
64
+
65
+ 3. **Contrast enforcement** — compute WCAG 2.2 contrast against the
66
+ chosen background; nudge each foreground hue along the lightness
67
+ axis until the ratio passes AAA. The nudge stays within the cluster
68
+ to preserve aesthetic intent. If AAA cannot be reached, fall back to
69
+ AA with a logged warning (never silently regress).
70
+
71
+ 4. **Format generation** — emit one canonical TOML palette to
72
+ `.chezmoidata/themes.toml`, then run `chezmoi apply` so every
73
+ theme-aware template (terminals, editors, status bars, browsers)
74
+ regenerates from a single declarative source.
75
+
76
+ 5. **Companion pipelines** — `dot-theme-sync` feeds the same accent
77
+ colors to **matugen** for Material You-style GTK/Qt theming on
78
+ Linux, keeping desktop chrome in lockstep with the terminal.
79
+
80
+ The whole flow is idempotent (`chezmoi apply` is no-op if nothing
81
+ changed), repeatable, and tested under `tests/unit/theme/`.
82
+
83
+ ## Consequences
84
+
85
+ ### Positive
86
+
87
+ - Single source of truth: change the wallpaper, every tool retints in
88
+ one keystroke.
89
+ - Accessibility is structural, not opt-in — every shipped palette
90
+ passes WCAG AAA before it touches a config file.
91
+ - No competing "premium" dotfiles distribution (mathiasbynens, holman,
92
+ paulirish, omakub) ships anything similar. The engine is a defining
93
+ differentiator and surfaced in the README hero.
94
+ - Reuses chezmoi's templating — no new templating layer to maintain.
95
+
96
+ ### Negative
97
+
98
+ - K-Means on a 4K wallpaper takes ~500–800 ms; cached after first run,
99
+ but the cold path is non-trivial.
100
+ - HEIC handling on Linux requires `libheif` (extra dep on Debian/Ubuntu
101
+ before 24.04).
102
+ - Contrast enforcement can produce slightly different palettes from the
103
+ same wallpaper across major OS versions when system color profiles
104
+ differ (mitigated by snapshot tests).
105
+
106
+ ### Risks
107
+
108
+ - Wallpapers with extreme dynamic range (pure-white backgrounds, deep
109
+ monochrome) may fail to produce an aesthetically pleasing 16-color
110
+ palette even when WCAG AAA is satisfied. Mitigation: maintainer
111
+ curation of a fallback theme set in `.chezmoidata/themes.toml`.
112
+ - Future Wayland compositors may not expose a stable wallpaper-detection
113
+ API. The engine isolates source detection in a single module so the
114
+ blast radius of compositor churn is one file.
115
+
116
+ ## Alternatives Considered
117
+
118
+ | Alternative | Why rejected |
119
+ |---|---|
120
+ | pywal/wal | RGB K-Means, no WCAG enforcement, limited target list. |
121
+ | matugen alone | Excellent for GTK/Qt; not terminal-aware. We use it *in addition*, not instead. |
122
+ | Static curated themes (Tokyo Night et al.) | Loses the "wallpaper coherence" property that motivates the whole project. |
123
+ | Hand-roll per-terminal scripts | Doesn't compose with chezmoi; loses the single-source-of-truth invariant. |
124
+
125
+ ## References
126
+
127
+ - WCAG 2.2 contrast: <https://www.w3.org/TR/WCAG22/#contrast-minimum>
128
+ - CIELAB color space: <https://en.wikipedia.org/wiki/CIELAB_color_space>
129
+ - `scripts/theme/` — engine source
130
+ - `.chezmoidata/themes.toml` — output palette schema
131
+ - Issue #873 — captures this ADR alongside `llms.txt`