@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
@@ -1,177 +1,588 @@
1
1
  #!/usr/bin/env bash
2
- # Dotfiles CLI Entry Point - v0.2.481
3
- # Modular architecture with command handlers in scripts/dot/commands/
2
+ # shellcheck disable=SC2034
3
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
4
+ set -euo pipefail
4
5
 
5
- set -e
6
+ # Dotfiles CLI Entry Point - v0.2.500
6
7
 
7
- VERSION="0.2.481"
8
+ # Ensure XDG Base Directory variables are set
9
+ export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
10
+ export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
11
+ export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
12
+ export XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
8
13
 
9
- COMMAND="$1"
10
- if [ -n "$1" ]; then
14
+ # Ensure PIPX paths are set
15
+ export PIPX_HOME="${XDG_DATA_HOME}/pipx"
16
+ export PIPX_BIN_DIR="${HOME}/.local/bin"
17
+
18
+ # Ensure Nix is in PATH if installed
19
+ if [ -e "${HOME}/.nix-profile/etc/profile.d/nix.sh" ]; then
20
+ # shellcheck disable=SC1091
21
+ . "${HOME}/.nix-profile/etc/profile.d/nix.sh"
22
+ fi
23
+
24
+ VERSION="0.2.500"
25
+
26
+ COMMAND="${1:-}"
27
+ if [ -n "${1:-}" ]; then
11
28
  shift
12
29
  fi
13
30
 
