@sebastienrousseau/dotfiles 0.2.481 → 0.2.500

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 (546) hide show
  1. package/CHANGELOG.md +122 -32
  2. package/LICENSE +1 -1
  3. package/README.md +211 -242
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +2 -2
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +58 -249
  9. package/docs/adr/ADR-004-cli-architecture.md +2 -2
  10. package/docs/adr/ADR-006-shell-selection.md +2 -2
  11. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  12. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  13. package/docs/adr/README.md +2 -3
  14. package/docs/architecture/ARCHITECTURE.md +113 -0
  15. package/docs/architecture/INTEROP.md +36 -0
  16. package/docs/architecture/REPO_LAYOUT.md +237 -0
  17. package/docs/architecture/WALKTHROUGH.md +82 -0
  18. package/docs/architecture/fleet-deployment.md +73 -0
  19. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  20. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  21. package/docs/{PLAN.md → archive/PLAN.md} +1 -1
  22. package/docs/guides/INSTALL.md +140 -0
  23. package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
  24. package/docs/guides/THEMING.md +222 -0
  25. package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
  26. package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
  27. package/docs/index.md +39 -0
  28. package/docs/interop/A2A.md +32 -0
  29. package/docs/manual/00-introduction.md +85 -0
  30. package/docs/manual/01-concepts/01-architecture.md +134 -0
  31. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  32. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  33. package/docs/manual/01-concepts/04-fleet.md +142 -0
  34. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  35. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  36. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  37. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  38. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  39. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  40. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  41. package/docs/manual/03-reference/02-config-files.md +259 -0
  42. package/docs/manual/03-reference/03-environment.md +120 -0
  43. package/docs/manual/03-reference/04-templates.md +184 -0
  44. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  45. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  46. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  47. package/docs/manual/04-cookbook/03-faq.md +167 -0
  48. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  49. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  50. package/docs/manual/05-appendices/C-glossary.md +36 -0
  51. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  52. package/docs/manual/05-appendices/E-license.md +34 -0
  53. package/docs/manual/_toc.yml +58 -0
  54. package/docs/manual/command-index.md +58 -0
  55. package/docs/manual/concept-index.md +164 -0
  56. package/docs/operations/ATTESTATION.md +39 -0
  57. package/docs/operations/MAINTENANCE.md +59 -0
  58. package/docs/operations/MIGRATION.md +101 -0
  59. package/docs/operations/OPERATIONS.md +164 -0
  60. package/docs/operations/RELIABILITY.md +116 -0
  61. package/docs/{ROADMAP.md → operations/ROADMAP.md} +11 -11
  62. package/docs/operations/TESTING.md +195 -0
  63. package/docs/operations/TRACEABILITY.md +31 -0
  64. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  65. package/docs/operations/VERSION_SYNC.md +344 -0
  66. package/docs/{ALIASES.md → reference/ALIASES.md} +2 -6
  67. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  68. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  69. package/docs/reference/FEATURES.md +62 -0
  70. package/docs/reference/FONTS.md +108 -0
  71. package/docs/reference/PROFILES.md +65 -0
  72. package/docs/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
  73. package/docs/reference/SCRIPTS.md +67 -0
  74. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  75. package/docs/reference/THEMES.md +113 -0
  76. package/docs/reference/TOOLS.md +105 -0
  77. package/docs/reference/UTILS.md +151 -0
  78. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  79. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  80. package/docs/security/COMPLIANCE.md +453 -0
  81. package/docs/security/ENCRYPTION.md +52 -0
  82. package/docs/security/FMEA.md +155 -0
  83. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  84. package/docs/security/KEYS.md +45 -0
  85. package/docs/security/MCP_POLICY.md +69 -0
  86. package/docs/security/POLICY_RELEASES.md +33 -0
  87. package/docs/security/README.md +24 -0
  88. package/docs/security/SECRETS.md +146 -0
  89. package/docs/security/SECURITY.md +41 -0
  90. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  91. package/docs/security/SOUP_REGISTER.md +32 -0
  92. package/docs/security/THREAT_MODEL.md +120 -0
  93. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  94. package/docs/themes/README.md +3 -17
  95. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  96. package/docs/themes/hero-shot.svg +78 -0
  97. package/dot_config/.module-manifest.json +69 -0
  98. package/dot_config/ai/identity.md +20 -0
  99. package/dot_config/ai/patterns/architect.md +14 -0
  100. package/dot_config/ai/patterns/hardener.md +13 -0
  101. package/dot_config/ai/patterns/refactor.md +13 -0
  102. package/dot_config/aider/aider.conf.yml +1 -1
  103. package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
  104. package/dot_config/atuin/config.toml +18 -1
  105. package/dot_config/bat/config +16 -1
  106. package/dot_config/claude/mcp_servers.json +3 -32
  107. package/dot_config/dotfiles/agent-card.json +29 -0
  108. package/dot_config/dotfiles/agent-profiles.json +92 -0
  109. package/dot_config/dotfiles/boot/README.md +1 -1
  110. package/dot_config/dotfiles/grub/README.md +1 -1
  111. package/dot_config/dotfiles/lock/README.md +1 -1
  112. package/dot_config/dotfiles/mcp-lock.json +33 -0
  113. package/dot_config/dotfiles/mcp-policy.json +52 -0
  114. package/dot_config/dotfiles/mcp-registry.json +47 -0
  115. package/dot_config/dotfiles/model-registry.json +20 -0
  116. package/dot_config/dotfiles/policy-bundles.json +38 -0
  117. package/dot_config/dotfiles/prompt-registry.json +16 -0
  118. package/dot_config/dotfiles/versions.env +18 -0
  119. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  120. package/dot_config/environment.d/90-wayland.conf +19 -0
  121. package/dot_config/firefox/user.js.tmpl +58 -0
  122. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  123. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  124. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  125. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  126. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  127. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  128. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  129. package/dot_config/fish/config.fish.tmpl +44 -0
  130. package/dot_config/fish/fish_plugins +1 -0
  131. package/dot_config/fish/functions/_.fish +3 -0
  132. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  133. package/dot_config/fish/functions/als.fish +46 -0
  134. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  135. package/dot_config/fish/functions/c.fish +3 -0
  136. package/dot_config/fish/functions/cat.fish +9 -0
  137. package/dot_config/fish/functions/d.fish +7 -0
  138. package/dot_config/fish/functions/dot.fish +34 -0
  139. package/dot_config/fish/functions/h.fish +3 -0
  140. package/dot_config/fish/functions/l.fish +7 -0
  141. package/dot_config/fish/functions/la.fish +7 -0
  142. package/dot_config/fish/functions/ll.fish +7 -0
  143. package/dot_config/fish/functions/log_error.fish +13 -0
  144. package/dot_config/fish/functions/log_info.fish +13 -0
  145. package/dot_config/fish/functions/lr.fish +7 -0
  146. package/dot_config/fish/functions/lra.fish +7 -0
  147. package/dot_config/fish/functions/ls.fish +7 -0
  148. package/dot_config/fish/functions/lt.fish +7 -0
  149. package/dot_config/fish/functions/lta.fish +7 -0
  150. package/dot_config/fish/functions/notify-run.fish +11 -0
  151. package/dot_config/fish/functions/q.fish +3 -0
  152. package/dot_config/fish/functions/silent-run.fish +7 -0
  153. package/dot_config/fish/functions/yy.fish +8 -0
  154. package/dot_config/fontconfig/fonts.conf.tmpl +13 -0
  155. package/dot_config/foot/foot.ini.tmpl +33 -0
  156. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  157. package/dot_config/fzf/fzf.zsh +48 -0
  158. package/dot_config/ghostty/config.tmpl +69 -565
  159. package/dot_config/git/allowed_signers.tmpl +18 -0
  160. package/dot_config/git/commit-template +10 -0
  161. package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
  162. package/dot_config/goose/config.yaml +2 -2
  163. package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
  164. package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
  165. package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
  166. package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
  167. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  168. package/dot_config/just/justfile +18 -0
  169. package/dot_config/kanshi/config.tmpl +22 -0
  170. package/dot_config/kitty/kitty.conf.tmpl +44 -508
  171. package/dot_config/lazygit/config.yml +18 -6
  172. package/dot_config/mako/config +47 -0
  173. package/dot_config/micro/settings.json +3 -0
  174. package/dot_config/mimeapps.list +77 -0
  175. package/dot_config/mise/config.toml +63 -5
  176. package/dot_config/mongosh/mongoshrc.js +1 -0
  177. package/dot_config/mpv/input.conf +47 -0
  178. package/dot_config/mpv/mpv.conf +47 -0
  179. package/dot_config/niri/config.kdl.tmpl +327 -0
  180. package/dot_config/nushell/aliases.nu +18 -0
  181. package/dot_config/nushell/completions.nu.tmpl +52 -0
  182. package/dot_config/nushell/config.nu.tmpl +86 -0
  183. package/dot_config/nushell/env.nu.tmpl +94 -0
  184. package/dot_config/nushell/functions.nu.tmpl +17 -0
  185. package/dot_config/nvim/init.lua +14 -0
  186. package/dot_config/nvim/lazy-lock.json +45 -14
  187. package/dot_config/nvim/lua/config/autocmds.lua +45 -1
  188. package/dot_config/nvim/lua/config/keymaps.lua +13 -8
  189. package/dot_config/nvim/lua/config/lazy.lua +22 -12
  190. package/dot_config/nvim/lua/config/options.lua +1 -0
  191. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  192. package/dot_config/nvim/lua/plugins/coding.lua +11 -29
  193. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  194. package/dot_config/nvim/lua/plugins/dap.lua +215 -4
  195. package/dot_config/nvim/lua/plugins/editor.lua +6 -10
  196. package/dot_config/nvim/lua/plugins/git.lua +1 -0
  197. package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
  198. package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
  199. package/dot_config/nvim/lua/plugins/rust.lua +1 -0
  200. package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
  201. package/dot_config/nvim/lua/plugins/ui.lua +23 -51
  202. package/dot_config/paru/paru.conf +10 -0
  203. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  204. package/dot_config/pueue/pueue.yml +34 -0
  205. package/dot_config/raycast/README.md +1 -1
  206. package/dot_config/ripgrep/ripgreprc +21 -0
  207. package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
  208. package/dot_config/shell/05-core-safety.sh +47 -0
  209. package/dot_config/shell/10-secrets.sh +40 -0
  210. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  211. package/dot_config/shell/40-ls-colors.sh +48 -0
  212. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  213. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  214. package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
  215. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
  216. package/dot_config/shell/Brewfile.cli +8 -0
  217. package/dot_config/shell/README.md +9 -9
  218. package/dot_config/shell/als_data.txt.tmpl +65 -0
  219. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  220. package/dot_config/shell/custom/context_suggest.zsh +50 -50
  221. package/dot_config/shell/custom/error_analysis.zsh +29 -29
  222. package/dot_config/starship.toml.tmpl +85 -7
  223. package/dot_config/swaylock/config +43 -0
  224. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  225. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  226. package/dot_config/systemd/user/pueued.service +12 -0
  227. package/dot_config/systemd/user/ssh-agent.service +12 -0
  228. package/dot_config/tmux/tmux.conf.tmpl +80 -38
  229. package/dot_config/topgrade.toml.tmpl +54 -0
  230. package/dot_config/user-dirs.dirs +9 -0
  231. package/dot_config/vscode/settings.json.tmpl +9 -50
  232. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  233. package/dot_config/waybar/style.css.tmpl +211 -0
  234. package/dot_config/wezterm/wezterm.lua.tmpl +31 -203
  235. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  236. package/dot_config/yazi/keymap.toml +67 -0
  237. package/dot_config/yazi/theme.toml +102 -0
  238. package/dot_config/zathura/zathurarc +52 -0
  239. package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
  240. package/dot_config/zsh/dot_zprofile +1 -7
  241. package/dot_config/zsh/dot_zshenv +2 -3
  242. package/dot_config/zsh/dot_zshrc.tmpl +368 -69
  243. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  244. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
  245. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
  246. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  247. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
  248. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  249. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  250. package/dot_local/bin/executable_ai-update +195 -0
  251. package/dot_local/bin/executable_ai_core +113 -91
  252. package/dot_local/bin/executable_antigravity +11 -0
  253. package/dot_local/bin/executable_b64 +61 -36
  254. package/dot_local/bin/executable_bm +77 -0
  255. package/dot_local/bin/executable_cb +39 -0
  256. package/dot_local/bin/executable_dot +543 -132
  257. package/dot_local/bin/executable_dot-ai +36 -0
  258. package/dot_local/bin/executable_dot-bootstrap +77 -0
  259. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  260. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  261. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  262. package/dot_local/bin/executable_dot-theme-sync +952 -0
  263. package/dot_local/bin/executable_dot_completion +2 -0
  264. package/dot_local/bin/executable_dtags +28 -0
  265. package/dot_local/bin/executable_epoch +43 -38
  266. package/dot_local/bin/executable_extract +32 -99
  267. package/dot_local/bin/executable_gbd +52 -0
  268. package/dot_local/bin/executable_gd +42 -0
  269. package/dot_local/bin/executable_git-ai-commit +35 -20
  270. package/dot_local/bin/executable_git-ai-diff +33 -18
  271. package/dot_local/bin/executable_gl +101 -0
  272. package/dot_local/bin/executable_hash +56 -18
  273. package/dot_local/bin/executable_hashsum +160 -0
  274. package/dot_local/bin/executable_hex +44 -8
  275. package/dot_local/bin/executable_jsonv +34 -10
  276. package/dot_local/bin/executable_jwt +22 -6
  277. package/dot_local/bin/executable_kill-port +18 -2
  278. package/dot_local/bin/executable_lorem +21 -6
  279. package/dot_local/bin/executable_mkscript +35 -0
  280. package/dot_local/bin/executable_monitor +56 -0
  281. package/dot_local/bin/{executable_ip → executable_myip} +16 -2
  282. package/dot_local/bin/executable_notify +22 -0
  283. package/dot_local/bin/executable_open +36 -0
  284. package/dot_local/bin/executable_pw +27 -0
  285. package/dot_local/bin/executable_rec-start +46 -0
  286. package/dot_local/bin/executable_rec-stop +35 -0
  287. package/dot_local/bin/executable_regex +49 -13
  288. package/dot_local/bin/executable_start-niri +8 -0
  289. package/dot_local/bin/executable_tmux-sessionizer +276 -149
  290. package/dot_local/bin/executable_tour +112 -74
  291. package/dot_local/bin/executable_up +21 -0
  292. package/dot_local/bin/executable_update +45 -11
  293. package/dot_local/bin/executable_uuid +37 -7
  294. package/dot_local/bin/executable_win +32 -0
  295. package/dot_local/bin/executable_yamlv +25 -7
  296. package/dot_local/share/bash-completion/completions/dot +62 -44
  297. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  298. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  299. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  300. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  301. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  302. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  303. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  304. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  305. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  306. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  307. package/dot_local/share/man/man1/dot.1 +149 -0
  308. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  309. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  310. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  311. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  312. package/dot_local/share/zsh/completions/_dot +283 -0
  313. package/install.sh +297 -210
  314. package/package.json +17 -5
  315. package/scripts/ci/check-copyright-headers.sh +96 -0
  316. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  317. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  318. package/scripts/ci/validate-ci-config.sh +41 -39
  319. package/scripts/demo/record.sh +3 -2
  320. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  321. package/scripts/diagnostics/alias-governance.sh +137 -0
  322. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  323. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  324. package/scripts/diagnostics/benchmark.sh +209 -29
  325. package/scripts/diagnostics/conflicts.sh +72 -0
  326. package/scripts/diagnostics/doctor-unified.sh +38 -0
  327. package/scripts/diagnostics/doctor.sh +491 -65
  328. package/scripts/diagnostics/drift-dashboard.sh +17 -6
  329. package/scripts/diagnostics/health.sh +351 -110
  330. package/scripts/diagnostics/history-analysis.sh +12 -4
  331. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  332. package/scripts/diagnostics/perf.sh +225 -0
  333. package/scripts/diagnostics/scorecard.sh +118 -0
  334. package/scripts/diagnostics/secret-governance.sh +58 -0
  335. package/scripts/diagnostics/security-score.sh +139 -93
  336. package/scripts/diagnostics/smoke-test.sh +87 -0
  337. package/scripts/diagnostics/snapshot.sh +89 -0
  338. package/scripts/diagnostics/verify.sh +107 -0
  339. package/scripts/diagnostics/verify_state.sh +2 -2
  340. package/scripts/diagnostics/version-locks.sh +79 -0
  341. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  342. package/scripts/docs/build-manual.sh +883 -0
  343. package/scripts/docs/check-manual.sh +213 -0
  344. package/scripts/dot/commands/agent.sh +465 -0
  345. package/scripts/dot/commands/ai.sh +416 -0
  346. package/scripts/dot/commands/aliases.sh +250 -0
  347. package/scripts/dot/commands/appearance.sh +21 -4
  348. package/scripts/dot/commands/core.sh +59 -4
  349. package/scripts/dot/commands/diagnostics.sh +132 -3
  350. package/scripts/dot/commands/fleet.sh +399 -0
  351. package/scripts/dot/commands/lint.sh +177 -0
  352. package/scripts/dot/commands/manual.sh +168 -0
  353. package/scripts/dot/commands/meta.sh +148 -17
  354. package/scripts/dot/commands/patterns.sh +54 -0
  355. package/scripts/dot/commands/restore.sh +57 -35
  356. package/scripts/dot/commands/secrets.sh +151 -9
  357. package/scripts/dot/commands/security.sh +3 -0
  358. package/scripts/dot/commands/tools.sh +268 -27
  359. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  360. package/scripts/dot/lib/bento.sh +49 -0
  361. package/scripts/dot/lib/log.sh +194 -0
  362. package/scripts/dot/lib/platform.sh +98 -0
  363. package/scripts/dot/lib/ui.sh +507 -0
  364. package/scripts/dot/lib/utils.sh +318 -18
  365. package/scripts/fonts/install-nerd-fonts.sh +19 -10
  366. package/scripts/fonts/patch-fonts.sh +1 -0
  367. package/scripts/git-hooks/install.sh +11 -0
  368. package/scripts/git-hooks/pre-commit +12 -0
  369. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  370. package/scripts/git-hooks/pre-push +29 -0
  371. package/scripts/git-hooks/prepare-commit-msg +29 -0
  372. package/scripts/lib/secrets_provider.sh +158 -0
  373. package/scripts/maintenance/check-updates.sh +131 -0
  374. package/scripts/ops/ai-setup.sh +55 -0
  375. package/scripts/ops/bundle.sh +77 -0
  376. package/scripts/ops/chaos.sh +49 -0
  377. package/scripts/ops/chezmoi-apply.sh +245 -17
  378. package/scripts/ops/chezmoi-diff.sh +1 -0
  379. package/scripts/ops/chezmoi-remove.sh +2 -0
  380. package/scripts/ops/chezmoi-update.sh +34 -2
  381. package/scripts/ops/heal-chezmoi.sh +51 -0
  382. package/scripts/ops/heal-system.sh +128 -0
  383. package/scripts/ops/heal-tools.sh +340 -0
  384. package/scripts/ops/heal.sh +98 -342
  385. package/scripts/ops/post-apply-repair.sh +106 -0
  386. package/scripts/ops/prewarm.sh +127 -0
  387. package/scripts/ops/release.sh +252 -0
  388. package/scripts/ops/rollback.sh +86 -28
  389. package/scripts/ops/setup.sh +137 -0
  390. package/scripts/ops/teleport.sh +2 -1
  391. package/scripts/qa/coverage-baseline.sh +60 -0
  392. package/scripts/qa/docs-coverage.sh +111 -0
  393. package/scripts/qa/reliability-audit.sh +138 -0
  394. package/scripts/qa/traceability-coverage.sh +116 -0
  395. package/scripts/qa/validate-examples.sh +26 -0
  396. package/scripts/qa/wsl-contract.sh +11 -0
  397. package/scripts/release/package-policy-bundles.sh +125 -0
  398. package/scripts/secrets/age-init.sh +1 -0
  399. package/scripts/secrets/create-secrets-file.sh +1 -0
  400. package/scripts/secrets/encrypt-ssh-key.sh +1 -0
  401. package/scripts/security/backup.sh +44 -4
  402. package/scripts/security/dns-doh.sh +36 -14
  403. package/scripts/security/encryption-check.sh +27 -12
  404. package/scripts/security/enforce-policies.sh +11 -16
  405. package/scripts/security/firewall.sh +76 -20
  406. package/scripts/security/lock-configs.sh +2 -2
  407. package/scripts/security/lock-screen.sh +40 -18
  408. package/scripts/security/manage-secrets.sh +42 -29
  409. package/scripts/security/ssh-cert.sh +203 -0
  410. package/scripts/security/telemetry-kill.sh +40 -18
  411. package/scripts/security/usb-safety.sh +37 -15
  412. package/scripts/theme/apply-gnome-theme.sh +87 -56
  413. package/scripts/theme/extract-theme.py +677 -0
  414. package/scripts/theme/install-boot-logo.sh +1 -0
  415. package/scripts/theme/install-catppuccin-themes.sh +57 -33
  416. package/scripts/theme/install-cursors.sh +1 -0
  417. package/scripts/theme/install-file-icons.sh +1 -0
  418. package/scripts/theme/install-grub-theme.sh +11 -1
  419. package/scripts/theme/install-lock-icon.sh +1 -0
  420. package/scripts/theme/merge-wallpaper.sh +141 -0
  421. package/scripts/theme/rebuild-themes.sh +309 -0
  422. package/scripts/theme/switch.sh +308 -137
  423. package/scripts/theme/wallpaper-rotate.sh +66 -12
  424. package/scripts/theme/wallpaper-sync.sh +386 -31
  425. package/scripts/tools/cmatrix.sh +1 -0
  426. package/scripts/tools/detect-collisions.py +1 -1
  427. package/scripts/tools/emoji-picker.sh +4 -1
  428. package/scripts/tools/figlet-banner.sh +1 -0
  429. package/scripts/tools/log-rotate.sh +2 -1
  430. package/scripts/tools/lolcat-wrap.sh +1 -0
  431. package/scripts/tools/pipes.sh +1 -0
  432. package/scripts/tuning/linux.sh +23 -13
  433. package/scripts/tuning/macos.sh +13 -4
  434. package/scripts/uninstall.sh +85 -0
  435. package/scripts/version-sync.sh +487 -0
  436. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  437. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  438. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  439. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  440. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  441. package/templates/projects/go/README.md +1 -1
  442. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  443. package/templates/projects/go/go.sum +0 -0
  444. package/templates/projects/molecule/README.md +1 -1
  445. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  446. package/templates/projects/node/README.md +1 -1
  447. package/templates/projects/node/package-lock.json +12 -0
  448. package/templates/projects/node/src/index.js +1 -0
  449. package/templates/projects/packer/README.md +1 -1
  450. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  451. package/templates/projects/python/README.md +1 -1
  452. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  453. package/templates/projects/python/tests/test_basic.py +1 -0
  454. package/docs/ARCHITECTURE.md +0 -229
  455. package/docs/COMPLIANCE.md +0 -47
  456. package/docs/FEATURES.md +0 -166
  457. package/docs/FONTS.md +0 -147
  458. package/docs/INSTALL.md +0 -119
  459. package/docs/KEYS.md +0 -40
  460. package/docs/OPERATIONS.md +0 -130
  461. package/docs/PR_DESCRIPTION.md +0 -149
  462. package/docs/SECRETS.md +0 -76
  463. package/docs/SECURITY.md +0 -30
  464. package/docs/SECURITY_CHECKLIST.md +0 -25
  465. package/docs/TASK.md +0 -99
  466. package/docs/TESTING.md +0 -190
  467. package/docs/TOOLS.md +0 -146
  468. package/docs/UTILS.md +0 -105
  469. package/docs/WALKTHROUGH.md +0 -165
  470. package/dot_config/clippy.toml +0 -55
  471. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  472. package/dot_config/firefox/user.js +0 -8
  473. package/dot_config/git/config.tmpl +0 -77
  474. package/dot_config/go/aliases.sh +0 -61
  475. package/dot_config/go/env.sh +0 -24
  476. package/dot_config/ice/README.md +0 -13
  477. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  478. package/dot_config/lsd/config.yaml +0 -19
  479. package/dot_config/nvim/snippets/all.lua +0 -9
  480. package/dot_config/nvim/snippets/python.lua +0 -16
  481. package/dot_config/shell/00-container-detect.sh +0 -53
  482. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  483. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  484. package/dot_config/shell/90-theme-switch.sh +0 -70
  485. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  486. package/dot_config/waybar/style.css +0 -8
  487. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  488. package/dot_local/bin/executable_zig-install +0 -89
  489. package/dot_local/bin/voice_ops +0 -7
  490. package/scripts/ops/health-check.sh +0 -380
  491. package/scripts/tests/README.md +0 -241
  492. package/scripts/tests/benchmark.sh +0 -91
  493. package/scripts/tests/framework/assertions.sh +0 -283
  494. package/scripts/tests/framework/mocks.sh +0 -201
  495. package/scripts/tests/framework/test_runner.sh +0 -189
  496. package/scripts/tests/integration/test_install.sh +0 -237
  497. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  498. package/scripts/tests/performance/regression_check.sh +0 -73
  499. package/scripts/tests/performance/stress_test.sh +0 -65
  500. package/scripts/tests/test-aliases.sh +0 -25
  501. package/scripts/tests/test-docker.sh +0 -48
  502. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  503. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  504. package/scripts/tests/unit/test_backup.sh +0 -227
  505. package/scripts/tests/unit/test_case_functions.sh +0 -238
  506. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  507. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  508. package/scripts/tests/unit/test_encode64.sh +0 -67
  509. package/scripts/tests/unit/test_environment.sh +0 -78
  510. package/scripts/tests/unit/test_extract.sh +0 -163
  511. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  512. package/scripts/tests/unit/test_genpass.sh +0 -298
  513. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  514. package/scripts/tests/unit/test_installers.sh +0 -172
  515. package/scripts/tests/unit/test_keygen.sh +0 -68
  516. package/scripts/tests/unit/test_logging.sh +0 -96
  517. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  518. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  519. package/scripts/tests/unit/test_prependpath.sh +0 -66
  520. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  521. package/scripts/tests/unit/test_rd.sh +0 -230
  522. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  523. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  524. package/scripts/tests/unit/test_template_validation.sh +0 -238
  525. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  526. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  527. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  528. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  529. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  530. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  531. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  532. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  533. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  534. package/scripts/tests/unit/test_zipf.sh +0 -76
  535. /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
  536. /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
  537. /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
  538. /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
  539. /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
  540. /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
  541. /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
  542. /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
  543. /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
  544. /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
  545. /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
  546. /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
