@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,26 +1,61 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  # Dotfiles CLI Utilities
3
4
  # Shared functions for dot command modules
4
5
 
5
- # Resolve the dotfiles source directory
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ # shellcheck source=ui.sh
8
+ source "$SCRIPT_DIR/ui.sh"
9
+ # shellcheck source=platform.sh
10
+ source "$SCRIPT_DIR/platform.sh"
11
+
12
+ _DOT_SOURCE_DIR_CACHE=""
13
+
14
+ ## resolve_source_dir — Locate the dotfiles source tree.
15
+ ## Checks (in order): relative to this script, $CHEZMOI_SOURCE_DIR,
16
+ ## ~/.dotfiles, ~/.local/share/chezmoi. Caches the result for the process.
17
+ ## Prints the absolute path (or empty string if not found). Exit: always 0.
6
18
  resolve_source_dir() {
7
- if [ -n "${CHEZMOI_SOURCE_DIR:-}" ] && [ -d "$CHEZMOI_SOURCE_DIR" ]; then
8
- echo "$CHEZMOI_SOURCE_DIR"
19
+ if [[ -n "${_DOT_SOURCE_DIR_CACHE:-}" ]] && [[ -d "$_DOT_SOURCE_DIR_CACHE" ]]; then
20
+ printf "%s\n" "$_DOT_SOURCE_DIR_CACHE"
9
21
  return
10
22
  fi
11
- if [ -d "$HOME/.dotfiles" ]; then
12
- echo "$HOME/.dotfiles"
13
- return
23
+
24
+ local dir=""
25
+ local repo_candidate=""
26
+
27
+ if repo_candidate="$(cd "$SCRIPT_DIR/../../.." && pwd 2>/dev/null)"; then
28
+ :
29
+ else
30
+ repo_candidate=""
14
31
  fi
15
- if [ -d "$HOME/.local/share/chezmoi" ]; then
16
- echo "$HOME/.local/share/chezmoi"
17
- return
32
+ if [[ -n "$repo_candidate" && -f "$repo_candidate/scripts/dot/lib/ui.sh" ]]; then
33
+ dir="$repo_candidate"
34
+ elif [ -n "${CHEZMOI_SOURCE_DIR:-}" ] && [ -d "$CHEZMOI_SOURCE_DIR" ]; then
35
+ dir="$CHEZMOI_SOURCE_DIR"
36
+ elif [ -d "$HOME/.dotfiles" ]; then
37
+ dir="$HOME/.dotfiles"
38
+ elif [ -d "$HOME/.local/share/chezmoi" ]; then
39
+ dir="$HOME/.local/share/chezmoi"
40
+ fi
41
+
42
+ if [ -n "$dir" ]; then
43
+ # Resolve symlinks for consistent path handling
44
+ if command -v realpath >/dev/null 2>&1; then
45
+ dir="$(realpath "$dir")"
46
+ elif command -v readlink >/dev/null 2>&1; then
47
+ dir="$(readlink -f "$dir" 2>/dev/null || echo "$dir")"
48
+ fi
49
+ _DOT_SOURCE_DIR_CACHE="$dir"
50
+ printf "%s\n" "$dir"
51
+ else
52
+ printf "%s\n" ""
18
53
  fi
19
- echo ""
20
54
  }
21
55
 