14
- # Resolve the dotfiles source directory
15
- resolve_source_dir() {
16
- if [ -n "${CHEZMOI_SOURCE_DIR:-}" ] && [ -d "$CHEZMOI_SOURCE_DIR" ]; then
17
- echo "$CHEZMOI_SOURCE_DIR"
18
- return
31
+ # Resolve source directory (needed early for ui.sh sourcing)
32
+ _resolve_source_dir() {
33
+ local dir=""
34
+ local script_path=""
35
+ local script_dir=""
36
+ local repo_candidate=""
37
+
38
+ if script_path="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd 2>/dev/null)"; then
39
+ script_dir="$script_path"
40
+ repo_candidate="$(cd "$script_dir/../.." && pwd 2>/dev/null || true)"
41
+ if [ -n "$repo_candidate" ] && [ -f "$repo_candidate/scripts/dot/lib/ui.sh" ]; then
42
+ dir="$repo_candidate"
43
+ fi
19
44
  fi
20
- if [ -d "$HOME/.dotfiles" ]; then
21
- echo "$HOME/.dotfiles"
22
- return
45
+
46
+ if [ -z "$dir" ] && [ -n "${CHEZMOI_SOURCE_DIR:-}" ] && [ -d "$CHEZMOI_SOURCE_DIR" ]; then
47
+ dir="$CHEZMOI_SOURCE_DIR"
48
+ elif [ -z "$dir" ] && [ -d "$HOME/.dotfiles" ]; then
49
+ dir="$HOME/.dotfiles"
50
+ elif [ -z "$dir" ] && [ -d "$HOME/.local/share/chezmoi" ]; then
51
+ dir="$HOME/.local/share/chezmoi"
52
+ elif [ -z "$dir" ] && [ -f "package.json" ] && grep -q '"name": "dotfiles"' package.json 2>/dev/null; then
53
+ dir="$(pwd)"
23
54
  fi
24
- if [ -d "$HOME/.local/share/chezmoi" ]; then
25
- echo "$HOME/.local/share/chezmoi"
26
- return
55
+ echo "$dir"
56
+ }
57
+
58
+ # Source shared UI library for consistent colors, checkmarks, and formatting.
59
+ # Falls back to minimal inline definitions if the source directory is unavailable.
60
+ _DOT_SRC="$(_resolve_source_dir)"
61
+ if [ -n "$_DOT_SRC" ] && [ -f "$_DOT_SRC/scripts/dot/lib/ui.sh" ]; then
62
+ # shellcheck source=../../scripts/dot/lib/ui.sh
63
+ # shellcheck disable=SC1091
64
+ source "$_DOT_SRC/scripts/dot/lib/ui.sh"
65
+ ui_init
66
+ else
67
+ # Minimal fallback when source dir is not available (e.g. first install)
68
+ # shellcheck disable=SC2034
69
+ UI_COLOR=0
70
+ BOLD=""
71
+ NORMAL=""
72
+ RED=""
73
+ GREEN=""
74
+ YELLOW=""
75
+ BLUE=""
76
+ CYAN=""
77
+ GRAY=""
78
+ MAGENTA=""
79
+ ui_init() {
80
+ if [[ -t 1 ]] && [[ -z "${NO_COLOR:-}" ]]; then
81
+ UI_COLOR=1
82
+ BASH_BOLD=$'\033[1m'
83
+ NORMAL=$'\033[0m'
84
+ RED=$'\033[38;5;196m'
85
+ GREEN=$'\033[38;5;42m'
86
+ YELLOW=$'\033[38;5;214m'
87
+ BLUE=$'\033[38;5;63m'
88
+ CYAN=$'\033[38;5;81m'
89
+ GRAY=$'\033[38;5;244m'
90
+ MAGENTA=$'\033[38;5;211m'
91
+ fi
92
+ }
93
+ ui_header() {
94
+ ui_init
95
+ printf "\n %s%s%s\n\n" "${BOLD}${BLUE}" "$1" "$NORMAL"
96
+ }
97
+ ui_section() {
98
+ ui_init
99
+ printf " %s%s%s\n" "${BOLD}${CYAN}" "$1" "$NORMAL"
100
+ }
101
+ ui_cmd() {
102
+ ui_init
103
+ printf " %s•%s %s%-16s%s %s\n" "$GREEN" "$NORMAL" "$GREEN" "$1" "$NORMAL" "$2"
104
+ }
105
+ ui_ok() {
106
+ ui_init
107
+ printf " %s✓%s %-35s %s\n" "$GREEN" "$NORMAL" "$1" "${2:-}"
108
+ }
109
+ ui_info() {
110
+ ui_init
111
+ printf " %s•%s %-35s %s\n" "$GRAY" "$NORMAL" "$1" "${2:-}"
112
+ }
113
+ ui_meta() {
114
+ ui_init
115
+ printf " %s•%s %-14s %s\n" "$GRAY" "$NORMAL" "$1" "${2:-}"
116
+ }
117
+ ui_kv() {
118
+ ui_init
119
+ printf " %s%-14s%s %s\n" "$BOLD" "$1" "$NORMAL" "$2"
120
+ }
121
+ ui_warn() {
122
+ ui_init
123
+ printf " %s⚠%s %-35s %s\n" "$YELLOW" "$NORMAL" "$1" "${2:-}"
124
+ }
125
+ ui_err() {
126
+ ui_init
127
+ printf " %s✗%s %-35s %s\n" "$RED" "$NORMAL" "$1" "${2:-}" >&2
128
+ }
129
+ ui_clear_line() { printf '\r\033[K'; }
130
+ ui_toast() { case "$1" in success | ok) ui_ok "$2" ;; error | err) ui_err "$2" ;; warn) ui_warn "$2" ;; *) ui_info "$2" ;; esac }
131
+ fi
132
+
133
+ # Alias ui_fail → ui_err for backward compatibility in this script
134
+ ui_fail() { ui_err "$@"; }
135
+
136
+ ui_dot_banner() {
137
+ local section="${1:-Dot}"
138
+ if declare -F ui_product_banner >/dev/null 2>&1; then
139
+ ui_product_banner "Dot • $section"
140
+ return 0
141
+ fi
142
+ if declare -F ui_logo_dot >/dev/null 2>&1; then
143
+ ui_logo_dot "Dot • $section"
27
144
  fi
145
+ }
146
+
147
+ show_version() {
148
+ ui_dot_banner "Reference"
149
+ ui_header "Dotfiles Version"
28
150
  echo ""
151
+ ui_ok "Version" ".dotfiles $VERSION"
152
+ if [[ -n "$_DOT_SRC" ]]; then
153
+ ui_ok "Source" "$_DOT_SRC"
154
+ fi
29
155
  }
30
156
 