@@ -0,0 +1,319 @@
1
+ # Cookbook: Troubleshooting
2
+
3
+ Symptom → cause → fix.
4
+
5
+ ## Installation
6
+
7
+ ### Symptom: `install.sh` fails with "chezmoi not found"
8
+
9
+ **Cause**: `/usr/local/bin` or `~/.local/bin` not in PATH at install time.
10
+
11
+ **Fix**:
12
+ ```sh
13
+ export PATH="$HOME/.local/bin:$PATH"
14
+ bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)"
15
+ ```
16
+
17
+ ### Symptom: "could not create directory ~/.local/share/chezmoi"
18
+
19
+ **Cause**: Permission issue on `~/.local`.
20
+
21
+ **Fix**:
22
+ ```sh
23
+ mkdir -p ~/.local/share ~/.local/state ~/.local/bin
24
+ chmod 755 ~/.local ~/.local/share
25
+ ```
26
+
27
+ ### Symptom: Install hangs at "Downloading chezmoi"
28
+
29
+ **Cause**: Slow network or corporate proxy.
30
+
31
+ **Fix**:
32
+ ```sh
33
+ export https_proxy=$HTTP_PROXY # if applicable
34
+ # Or pre-download chezmoi manually
35
+ brew install chezmoi # macOS
36
+ apt install chezmoi # Debian 13+
37
+ ```
38
+
39
+ ## Apply / Sync
40
+
41
+ ### Symptom: `dot apply` reports "file modified, skipping"
42
+
43
+ **Cause**: Chezmoi detected local drift on a managed file.
44
+
45
+ **Fix**:
46
+ ```sh
47
+ dot diff # see what differs
48
+ dot apply --force # overwrite local
49
+ # OR
50
+ dot add <path> # import local change to source
51
+ ```
52
+
53
+ ### Symptom: "template: error calling index"
54
+
55
+ **Cause**: A template references a missing data field.
56
+
57
+ **Fix**: Check that your `.chezmoidata.toml` has the required field. For example:
58
+ ```sh
59
+ chezmoi execute-template '{{- $hw := index .hardware .machine -}}{{ $hw.wm }}'
60
+ ```
61
+ If `machine` is not set in your `~/.config/chezmoi/chezmoi.toml`, `index` returns nil. Set:
62
+ ```toml
63
+ [data]
64
+ machine = "macbook-t2"
65
+ ```
66
+
67
+ ### Symptom: Apply succeeds but shell doesn't reflect changes
68
+
69
+ **Cause**: Cached init scripts are stale.
70
+
71
+ **Fix**:
72
+ ```sh
73
+ dot clean-cache
74
+ dot prewarm
75
+ exec $SHELL -l
76
+ ```
77
+
78
+ ## Theme
79
+
80
+ ### Symptom: `dot theme` shows no themes
81
+
82
+ **Cause**: No wallpapers discovered, themes.toml not generated.
83
+
84
+ **Fix**:
85
+ ```sh
86
+ dot theme rebuild --force
87
+ ```
88
+
89
+ ### Symptom: `dot theme <name>` errors "unknown theme"
90
+
91
+ **Cause**: Theme name doesn't exist in `themes.toml`.
92
+
93
+ **Fix**:
94
+ ```sh
95
+ dot theme list # see valid names
96
+ dot theme rebuild --force # regenerate if expected but missing
97
+ ```
98
+
99
+ ### Symptom: macOS accent color doesn't update
100
+
101
+ **Cause**: System Settings UI cached the old value.
102
+
103
+ **Fix**: `dot-theme-sync` now calls `killall cfprefsd SystemUIServer Dock "System Settings"`. If it still doesn't refresh:
104
+ ```sh
105
+ killall -KILL Dock SystemUIServer
106
+ sudo killall -KILL cfprefsd
107
+ ```
108
+ Or log out and back in.
109
+
110
+ ### Symptom: Wallpaper not applying
111
+
112
+ **Cause**: Wrong format or missing DE support on Linux.
113
+
114
+ **Fix**:
115
+ ```sh
116
+ # Check the wallpaper file exists
117
+ ls -la ~/Pictures/Wallpapers/
118
+
119
+ # On Linux, verify HEIC → PNG conversion tool
120
+ command -v magick || command -v heif-convert || command -v convert
121
+ # Install if needed:
122
+ sudo apt install imagemagick-7
123
+ ```
124
+
125
+ ### Symptom: Theme applies but Ghostty doesn't reload
126
+
127
+ **Cause**: Ghostty DBus or SIGUSR2 signaling failed.
128
+
129
+ **Fix**:
130
+ ```sh
131
+ # Restart Ghostty manually, or:
132
+ pkill -USR2 ghostty 2>/dev/null
133
+ # Or quit+relaunch the app
134
+ ```
135
+
136
+ ## Secrets
137
+
138
+ ### Symptom: "could not decrypt: no age key"
139
+
140
+ **Cause**: `~/.config/age/keys.txt` missing or unreadable.
141
+
142
+ **Fix**:
143
+ ```sh
144
+ ls -la ~/.config/age/keys.txt
145
+ # Should be: -rw------- 1 user user
146
+ chmod 600 ~/.config/age/keys.txt
147
+
148
+ # If missing, restore from password manager or regenerate (requires re-encrypting all secrets)
149
+ ```
150
+
151
+ ### Symptom: SOPS says "wrong recipient"
152
+
153
+ **Cause**: Your Age public key isn't listed in the file's recipients.
154
+
155
+ **Fix**:
156
+ ```sh
157
+ # Add your public key to .sops.yaml
158
+ sops updatekeys path/to/file.sops.yaml
159
+
160
+ # Or, ask a recipient to re-encrypt for you
161
+ ```
162
+
163
+ ### Symptom: Plaintext leak detected by gitleaks
164
+
165
+ **Cause**: A secret was committed to Git history.
166
+
167
+ **Fix**:
168
+ ```sh
169
+ # Immediate mitigation
170
+ dot verify --security # confirm which file
171
+ git rm --cached <file>
172
+ echo "<file>" >> .gitignore
173
+ git commit -sS -m "fix(security): remove leaked file"
174
+
175
+ # Rotate the leaked secret upstream (it's now public)
176
+ # Rewrite Git history if needed (requires force-push):
177
+ git filter-repo --path <file> --invert-paths
178
+ ```
179
+
180
+ ## Performance
181
+
182
+ ### Symptom: Shell startup >500ms
183
+
184
+ **Cause**: Heavy modules loaded synchronously.
185
+
186
+ **Fix**:
187
+ ```sh
188
+ dot benchmark --detailed
189
+ # Identify which module is slow
190
+
191
+ # Rebuild caches
192
+ dot prewarm
193
+
194
+ # Disable heavy modules temporarily
195
+ # Edit ~/.config/zsh/.zshrc.local (or equivalent) to skip them
196
+ ```
197
+
198
+ ### Symptom: `dot doctor` score <70
199
+
200
+ **Cause**: Multiple health issues.
201
+
202
+ **Fix**:
203
+ ```sh
204
+ dot doctor --verbose # see every failure
205
+ dot heal # auto-fix what's possible
206
+ dot doctor # recheck
207
+ ```
208
+
209
+ ### Symptom: Mise tools not found
210
+
211
+ **Cause**: Mise shim not activated.
212
+
213
+ **Fix**:
214
+ ```sh
215
+ eval "$(mise activate zsh)" # or fish, bash
216
+ dot doctor # confirm
217
+ ```
218
+
219
+ ## Build Artifacts
220
+
221
+ ### Symptom: Cargo builds to `target/` instead of `/tmp/builds/cargo`
222
+
223
+ **Cause**: `~/.cargo/config.toml` not managed or was overridden.
224
+
225
+ **Fix**:
226
+ ```sh
227
+ chezmoi apply ~/.cargo/config.toml
228
+ cat ~/.cargo/config.toml | grep target-dir
229
+ # Should be: target-dir = "/tmp/builds/cargo"
230
+ ```
231
+
232
+ ### Symptom: `/tmp/builds/` doesn't exist
233
+
234
+ **Cause**: Created by shell init, but shell wasn't restarted.
235
+
236
+ **Fix**:
237
+ ```sh
238
+ mkdir -p /tmp/builds
239
+ # Or restart shell
240
+ exec $SHELL -l
241
+ ```
242
+
243
+ ## Fleet
244
+
245
+ ### Symptom: `dot fleet attest` hangs
246
+
247
+ **Cause**: A fleet host is unreachable.
248
+
249
+ **Fix**:
250
+ ```sh
251
+ # Check connectivity to each host
252
+ for host in macbook-t2 surface-pro geekom-a9; do
253
+ ssh -o ConnectTimeout=5 $host 'echo OK' || echo "FAIL: $host"
254
+ done
255
+
256
+ # Remove unreachable hosts from ~/.config/dotfiles/fleet.toml temporarily
257
+ ```
258
+
259
+ ### Symptom: Attestation signature fails
260
+
261
+ **Cause**: Remote host's SSH public key not in local `~/.ssh/allowed_signers`.
262
+
263
+ **Fix**:
264
+ ```sh
265
+ # On the remote host:
266
+ ssh remote-host 'cat ~/.ssh/id_ed25519.pub'
267
+ # Copy the output and append to your ~/.ssh/allowed_signers
268
+ ```
269
+
270
+ ## CI
271
+
272
+ ### Symptom: PR fails on "Shell Lint (Zero Warnings)"
273
+
274
+ **Cause**: `shfmt` formatting differs from canonical.
275
+
276
+ **Fix**:
277
+ ```sh
278
+ shfmt -w -i 2 -ci scripts/**/*.sh install.sh .chezmoitemplates/**/*.sh
279
+ # Commit the changes
280
+ ```
281
+
282
+ ### Symptom: PR fails on "100% Coverage"
283
+
284
+ **Cause**: New code added without tests.
285
+
286
+ **Fix**:
287
+ ```sh
288
+ bash examples/example-coverage-gate.sh
289
+ # Identifies uncovered modules
290
+
291
+ # Add a test in tests/unit/<domain>/test_<module>.sh
292
+ ```
293
+
294
+ ### Symptom: Checkov SARIF upload times out
295
+
296
+ **Cause**: Known infrastructure flake (Azure runner slow apt mirrors).
297
+
298
+ **Fix**: The workflow already guards this with `hashFiles('reports/checkov.sarif')`. If you see this after the guard was added, check the Checkov step output for errors.
299
+
300
+ ## Getting More Help
301
+
302
+ 1. Check [FAQ](03-faq.md)
303
+ 2. Read the relevant [concept chapter](../01-concepts/)
304
+ 3. Open an issue: <https://github.com/sebastienrousseau/dotfiles/issues>
305
+
306
+ When filing an issue, include:
307
+
308
+ ```sh
309
+ dot doctor --json
310
+ dot version
311
+ uname -a
312
+ chezmoi --version
313
+ ```
314
+
315
+ ## See Also
316
+
317
+ - [Self-Healing concept](../01-concepts/05-self-healing.md)
318
+ - [FAQ](03-faq.md)
319
+ - [Security: Incident Response](../../security/INCIDENT_RESPONSE.md)
@@ -0,0 +1,167 @@
1
+ # Cookbook: Frequently Asked Questions
2
+
3
+ ## General
4
+
5
+ ### Why use this over stow, yadm, or a plain Git repo?
6
+
7
+ Because it's not just a dotfiles manager. It's a workstation baseline with:
8
+
9
+ - Cryptographic attestation
10
+ - AI/MCP policy enforcement
11
+ - Wallpaper-driven theme engine (WCAG AAA)
12
+ - Self-healing + chaos testing
13
+ - Fleet management
14
+ - Per-platform rendering via chezmoi templates
15
+
16
+ If you only need to symlink `.bashrc`, use stow. If you're operating a fleet of signed, attested, AI-aware workstations, use this.
17
+
18
+ ### Does it work on Windows?
19
+
20
+ Only via WSL2. Native Windows PowerShell support exists for baseline parity (aliases, prompt), but the full feature set (chezmoi, Mise, theme engine) requires WSL2.
21
+
22
+ ### Is it production-ready?
23
+
24
+ Yes — it's the author's daily driver across multiple hosts and receives regular releases (see `CHANGELOG.md`). CI enforces 100% test coverage, zero-warning linting, WCAG AAA for themes, SBOM + CVE scanning, and signed commits on every merge.
25
+
26
+ ### Can I fork it and use it without attribution?
27
+
28
+ Yes — MIT License. Attribution is appreciated but not required.
29
+
30
+ ## Themes
31
+
32
+ ### Why K-Means in CIELAB instead of RGB?
33
+
34
+ CIELAB distances approximate human perception. A Δ in RGB might look identical to your eye in one part of the color space and very different in another. Clustering in Lab produces palettes where "close" colors actually look close. See [Theme Engine](../01-concepts/03-theme-engine.md).
35
+
36
+ ### Why not pre-built themes like Catppuccin or Rosé Pine?
37
+
38
+ Two reasons:
39
+ 1. **Maintenance** — 100+ themes × 20+ applications = thousands of template variables to keep in sync. Generation from wallpapers eliminates that.
40
+ 2. **User agency** — users bring their own wallpapers. The theme adapts to them, not the other way around.
41
+
42
+ The engine can still produce Catppuccin-like output: give it a Catppuccin wallpaper and you get Catppuccin-aligned terminal colors.
43
+
44
+ ### Does it ship wallpapers?
45
+
46
+ No. Apple/Microsoft/distro-vendor wallpapers are copyrighted. The repo discovers wallpapers that are already on the user's system (at `~/Pictures/Wallpapers/` or the OS's system wallpaper directory). Users bring their own images.
47
+
48
+ ### How do I control the accent color?
49
+
50
+ You don't directly — the accent hue is extracted from the wallpaper. But `_compute_accent()` picks the most chromatic cluster, then darkens it until white text meets 7:1 contrast. If you want a specific accent, choose a wallpaper with that hue dominant.
51
+
52
+ ### Can I use my own theme without a wallpaper?
53
+
54
+ Not directly — the engine expects a source image. You could:
55
+ 1. Pick a wallpaper whose palette you want
56
+ 2. Let the engine generate the theme
57
+ 3. Lock the generated `.toml` entry by copying to a non-regenerated path
58
+
59
+ But this defeats the point. If you have a specific palette in mind, generate a solid-color or gradient image with those colors and use that.
60
+
61
+ ## Secrets
62
+
63
+ ### Why Age instead of GPG?
64
+
65
+ GPG is notoriously complex. Age is simpler, uses modern crypto (X25519 + ChaCha20-Poly1305), and has no legacy baggage. It's the tool [SOPS recommends](https://github.com/getsops/sops#encrypting-using-age).
66
+
67
+ ### Why commit encrypted secrets at all?
68
+
69
+ - **Traceable** — Git history shows when secrets changed
70
+ - **Auditable** — ciphertext is testable without decryption
71
+ - **Portable** — clone the repo anywhere, decrypt with your key
72
+ - **No external dependency** — no Vault/AWS Secrets Manager/etc.
73
+
74
+ The alternative (storing secrets outside the repo) creates sync headaches across fleet hosts. Encrypted-at-rest-in-repo is simpler and just as secure if keys are managed correctly.
75
+
76
+ ### What if I lose my Age private key?
77
+
78
+ You lose access to all secrets encrypted only for that key. Recovery requires another recipient (another host with a valid key) to decrypt and re-encrypt. Fleet setups use multiple recipients for this reason — see [Deploy to Fleet](../02-tutorials/05-deploy-fleet.md).
79
+
80
+ ## AI & Agents
81
+
82
+ ### Does this require an API key?
83
+
84
+ No. The AI tools (Claude Code, Codex, Copilot) are installed but require their own authentication. `dot ai` shows what's present without invoking any remote service.
85
+
86
+ ### What is MCP?
87
+
88
+ The [Model Context Protocol](https://modelcontextprotocol.io/) is a standard for connecting AI models to tools and data sources. `.dotfiles` includes policy enforcement for MCP-aware agents: allowlists, attestation, and signed registries. See [Trust Model](../01-concepts/02-trust-model.md).
89
+
90
+ ### Can I add my own agent profile?
91
+
92
+ Yes. Drop a Markdown file in `dot_config/ai/patterns/`. Each file describes a profile (architect, hardener, etc.). `dot mode <name>` switches between them.
93
+
94
+ ## Fleet
95
+
96
+ ### How many hosts can I manage?
97
+
98
+ No hard limit. The `dot fleet` commands SSH sequentially by default, so large fleets (>20 hosts) benefit from parallel invocation. For industrial scale, pair with Ansible/Nix/Puppet; `.dotfiles` handles the user-level config, not system administration.
99
+
100
+ ### Do I need a central server?
101
+
102
+ No. Everything is Git-based. No central orchestration service, no daemon. Each host pulls independently.
103
+
104
+ ### Can two hosts have different themes?
105
+
106
+ Yes. Each host's `~/.config/chezmoi/chezmoi.toml` can set its own `theme`. This is per-host override — not shared in the repo.
107
+
108
+ ## Performance
109
+
110
+ ### Why is my shell startup 800ms when the budget is 500ms?
111
+
112
+ Check what's loaded:
113
+
114
+ ```sh
115
+ DOTFILES_DEBUG=1 zsh -i -c exit 2>&1 | grep -E '\[debug [0-9]+ms\]'
116
+ ```
117
+
118
+ Common culprits:
119
+ - nvm loading Node on every shell (use lazy loading)
120
+ - `mise activate` with aggressive hook-env (set `activate_aggressive = false`)
121
+ - Plugin manager scanning for updates
122
+
123
+ Run `dot benchmark --detailed` to attribute cost.
124
+
125
+ ### Can I disable prewarming?
126
+
127
+ Yes — but your cold shell startup will be slow. Remove the prewarm invocation from your shell profile or skip `dot prewarm` after apply.
128
+
129
+ ## Troubleshooting Community
130
+
131
+ ### Where do I report bugs?
132
+
133
+ GitHub issues: <https://github.com/sebastienrousseau/dotfiles/issues>. Include output of `dot doctor --json` and your platform.
134
+
135
+ ### Where do I ask usage questions?
136
+
137
+ GitHub discussions, or mention in the issue you open. The maintainer responds best to issues with clear repro steps.
138
+
139
+ ### Is there a Discord / Slack?
140
+
141
+ Not currently.
142
+
143
+ ## Philosophy
144
+
145
+ ### Why so much emphasis on attestation?
146
+
147
+ Because AI agents operating on your workstation can do anything you can. Attestation is the audit trail — who ran what, when, with which policy. Without it, agent operations are black boxes.
148
+
149
+ ### Why MIT License?
150
+
151
+ To maximize adoption and contribution. MIT is compatible with commercial use; copyleft alternatives would restrict who can use the code.
152
+
153
+ ### Why no GUI configurator?
154
+
155
+ Text + Git is the optimal interface for a workstation baseline:
156
+ - Versioned (Git history)
157
+ - Reproducible (same input → same output)
158
+ - Auditable (diff-able)
159
+ - Scriptable (any `dot` command can be invoked programmatically)
160
+
161
+ A GUI adds complexity without benefit over editing `.chezmoidata.toml` directly.
162
+
163
+ ## See Also
164
+
165
+ - [Troubleshooting](02-troubleshooting.md)
166
+ - [Recipes](01-recipes.md)
167
+ - [GitHub Discussions](https://github.com/sebastienrousseau/dotfiles/discussions)
@@ -0,0 +1,97 @@
1
+ # Appendix A: Platform Support Matrix
2
+
3
+ ## Supported Platforms
4
+
5
+ | OS | Version | Support | Notes |
6
+ |:---|:---|:---:|:---|
7
+ | macOS | 14 (Sonoma) | ✓ full | Primary development platform |
8
+ | macOS | 15 (Sequoia) | ✓ full | |
9
+ | macOS | 26 (Tahoe) | ✓ full | |
10
+ | Ubuntu | 22.04 LTS | ✓ full | |
11
+ | Ubuntu | 24.04 LTS | ✓ full | CI reference platform |
12
+ | Debian | 12 (Bookworm) | ✓ full | |
13
+ | Debian | 13 (Trixie) | ✓ full | |
14
+ | Arch Linux | rolling | ✓ full | |
15
+ | CachyOS | rolling | ✓ full | Arch-based |
16
+ | Fedora | 39 | ✓ | Less tested |
17
+ | Fedora | 40, 41 | ✓ | Less tested |
18
+ | openSUSE | Tumbleweed | ✓ | Less tested |
19
+ | Alpine | 3.20 | ⚠ partial | POSIX shells only; no Fish |
20
+ | WSL2 | Ubuntu 22.04+ | ✓ full | Windows 11 host |
21
+ | WSL2 | Debian | ✓ full | |
22
+ | Windows PowerShell | 7.5+ | ⚠ baseline | Aliases + prompt; no chezmoi |
23
+ | FreeBSD | 14 | ✗ untested | |
24
+ | Termux (Android) | latest | ✗ untested | |
25
+
26
+ ## Supported Shells
27
+
28
+ | Shell | Version | Support |
29
+ |:---|:---|:---:|
30
+ | Fish | 3.6+ | ✓ primary |
31
+ | Zsh | 5.9+ | ✓ full |
32
+ | Bash | 5.0+ | ✓ full |
33
+ | Nushell | 0.90+ | ✓ full |
34
+ | PowerShell | 7.5+ | ⚠ baseline |
35
+
36
+ ## Supported Architectures
37
+
38
+ | Arch | Status |
39
+ |:---:|:---:|
40
+ | amd64 / x86_64 | ✓ |
41
+ | arm64 / aarch64 | ✓ |
42
+ | armv7 | ⚠ best-effort |
43
+ | riscv64 | ✗ untested |
44
+
45
+ ## Required Binaries
46
+
47
+ | Binary | Purpose | Install |
48
+ |:---|:---|:---|
49
+ | `git` | Version control | System package manager |
50
+ | `curl` | Installer | System package manager |
51
+ | `chezmoi` | Template engine | Installer downloads verified binary |
52
+
53
+ ## Optional Binaries (installed by Mise on first apply)
54
+
55
+ | Binary | Purpose |
56
+ |:---|:---|
57
+ | `mise` | Runtime version manager |
58
+ | `age` | Secret encryption |
59
+ | `sops` | YAML secret encryption |
60
+ | `pandoc` | Manual generation |
61
+ | `shellcheck` | Shell linting |
62
+ | `shfmt` | Shell formatting |
63
+ | `starship` | Prompt |
64
+ | `fzf` | Fuzzy finder |
65
+ | `zoxide` | Smart `cd` |
66
+ | `atuin` | Shell history sync |
67
+ | `delta` | Git diff pager |
68
+ | `lazygit` | TUI Git client |
69
+ | `neovim` | Editor |
70
+
71
+ ## Tested CI Environments
72
+
73
+ | Environment | Workflow |
74
+ |:---|:---|
75
+ | macOS 14 (GHA) | `ci.yml`, `ci-enforced.yml` |
76
+ | Ubuntu 24.04 (GHA) | `ci.yml`, `ci-enforced.yml` |
77
+ | GitHub Codespaces | `devcontainer-prebuild.yml` |
78
+ | Docker Ubuntu 24.04 | `ci.yml` test-docker job |
79
+
80
+ ## Feature Matrix
81
+
82
+ | Feature | macOS | Linux | WSL2 |
83
+ |:---|:---:|:---:|:---:|
84
+ | Shell configs (zsh/fish/bash/nu) | ✓ | ✓ | ✓ |
85
+ | Terminal emulator configs | ✓ | ✓ | ✗ (host handles) |
86
+ | Theme engine (K-Means) | ✓ | ✓ | ✓ |
87
+ | Dynamic HEIC dark/light | ✓ native | ⚠ HEIC→PNG converted | ✗ |
88
+ | Neovim + LSP | ✓ | ✓ | ✓ |
89
+ | AI tools (Claude, Codex, etc.) | ✓ | ✓ | ✓ |
90
+ | MCP policy enforcement | ✓ | ✓ | ✓ |
91
+ | Attestation | ✓ | ✓ | ✓ |
92
+ | Fleet (SSH-based) | ✓ | ✓ | ⚠ |
93
+ | AeroSpace (WM) | ✓ | ✗ | ✗ |
94
+ | Niri (WM) | ✗ | ✓ | ✗ |
95
+ | GNOME gsettings | ✗ | ✓ | ⚠ |
96
+ | Build artifact redirect | ✓ | ✓ | ✓ |
97
+ | Self-healing (`dot heal`) | ✓ | ✓ | ✓ |
@@ -0,0 +1,78 @@
1
+ # Appendix B: Security Checklist
2
+
3
+ Run this checklist after a fresh install and quarterly afterwards.
4
+
5
+ ## Pre-Install
6
+
7
+ - [ ] Download `install.sh` over HTTPS only
8
+ - [ ] Inspect `install.sh` before running (optional, recommended for untrusted environments)
9
+ - [ ] Ensure SSH signing key exists and is backed up (`~/.ssh/id_ed25519`)
10
+ - [ ] Ensure Age key is backed up if reinstalling (`~/.config/age/keys.txt`)
11
+
12
+ ## Post-Install
13
+
14
+ - [ ] Run `dot doctor` — expect score ≥90
15
+ - [ ] Run `dot verify --security` — all checks pass
16
+ - [ ] Verify commit signing: `cd ~/.dotfiles && git verify-commit HEAD`
17
+ - [ ] Confirm `~/.ssh/allowed_signers` contains your public key
18
+ - [ ] Check that `~/.config/age/keys.txt` permissions are `0600`
19
+ - [ ] Run `dot mcp --strict` — policy matches registry
20
+
21
+ ## Ongoing (monthly)
22
+
23
+ - [ ] `dot upgrade` — pick up security patches
24
+ - [ ] `dot verify --security` — confirm no new leaks
25
+ - [ ] Review `~/.local/state/dotfiles/mcp-violations.log` — any unexpected entries?
26
+ - [ ] Review recent attestations — `ls ~/.local/state/dotfiles/attestation/ | tail -10`
27
+ - [ ] Rotate Age key if compromised or as part of scheduled rotation
28
+
29
+ ## Ongoing (quarterly)
30
+
31
+ - [ ] Rotate SSH signing key
32
+ - [ ] Audit `~/.ssh/allowed_signers` — remove former team members
33
+ - [ ] Review SOPS recipient list in `.sops.yaml`
34
+ - [ ] Run `dot chaos` in a test container — verify heal works
35
+ - [ ] Update pinned tool versions in `mise.toml`
36
+ - [ ] Run fleet attestation — confirm all hosts aligned
37
+
38
+ ## Incident Response
39
+
40
+ If a secret leak is detected:
41
+
42
+ 1. **Contain** — remove from history, force-push
43
+ ```sh
44
+ git filter-repo --path <file> --invert-paths
45
+ git push --force
46
+ ```
47
+ 2. **Rotate** — change the leaked secret upstream (Stripe key, SSH key, etc.)
48
+ 3. **Audit** — check who/what had access
49
+ 4. **Notify** — inform affected parties if required
50
+
51
+ If a host is compromised:
52
+
53
+ 1. **Revoke** — remove the host's public key from `~/.ssh/allowed_signers` on all other fleet hosts
54
+ 2. **Re-encrypt** — `sops updatekeys` with the host excluded from recipients
55
+ 3. **Attest** — run `dot fleet attest` to verify revocation propagated
56
+ 4. **Wipe** — if the host is recoverable, `rm -rf ~/.config/age ~/.dotfiles` and reinstall
57
+
58
+ ## Gates Enforced by CI
59
+
60
+ Every PR to master must pass:
61
+
62
+ - [x] SSH-signed commits
63
+ - [x] Shellcheck zero warnings (severity=error)
64
+ - [x] Gitleaks scan
65
+ - [x] Detect-secrets baseline diff
66
+ - [x] TruffleHog verified scan
67
+ - [x] Copyright headers present
68
+ - [x] 100% unit test coverage
69
+ - [x] Reliability tests (macOS + Ubuntu)
70
+ - [x] Checkov infra scan
71
+ - [x] Version sync (bumped across all files)
72
+
73
+ ## See Also
74
+
75
+ - [Trust Model](../01-concepts/02-trust-model.md)
76
+ - [Encrypt a Secret tutorial](../02-tutorials/04-encrypt-secret.md)
77
+ - [Security Policy](../../security/SECURITY.md)
78
+ - [Incident Response Playbook](../../security/INCIDENT_RESPONSE.md)
@@ -0,0 +1,36 @@
1
+ # Appendix C: Glossary
2
+
3
+ | Term | Definition |
4
+ |:---|:---|
5
+ | **Age** | Modern file-encryption tool using X25519 + ChaCha20-Poly1305. Stores secrets in the repository encrypted at rest. |
6
+ | **Agent Profile** | A named behaviour template for AI agents (e.g. architect, hardener). Stored in `dot_config/ai/patterns/`. |
7
+ | **ANSI Colors** | The 16 foreground/background color slots (c0 through c15) used by terminal emulators. |
8
+ | **Apple Desktop APR** | XMP metadata in dynamic HEIC wallpapers mapping image indices to light/dark appearance modes. |
9
+ | **Attestation** | Signed JSON document asserting machine identity, policy, tool versions, and Git state at a point in time. |
10
+ | **Baseline (security)** | Reference state used by `detect-secrets` to distinguish new leaks from known acceptable patterns. |
11
+ | **Chaos** | Intentional corruption (`dot chaos`) used to verify `dot heal` recovers to a healthy state. |
12
+ | **Chezmoi** | The templating engine handling per-platform rendering and applying configuration to `$HOME`. |
13
+ | **CIELAB** | Color space designed for perceptual uniformity. Used by the theme engine for K-Means clustering. |
14
+ | **CycloneDX** | SBOM format used by the repository for machine-readable dependency inventories. |
15
+ | **Dank Material Shell (DMS)** | A shell for the Niri Wayland compositor that provides polished theming hooks. |
16
+ | **Drift** | Local changes to managed files that diverge from the source tree. Detected by `dot status`. |
17
+ | **Dynamic HEIC** | Apple's single-file wallpaper format that contains both light and dark variants with appearance metadata. |
18
+ | **Fleet** | Two or more workstations sharing a single `.dotfiles` source repository. |
19
+ | **Gitleaks** | Secret-pattern scanner that blocks commits containing obvious secret patterns. |
20
+ | **Golden Ratio** | 1.618... Used as the target brightness ratio between dark and light theme variants. |
21
+ | **Heal** | The `dot heal` command's action of auto-fixing drift, missing tools, and broken symlinks. |
22
+ | **Idempotent** | Property where running an operation twice has the same result as running it once. |
23
+ | **K-Means** | Clustering algorithm partitioning data into k groups by proximity to centroids. Used for dominant color extraction. |
24
+ | **K-Means++** | Variant of K-Means with smart initialization that reduces sensitivity to random seeding. |
25
+ | **MCP** | Model Context Protocol — standard for connecting AI models to external tools and data. |
26
+ | **Mise** | User-space language and tool version manager. Replaces asdf, nvm, rbenv, pyenv. |
27
+ | **Nix Flakes** | Nix's reproducible-build system. Used for strict repeatability when Mise's approximations aren't enough. |
28
+ | **Niri** | Wayland compositor with scrollable tiling layout. |
29
+ | **Policy Hash** | SHA-256 of the active MCP policy JSON. Included in attestations for drift detection. |
30
+ | **Prewarm** | `dot prewarm` regenerates shell init caches, eliminating slow first-shell startup. |
31
+ | **Profile** | Named collection of settings in `.chezmoidata.toml` selectable via `dot profile`. |
32
+ | **SOPS** | "Secrets OPerationS" — YAML-aware envelope encryption tool that wraps Age (or PGP/AWS KMS). |
33
+ | **SBOM** | Software Bill of Materials — machine-readable dependency list, generated by Syft, scanned by Grype. |
34
+ | **Trust Anchor** | The root public key from which all other trust derives. For `.dotfiles`, the user's SSH ED25519 signing key. |
35
+ | **WCAG AAA** | Web Content Accessibility Guidelines Level AAA — 7:1 text contrast ratio, the highest accessibility tier. |
36
+ | **XDG Base Directory** | Spec defining `~/.config`, `~/.cache`, `~/.local/share`, `~/.local/state` for app data locations. |