@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
package/docs/README.md ADDED
@@ -0,0 +1,82 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # Documentation
6
+
7
+ Start here. Then go deeper.
8
+
9
+ ## The Manual
10
+
11
+ The complete reference is the `.dotfiles` Manual — a multi-format book covering every concept, tutorial, reference, and recipe.
12
+
13
+ - Online: <https://sebastienrousseau.github.io/dotfiles/manual/> (HTML, PDF, EPUB, ASCII)
14
+ - Locally: `dot manual` opens the HTML in your browser
15
+ - Sources: [`docs/manual/`](manual/)
16
+
17
+ Quick jumps into the Manual:
18
+
19
+ - [Introduction](manual/00-introduction.md) — who, what, how
20
+ - [Concepts](manual/01-concepts/) — architecture, trust model, theme engine, fleet, self-healing
21
+ - [Tutorials](manual/02-tutorials/) — first install, wallpaper→theme, profiles, secrets, fleet
22
+ - [Reference](manual/03-reference/) — CLI, config files, environment, templates, feature flags
23
+ - [Cookbook](manual/04-cookbook/) — 40+ recipes, troubleshooting, FAQ
24
+
25
+ ## Start
26
+
27
+ - [Install](guides/INSTALL.md)
28
+ - [Troubleshooting](guides/TROUBLESHOOTING.md)
29
+ - [Support matrix](reference/SUPPORT_MATRIX.md)
30
+
31
+ ## Daily use
32
+
33
+ - [Utilities and `dot` CLI](reference/UTILS.md)
34
+ - [Operations](operations/OPERATIONS.md)
35
+ - [Trusted agent workstation](operations/TRUSTED_AGENT_WORKSTATION.md)
36
+ - [Workstation attestation](operations/ATTESTATION.md)
37
+ - [Interoperability](architecture/INTEROP.md)
38
+ - [Agent interoperability](interop/A2A.md)
39
+ - [AI integrations](AI.md)
40
+
41
+ ## Security and trust
42
+
43
+ - [Security overview](security/SECURITY.md)
44
+ - [Security checklist](security/SECURITY_CHECKLIST.md)
45
+ - [Policy bundle releases](security/POLICY_RELEASES.md)
46
+ - [Secrets](security/SECRETS.md)
47
+ - [Compliance](security/COMPLIANCE.md)
48
+ - [Threat model](security/THREAT_MODEL.md)
49
+
50
+ ## Build and maintain
51
+
52
+ - [Testing](operations/TESTING.md)
53
+ - [Reliability](operations/RELIABILITY.md)
54
+ - [Naming conventions](NAMING_CONVENTIONS.md)
55
+ - [Architecture](architecture/ARCHITECTURE.md)
56
+ - [Repository layout](architecture/REPO_LAYOUT.md)
57
+ - [Architecture decisions](adr/README.md)
58
+
59
+ ## Repository map
60
+
61
+ | Path | Purpose |
62
+ | :--- | :--- |
63
+ | `docs/` | Guides, reference, security, and architecture |
64
+ | `scripts/` | Repo-only scripts and `dot` command internals |
65
+ | `install/` | Installer and provisioning helpers |
66
+ | `dot_config/` | Managed user configuration files |
67
+ | `dot_local/` | Managed local executables |
68
+ | `examples/` | Executable examples |
69
+ | `tests/` | Unit, integration, and framework coverage |
70
+
71
+ ## Platform guides
72
+
73
+ - [WSL2 and Nix](guides/WSL2_NIX_TROUBLESHOOTING.md)
74
+ - [Neovim IDE](guides/NEOVIM_IDE_GUIDE.md)
75
+
76
+ ## Reference
77
+
78
+ - [Features](reference/FEATURES.md)
79
+ - [Tools](reference/TOOLS.md)
80
+ - [Aliases](reference/ALIASES.md)
81
+ - [Roadmap](operations/ROADMAP.md)
82
+ - [Version sync](operations/VERSION_SYNC.md)
@@ -0,0 +1,59 @@
1
+ title: ".dotfiles"
2
+ description: "Cross-platform, signed, local-first dotfiles for macOS, Linux, and WSL — published at doc.dotfiles.io."
3
+ url: "https://doc.dotfiles.io"
4
+ baseurl: ""
5
+
6
+ # Jekyll renders this site from docs/ — see .github/workflows/pages.yml.
7
+ # Theme is the GitHub-hosted Cayman skin (zero-Gemfile setup); switch to
8
+ # `remote_theme: just-the-docs/just-the-docs` later if a richer
9
+ # navigation/search UX is wanted (requires plugin allowlist update on
10
+ # GH Pages side).
11
+ theme: jekyll-theme-cayman
12
+
13
+ plugins:
14
+ - jekyll-relative-links
15
+ - jekyll-seo-tag
16
+ - jekyll-sitemap
17
+ - jekyll-redirect-from
18
+ # Renders `README.md` as the directory index where present (matches
19
+ # the GitHub-browse experience for users coming from the repo links
20
+ # in docs/index.md).
21
+ - jekyll-readme-index
22
+
23
+ relative_links:
24
+ enabled: true
25
+ collections: true
26
+
27
+ # Treat *.md as pages so cross-page links work without trailing-slash
28
+ # kludges; include CNAME so the published artifact preserves it across
29
+ # workflow deploys.
30
+ include:
31
+ - CNAME
32
+ - .well-known
33
+
34
+ exclude:
35
+ - "*.tmpl"
36
+ - "manual/_toc.yml"
37
+ - "scripts/"
38
+ - "Gemfile"
39
+ - "Gemfile.lock"
40
+ - "vendor/"
41
+
42
+ markdown: kramdown
43
+ kramdown:
44
+ input: GFM
45
+ syntax_highlighter: rouge
46
+ hard_wrap: false
47
+
48
+ # Many of our docs include chezmoi/Go-template snippets like
49
+ # `{{ .variable }}` inside fenced code blocks. Liquid runs BEFORE
50
+ # kramdown sees those fences and would try to resolve the placeholders
51
+ # as Liquid expressions (silently dropping them from the output). Each
52
+ # .md file therefore carries explicit `render_with_liquid: false` in
53
+ # its frontmatter — a site-wide default in this block was not honored
54
+ # reliably, so we keep the kill-switch per-page instead.
55
+ defaults:
56
+ - scope:
57
+ path: ""
58
+ values:
59
+ layout: default
@@ -0,0 +1,118 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+ {% raw %}
5
+
6
+ # ADR-001: Multi-stage CI/CD Pipeline Design
7
+
8
+ **Status**: Accepted
9
+ **Date**: 2026-02-09
10
+ **Authors**: @sebastienrousseau
11
+
12
+ ## Context
13
+
14
+ The dotfiles repository requires a CI/CD pipeline that:
15
+
16
+ - Validates changes across multiple platforms (Linux, macOS)
17
+ - Runs security scans to detect secrets and vulnerabilities
18
+ - Tests shell scripts, Lua configurations, and Nix expressions
19
+ - Maintains fast feedback loops for developers
20
+ - Minimizes GitHub Actions costs (runner minutes)
21
+
22
+ Traditional approaches run all checks on every commit, leading to:
23
+
24
+ - Wasted compute on unrelated changes (e.g., running Lua linting when only docs change)
25
+ - High costs from macOS runners ($0.08/min vs $0.008/min for Linux)
26
+ - Long feedback times from sequential job execution
27
+
28
+ ## Decision
29
+
30
+ Implement a **5-stage progressive CI pipeline** with path-based filtering:
31
+
32
+ ### Stage 1: Change Detection
33
+
34
+ Use `dorny/paths-filter` to detect which file categories changed:
35
+
36
+ - `shell`: *.sh, scripts/**, install/**
37
+ - `lua`: dot_config/nvim/**, *.lua
38
+ - `nix`: nix/**, *.nix
39
+ - `config`: dot_*/**, .chezmoitemplates/**
40
+
41
+ ### Stage 2: Lint (Parallel, Conditional)
42
+
43
+ - **lint-shell**: Only runs if shell files changed
44
+ - **lint-lua**: Only runs if Lua files changed
45
+ - Run in parallel to minimize wall-clock time
46
+
47
+ ### Stage 3: Security (Always on PRs)
48
+
49
+ - **secrets-scan**: Gitleaks on every PR (critical)
50
+ - **link-check**: Only on schedule (expensive)
51
+
52
+ ### Stage 4: Test (Conditional Matrix)
53
+
54
+ - Linux-only for PRs (cheapest)
55
+ - Full matrix (Linux + macOS) on schedule/manual trigger
56
+ - Docker container tests for installation validation
57
+
58
+ ### Stage 5: Quality (Schedule/Manual Only)
59
+
60
+ - Idempotency verification
61
+ - Performance benchmarks
62
+ - Nix flake checks
63
+
64
+ ### Cost Optimization Strategies
65
+
66
+ 1. **Path filters**: Skip jobs when files don't match
67
+ 2. **Concurrency groups**: Cancel in-progress runs on new pushes
68
+ 3. **Conditional matrices**: Expensive OS testing only on schedule
69
+ 4. **Aggressive caching**: Tools, dependencies, databases
70
+
71
+ ## Consequences
72
+
73
+ ### Positive
74
+
75
+ - ~50% reduction in GitHub Actions minutes
76
+ - Fast feedback for most changes (1-3 minutes)
77
+ - Comprehensive testing still available via schedule/manual
78
+ - Clear separation of concerns between stages
79
+
80
+ ### Negative
81
+
82
+ - Complexity in workflow configuration
83
+ - Some bugs might only surface in scheduled runs
84
+ - Path filter maintenance required as repo structure evolves
85
+
86
+ ### Neutral
87
+
88
+ - Developers can trigger full CI manually with `workflow_dispatch`
89
+ - Breaking changes to CI require testing across all stages
90
+
91
+ ## Implementation
92
+
93
+ ```yaml
94
+ # Key patterns used
95
+ on:
96
+ push:
97
+ paths:
98
+ - '**.sh' # Only trigger on shell changes
99
+
100
+ concurrency:
101
+ group: ${{ github.workflow }}-${{ github.ref }}
102
+ cancel-in-progress: true
103
+
104
+ jobs:
105
+ changes:
106
+ outputs:
107
+ shell: ${{ steps.filter.outputs.shell }}
108
+
109
+ lint-shell:
110
+ needs: changes
111
+ if: needs.changes.outputs.shell == 'true'
112
+ ```
113
+
114
+ ## References
115
+
116
+ - [GitHub Actions Path Filtering](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)
117
+ - [dorny/paths-filter](https://github.com/dorny/paths-filter)
118
+ {% endraw %}
@@ -0,0 +1,130 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # ADR-002: Shell Performance Optimization Strategy
6
+
7
+ **Status**: Accepted
8
+ **Date**: 2026-02-09
9
+ **Authors**: @sebastienrousseau
10
+
11
+ ## Context
12
+
13
+ Shell startup time directly impacts developer productivity. Every new terminal,
14
+ tmux pane, or shell command execution incurs this cost. With rich shell
15
+ configurations (completions, prompts, plugins), startup can easily exceed 1-2
16
+ seconds.
17
+
18
+ Goals:
19
+
20
+ - Target startup time: <500ms for interactive shells
21
+ - Maintain full functionality (completions, syntax highlighting, git info)
22
+ - Support both zsh and bash
23
+ - Work across macOS and Linux
24
+
25
+ ## Decision
26
+
27
+ Implement a **multi-layer performance optimization strategy**:
28
+
29
+ ### Layer 1: Compilation and Caching
30
+
31
+ ```bash
32
+ # Compile zsh files to .zwc format
33
+ _cached_eval() {
34
+ local cache="$HOME/.cache/zsh/$1.zwc"
35
+ if [[ ! -f "$cache" || "$2" -nt "$cache" ]]; then
36
+ eval "$($2)" > "$cache.tmp"
37
+ zcompile "$cache.tmp" "$cache"
38
+ fi
39
+ source "$cache"
40
+ }
41
+ ```
42
+
43
+ - Compile frequently-sourced files to bytecode
44
+ - Cache command output (brew shellenv, mise activate)
45
+ - Invalidate cache when source files change
46
+
47
+ ### Layer 2: Lazy Loading
48
+
49
+ Defer loading of heavy components until first use:
50
+
51
+ ```bash
52
+ # Lazy load completions
53
+ function kubectl() {
54
+ unfunction kubectl
55
+ source <(kubectl completion zsh)
56
+ kubectl "$@"
57
+ }
58
+ ```
59
+
60
+ - Completions loaded on first command use
61
+ - NVM/RVM loaded only when node/ruby commands invoked
62
+ - Heavy plugins deferred via zinit's `wait` modifier
63
+
64
+ ### Layer 3: Zinit Turbo Mode
65
+
66
+ ```zsh
67
+ zinit ice wait lucid
68
+ zinit light zsh-users/zsh-autosuggestions
69
+ ```
70
+
71
+ - Plugins load asynchronously after prompt
72
+ - Critical plugins (syntax highlighting) load synchronously
73
+ - Most plugins have 0ms impact on startup
74
+
75
+ ### Layer 4: Conditional Loading
76
+
77
+ ```bash
78
+ # Only load if command exists
79
+ [[ -x /opt/homebrew/bin/brew ]] && eval "$(/opt/homebrew/bin/brew shellenv)"
80
+
81
+ # Skip in non-interactive shells
82
+ [[ $- != *i* ]] && return
83
+ ```
84
+
85
+ - Platform-specific code guarded by OS detection
86
+ - Heavy features opt-in via environment variables
87
+ - Non-interactive shells get minimal config
88
+
89
+ ### Monitoring
90
+
91
+ Benchmark script to track startup time:
92
+
93
+ ```bash
94
+ hyperfine --warmup 3 --runs 10 "zsh -i -c exit"
95
+ ```
96
+
97
+ CI enforces 500ms threshold with warnings.
98
+
99
+ ## Consequences
100
+
101
+ ### Positive
102
+
103
+ - Consistent <500ms startup across platforms
104
+ - Full functionality preserved
105
+ - Easy to add new tools without performance regression
106
+ - Clear patterns for contributors to follow
107
+
108
+ ### Negative
109
+
110
+ - First invocation of lazy-loaded commands is slower
111
+ - Cache invalidation bugs can cause stale behavior
112
+ - Complexity in understanding load order
113
+
114
+ ### Neutral
115
+
116
+ - Profiling required when adding new plugins
117
+ - Trade-off between convenience and performance explicit
118
+
119
+ ## Measurements
120
+
121
+ | Configuration | Startup Time |
122
+ |---------------|--------------|
123
+ | Vanilla zsh | ~50ms |
124
+ | With oh-my-zsh | ~800ms |
125
+ | This approach | ~200-400ms |
126
+
127
+ ## References
128
+
129
+ - [Zsh Startup Optimization](https://htr3n.github.io/2018/07/faster-zsh/)
130
+ - [Zinit Turbo Mode](https://zdharma-continuum.github.io/zinit/wiki/INTRODUCTION/)
@@ -0,0 +1,158 @@
1
+ ---
2
+ render_with_liquid: false
3
+ ---
4
+
5
+ # ADR-003: Security-First Approach
6
+
7
+ **Status**: Accepted
8
+ **Date**: 2026-02-09
9
+ **Authors**: @sebastienrousseau
10
+
11
+ ## Context
12
+
13
+ Dotfiles repositories present unique security challenges:
14
+
15
+ - They configure system behavior and permissions
16
+ - They may contain or reference secrets (API keys, tokens)
17
+ - They execute scripts with user privileges
18
+ - They're often cloned to multiple machines
19
+
20
+ A security breach in dotfiles can compromise all systems using them.
21
+
22
+ ## Decision
23
+
24
+ Implement a **defense-in-depth security model** with multiple layers:
25
+
26
+ ### Layer 1: Secrets Protection
27
+
28
+ **Never commit secrets:**
29
+
30
+ ```bash
31
+ # .gitleaks.toml - block common secret patterns
32
+ [[rules]]
33
+ id = "generic-api-key"
34
+ regex = '''(?i)(api[_-]?key|apikey)\s*[:=]\s*['"]?([a-zA-Z0-9]{20,})'''
35
+ ```
36
+
37
+ **Encrypted secrets with age:**
38
+
39
+ ```bash
40
+ # Secrets stored encrypted, decrypted at apply time
41
+ chezmoi.encryption = "age"
42
+ chezmoi.age.identity = "~/.config/chezmoi/key.txt"
43
+ ```
44
+
45
+ **CI enforcement:**
46
+
47
+ - Gitleaks runs on every PR
48
+ - TruffleHog for verified secrets detection
49
+ - Block merge if secrets detected
50
+
51
+ ### Layer 2: Input Validation
52
+
53
+ **Path traversal prevention:**
54
+
55
+ ```bash
56
+ # Validate all user inputs
57
+ if [[ ! "$template_lang" =~ ^[a-zA-Z0-9_-]+$ ]]; then
58
+ die "Invalid template name: $template_lang"
59
+ fi
60
+ ```
61
+
62
+ **Safe file operations:**
63
+
64
+ ```bash
65
+ # Use absolute paths, validate before operations
66
+ local real_path
67
+ real_path="$(realpath -m "$user_input")"
68
+ if [[ "$real_path" != "$allowed_base"/* ]]; then
69
+ die "Path outside allowed directory"
70
+ fi
71
+ ```
72
+
73
+ ### Layer 3: Opt-in System Modifications
74
+
75
+ **Dangerous operations require explicit consent:**
76
+
77
+ ```bash
78
+ # Security scripts are opt-in
79
+ if [ "${DOTFILES_SECURITY:-0}" != "1" ]; then
80
+ echo "Security hardening is opt-in. Set DOTFILES_SECURITY=1 to enable."
81
+ exit 0
82
+ fi
83
+ ```
84
+
85
+ **Comprehensive logging:**
86
+
87
+ ```bash
88
+ # All system modifications logged
89
+ log_security_change() {
90
+ echo "[$(date -Iseconds)] $1" >> "$HOME/.local/share/dotfiles-security.log"
91
+ }
92
+ ```
93
+
94
+ ### Layer 4: CI Security Scanning
95
+
96
+ **Multi-tool approach:**
97
+
98
+ - **Gitleaks**: Secrets in git history
99
+ - **Shellcheck**: Shell script vulnerabilities
100
+ - **Checkov**: Infrastructure misconfigurations
101
+ - **Trivy**: Container vulnerabilities (when applicable)
102
+ - **CodeQL**: Static analysis for Python/JavaScript
103
+
104
+ **Weekly deep scans:**
105
+
106
+ ```yaml
107
+ schedule:
108
+ - cron: '0 2 * * 0' # Weekly security audit
109
+ ```
110
+
111
+ ### Layer 5: Minimal Privileges
112
+
113
+ **Scripts request only needed permissions:**
114
+
115
+ ```bash
116
+ # Don't run as root unless necessary
117
+ if [ "$(id -u)" = "0" ]; then
118
+ die "This script should not run as root"
119
+ fi
120
+
121
+ # Use sudo only for specific commands
122
+ sudo sysctl -w net.ipv4.tcp_keepalive_time=60
123
+ ```
124
+
125
+ ## Consequences
126
+
127
+ ### Positive
128
+
129
+ - Secrets never enter git history
130
+ - System modifications are auditable
131
+ - Multiple layers catch different vulnerability types
132
+ - Contributors have clear security patterns to follow
133
+
134
+ ### Negative
135
+
136
+ - Additional complexity in scripts
137
+ - Encrypted secrets require key management
138
+ - Some features disabled by default (friction)
139
+
140
+ ### Neutral
141
+
142
+ - Security vs convenience trade-offs explicit
143
+ - Regular security audits via scheduled CI
144
+
145
+ ## Security Checklist for Contributors
146
+
147
+ - [ ] No hardcoded secrets (use environment variables or age encryption)
148
+ - [ ] Validate all user inputs
149
+ - [ ] Use absolute paths for file operations
150
+ - [ ] Document any system modifications
151
+ - [ ] Test scripts with shellcheck
152
+ - [ ] Add appropriate permission checks
153
+
154
+ ## References
155
+
156
+ - [OWASP Secure Coding Practices](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/)
157
+ - [Age Encryption](https://github.com/FiloSottile/age)
158
+ - [Gitleaks](https://github.com/gitleaks/gitleaks)