31
- show_help() {
157
+ _dot_help_overview_specs() {
32
158
  cat <<'EOF'
33
- Usage: dot [command]
34
-
35
- Core Commands:
36
- apply Apply dotfiles (chezmoi apply)
37
- sync Apply dotfiles (alias of apply)
38
- update Pull latest changes and apply them (chezmoi update)
39
- add Add a file to chezmoi source
40
- diff Show chezmoi diff with exclusions
41
- status Show configuration drift (chezmoi status)
42
- remove Safely remove a managed file
43
- cd Print source directory path (use: cd $(dot cd))
44
- edit Open chezmoi source in $EDITOR
45
-
46
- Diagnostics:
47
- doctor Check system health and configuration
48
- heal Auto-repair common dotfiles issues
49
- health Run comprehensive health dashboard
50
- security-score Security assessment with grading
51
- rollback Rollback dotfiles to a previous state
52
- restore Restore from backup or git ref
53
- drift Drift dashboard (detailed chezmoi status)
54
- history Shell history analysis
55
- benchmark Run shell startup benchmark (--detailed, --profile)
56
-
57
- Tools:
58
- tools Show or install nix packages (dot tools [install])
59
- new Create a new project from a template
60
- sandbox Launch a safe sandbox preview (Docker/Podman)
61
- keys Show keybindings catalog
62
- learn Start the interactive tour of your new tools
63
- docs Show repo README
64
- log-rotate Rotate ~/.local/share/dotfiles.log
65
-
66
- Appearance:
67
- theme Switch terminal theme (dark/light)
68
- wallpaper Apply a wallpaper from your library
69
- fonts Install Nerd Fonts (JetBrainsMono by default)
70
- tune Apply OS tuning (opt-in)
71
-
72
- Secrets:
73
- secrets-init Initialize age key for secrets
74
- secrets Edit encrypted secrets (age)
75
- secrets-create Create an encrypted secrets file
76
- ssh-key Encrypt an SSH key locally with age
77
-
78
- Security (opt-in):
79
- backup Create a compressed backup of your home
80
- encrypt-check Check disk encryption status
81
- firewall Apply firewall hardening
82
- telemetry Disable OS telemetry
83
- dns-doh Enable DNS-over-HTTPS
84
- lock-screen Enforce lock screen idle settings
85
- usb-safety Disable automount for removable media
86
-
87
- Meta:
88
- upgrade Update flake, plugins, and dotfiles
89
- packages List installed packages and package managers
90
- --version Show version information
91
- help Show this help message
159
+ Start Here|sync|Apply dotfiles to this machine.|Use after clone or after changes.
160
+ Start Here|doctor|Check the environment and surface issues.|Use when something feels off.
161
+ Start Here|learn|Open the guided tour.|Best first stop for new users.
162
+ Start Here|help|Show the overview or help for one command.|Use `dot help <command>` for detail.
163
+ Daily Use|status|Show local drift.|See what changed since the last apply.
164
+ Daily Use|diff|Preview pending changes.|Safe way to inspect before applying.
165
+ Daily Use|edit|Open the source directory.|Use the configured editor.
166
+ Daily Use|upgrade|Update tools and dotfiles.|Runs the managed upgrade path.
167
+ Inspect and Repair|doctor|Run the main health check.|Supports deeper audit flags.
168
+ Inspect and Repair|attest|Export workstation evidence.|Use `--json|-j`, `--write|-w`, or `--fleet-store|-F`.
169
+ Inspect and Repair|rollback|Return to a previous state.|Use after a broken change.
170
+ Inspect and Repair|lint|Check shell script quality.|Supports `--check|-c` and `--fix|-f`.
171
+ AI and Agents|ai|Show installed AI tools.|Launches the AI status view.
172
+ AI and Agents|mcp|Inspect MCP policy and registry.|Supports `--strict|-s` and `--json|-j`.
173
+ AI and Agents|mode|Show or set the agent profile.|Profiles: ask, plan, apply, audit.
174
+ AI and Agents|agent|Show agent metadata, logs, checkpoints, and conformance.|Use for card, log, checkpoint, and conformance.
175
+ Fleet|fleet|Show fleet node status, drift, and namespace.|Enterprise fleet management.
176
+ Configuration|env|Show managed tool versions.|Backed by mise.
177
+ Configuration|profile|Show or switch the active profile.|Use for machine-specific behavior.
178
+ Configuration|secrets|Edit or manage encrypted secrets.|Subcommands cover set, get, list, load.
179
+ Configuration|theme|Switch the terminal theme.|Light or dark.
180
+ Reference|search|Find commands by keyword.|Example: `dot search security`.
181
+ Reference|help all|Show the full command reference.|Lists every public command.
182
+ Reference|version|Show version information.|Matches `dot --version`.
92
183
  EOF
93
184
  }
94
185
 
95
- # Dispatch to command module
96
- dispatch() {
97
- local module="$1"
98
- local cmd="$2"
99
- shift 2
186
+ _dot_help_specs() {
187
+ cat <<'EOF'
188
+ Core|sync|Apply dotfiles (alias for apply; --pull to fetch, --check to preview)|Use after clone or after changes.
189
+ Core|add|Add a file to chezmoi source|Start managing a file in the source tree.
190
+ Core|diff|Show chezmoi diff with exclusions|Preview pending changes before apply.
191
+ Core|status|Show configuration drift (chezmoi status)|Inspect the current managed state.
192
+ Core|edit|Open chezmoi source in $EDITOR|Jump into the source tree quickly.
193
+ Core|cd|Print source directory path (use: cd $(dot cd))|Useful in shell scripts and jump helpers.
194
+ Core|commit|AI-powered conventional commit|Wraps the commit helper flow.
195
+ Diagnostics|doctor|Deep audit: tools, paths, portability, AI analysis (--ai|-A)|Main health and repair entrypoint.
196
+ Diagnostics|attest|Export workstation attestation evidence (--json|-j, --write|-w, --fleet-store|-F)|Produce machine-readable evidence.
197
+ Diagnostics|score|System health and security scorecard|Quick high-level readout.
198
+ Diagnostics|snapshot|Capture baseline system snapshot|Use before larger changes.
199
+ Diagnostics|chaos|Simulate config corruption to test self-healing|Advanced validation path.
200
+ Diagnostics|bundle|Create offline archive of dotfiles environment|Portable support artifact.
201
+ Diagnostics|rollback|Rollback dotfiles to a previous state|Use after a bad apply.
202
+ Diagnostics|history|Shell history analysis|Inspect command usage patterns.
203
+ Diagnostics|perf|Show performance mode and quick timing|Startup and shell timing surface.
204
+ Diagnostics|metrics|Show recent observability metrics (JSONL)|Recent runtime events and counters.
205
+ Diagnostics|load-bench|Measure time to heavy-layer readiness|Performance benchmarking helper.
206
+ AI|ai|AI CLI status & launcher|Overview of installed AI tools.
207
+ AI|ai-setup|Interactive setup for all AI CLI tools|Initial AI tool bootstrap.
208
+ AI|ai-query|Context-aware RAG query over your dotfiles|Ask questions over the repo state.
209
+ AI|mcp|Inspect MCP policy, supply chain, and registry|Governance and validation surface.
210
+ AI|mode|Set or inspect agent operating profiles (ask/plan/apply/audit)|Bounded-autonomy controls.
211
+ AI|agent|Profile-aware execution, agent card, a2a-card, session log, checkpoints, and conformance|Agent metadata and local audit trail.
212
+ AI|cl|Claude CLI with context patterns|Context-aware Anthropic bridge.
213
+ AI|copilot|GitHub Copilot CLI with context patterns|Context-aware Copilot bridge.
214
+ AI|gemini|Gemini CLI with context patterns|Context-aware Gemini bridge.
215
+ AI|kiro|Kiro CLI with context patterns|Context-aware Kiro bridge.
216
+ AI|sgpt|Shell-GPT with context patterns|Context-aware Shell-GPT bridge.
217
+ AI|ollama|Ollama with context patterns|Context-aware local-model bridge.
218
+ AI|opencode|OpenCode with context patterns|Context-aware OpenCode bridge.
219
+ AI|aider|Aider with context patterns|Context-aware Aider bridge.
220
+ Tools|env|Tool versions (mise)|Managed runtime versions.
221
+ Tools|profile|Show/switch configuration profile|Profile-specific behavior.
222
+ Tools|keys|Keybindings (sign-check: verify git signing)|Keyboard and signing references.
223
+ Tools|tools|Show or install nix packages|Package helper entrypoint.
224
+ Tools|new|Create a new project from a template|Project scaffold helper.
225
+ Tools|sandbox|Launch a safe sandbox preview (Docker/Podman)|Disposable environment for testing.
226
+ Tools|lint|Lint shell scripts (--fix|-f to auto-format, --check|-c for CI)|Shell quality gate.
227
+ Tools|learn|Start the interactive tour of your new tools|Guided onboarding.
228
+ Tools|docs|Show repo README|Open the main documentation.
229
+ Appearance|theme|Switch terminal theme (dark/light)|Terminal appearance control.
230
+ Appearance|wallpaper|Apply a wallpaper from your library [macOS,Linux]|Desktop customization helper.
231
+ Appearance|fonts|Install Nerd Fonts (JetBrainsMono by default)|Font bootstrap helper.
232
+ Appearance|tune|Apply OS tuning (opt-in) [macOS,Linux]|Host tuning entrypoint.
233
+ Secrets|secrets-init|Initialize age key for secrets|First-time secrets setup.
234
+ Secrets|secrets|Edit encrypted secrets (age)|Primary secrets entrypoint.
235
+ Secrets|secrets-create|Create an encrypted secrets file|Create a new secret payload.
236
+ Secrets|ssh-key|Encrypt an SSH key locally with age|Protect local SSH keys.
237
+ Secrets|ssh-cert|Manage short-lived SSH certificates|SSH certificate workflow.
238
+ Security (opt-in)|backup|Create a compressed backup of your home|Safety copy before risky changes.
239
+ Security (opt-in)|encrypt-check|Check disk encryption status|Host security inspection.
240
+ Security (opt-in)|firewall|Apply firewall hardening [macOS,Linux]|Opt-in host hardening.
241
+ Security (opt-in)|telemetry|Disable OS telemetry [macOS,Linux]|Privacy-focused host control.
242
+ Security (opt-in)|dns-doh|Enable DNS-over-HTTPS [macOS,Linux]|Secure DNS helper.
243
+ Security (opt-in)|lock-screen|Enforce lock screen idle settings [Linux]|Linux workstation hardening.
244
+ Security (opt-in)|usb-safety|Disable automount for removable media [Linux]|Linux removable-media hardening.
245
+ Fleet|fleet|Show fleet node status, drift, and namespace (--json for machine output)|Fleet management surface.
246
+ Fleet|fleet drift|Check for configuration drift across managed files|Drift detection and reporting.
247
+ Fleet|fleet namespace|Show or set the active namespace for multi-tenant isolation|Namespace management.
248
+ Fleet|fleet events|Show recent fleet events from local event log|Fleet observability.
249
+ Meta|upgrade|Update system toolchains, plugins, and dotfiles|Managed upgrade flow.
250
+ Meta|packages|List installed packages and package managers|Inventory and package surfaces.
251
+ Meta|cache-refresh|Regenerate shell caches for ultra-fast startup|Refresh generated shell state.
252
+ Meta|search|Find commands by keyword|Find the right command quickly.
253
+ Meta|version|Show version information.|Matches `dot --version`.
254
+ Meta|help|Show this help message|Overview or focused command help.
255
+ EOF
256
+ }
257
+
258
+ _dot_help_details() {
259
+ cat <<'EOF'
260
+ sync|Apply the current dotfiles to this machine.|dot sync\ndot sync --check
261
+ add|Start managing a file with chezmoi.|dot add ~/.gitconfig
262
+ diff|Show pending dotfile changes before applying.|dot diff
263
+ status|Show local drift in the managed home state.|dot status
264
+ edit|Open the dotfiles source tree in the configured editor.|dot edit
265
+ upgrade|Run the managed update path for tools and dotfiles.|dot upgrade
266
+ doctor|Inspect shell tools, paths, portability, and health.|dot doctor\ndot doctor --score\ndot doctor -H
267
+ attest|Export workstation attestation evidence.|dot attest\ndot attest --json\ndot attest -F /srv/dotfiles-fleet
268
+ health|Run the health dashboard with optional fixes.|dot health -v\ndot health -j\ndot health -f
269
+ perf|Measure shell performance and emit structured timing.|dot perf -j -r 1\ndot perf -p\ndot perf -t 200
270
+ security-score|Assess workstation security posture.|dot security-score -j\ndot security-score -q
271
+ snapshot|Capture the current workstation snapshot.|dot snapshot -b\ndot snapshot -b -f
272
+ verify|Run post-change verification checks.|dot verify\ndot verify -s
273
+ restore|Restore from a backup or git ref.|dot restore -l\ndot restore -L\ndot restore -g HEAD~1
274
+ rollback|Restore a previous configuration snapshot.|dot rollback
275
+ lint|Run shell quality checks for the repo.|dot lint\ndot lint -c\ndot lint -f
276
+ ai|Show installed AI tools and entrypoints.|dot ai
277
+ mcp|Inspect MCP configuration, policy, and registry.|dot mcp\ndot mcp -s -j\ndot mcp registry
278
+ mode|Inspect or switch the active agent mode.|dot mode list\ndot mode show ask\ndot mode set audit
279
+ agent|Inspect agent metadata or run profile-aware actions.|dot agent card\ndot agent a2a-card --validate\ndot agent checkpoint list\ndot agent conformance --strict --json
280
+ fleet|Show fleet node status, drift, and namespace.|dot fleet\ndot fleet status --json\ndot fleet drift\ndot fleet namespace set engineering
281
+ env|Show managed tool versions and runtime state.|dot env
282
+ profile|Show or switch the active configuration profile.|dot profile
283
+ secrets|Manage encrypted secrets and environment loading.|dot secrets edit\ndot secrets list\ndot secrets load ai
284
+ theme|Switch the terminal theme.|dot theme light\ndot theme dark
285
+ learn|Open the guided tour of the toolchain.|dot learn
286
+ search|Find commands by keyword across the public surface.|dot search ai
287
+ help|Show the overview or a focused command reference.|dot help\ndot help doctor\ndot help all
288
+ --version|Show the installed dotfiles version.|dot --version\ndot version
289
+ version|Show the installed dotfiles version.|dot --version\ndot version
290
+ EOF
291
+ }
292
+
293
+ _dot_help_summary() {
294
+ local command_name="${1:-}"
295
+ awk -F'|' -v command_name="$command_name" '$1 == command_name { print $2; exit }' < <(_dot_help_details)
296
+ }
297
+
298
+ _dot_help_examples() {
299
+ local command_name="${1:-}"
300
+ awk -F'|' -v command_name="$command_name" '$1 == command_name { print $3; exit }' < <(_dot_help_details)
301
+ }
302
+
303
+ _dot_command_routes() {
304
+ cat <<'EOF'
305
+ sync|core
306
+ apply|core
307
+ update|core
308
+ add|core
309
+ diff|core
310
+ status|core
311
+ remove|core
312
+ cd|core
313
+ edit|core
314
+ commit|core
315
+ clean-cache|core
316
+ doctor|diagnostics
317
+ scorecard|diagnostics
318
+ score|diagnostics
319
+ snapshot|diagnostics
320
+ history|diagnostics
321
+ perf|diagnostics
322
+ load-bench|diagnostics
323
+ load-bench-pty|diagnostics
324
+ chaos|diagnostics
325
+ bundle|diagnostics
326
+ rollback|diagnostics
327
+ heal|diagnostics
328
+ health|diagnostics
329
+ health-check|diagnostics
330
+ smoke-test|diagnostics
331
+ verify|diagnostics
332
+ attest|diagnostics
333
+ attestation|diagnostics
334
+ security-score|diagnostics
335
+ drift|diagnostics
336
+ benchmark|diagnostics
337
+ intelligence|diagnostics
338
+ conflicts|diagnostics
339
+ locks|diagnostics
340
+ restore|diagnostics
341
+ metrics|diagnostics
342
+ ai|ai
343
+ ai-setup|ai
344
+ ai-query|ai
345
+ cl|ai
346
+ claude|ai
347
+ gemini|ai
348
+ kiro|ai
349
+ sgpt|ai
350
+ ollama|ai
351
+ opencode|ai
352
+ aider|ai
353
+ env|tools
354
+ profile|tools
355
+ tools|tools
356
+ new|tools
357
+ packages|tools
358
+ aliases|tools
359
+ alias-check|tools
360
+ setup|tools
361
+ log-rotate|tools
362
+ lint|tools
363
+ theme|appearance
364
+ wallpaper|appearance
365
+ fonts|appearance
366
+ tune|appearance
367
+ secrets-init|secrets
368
+ secrets|secrets
369
+ secrets-create|secrets
370
+ ssh-key|secrets
371
+ ssh-cert|secrets
372
+ backup|security
373
+ encrypt-check|security
374
+ firewall|security
375
+ telemetry|security
376
+ dns-doh|security
377
+ lock-screen|security
378
+ usb-safety|security
379
+ upgrade|meta
380
+ cache-refresh|meta
381
+ prewarm|meta
382
+ docs|meta
383
+ learn|meta
384
+ keys|meta
385
+ sandbox|meta
386
+ mcp|meta
387
+ mode|meta
388
+ agent|meta
389
+ fleet|fleet
390
+ patterns|patterns
391
+ manual|manual
392
+ search|search
393
+ help|help
394
+ --help|help
395
+ -h|help
396
+ --version|version
397
+ -v|version
398
+ version|version
399
+ EOF
400
+ }
401
+
402
+ _dot_command_route() {
403
+ local command_name="${1:-}"
404
+ if [[ -z "$command_name" ]]; then
405
+ return 1
406
+ fi
407
+ awk -F'|' -v command_name="$command_name" '$1 == command_name { print $2; exit }' < <(_dot_command_routes)
408
+ }
409
+
410
+ show_help_overview() {
411
+ ui_dot_banner "Reference"
412
+ ui_header "Dotfiles"
413
+ ui_meta "Usage" "dot [command]"
414
+ ui_meta "Version" "v$VERSION"
415
+ echo ""
416
+
417
+ ui_info "What it is" "A single command for setting up, checking, and maintaining this shell environment."
418
+ ui_info "Platforms" "macOS, Linux, and WSL"
419
+ ui_info "Start" "Run 'dot sync', then 'dot doctor', then 'dot learn'"
420
+ echo ""
100
421
 
101
- local src_dir
102
- src_dir="$(resolve_source_dir)"
103
- if [ -z "$src_dir" ]; then
104
- echo "Dotfiles source not found." >&2
422
+ local current_section="" section="" command_name="" description="" detail=""
423
+ while IFS='|' read -r section command_name description detail; do
424
+ if [[ "$section" != "$current_section" ]]; then
425
+ if [[ -n "$current_section" ]]; then
426
+ echo ""
427
+ fi
428
+ ui_section "$section"
429
+ current_section="$section"
430
+ fi
431
+ ui_cmd "$command_name" "$description"
432
+ done < <(_dot_help_overview_specs)
433
+ echo ""
434
+ ui_info "Next" "Run 'dot help all' for the full command list"
435
+ ui_info "Detail" "Run 'dot help <command>' for one command"
436
+ }
437
+
438
+ show_help_all() {
439
+ ui_dot_banner "Reference"
440
+ ui_header "Dotfiles Command Reference"
441
+ ui_meta "Usage" "dot [command]"
442
+ ui_meta "Version" "v$VERSION"
443
+ echo ""
444
+
445
+ local current_section="" section="" command_name="" description="" detail=""
446
+ while IFS='|' read -r section command_name description detail; do
447
+ if [[ "$command_name" == "help all" ]]; then
448
+ continue
449
+ fi
450
+ if [[ "$section" != "$current_section" ]]; then
451
+ if [[ -n "$current_section" ]]; then
452
+ echo ""
453
+ fi
454
+ ui_section "$section"
455
+ current_section="$section"
456
+ fi
457
+ ui_cmd "$command_name" "$description"
458
+ done < <(_dot_help_specs)
459
+ }
460
+
461
+ show_help_command() {
462
+ local command_name="${1:-}"
463
+ local normalized summary examples
464
+
465
+ normalized="$command_name"
466
+ if [[ "$command_name" == "version" || "$command_name" == "-v" ]]; then
467
+ normalized="--version"
468
+ fi
469
+
470
+ summary="$(_dot_help_summary "$normalized")"
471
+ examples="$(_dot_help_examples "$normalized")"
472
+
473
+ if [[ -z "$summary" ]]; then
474
+ ui_fail "Unknown help topic: $command_name"
475
+ ui_info "Hint" "Try 'dot help all' or 'dot search <keyword>'"
105
476
  exit 1
106
477
  fi
107
478
 
108
- local module_path="$src_dir/scripts/dot/commands/$module.sh"
109
- if [ -f "$module_path" ]; then
110
- exec bash "$module_path" "$cmd" "$@"
479
+ ui_dot_banner "Reference"
480
+ ui_header "dot $command_name"
481
+ echo ""
482
+ ui_info "Summary" "$summary"
483
+ if [[ -n "$examples" ]]; then
484
+ echo ""
485
+ ui_section "Examples"
486
+ while IFS= read -r example; do
487
+ [[ -n "$example" ]] || continue
488
+ ui_cmd "$example" ""
489
+ done < <(printf '%b\n' "$examples")
490
+ fi
491
+ }
492
+
493
+ show_help() {
494
+ local topic="${1:-}"
495
+ case "$topic" in
496
+ "")
497
+ show_help_overview
498
+ ;;
499
+ all)
500
+ show_help_all
501
+ ;;
502
+ *)
503
+ show_help_command "$topic"
504
+ ;;
505
+ esac
506
+ }
507
+
508
+ resolve_source_dir() { _resolve_source_dir; }
509
+
510
+ # ─── Dispatcher ───────────────────────────────────────────────────────────────
511
+ # Routes COMMAND to the appropriate command module in scripts/dot/commands/.
512
+ # Each module receives the original COMMAND as its first argument so that its
513
+ # internal case statement can dispatch to the right sub-function.
514
+ _SOURCE_DIR="$(_resolve_source_dir)"
515
+ _CMD_DIR="${_SOURCE_DIR}/scripts/dot/commands"
516
+
517
+ _dispatch() {
518
+ local module="$1"
519
+ shift # remove module name; remaining $@ are the user's extra args
520
+ local cmd_file="${_CMD_DIR}/${module}.sh"
521
+ if [[ -f "$cmd_file" ]]; then
522
+ # shellcheck disable=SC1090
523
+ exec bash "$cmd_file" "$COMMAND" "$@"
111
524
  else
112
- echo "Command module not found: $module" >&2
525
+ ui_fail "Command module not found: $cmd_file"
113
526
  exit 1
114
527
  fi
115
528
  }