22
- # Generic dispatcher: resolve source dir, find script, exec it.
23
- # Usage: run_script <relative-script-path> <not-found-label> [args...]
56
+ ## run_script Resolve source dir, find a script, exec it (never returns).
57
+ ## Usage: run_script <relative-script-path> <not-found-label> [args...]
58
+ ## Exit: 1 if source dir or script not found; otherwise execs into the script.
24
59
  run_script() {
25
60
  local script_rel="$1"
26
61
  local label="$2"
@@ -39,7 +74,7 @@ run_script() {
39
74
  fi
40
75
  }
41
76
 
42
- # Require source directory or exit
77
+ ## require_source_dir — Print source dir path or exit 1 if not found.
43
78
  require_source_dir() {
44
79
  local src_dir
45
80
  src_dir="$(resolve_source_dir)"
@@ -50,23 +85,288 @@ require_source_dir() {
50
85
  echo "$src_dir"
51
86
  }
52
87
 
53
- # Check if a command exists
88
+ ## has_command <name> — Return 0 if <name> is on PATH, 1 otherwise.
54
89
  has_command() {
55
90
  command -v "$1" >/dev/null 2>&1
56
91
  }
57
92
 
58
- # Print error message and exit
93
+ ## validate_name <name> [label] Die if name contains unsafe characters.
94
+ ## Allowed: [a-zA-Z0-9._-]. This prevents shell injection when names appear
95
+ ## in paths or eval contexts. Exit: 0 if valid, calls die() if invalid.
96
+ validate_name() {
97
+ local name="$1" label="${2:-name}"
98
+ if [[ ! "$name" =~ ^[a-zA-Z0-9._-]+$ ]]; then
99
+ die "Invalid $label: $name (only alphanumeric, dash, underscore, dot allowed)"
100
+ fi
101
+ }
102
+
103
+ ## validate_xdg_path <var_name> <path> — Warn and return 1 if path is not absolute.
104
+ validate_xdg_path() {
105
+ local var_name="$1" path="$2"
106
+ if [[ -n "$path" ]] && [[ "$path" != /* ]]; then
107
+ ui_warn "$var_name" "Not an absolute path: $path (ignoring, using default)"
108
+ return 1
109
+ fi
110
+ return 0
111
+ }
112
+
113
+ ## die <message> [code] — Print error to stderr and exit (default code 1).
59
114
  die() {
60
- echo "Error: $1" >&2
115
+ ui_err "$1" >&2
61
116
  exit "${2:-1}"
62
117
  }
63
118
 
64
119
  # Print warning message
65
120
  warn() {
66
- echo "Warning: $1" >&2
121
+ ui_warn "$1" >&2
67
122
  }
68
123
 
69
124
  # Print info message
70
125
  info() {
71
- echo "$1"
126
+ ui_info "$1"
127
+ }
128
+
129
+ # Print the dot logo once per process for interactive sessions.
130
+ ui_logo_once() {
131
+ local title="${1:-Dot}"
132
+ ui_init
133
+ if [[ "${DOTFILES_SHOW_LOGO:-1}" != "1" ]]; then
134
+ return
135
+ fi
136
+ if [[ ! -t 1 ]]; then
137
+ return
138
+ fi
139
+ if [[ "${DOTFILES_LOGO_PRINTED:-0}" = "1" ]]; then
140
+ return
141
+ fi
142
+ ui_product_banner "$title"
143
+ }
144
+
145
+ dotfiles_version() {
146
+ local src_dir version=""
147
+ src_dir="$(resolve_source_dir)"
148
+
149
+ if [[ -n "$src_dir" ]] && [[ -f "$src_dir/package.json" ]]; then
150
+ version="$(sed -n 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"\([0-9][0-9.]*\)".*/\1/p' "$src_dir/package.json" | head -1)"
151
+ fi
152
+
153
+ if [[ -z "$version" ]] && [[ -n "${DOTFILES_VERSION:-}" ]]; then
154
+ version="$DOTFILES_VERSION"
155
+ fi
156
+
157
+ if [[ -z "$version" ]]; then
158
+ version="unknown"
159
+ fi
160
+
161
+ printf "%s\n" "$version"
162
+ }
163
+
164
+ dot_command_summary() {
165
+ case "${1:-}" in
166
+ apply | sync)
167
+ echo "Apply dotfiles changes (sync is an alias for apply)."
168
+ ;;
169
+ update)
170
+ echo "Pull latest changes from remote, then apply."
171
+ ;;
172
+ add)
173
+ echo "Add a file into chezmoi source management."
174
+ ;;
175
+ diff)
176
+ echo "Show pending managed-file differences."
177
+ ;;
178
+ status)
179
+ echo "Show current configuration drift status."
180
+ ;;
181
+ remove)
182
+ echo "Safely remove a managed file from source."
183
+ ;;
184
+ cd)
185
+ echo "Print the dotfiles source directory path."
186
+ ;;
187
+ edit)
188
+ echo "Open dotfiles source in your editor."
189
+ ;;
190
+ doctor)
191
+ echo "Deep audit: tools, paths, portability, AI analysis."
192
+ ;;
193
+ heal)
194
+ echo "Auto-repair broken symlinks, missing tools, and drift."
195
+ ;;
196
+ health | health-check)
197
+ echo "Dashboard with health score, checks, and auto-fix (--fix)."
198
+ ;;
199
+ security-score)
200
+ echo "Calculate and print security posture score."
201
+ ;;
202
+ scorecard)
203
+ echo "Show unified health, security, and performance scorecard."
204
+ ;;
205
+ perf)
206
+ echo "Profile shell startup performance (3-run average)."
207
+ ;;
208
+ conflicts)
209
+ echo "Report alias and command conflicts."
210
+ ;;
211
+ locks)
212
+ echo "Show version locks for key tools."
213
+ ;;
214
+ snapshot)
215
+ echo "Capture a baseline system snapshot."
216
+ ;;
217
+ rollback)
218
+ echo "Rollback dotfiles state to a prior point."
219
+ ;;
220
+ restore)
221
+ echo "Restore files from backup or git reference."
222
+ ;;
223
+ drift)
224
+ echo "Display detailed drift information."
225
+ ;;
226
+ history)
227
+ echo "Analyze shell command history."
228
+ ;;
229
+ benchmark)
230
+ echo "Measure shell startup performance."
231
+ ;;
232
+ verify)
233
+ echo "Run post-merge verification checks."
234
+ ;;
235
+ tools)
236
+ echo "Browse or install toolchain components."
237
+ ;;
238
+ aliases)
239
+ echo "List, search, and explain configured aliases."
240
+ ;;
241
+ new)
242
+ echo "Create a new project from templates."
243
+ ;;
244
+ packages)
245
+ echo "List package managers and package stats."
246
+ ;;
247
+ log-rotate)
248
+ echo "Rotate dotfiles local log files."
249
+ ;;
250
+ setup)
251
+ echo "Interactive setup for profiles, features, and secrets."
252
+ ;;
253
+ theme)
254
+ echo "Switch terminal appearance theme."
255
+ ;;
256
+ wallpaper)
257
+ echo "Apply or sync wallpapers."
258
+ ;;
259
+ fonts)
260
+ echo "Install Nerd Fonts for terminal tooling."
261
+ ;;
262
+ tune)
263
+ echo "Apply OS-level tuning defaults."
264
+ ;;
265
+ secrets-init)
266
+ echo "Initialize age key for encrypted secrets."
267
+ ;;
268
+ secrets)
269
+ echo "Manage secrets (set/get/list/load/provider)."
270
+ ;;
271
+ env)
272
+ echo "Load secret buckets into shell exports."
273
+ ;;
274
+ secrets-create)
275
+ echo "Create a new encrypted secrets file."
276
+ ;;
277
+ ssh-key)
278
+ echo "Encrypt an SSH key using age."
279
+ ;;
280
+ backup)
281
+ echo "Create a compressed backup."
282
+ ;;
283
+ encrypt-check)
284
+ echo "Check disk encryption status."
285
+ ;;
286
+ firewall)
287
+ echo "Apply firewall hardening settings."
288
+ ;;
289
+ telemetry)
290
+ echo "Disable telemetry where supported."
291
+ ;;
292
+ dns-doh)
293
+ echo "Enable DNS-over-HTTPS."
294
+ ;;
295
+ lock-screen)
296
+ echo "Harden lock-screen idle policy."
297
+ ;;
298
+ usb-safety)
299
+ echo "Disable risky removable-media automount."
300
+ ;;
301
+ fleet)
302
+ echo "Show fleet node status, drift, and namespace."
303
+ ;;
304
+ upgrade)
305
+ echo "Update system toolchains, plugins, and dotfiles."
306
+ ;;
307
+ docs)
308
+ echo "Show dotfiles documentation."
309
+ ;;
310
+ learn)
311
+ echo "Start the interactive onboarding tour."
312
+ ;;
313
+ keys)
314
+ echo "Show keybindings catalog."
315
+ ;;
316
+ sandbox)
317
+ echo "Start isolated sandbox environment."
318
+ ;;
319
+ mcp)
320
+ echo "Run MCP configuration diagnostics."
321
+ ;;
322
+ metrics)
323
+ echo "Show recent observability metrics from JSONL."
324
+ ;;
325
+ cache-refresh | prewarm)
326
+ echo "Regenerate shell caches for ultra-fast startup."
327
+ ;;
328
+ search)
329
+ echo "Find commands by keyword."
330
+ ;;
331
+ help | --help | -h)
332
+ echo "Show command usage and reference."
333
+ ;;
334
+ --version | -v | version)
335
+ echo "Show dotfiles and environment versions."
336
+ ;;
337
+ *)
338
+ echo "Run a dotfiles command."
339
+ ;;
340
+ esac
341
+ }
342
+
343
+ dot_ui_command_banner() {
344
+ local section="${1:-Dot}"
345
+ local cmd="${2:-}"
346
+ shift 2 || true
347
+ local version summary
348
+
349
+ for arg in "$@"; do
350
+ case "$arg" in
351
+ --json | -j)
352
+ return
353
+ ;;
354
+ esac
355
+ done
356
+
357
+ ui_logo_once "Dot • $section"
358
+
359
+ if [[ "${DOTFILES_SHOW_LOGO:-1}" != "1" ]] || [[ ! -t 1 ]]; then
360
+ return
361
+ fi
362
+
363
+ version="$(dotfiles_version)"
364
+ summary="$(dot_command_summary "$cmd")"
365
+
366
+ ui_key_value "Version" "v${version}"
367
+ if [[ -n "$cmd" ]]; then
368
+ ui_key_value "Command" "dot ${cmd}"
369
+ fi
370
+ ui_key_value "Summary" "$summary"
371
+ printf "\n"
72
372
  }