116
529
 
117
- case "$COMMAND" in
118
- # Version
119
- --version|-v|version)
120
- echo "dot v${VERSION}"
121
- echo "Dotfiles CLI - Cross-platform shell environment distribution"
122
- echo ""
123
- echo "Repository: https://github.com/sebastienrousseau/dotfiles"
124
- echo "Managed by: chezmoi $(chezmoi --version 2>/dev/null | head -1 || echo 'not installed')"
125
- exit 0
126
- ;;
127
-
128
- # Core commands
129
- apply|sync|update|add|diff|status|remove|cd|edit)
130
- dispatch "core" "$COMMAND" "$@"
131
- ;;
530
+ if [[ -z "$COMMAND" ]]; then
531
+ show_help
532
+ exit 0
533
+ fi
132
534
 
133
- # Diagnostics
134
- doctor|heal|health|health-check|security-score|rollback|restore|drift|history|benchmark)
135
- dispatch "diagnostics" "$COMMAND" "$@"
136
- ;;
535
+ route="$(_dot_command_route "$COMMAND" || true)"
137
536
 
138
- # Tools
139
- tools|new|packages|log-rotate)
140
- dispatch "tools" "$COMMAND" "$@"
537
+ case "$route" in
538
+ core | diagnostics | ai | tools | appearance | secrets | security | meta | fleet)
539
+ _dispatch "$route" "$@"
141
540
  ;;
142
541
 
143
- # Appearance
144
- theme|wallpaper|fonts|tune)
145
- dispatch "appearance" "$COMMAND" "$@"
542
+ manual)
543
+ if [[ -n "$_SOURCE_DIR" ]] && [[ -f "$_SOURCE_DIR/scripts/dot/commands/manual.sh" ]]; then
544
+ exec bash "$_SOURCE_DIR/scripts/dot/commands/manual.sh" "$@"
545
+ else
546
+ ui_fail "manual.sh not found"
547
+ exit 1
548
+ fi
146
549
  ;;
147
550
 
148
- # Secrets
149
- secrets-init|secrets|secrets-create|ssh-key)
150
- dispatch "secrets" "$COMMAND" "$@"
551
+ patterns)
552
+ if [[ -n "$_SOURCE_DIR" ]] && [[ -f "$_SOURCE_DIR/scripts/dot/commands/patterns.sh" ]]; then
553
+ exec bash "$_SOURCE_DIR/scripts/dot/commands/patterns.sh" "$@"
554
+ else
555
+ ui_fail "patterns.sh not found"
556
+ exit 1
557
+ fi
151
558
  ;;
152
559
 
153
- # Security
154
- backup|encrypt-check|firewall|telemetry|dns-doh|lock-screen|usb-safety)
155
- dispatch "security" "$COMMAND" "$@"
560
+ search)
561
+ keyword="${1:-}"
562
+ if [[ -z "$keyword" ]]; then
563
+ echo "Usage: dot search <keyword>"
564
+ exit 1
565
+ fi
566
+ show_help_all | grep -i --color=auto "$keyword" || echo "No commands matching '$keyword'"
567
+ exit 0
156
568
  ;;
157
569
 
158
- # Meta
159
- upgrade|docs|learn|keys|sandbox)
160
- dispatch "meta" "$COMMAND" "$@"
570
+ help)
571
+ show_help "$@"
161
572
  ;;
162
573
 
163
- # Help
164
- help|--help|-h)
165
- show_help
574
+ version)
575
+ show_version
166
576
  ;;
167
577
 
168
- # Unknown or empty
578
+ # User-provided custom commands
169
579
  *)
170
- if [ -z "$COMMAND" ]; then
171
- show_help
580
+ _user_cmd="${XDG_CONFIG_HOME:-$HOME/.config}/dotfiles/commands/${COMMAND}.sh"
581
+ if [[ -f "$_user_cmd" ]]; then
582
+ source "$_user_cmd" "$@"
172
583
  else
173
- echo "Unknown command: $COMMAND"
174
- echo "Try 'dot help' for usage."
584
+ echo "Unknown command: ${COMMAND:-}" >&2
585
+ echo "Run 'dot help' for available commands." >&2
175
586
  exit 1
176
587
  fi
177
588
  ;;