@@ -1,5 +1,14 @@
1
- #!/bin/sh
2
- set -e
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ # shellcheck source=../dot/lib/ui.sh
7
+ # shellcheck disable=SC1091
8
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
9
+
10
+ ui_init
11
+ ui_header "Nerd Fonts"
3
12
 
4
13
  DEFAULT_FONTS="JetBrainsMono FiraCode Iosevka"
5
14
  FONT_LIST="${*:-$DEFAULT_FONTS}"
@@ -8,20 +17,20 @@ install_linux() {
8
17
  font_name="$1"
9
18
  target_dir="$HOME/.local/share/fonts/${font_name}NerdFont"
10
19
  mkdir -p "$target_dir"
11
- tmp_dir="$(mktemp -d)"
20
+ tmp_dir="$(umask 077 && mktemp -d)"
21
+ # shellcheck disable=SC2064
22
+ trap "rm -rf '$tmp_dir'" RETURN
12
23
  url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${font_name}.zip"
13
- echo "Downloading $font_name Nerd Font..."
24
+ ui_info "Downloading" "$font_name Nerd Font"
14
25
  curl -fL --connect-timeout 10 --max-time 300 "$url" -o "$tmp_dir/${font_name}.zip"
15
26
  if ! unzip -o "$tmp_dir/${font_name}.zip" -d "$target_dir" >/dev/null; then
16
- echo "Error: Failed to unzip ${font_name}.zip" >&2
17
- rm -rf "$tmp_dir"
27
+ ui_err "Unzip failed" "${font_name}.zip" >&2
18
28
  return 1
19
29
  fi
20
- rm -rf "$tmp_dir"
21
30
  if command -v fc-cache >/dev/null; then
22
31
  fc-cache -f "$target_dir"
23
32
  fi
24
- echo "Installed to: $target_dir"
33
+ ui_ok "Installed" "$target_dir"
25
34
  }
26
35
 
27
36
  install_macos() {
@@ -36,7 +45,7 @@ install_macos() {
36
45
  esac
37
46
  brew install --cask "font-${cask_name}-nerd-font" || true
38
47
  else
39
- echo "Homebrew not found. Install font manually."
48
+ ui_err "Homebrew" "not found. Install font manually."
40
49
  exit 1
41
50
  fi
42
51
  }
@@ -53,7 +62,7 @@ case "$(uname -s)" in
53
62
  done
54
63
  ;;
55
64
  *)
56
- echo "Unsupported OS for font install."
65
+ ui_err "Unsupported OS" "font install"
57
66
  exit 1
58
67
  ;;
59
68
  esac
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  set -euo pipefail
3
4
 
4
5
  if [[ $# -lt 1 ]]; then
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
6
+ install -m 0755 "${repo_root}/scripts/git-hooks/pre-commit" "${repo_root}/.git/hooks/pre-commit"
7
+ install -m 0755 "${repo_root}/scripts/git-hooks/pre-push" "${repo_root}/.git/hooks/pre-push"
8
+ install -m 0755 "${repo_root}/scripts/git-hooks/prepare-commit-msg" "${repo_root}/.git/hooks/prepare-commit-msg"
9
+ echo "Installed pre-commit hook at ${repo_root}/.git/hooks/pre-commit"
10
+ echo "Installed pre-push hook at ${repo_root}/.git/hooks/pre-push"
11
+ echo "Installed prepare-commit-msg hook at ${repo_root}/.git/hooks/prepare-commit-msg"
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
+
6
+ if [[ -x "${repo_root}/scripts/diagnostics/secret-governance.sh" ]]; then
7
+ "${repo_root}/scripts/diagnostics/secret-governance.sh"
8
+ fi
9
+
10
+ if [[ -x "${repo_root}/scripts/git-hooks/pre-commit-audit.sh" ]]; then
11
+ "${repo_root}/scripts/git-hooks/pre-commit-audit.sh"
12
+ fi
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Dotfiles Pre-Commit Sentinel (Audit Hook)
4
+ # Prevents secrets, hardcoded paths, and shell hygiene violations.
5
+
6
+ set -euo pipefail
7
+
8
+ _cleanup_files=()
9
+ trap 'rm -f "${_cleanup_files[@]}"' EXIT
10
+
11
+ # ANSI Colors
12
+ RED='\033[0;31m'
13
+ GREEN='\033[0;32m'
14
+ YELLOW='\033[0;33m'
15
+ BOLD='\033[1m'
16
+ NC='\033[0m'
17
+
18
+ printf '%b\\n' "${BOLD}🕵️ Running Pre-Commit Audit...${NC}"
19
+
20
+ # Get list of staged files
21
+ STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
22
+
23
+ if [[ -z "$STAGED_FILES" ]]; then
24
+ printf '%b\\n' "${GREEN}✓ No files staged. Skipping.${NC}"
25
+ exit 0
26
+ fi
27
+
28
+ FAILED=0
29
+
30
+ # --- 🔐 1. Secret Scanning ---
31
+ echo -n " 🔍 Scanning for secrets... "
32
+ # Refined patterns: require assignment-like syntax to reduce false positives on documentation
33
+ # Exclude assignments to values containing common placeholder strings or within template expressions
34
+ SENSITIVE_PATTERNS="(GITHUB_TOKEN|API_KEY|SECRET|password|private_key|AKIA[0-9A-Z]{16})[[:space:]]*[:=]"
35
+ # Exclusions list for legitimate variable checks or documentation
36
+ SECRET_EXCLUDES="test_|assertions.sh|.pre-commit|README|CHANGELOG|FEATURES.md|CONFIG_STRATEGY.md|docs/|install/lib/|.chezmoitemplates/|mcp-doctor.sh|\.github/workflows/"
37
+ # Also exclude .tmpl files from secret scanning as they contain many false positive markers
38
+ if echo "$STAGED_FILES" | grep -v "\.tmpl" | xargs grep -EiE "$SENSITIVE_PATTERNS" /dev/null | grep -vE "$SECRET_EXCLUDES" | grep -viE "dummy|placeholder|example|test|sk-placeholder|\\{\\{" >/dev/null 2>&1; then
39
+ printf '%b\\n' "${RED}FAILED${NC}"
40
+ printf '%b\\n' " ${YELLOW}⚠ Potential secret detected in staged files:${NC}"
41
+ echo "$STAGED_FILES" | grep -v "\.tmpl" | xargs grep -EiE "$SENSITIVE_PATTERNS" /dev/null | grep -vE "$SECRET_EXCLUDES" | grep -viE "dummy|placeholder|example|test|sk-placeholder|\\{\\{" | sed 's/^/ /'
42
+ FAILED=1
43
+ else
44
+ printf '%b\\n' "${GREEN}PASSED${NC}"
45
+ fi
46
+
47
+ # --- 👻 2. Ghost Path Linter ---
48
+ echo -n " 👻 Checking for hardcoded paths... "
49
+ # Exclude test files, documentation, the hook itself, Nix files, and template backups
50
+ GHOST_EXCLUDES="test_|assertions.sh|pre-commit|INTEROP.md|WSL2_NIX_TROUBLESHOOTING.md|\.nix|\.backup|\.github/workflows/"
51
+ if echo "$STAGED_FILES" | xargs grep -rIE '"/home/(linuxbrew)?[^$]|/Users/[^$]' /dev/null | grep -v "linuxbrew" | grep -vE "$GHOST_EXCLUDES" >/dev/null 2>&1; then
52
+ printf '%b\\n' "${RED}FAILED${NC}"
53
+ printf '%b\\n' " ${YELLOW}⚠ Literal home paths detected (use \$HOME or ~ instead):${NC}"
54
+ echo "$STAGED_FILES" | xargs grep -rIE '"/home/(linuxbrew)?[^$]|/Users/[^$]' /dev/null | grep -v "linuxbrew" | grep -vE "$GHOST_EXCLUDES" | sed 's/^/ /'
55
+ FAILED=1
56
+ else
57
+ printf '%b\\n' "${GREEN}PASSED${NC}"
58
+ fi
59
+
60
+ # --- 🐚 3. ShellCheck Hygiene ---
61
+ if command -v shellcheck >/dev/null 2>&1; then
62
+ echo -n " 🐚 Running ShellCheck... "
63
+ # ONLY run on actual .sh files, NOT .tmpl files (Go templates break shellcheck)
64
+ # Also exclude files that contain Zsh-specific syntax that might trigger false positives in sh mode
65
+ SHELL_FILES=$(echo "$STAGED_FILES" | grep -E '\.sh$' | grep -v "\.tmpl" || true)
66
+ if [[ -n "$SHELL_FILES" ]]; then
67
+ if ! echo "$SHELL_FILES" | xargs shellcheck -x --severity=error -e SC1091,SC2296,SC2142 >/dev/null 2>&1; then
68
+ printf '%b\\n' "${RED}FAILED${NC}"
69
+ printf '%b\\n' " ${YELLOW}⚠ Shell syntax errors detected:${NC}"
70
+ echo "$SHELL_FILES" | xargs shellcheck -x --severity=error -e SC1091,SC2296,SC2142 | sed 's/^/ /'
71
+ FAILED=1
72
+ else
73
+ printf '%b\\n' "${GREEN}PASSED${NC}"
74
+ fi
75
+ else
76
+ printf '%b\\n' "${YELLOW}SKIPPED${NC} (no .sh files)"
77
+ fi
78
+ fi
79
+ # --- 🧹 4. Formatting Audit ---
80
+ echo -n " 🧹 Checking formatting... "
81
+ # Find files with trailing whitespace, excluding SVGs and other formats where it might be intentional or harmless
82
+ OFFENDING_WHITESPACE=$(echo "$STAGED_FILES" | grep -vE '\.(svg|md)$' | xargs grep -l '[[:space:]]$' /dev/null || true)
83
+ # Use defused patterns to avoid self-detection
84
+ MERGE_START="^<<<<<<< "
85
+ MERGE_END="^>>>>>>> "
86
+ MERGE_DIV="^=======$"
87
+ if [[ -n "$OFFENDING_WHITESPACE" ]]; then
88
+ printf '%b\\n' "${RED}FAILED${NC}"
89
+ printf '%b\\n' " ${YELLOW}⚠ Trailing whitespace found in staged files:${NC}"
90
+ echo " ${OFFENDING_WHITESPACE//$'\n'/$'\n' }"
91
+ FAILED=1
92
+ elif echo "$STAGED_FILES" | xargs grep -lE "$MERGE_START|$MERGE_END|$MERGE_DIV" /dev/null >/dev/null 2>&1; then
93
+ printf '%b\\n' "${RED}FAILED${NC}"
94
+ printf '%b\\n' " ${YELLOW}⚠ Unresolved merge markers found in staged files:${NC}"
95
+ echo "$STAGED_FILES" | xargs grep -lE "$MERGE_START|$MERGE_END|$MERGE_DIV" /dev/null | sed 's/^/ /'
96
+ FAILED=1
97
+ else
98
+ printf '%b\\n' "${GREEN}PASSED${NC}"
99
+ fi
100
+
101
+ # --- 🏛️ 5. Signature Guard ---
102
+ if echo "$STAGED_FILES" | grep -q "^README.md$"; then
103
+ echo -n " 🏛️ Checking README signature... "
104
+ EXPECTED_ARCHITECT='**THE ARCHITECT** ᛫ [Sebastien Rousseau](https://sebastienrousseau.com)'
105
+ EXPECTED_ENGINE='**THE ENGINE** ᛞ [EUXIS](https://euxis.co) ᛫ Enterprise Unified Execution Intelligence System'
106
+ README_CONTENT=$(git show :README.md 2>/dev/null || cat README.md)
107
+ if echo "$README_CONTENT" | grep -qF "$EXPECTED_ARCHITECT" && echo "$README_CONTENT" | grep -qF "$EXPECTED_ENGINE"; then
108
+ printf '%b\\n' "${GREEN}PASSED${NC}"
109
+ else
110
+ # Auto-add the signature footer before ## License (or at EOF)
111
+ tmp_footer=$(mktemp)
112
+ _cleanup_files+=("$tmp_footer")
113
+ if grep -qF '## License' README.md; then
114
+ awk -v arch="$EXPECTED_ARCHITECT" -v eng="$EXPECTED_ENGINE" '
115
+ /^## License/ {
116
+ print "---"
117
+ print ""
118
+ print arch
119
+ print eng
120
+ print ""
121
+ print "---"
122
+ print ""
123
+ }
124
+ { print }
125
+ ' README.md >"$tmp_footer" && mv "$tmp_footer" README.md
126
+ else
127
+ {
128
+ printf '\n---\n\n%s\n%s\n\n---\n' "$EXPECTED_ARCHITECT" "$EXPECTED_ENGINE"
129
+ } >>README.md
130
+ fi
131
+ rm -f "$tmp_footer"
132
+ git add README.md
133
+ printf '%b\\n' "${GREEN}FIXED${NC} (auto-added)"
134
+ fi
135
+ fi
136
+
137
+ echo ""
138
+ if [[ $FAILED -eq 1 ]]; then
139
+ printf '%b\\n' "${RED}${BOLD}❌ Audit failed.${NC} Please fix the issues above before committing."
140
+ printf '%b\\n' " (Use --no-verify to bypass if absolutely necessary)"
141
+ exit 1
142
+ else
143
+ printf '%b\n' "${GREEN}${BOLD}✅ Audit passed.${NC} v0.2.500 standards maintained."
144
+ exit 0
145
+ fi
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ repo_root="$(git rev-parse --show-toplevel)"
5
+
6
+ while read -r local_ref local_sha remote_ref remote_sha; do
7
+ [ "$local_sha" = "0000000000000000000000000000000000000000" ] && continue
8
+
9
+ if [ "$remote_sha" = "0000000000000000000000000000000000000000" ]; then
10
+ range="$local_sha"
11
+ elif git cat-file -e "${remote_sha}^{commit}" 2>/dev/null; then
12
+ range="$remote_sha..$local_sha"
13
+ else
14
+ # Remote tip is not in the local object store yet (push without prior fetch).
15
+ # Fall back to checking commits reachable from local tip.
16
+ range="$local_sha"
17
+ fi
18
+
19
+ for c in $(git rev-list "$range"); do
20
+ if ! git verify-commit "$c" >/dev/null 2>&1; then
21
+ echo "Blocked: unsigned commit $c"
22
+ exit 1
23
+ fi
24
+ done
25
+ done
26
+
27
+ if [ "${DOTFILES_SKIP_PRE_PUSH_AUDIT:-0}" != "1" ]; then
28
+ bash "$repo_root/scripts/qa/reliability-audit.sh" --quick
29
+ fi
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Appends the EUXIS branding signature to every commit message.
4
+ # Signature source: ~/.euxis/data/config/branding/signature.txt
5
+
6
+ set -euo pipefail
7
+
8
+ # R5: validate commit message file argument
9
+ if [[ -z "${1:-}" || ! -f "${1:-}" ]]; then
10
+ exit 0 # No file provided — git will handle the error
11
+ fi
12
+
13
+ COMMIT_MSG_FILE="$1"
14
+ COMMIT_SOURCE="${2:-}"
15
+
16
+ # Skip merge commits, amends with existing signature, and squash
17
+ case "$COMMIT_SOURCE" in
18
+ merge | squash) exit 0 ;;
19
+ esac
20
+
21
+ SIGNATURE_FILE="$HOME/.euxis/data/config/branding/signature.txt"
22
+
23
+ # Only append if the signature file exists and message doesn't already have it
24
+ if [[ -f "$SIGNATURE_FILE" ]]; then
25
+ signature=$(cat "$SIGNATURE_FILE")
26
+ if ! grep -qF "THE ARCHITECT" "$COMMIT_MSG_FILE" 2>/dev/null; then
27
+ printf '\n%s\n' "$signature" >>"$COMMIT_MSG_FILE"
28
+ fi
29
+ fi