@sebastienrousseau/dotfiles 0.2.499 → 0.2.501

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/CHANGELOG.md +452 -0
  2. package/LICENSE +1283 -0
  3. package/README.md +322 -0
  4. package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
  5. package/docs/AI.md +108 -0
  6. package/docs/CNAME +1 -0
  7. package/docs/COPYRIGHT +4 -3
  8. package/docs/NAMING_CONVENTIONS.md +102 -0
  9. package/docs/README.md +82 -0
  10. package/docs/_config.yml +59 -0
  11. package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
  12. package/docs/adr/ADR-002-shell-performance.md +130 -0
  13. package/docs/adr/ADR-003-security-first.md +158 -0
  14. package/docs/adr/ADR-004-cli-architecture.md +171 -0
  15. package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
  16. package/docs/adr/ADR-006-shell-selection.md +124 -0
  17. package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
  18. package/docs/adr/ADR-008-alias-system-architecture.md +95 -0
  19. package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
  20. package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
  21. package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
  22. package/docs/adr/README.md +39 -0
  23. package/docs/architecture/ARCHITECTURE.md +117 -0
  24. package/docs/architecture/INTEROP.md +44 -0
  25. package/docs/architecture/REPO_LAYOUT.md +241 -0
  26. package/docs/architecture/WALKTHROUGH.md +86 -0
  27. package/docs/architecture/fleet-deployment.md +77 -0
  28. package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
  29. package/docs/archive/LEGACY_ROADMAP.md +160 -0
  30. package/docs/archive/MILESTONE_v0.2.493.md +47 -0
  31. package/docs/{PLAN.md → archive/PLAN.md} +50 -12
  32. package/docs/archive/REPO_AUDIT.md +31 -0
  33. package/docs/guides/INSTALL.md +144 -0
  34. package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
  35. package/docs/guides/THEMING.md +230 -0
  36. package/docs/guides/TROUBLESHOOTING.md +176 -0
  37. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
  38. package/docs/index.md +43 -0
  39. package/docs/interop/A2A.md +39 -0
  40. package/docs/interop/POWERSHELL.md +102 -0
  41. package/docs/manual/00-introduction.md +89 -0
  42. package/docs/manual/01-concepts/01-architecture.md +138 -0
  43. package/docs/manual/01-concepts/02-trust-model.md +182 -0
  44. package/docs/manual/01-concepts/03-theme-engine.md +186 -0
  45. package/docs/manual/01-concepts/04-fleet.md +148 -0
  46. package/docs/manual/01-concepts/05-self-healing.md +204 -0
  47. package/docs/manual/02-tutorials/01-first-install.md +197 -0
  48. package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
  49. package/docs/manual/02-tutorials/03-create-profile.md +244 -0
  50. package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
  51. package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
  52. package/docs/manual/03-reference/01-dot-cli.md +417 -0
  53. package/docs/manual/03-reference/02-config-files.md +265 -0
  54. package/docs/manual/03-reference/03-environment.md +124 -0
  55. package/docs/manual/03-reference/04-templates.md +190 -0
  56. package/docs/manual/03-reference/05-feature-flags.md +128 -0
  57. package/docs/manual/04-cookbook/01-recipes.md +285 -0
  58. package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
  59. package/docs/manual/04-cookbook/03-faq.md +175 -0
  60. package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
  61. package/docs/manual/05-appendices/B-security-checklist.md +84 -0
  62. package/docs/manual/05-appendices/C-glossary.md +40 -0
  63. package/docs/manual/05-appendices/D-bibliography.md +58 -0
  64. package/docs/manual/05-appendices/E-license.md +38 -0
  65. package/docs/manual/_toc.yml +58 -0
  66. package/docs/manual/command-index.md +62 -0
  67. package/docs/manual/concept-index.md +168 -0
  68. package/docs/operations/ATTESTATION.md +44 -0
  69. package/docs/operations/CI_CADENCE.md +107 -0
  70. package/docs/operations/CI_COMPOSITES.md +156 -0
  71. package/docs/operations/COMPLETIONS.md +123 -0
  72. package/docs/operations/COVERAGE.md +148 -0
  73. package/docs/operations/DRIFT.md +107 -0
  74. package/docs/operations/MAINTENANCE.md +63 -0
  75. package/docs/operations/MIGRATION.md +109 -0
  76. package/docs/operations/OPERATIONS.md +188 -0
  77. package/docs/operations/PERFORMANCE.md +133 -0
  78. package/docs/operations/RELIABILITY.md +122 -0
  79. package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
  80. package/docs/operations/TESTING.md +199 -0
  81. package/docs/operations/TRACEABILITY.md +35 -0
  82. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
  83. package/docs/operations/VERSION_SYNC.md +393 -0
  84. package/docs/reference/ALIASES.md +131 -0
  85. package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
  86. package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
  87. package/docs/reference/FEATURES.md +66 -0
  88. package/docs/reference/FONTS.md +112 -0
  89. package/docs/reference/PROFILES.md +69 -0
  90. package/docs/reference/SCREENSHOTS.md +121 -0
  91. package/docs/reference/SCRIPTS.md +71 -0
  92. package/docs/reference/SUPPORT_MATRIX.md +80 -0
  93. package/docs/reference/THEMES.md +117 -0
  94. package/docs/reference/TOOLS.md +109 -0
  95. package/docs/reference/UTILS.md +155 -0
  96. package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
  97. package/docs/security/AUDIT_BYPASS.md +103 -0
  98. package/docs/security/AUTOMATION_SECRETS.md +26 -0
  99. package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
  100. package/docs/security/COMPLIANCE.md +458 -0
  101. package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
  102. package/docs/security/ENCRYPTION.md +57 -0
  103. package/docs/security/FMEA.md +159 -0
  104. package/docs/security/HISTORY_FILTERING.md +132 -0
  105. package/docs/security/INCIDENT_RESPONSE.md +579 -0
  106. package/docs/security/INSTALL_VERIFICATION.md +122 -0
  107. package/docs/security/KEYS.md +49 -0
  108. package/docs/security/KEY_ROTATION.md +223 -0
  109. package/docs/security/MCP_POLICY.md +78 -0
  110. package/docs/security/POLICY_RELEASES.md +37 -0
  111. package/docs/security/README.md +28 -0
  112. package/docs/security/SCORECARD.md +80 -0
  113. package/docs/security/SECRETS.md +158 -0
  114. package/docs/security/SECURITY.md +45 -0
  115. package/docs/security/SECURITY_CHECKLIST.md +55 -0
  116. package/docs/security/SHELL_EXEMPTIONS.md +145 -0
  117. package/docs/security/SOUP_REGISTER.md +36 -0
  118. package/docs/security/THREAT_MODEL.md +130 -0
  119. package/docs/security/VERIFICATION_VALIDATION.md +228 -0
  120. package/docs/themes/README.md +10 -0
  121. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
  122. package/docs/themes/hero-shot.svg +78 -0
  123. package/dot_config/.module-manifest.json +69 -0
  124. package/dot_config/ai/identity.md +23 -0
  125. package/dot_config/ai/patterns/architect.md +16 -0
  126. package/dot_config/ai/patterns/hardener.md +15 -0
  127. package/dot_config/ai/patterns/refactor.md +15 -0
  128. package/dot_config/aider/aider.conf.yml +32 -0
  129. package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
  130. package/dot_config/ansible/ansible.cfg +11 -0
  131. package/dot_config/atuin/config.toml.tmpl +47 -0
  132. package/dot_config/bat/config +23 -0
  133. package/dot_config/brave-flags.conf.tmpl +7 -0
  134. package/dot_config/btop/btop.conf +16 -0
  135. package/dot_config/btop/themes/tokyonight.theme +34 -0
  136. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  137. package/dot_config/claude/mcp_servers.json +20 -0
  138. package/dot_config/containers/containers.conf +14 -0
  139. package/dot_config/curl/dot_curlrc +18 -0
  140. package/dot_config/dlv/config.yml +39 -0
  141. package/dot_config/docker/config.json +15 -0
  142. package/dot_config/dotfiles/agent-card.json +29 -0
  143. package/dot_config/dotfiles/agent-profiles.json +92 -0
  144. package/dot_config/dotfiles/boot/README.md +13 -0
  145. package/dot_config/dotfiles/grub/README.md +13 -0
  146. package/dot_config/dotfiles/lock/README.md +13 -0
  147. package/dot_config/dotfiles/mcp-lock.json +33 -0
  148. package/dot_config/dotfiles/mcp-policy.json +52 -0
  149. package/dot_config/dotfiles/mcp-registry.json +47 -0
  150. package/dot_config/dotfiles/model-registry.json +20 -0
  151. package/dot_config/dotfiles/policy-bundles.json +38 -0
  152. package/dot_config/dotfiles/prompt-registry.json +16 -0
  153. package/dot_config/dotfiles/versions.env +18 -0
  154. package/dot_config/duf/duf.conf +6 -0
  155. package/dot_config/duti/defaults.duti +5 -0
  156. package/dot_config/emoji/emoji.txt +34 -0
  157. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  158. package/dot_config/environment.d/90-wayland.conf +19 -0
  159. package/dot_config/fastfetch/config.jsonc +28 -0
  160. package/dot_config/firefox/user.js.tmpl +58 -0
  161. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  162. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  163. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  164. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  165. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  166. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  167. package/dot_config/fish/conf.d/init.fish.tmpl +172 -0
  168. package/dot_config/fish/config.fish.tmpl +44 -0
  169. package/dot_config/fish/fish_plugins +1 -0
  170. package/dot_config/fish/functions/_.fish +3 -0
  171. package/dot_config/fish/functions/_cached_eval.fish +131 -0
  172. package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
  173. package/dot_config/fish/functions/als.fish +46 -0
  174. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  175. package/dot_config/fish/functions/c.fish +3 -0
  176. package/dot_config/fish/functions/cat.fish +9 -0
  177. package/dot_config/fish/functions/d.fish +7 -0
  178. package/dot_config/fish/functions/dot.fish +34 -0
  179. package/dot_config/fish/functions/h.fish +3 -0
  180. package/dot_config/fish/functions/l.fish +7 -0
  181. package/dot_config/fish/functions/la.fish +7 -0
  182. package/dot_config/fish/functions/ll.fish +7 -0
  183. package/dot_config/fish/functions/log_error.fish +13 -0
  184. package/dot_config/fish/functions/log_info.fish +13 -0
  185. package/dot_config/fish/functions/lr.fish +7 -0
  186. package/dot_config/fish/functions/lra.fish +7 -0
  187. package/dot_config/fish/functions/ls.fish +7 -0
  188. package/dot_config/fish/functions/lt.fish +7 -0
  189. package/dot_config/fish/functions/lta.fish +7 -0
  190. package/dot_config/fish/functions/notify-run.fish +11 -0
  191. package/dot_config/fish/functions/q.fish +3 -0
  192. package/dot_config/fish/functions/silent-run.fish +7 -0
  193. package/dot_config/fish/functions/yy.fish +8 -0
  194. package/dot_config/flatpak/flatpak.list +4 -0
  195. package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
  196. package/dot_config/foot/foot.ini.tmpl +33 -0
  197. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  198. package/dot_config/fzf/fzf.zsh +48 -0
  199. package/dot_config/gem/gemrc +9 -0
  200. package/dot_config/gh/config.yml +12 -0
  201. package/dot_config/ghostty/config.tmpl +165 -0
  202. package/dot_config/git/allowed_signers.tmpl +18 -0
  203. package/dot_config/git/attributes +12 -0
  204. package/dot_config/git/commit-template +10 -0
  205. package/dot_config/git/hooks/executable_commit-msg +146 -0
  206. package/dot_config/git/ignore +27 -0
  207. package/dot_config/gnupg/gpg-agent.conf +11 -0
  208. package/dot_config/go/golangci.yml +118 -0
  209. package/dot_config/go/gopls.json +30 -0
  210. package/dot_config/goose/config.yaml +29 -0
  211. package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
  212. package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
  213. package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
  214. package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
  215. package/dot_config/htop/htoprc +20 -0
  216. package/dot_config/inputrc +2 -0
  217. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  218. package/dot_config/just/justfile +122 -0
  219. package/dot_config/k9s/config.yaml +65 -0
  220. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  221. package/dot_config/kanshi/config.tmpl +22 -0
  222. package/dot_config/karabiner/karabiner.json +14 -0
  223. package/dot_config/kitty/kitty.conf.tmpl +53 -0
  224. package/dot_config/lazydocker/config.yml +186 -0
  225. package/dot_config/lazygit/config.yml +35 -0
  226. package/dot_config/mako/config +47 -0
  227. package/dot_config/mas/masapps.txt +5 -0
  228. package/dot_config/micro/settings.json +3 -0
  229. package/dot_config/mimeapps.list +77 -0
  230. package/dot_config/minikube/config.json +13 -0
  231. package/dot_config/mise/config.toml +99 -0
  232. package/dot_config/mongosh/mongoshrc.js +68 -0
  233. package/dot_config/mpv/input.conf +47 -0
  234. package/dot_config/mpv/mpv.conf +47 -0
  235. package/dot_config/mycli/myclirc +67 -0
  236. package/dot_config/nano/nanorc +28 -0
  237. package/dot_config/ncdu/config +12 -0
  238. package/dot_config/niri/config.kdl.tmpl +327 -0
  239. package/dot_config/nushell/aliases.nu +18 -0
  240. package/dot_config/nushell/cached_eval.nu +80 -0
  241. package/dot_config/nushell/completions.nu.tmpl +52 -0
  242. package/dot_config/nushell/config.nu.tmpl +86 -0
  243. package/dot_config/nushell/env.nu.tmpl +102 -0
  244. package/dot_config/nushell/functions.nu.tmpl +17 -0
  245. package/dot_config/nvim/init.lua +18 -0
  246. package/dot_config/nvim/lazy-lock.json +58 -0
  247. package/dot_config/nvim/lua/config/autocmds.lua +107 -0
  248. package/dot_config/nvim/lua/config/keymaps.lua +92 -0
  249. package/dot_config/nvim/lua/config/lazy.lua +44 -0
  250. package/dot_config/nvim/lua/config/options.lua +49 -0
  251. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  252. package/dot_config/nvim/lua/plugins/coding.lua +216 -0
  253. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  254. package/dot_config/nvim/lua/plugins/dap.lua +412 -0
  255. package/dot_config/nvim/lua/plugins/editor.lua +55 -0
  256. package/dot_config/nvim/lua/plugins/git.lua +10 -0
  257. package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
  258. package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
  259. package/dot_config/nvim/lua/plugins/rust.lua +34 -0
  260. package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
  261. package/dot_config/nvim/lua/plugins/ui.lua +509 -0
  262. package/dot_config/paru/paru.conf +10 -0
  263. package/dot_config/pip/pip.conf.tmpl +32 -0
  264. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  265. package/dot_config/pueue/pueue.yml +34 -0
  266. package/dot_config/pypoetry/config.toml +6 -0
  267. package/dot_config/pyrightconfig.json +5 -0
  268. package/dot_config/raycast/README.md +13 -0
  269. package/dot_config/redis/redisclirc +41 -0
  270. package/dot_config/ripgrep/ripgreprc +21 -0
  271. package/dot_config/shell/00-core-paths.sh.tmpl +134 -0
  272. package/dot_config/shell/05-core-safety.sh +48 -0
  273. package/dot_config/shell/10-secrets.sh +41 -0
  274. package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
  275. package/dot_config/shell/40-ls-colors.sh +49 -0
  276. package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
  277. package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
  278. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
  279. package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
  280. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -0
  281. package/dot_config/shell/Brewfile +207 -0
  282. package/dot_config/shell/Brewfile.cask +92 -0
  283. package/dot_config/shell/Brewfile.cli +127 -0
  284. package/dot_config/shell/README.md +284 -0
  285. package/dot_config/shell/als_data.txt.tmpl +65 -0
  286. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  287. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  288. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  289. package/dot_config/sops/dot_sops.yaml +23 -0
  290. package/dot_config/starship.toml.tmpl +202 -0
  291. package/dot_config/swaylock/config +43 -0
  292. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  293. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  294. package/dot_config/systemd/user/pueued.service +12 -0
  295. package/dot_config/systemd/user/ssh-agent.service +12 -0
  296. package/dot_config/task/Taskfile.yml +86 -0
  297. package/dot_config/tflint/tflint.hcl +9 -0
  298. package/dot_config/tmux/tmux.conf.tmpl +223 -0
  299. package/dot_config/topgrade.toml.tmpl +54 -0
  300. package/dot_config/user-dirs.dirs +10 -0
  301. package/dot_config/vscode/extensions.txt +11 -0
  302. package/dot_config/vscode/settings.json.tmpl +82 -0
  303. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  304. package/dot_config/waybar/style.css.tmpl +211 -0
  305. package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
  306. package/dot_config/wget/wgetrc +12 -0
  307. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  308. package/dot_config/yarn/yarnrc.yml +36 -0
  309. package/dot_config/yazi/keymap.toml +67 -0
  310. package/dot_config/yazi/theme.toml +102 -0
  311. package/dot_config/yazi/yazi.toml +40 -0
  312. package/dot_config/zathura/zathurarc +52 -0
  313. package/dot_config/zellij/config.kdl.tmpl +79 -0
  314. package/dot_config/zsh/dot_zprofile +7 -0
  315. package/dot_config/zsh/dot_zshenv +5 -0
  316. package/dot_config/zsh/dot_zshrc.tmpl +635 -0
  317. package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -0
  318. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
  319. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  320. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  321. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +214 -0
  322. package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
  323. package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
  324. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  325. package/dot_local/bin/executable_ai-update +195 -0
  326. package/dot_local/bin/executable_ai_core +152 -0
  327. package/dot_local/bin/executable_antigravity +11 -0
  328. package/dot_local/bin/executable_b64 +84 -0
  329. package/dot_local/bin/executable_bm +79 -0
  330. package/dot_local/bin/executable_cb +39 -0
  331. package/dot_local/bin/executable_dot +596 -0
  332. package/dot_local/bin/executable_dot-ai +36 -0
  333. package/dot_local/bin/executable_dot-bootstrap +77 -0
  334. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  335. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  336. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  337. package/dot_local/bin/executable_dot-theme-sync +952 -0
  338. package/dot_local/bin/executable_dot_completion +57 -0
  339. package/dot_local/bin/executable_dtags +28 -0
  340. package/dot_local/bin/executable_epoch +67 -0
  341. package/dot_local/bin/executable_extract +41 -0
  342. package/dot_local/bin/executable_gbd +52 -0
  343. package/dot_local/bin/executable_gd +42 -0
  344. package/dot_local/bin/executable_git-ai-commit +175 -0
  345. package/dot_local/bin/executable_git-ai-diff +169 -0
  346. package/dot_local/bin/executable_gl +101 -0
  347. package/dot_local/bin/executable_hash +161 -0
  348. package/dot_local/bin/executable_hashsum +160 -0
  349. package/dot_local/bin/executable_hex +115 -0
  350. package/dot_local/bin/executable_jsonv +78 -0
  351. package/dot_local/bin/executable_jwt +94 -0
  352. package/dot_local/bin/executable_kill-port +75 -0
  353. package/dot_local/bin/executable_lorem +118 -0
  354. package/dot_local/bin/executable_mkscript +35 -0
  355. package/dot_local/bin/executable_monitor +56 -0
  356. package/dot_local/bin/executable_myip +51 -0
  357. package/dot_local/bin/executable_notify +24 -0
  358. package/dot_local/bin/executable_open +38 -0
  359. package/dot_local/bin/executable_pw +27 -0
  360. package/dot_local/bin/executable_rec-start +46 -0
  361. package/dot_local/bin/executable_rec-stop +35 -0
  362. package/dot_local/bin/executable_regex +132 -0
  363. package/dot_local/bin/executable_start-niri +8 -0
  364. package/dot_local/bin/executable_tmux-sessionizer +314 -0
  365. package/dot_local/bin/executable_tour +177 -0
  366. package/dot_local/bin/executable_up +23 -0
  367. package/dot_local/bin/executable_update +142 -0
  368. package/dot_local/bin/executable_uuid +87 -0
  369. package/dot_local/bin/executable_win +32 -0
  370. package/dot_local/bin/executable_yamlv +57 -0
  371. package/dot_local/share/bash-completion/completions/dot +72 -0
  372. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  373. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  374. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  375. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  376. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  382. package/dot_local/share/man/man1/dot.1 +149 -0
  383. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  384. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  385. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  386. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  387. package/dot_local/share/zsh/completions/.keep +0 -0
  388. package/dot_local/share/zsh/completions/_dot +283 -0
  389. package/install.sh +350 -0
  390. package/package.json +1 -1
  391. package/scripts/ci/check-copyright-headers.sh +96 -0
  392. package/scripts/ci/check-dangerous-chmod.sh +19 -0
  393. package/scripts/ci/check-deps-dev.sh +236 -0
  394. package/scripts/ci/check-insecure-tls.sh +61 -0
  395. package/scripts/ci/check-regression-traceability.sh +67 -0
  396. package/scripts/ci/check-shell-preamble.sh +106 -0
  397. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  398. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  399. package/scripts/ci/run-coverage.sh +362 -0
  400. package/scripts/ci/validate-chezmoidata.sh +25 -0
  401. package/scripts/ci/validate-ci-config.sh +224 -0
  402. package/scripts/demo/record.sh +42 -0
  403. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  404. package/scripts/diagnostics/alias-governance.sh +137 -0
  405. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  406. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  407. package/scripts/diagnostics/benchmark.sh +381 -0
  408. package/scripts/diagnostics/conflicts.sh +72 -0
  409. package/scripts/diagnostics/doctor-unified.sh +38 -0
  410. package/scripts/diagnostics/doctor.sh +709 -0
  411. package/scripts/diagnostics/drift-dashboard.sh +201 -0
  412. package/scripts/diagnostics/health.sh +614 -0
  413. package/scripts/diagnostics/history-analysis.sh +85 -0
  414. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  415. package/scripts/diagnostics/perf.sh +452 -0
  416. package/scripts/diagnostics/scorecard.sh +118 -0
  417. package/scripts/diagnostics/secret-governance.sh +58 -0
  418. package/scripts/diagnostics/security-score.sh +438 -0
  419. package/scripts/diagnostics/smoke-test.sh +87 -0
  420. package/scripts/diagnostics/snapshot.sh +89 -0
  421. package/scripts/diagnostics/verify.sh +107 -0
  422. package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
  423. package/scripts/diagnostics/version-locks.sh +79 -0
  424. package/scripts/diagnostics/workstation-attestation.sh +186 -0
  425. package/scripts/docs/build-manual.sh +883 -0
  426. package/scripts/docs/check-manual.sh +213 -0
  427. package/scripts/dot/commands/agent.sh +474 -0
  428. package/scripts/dot/commands/ai.sh +481 -0
  429. package/scripts/dot/commands/aliases.sh +250 -0
  430. package/scripts/dot/commands/appearance.sh +80 -0
  431. package/scripts/dot/commands/core.sh +185 -0
  432. package/scripts/dot/commands/diagnostics.sh +229 -0
  433. package/scripts/dot/commands/fleet.sh +399 -0
  434. package/scripts/dot/commands/lint.sh +177 -0
  435. package/scripts/dot/commands/manual.sh +168 -0
  436. package/scripts/dot/commands/meta.sh +248 -0
  437. package/scripts/dot/commands/patterns.sh +54 -0
  438. package/scripts/dot/commands/restore.sh +231 -0
  439. package/scripts/dot/commands/secrets.sh +223 -0
  440. package/scripts/dot/commands/security.sh +76 -0
  441. package/scripts/dot/commands/tools.sh +469 -0
  442. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  443. package/scripts/dot/lib/bento.sh +50 -0
  444. package/scripts/dot/lib/log.sh +200 -0
  445. package/scripts/dot/lib/platform.sh +99 -0
  446. package/scripts/dot/lib/ui.sh +518 -0
  447. package/scripts/dot/lib/utils.sh +377 -0
  448. package/scripts/fonts/install-nerd-fonts.sh +68 -0
  449. package/scripts/fonts/patch-fonts.sh +35 -0
  450. package/scripts/git-hooks/install.sh +11 -0
  451. package/scripts/git-hooks/pre-commit +12 -0
  452. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  453. package/scripts/git-hooks/pre-push +92 -0
  454. package/scripts/git-hooks/prepare-commit-msg +29 -0
  455. package/scripts/lib/secrets_provider.sh +158 -0
  456. package/scripts/maintenance/check-updates.sh +131 -0
  457. package/scripts/ops/ai-setup.sh +55 -0
  458. package/scripts/ops/bundle.sh +77 -0
  459. package/scripts/ops/chaos.sh +49 -0
  460. package/scripts/ops/chezmoi-apply.sh +270 -0
  461. package/scripts/ops/chezmoi-diff.sh +15 -0
  462. package/scripts/ops/chezmoi-remove.sh +45 -0
  463. package/scripts/ops/chezmoi-update.sh +48 -0
  464. package/scripts/ops/heal-chezmoi.sh +86 -0
  465. package/scripts/ops/heal-system.sh +128 -0
  466. package/scripts/ops/heal-tools.sh +340 -0
  467. package/scripts/ops/heal.sh +222 -0
  468. package/scripts/ops/post-apply-repair.sh +106 -0
  469. package/scripts/ops/prewarm.sh +127 -0
  470. package/scripts/ops/release.sh +252 -0
  471. package/scripts/ops/rollback.sh +589 -0
  472. package/scripts/ops/setup.sh +137 -0
  473. package/scripts/ops/teleport.sh +33 -0
  474. package/scripts/qa/coverage-baseline.sh +60 -0
  475. package/scripts/qa/docs-coverage.sh +111 -0
  476. package/scripts/qa/powershell-contract.ps1 +95 -0
  477. package/scripts/qa/reliability-audit.sh +138 -0
  478. package/scripts/qa/traceability-coverage.sh +116 -0
  479. package/scripts/qa/validate-examples.sh +26 -0
  480. package/scripts/qa/wsl-contract.sh +11 -0
  481. package/scripts/release/package-policy-bundles.sh +125 -0
  482. package/scripts/secrets/age-init.sh +70 -0
  483. package/scripts/secrets/create-secrets-file.sh +45 -0
  484. package/scripts/secrets/encrypt-ssh-key.sh +43 -0
  485. package/scripts/security/backup.sh +57 -0
  486. package/scripts/security/dns-doh.sh +51 -0
  487. package/scripts/security/encryption-check.sh +54 -0
  488. package/scripts/security/enforce-policies.sh +334 -0
  489. package/scripts/security/firewall.sh +90 -0
  490. package/scripts/security/lock-configs.sh +57 -0
  491. package/scripts/security/lock-screen.sh +55 -0
  492. package/scripts/security/manage-secrets.sh +428 -0
  493. package/scripts/security/ssh-cert.sh +203 -0
  494. package/scripts/security/telemetry-kill.sh +50 -0
  495. package/scripts/security/usb-safety.sh +51 -0
  496. package/scripts/theme/apply-gnome-theme.sh +328 -0
  497. package/scripts/theme/extract-theme.py +677 -0
  498. package/scripts/theme/install-boot-logo.sh +62 -0
  499. package/scripts/theme/install-catppuccin-themes.sh +370 -0
  500. package/scripts/theme/install-cursors.sh +25 -0
  501. package/scripts/theme/install-file-icons.sh +26 -0
  502. package/scripts/theme/install-grub-theme.sh +61 -0
  503. package/scripts/theme/install-lock-icon.sh +30 -0
  504. package/scripts/theme/merge-wallpaper.sh +145 -0
  505. package/scripts/theme/rebuild-themes.sh +309 -0
  506. package/scripts/theme/switch.sh +431 -0
  507. package/scripts/theme/wallpaper-rotate.sh +136 -0
  508. package/scripts/theme/wallpaper-sync.sh +397 -0
  509. package/scripts/tools/cmatrix.sh +21 -0
  510. package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
  511. package/scripts/tools/emoji-picker.sh +48 -0
  512. package/scripts/tools/figlet-banner.sh +18 -0
  513. package/scripts/tools/log-rotate.sh +30 -0
  514. package/scripts/tools/lolcat-wrap.sh +19 -0
  515. package/scripts/tools/pipes.sh +48 -0
  516. package/scripts/tuning/linux.sh +185 -0
  517. package/scripts/tuning/macos.sh +55 -0
  518. package/scripts/uninstall.sh +85 -0
  519. package/scripts/version-sync.sh +487 -0
  520. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  521. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  522. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  523. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  524. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  525. package/templates/projects/go/README.md +4 -0
  526. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  527. package/templates/projects/go/go.sum +0 -0
  528. package/templates/projects/molecule/README.md +7 -0
  529. package/templates/projects/molecule/converge.yml +7 -0
  530. package/templates/projects/molecule/molecule.yml +16 -0
  531. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  532. package/templates/projects/node/README.md +4 -0
  533. package/templates/projects/node/package-lock.json +12 -0
  534. package/templates/projects/node/src/index.js +1 -0
  535. package/templates/projects/packer/README.md +15 -0
  536. package/templates/projects/packer/main.pkr.hcl +15 -0
  537. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  538. package/templates/projects/python/README.md +4 -0
  539. package/templates/projects/python/pyproject.toml +15 -0
  540. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  541. package/templates/projects/python/tests/test_basic.py +1 -0
  542. package/docs/ARCHITECTURE.md +0 -62
  543. package/docs/COMPLIANCE.md +0 -47
  544. package/docs/OPERATIONS.md +0 -103
  545. package/docs/PR_DESCRIPTION.md +0 -150
  546. package/docs/ROADMAP_legacy.md +0 -556
  547. package/docs/SECURITY_CHECKLIST.md +0 -25
  548. package/docs/TASK.md +0 -99
  549. package/docs/WALKTHROUGH.md +0 -46
  550. package/scripts/backup.sh +0 -142
  551. package/scripts/banner.sh +0 -20
  552. package/scripts/benchmark.sh +0 -20
  553. package/scripts/build.sh +0 -41
  554. package/scripts/clean.sh +0 -31
  555. package/scripts/compile.sh +0 -54
  556. package/scripts/copy.sh +0 -108
  557. package/scripts/doctor.sh +0 -79
  558. package/scripts/dotfiles.sh +0 -63
  559. package/scripts/download.sh +0 -35
  560. package/scripts/help.sh +0 -57
  561. package/scripts/lock-configs.sh +0 -57
  562. package/scripts/package.sh +0 -46
  563. package/scripts/ssh.sh +0 -55
  564. package/scripts/teleport.sh +0 -23
  565. package/scripts/test-aliases.sh +0 -25
  566. package/scripts/test_smoke.sh +0 -88
  567. package/scripts/unpack.sh +0 -28
@@ -0,0 +1,377 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Sourced by scripts/dot/commands/*.sh and dot_local/bin/executable_dot; inherits set -euo pipefail.
4
+ # Dotfiles CLI Utilities
5
+ # Shared functions for dot command modules
6
+
7
+ # Re-source guard: cheap short-circuit when sourced from multiple modules.
8
+ [[ "${_DOT_LIB_UTILS_LOADED:-0}" == "1" ]] && return 0
9
+ _DOT_LIB_UTILS_LOADED=1
10
+
11
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
+ # shellcheck source=ui.sh
13
+ source "$SCRIPT_DIR/ui.sh"
14
+ # shellcheck source=platform.sh
15
+ source "$SCRIPT_DIR/platform.sh"
16
+
17
+ _DOT_SOURCE_DIR_CACHE=""
18
+
19
+ ## resolve_source_dir — Locate the dotfiles source tree.
20
+ ## Checks (in order): relative to this script, $CHEZMOI_SOURCE_DIR,
21
+ ## ~/.dotfiles, ~/.local/share/chezmoi. Caches the result for the process.
22
+ ## Prints the absolute path (or empty string if not found). Exit: always 0.
23
+ resolve_source_dir() {
24
+ if [[ -n "${_DOT_SOURCE_DIR_CACHE:-}" ]] && [[ -d "$_DOT_SOURCE_DIR_CACHE" ]]; then
25
+ printf "%s\n" "$_DOT_SOURCE_DIR_CACHE"
26
+ return
27
+ fi
28
+
29
+ local dir=""
30
+ local repo_candidate=""
31
+
32
+ if repo_candidate="$(cd "$SCRIPT_DIR/../../.." && pwd 2>/dev/null)"; then
33
+ :
34
+ else
35
+ repo_candidate=""
36
+ fi
37
+ if [[ -n "$repo_candidate" && -f "$repo_candidate/scripts/dot/lib/ui.sh" ]]; then
38
+ dir="$repo_candidate"
39
+ elif [ -n "${CHEZMOI_SOURCE_DIR:-}" ] && [ -d "$CHEZMOI_SOURCE_DIR" ]; then
40
+ dir="$CHEZMOI_SOURCE_DIR"
41
+ elif [ -d "$HOME/.dotfiles" ]; then
42
+ dir="$HOME/.dotfiles"
43
+ elif [ -d "$HOME/.local/share/chezmoi" ]; then
44
+ dir="$HOME/.local/share/chezmoi"
45
+ fi
46
+
47
+ if [ -n "$dir" ]; then
48
+ # Resolve symlinks for consistent path handling
49
+ if command -v realpath >/dev/null 2>&1; then
50
+ dir="$(realpath "$dir")"
51
+ elif command -v readlink >/dev/null 2>&1; then
52
+ dir="$(readlink -f "$dir" 2>/dev/null || echo "$dir")"
53
+ fi
54
+ _DOT_SOURCE_DIR_CACHE="$dir"
55
+ printf "%s\n" "$dir"
56
+ else
57
+ printf "%s\n" ""
58
+ fi
59
+ }
60
+
61
+ ## run_script — Resolve source dir, find a script, exec it (never returns).
62
+ ## Usage: run_script <relative-script-path> <not-found-label> [args...]
63
+ ## Exit: 1 if source dir or script not found; otherwise execs into the script.
64
+ run_script() {
65
+ local script_rel="$1"
66
+ local label="$2"
67
+ shift 2
68
+ local src_dir
69
+ src_dir="$(resolve_source_dir)"
70
+ if [ -z "$src_dir" ]; then
71
+ echo "Dotfiles source not found." >&2
72
+ exit 1
73
+ fi
74
+ if [ -f "$src_dir/$script_rel" ]; then
75
+ exec bash "$src_dir/$script_rel" "$@"
76
+ else
77
+ echo "$label not found." >&2
78
+ exit 1
79
+ fi
80
+ }
81
+
82
+ ## require_source_dir — Print source dir path or exit 1 if not found.
83
+ require_source_dir() {
84
+ local src_dir
85
+ src_dir="$(resolve_source_dir)"
86
+ if [ -z "$src_dir" ]; then
87
+ echo "Dotfiles source not found." >&2
88
+ exit 1
89
+ fi
90
+ echo "$src_dir"
91
+ }
92
+
93
+ ## has_command <name> — Return 0 if <name> is on PATH, 1 otherwise.
94
+ has_command() {
95
+ command -v "$1" >/dev/null 2>&1
96
+ }
97
+
98
+ ## validate_name <name> [label] — Die if name contains unsafe characters.
99
+ ## Allowed: [a-zA-Z0-9._-]. This prevents shell injection when names appear
100
+ ## in paths or eval contexts. Exit: 0 if valid, calls die() if invalid.
101
+ validate_name() {
102
+ local name="$1" label="${2:-name}"
103
+ if [[ ! "$name" =~ ^[a-zA-Z0-9._-]+$ ]]; then
104
+ die "Invalid $label: $name (only alphanumeric, dash, underscore, dot allowed)"
105
+ fi
106
+ }
107
+
108
+ ## validate_xdg_path <var_name> <path> — Warn and return 1 if path is not absolute.
109
+ validate_xdg_path() {
110
+ local var_name="$1" path="$2"
111
+ if [[ -n "$path" ]] && [[ "$path" != /* ]]; then
112
+ ui_warn "$var_name" "Not an absolute path: $path (ignoring, using default)"
113
+ return 1
114
+ fi
115
+ return 0
116
+ }
117
+
118
+ ## die <message> [code] — Print error to stderr and exit (default code 1).
119
+ die() {
120
+ ui_err "$1" >&2
121
+ exit "${2:-1}"
122
+ }
123
+
124
+ # Print warning message
125
+ warn() {
126
+ ui_warn "$1" >&2
127
+ }
128
+
129
+ # Print info message
130
+ info() {
131
+ ui_info "$1"
132
+ }
133
+
134
+ # Print the dot logo once per process for interactive sessions.
135
+ ui_logo_once() {
136
+ local title="${1:-Dot}"
137
+ ui_init
138
+ if [[ "${DOTFILES_SHOW_LOGO:-1}" != "1" ]]; then
139
+ return
140
+ fi
141
+ if [[ ! -t 1 ]]; then
142
+ return
143
+ fi
144
+ if [[ "${DOTFILES_LOGO_PRINTED:-0}" = "1" ]]; then
145
+ return
146
+ fi
147
+ ui_product_banner "$title"
148
+ }
149
+
150
+ dotfiles_version() {
151
+ local src_dir version=""
152
+ src_dir="$(resolve_source_dir)"
153
+
154
+ if [[ -n "$src_dir" ]] && [[ -f "$src_dir/package.json" ]]; then
155
+ version="$(sed -n 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"\([0-9][0-9.]*\)".*/\1/p' "$src_dir/package.json" | head -1)"
156
+ fi
157
+
158
+ if [[ -z "$version" ]] && [[ -n "${DOTFILES_VERSION:-}" ]]; then
159
+ version="$DOTFILES_VERSION"
160
+ fi
161
+
162
+ if [[ -z "$version" ]]; then
163
+ version="unknown"
164
+ fi
165
+
166
+ printf "%s\n" "$version"
167
+ }
168
+
169
+ dot_command_summary() {
170
+ case "${1:-}" in
171
+ apply | sync)
172
+ echo "Apply dotfiles changes (sync is an alias for apply)."
173
+ ;;
174
+ update)
175
+ echo "Pull latest changes from remote, then apply."
176
+ ;;
177
+ add)
178
+ echo "Add a file into chezmoi source management."
179
+ ;;
180
+ diff)
181
+ echo "Show pending managed-file differences."
182
+ ;;
183
+ status)
184
+ echo "Show current configuration drift status."
185
+ ;;
186
+ remove)
187
+ echo "Safely remove a managed file from source."
188
+ ;;
189
+ cd)
190
+ echo "Print the dotfiles source directory path."
191
+ ;;
192
+ edit)
193
+ echo "Open dotfiles source in your editor."
194
+ ;;
195
+ doctor)
196
+ echo "Deep audit: tools, paths, portability, AI analysis."
197
+ ;;
198
+ heal)
199
+ echo "Auto-repair broken symlinks, missing tools, and drift."
200
+ ;;
201
+ health | health-check)
202
+ echo "Dashboard with health score, checks, and auto-fix (--fix)."
203
+ ;;
204
+ security-score)
205
+ echo "Calculate and print security posture score."
206
+ ;;
207
+ scorecard)
208
+ echo "Show unified health, security, and performance scorecard."
209
+ ;;
210
+ perf)
211
+ echo "Profile shell startup performance (3-run average)."
212
+ ;;
213
+ conflicts)
214
+ echo "Report alias and command conflicts."
215
+ ;;
216
+ locks)
217
+ echo "Show version locks for key tools."
218
+ ;;
219
+ snapshot)
220
+ echo "Capture a baseline system snapshot."
221
+ ;;
222
+ rollback)
223
+ echo "Rollback dotfiles state to a prior point."
224
+ ;;
225
+ restore)
226
+ echo "Restore files from backup or git reference."
227
+ ;;
228
+ drift)
229
+ echo "Display detailed drift information."
230
+ ;;
231
+ history)
232
+ echo "Analyze shell command history."
233
+ ;;
234
+ benchmark)
235
+ echo "Measure shell startup performance."
236
+ ;;
237
+ verify)
238
+ echo "Run post-merge verification checks."
239
+ ;;
240
+ tools)
241
+ echo "Browse or install toolchain components."
242
+ ;;
243
+ aliases)
244
+ echo "List, search, and explain configured aliases."
245
+ ;;
246
+ new)
247
+ echo "Create a new project from templates."
248
+ ;;
249
+ packages)
250
+ echo "List package managers and package stats."
251
+ ;;
252
+ log-rotate)
253
+ echo "Rotate dotfiles local log files."
254
+ ;;
255
+ setup)
256
+ echo "Interactive setup for profiles, features, and secrets."
257
+ ;;
258
+ theme)
259
+ echo "Switch terminal appearance theme."
260
+ ;;
261
+ wallpaper)
262
+ echo "Apply or sync wallpapers."
263
+ ;;
264
+ fonts)
265
+ echo "Install Nerd Fonts for terminal tooling."
266
+ ;;
267
+ tune)
268
+ echo "Apply OS-level tuning defaults."
269
+ ;;
270
+ secrets-init)
271
+ echo "Initialize age key for encrypted secrets."
272
+ ;;
273
+ secrets)
274
+ echo "Manage secrets (set/get/list/load/provider)."
275
+ ;;
276
+ env)
277
+ echo "Load secret buckets into shell exports."
278
+ ;;
279
+ secrets-create)
280
+ echo "Create a new encrypted secrets file."
281
+ ;;
282
+ ssh-key)
283
+ echo "Encrypt an SSH key using age."
284
+ ;;
285
+ backup)
286
+ echo "Create a compressed backup."
287
+ ;;
288
+ encrypt-check)
289
+ echo "Check disk encryption status."
290
+ ;;
291
+ firewall)
292
+ echo "Apply firewall hardening settings."
293
+ ;;
294
+ telemetry)
295
+ echo "Disable telemetry where supported."
296
+ ;;
297
+ dns-doh)
298
+ echo "Enable DNS-over-HTTPS."
299
+ ;;
300
+ lock-screen)
301
+ echo "Harden lock-screen idle policy."
302
+ ;;
303
+ usb-safety)
304
+ echo "Disable risky removable-media automount."
305
+ ;;
306
+ fleet)
307
+ echo "Show fleet node status, drift, and namespace."
308
+ ;;
309
+ upgrade)
310
+ echo "Update system toolchains, plugins, and dotfiles."
311
+ ;;
312
+ docs)
313
+ echo "Show dotfiles documentation."
314
+ ;;
315
+ learn)
316
+ echo "Start the interactive onboarding tour."
317
+ ;;
318
+ keys)
319
+ echo "Show keybindings catalog."
320
+ ;;
321
+ sandbox)
322
+ echo "Start isolated sandbox environment."
323
+ ;;
324
+ mcp)
325
+ echo "Run MCP configuration diagnostics."
326
+ ;;
327
+ metrics)
328
+ echo "Show recent observability metrics from JSONL."
329
+ ;;
330
+ cache-refresh | prewarm)
331
+ echo "Regenerate shell caches for ultra-fast startup."
332
+ ;;
333
+ search)
334
+ echo "Find commands by keyword."
335
+ ;;
336
+ help | --help | -h)
337
+ echo "Show command usage and reference."
338
+ ;;
339
+ --version | -v | version)
340
+ echo "Show dotfiles and environment versions."
341
+ ;;
342
+ *)
343
+ echo "Run a dotfiles command."
344
+ ;;
345
+ esac
346
+ }
347
+
348
+ dot_ui_command_banner() {
349
+ local section="${1:-Dot}"
350
+ local cmd="${2:-}"
351
+ shift 2 || true
352
+ local version summary
353
+
354
+ for arg in "$@"; do
355
+ case "$arg" in
356
+ --json | -j)
357
+ return
358
+ ;;
359
+ esac
360
+ done
361
+
362
+ ui_logo_once "Dot • $section"
363
+
364
+ if [[ "${DOTFILES_SHOW_LOGO:-1}" != "1" ]] || [[ ! -t 1 ]]; then
365
+ return
366
+ fi
367
+
368
+ version="$(dotfiles_version)"
369
+ summary="$(dot_command_summary "$cmd")"
370
+
371
+ ui_key_value "Version" "v${version}"
372
+ if [[ -n "$cmd" ]]; then
373
+ ui_key_value "Command" "dot ${cmd}"
374
+ fi
375
+ ui_key_value "Summary" "$summary"
376
+ printf "\n"
377
+ }
@@ -0,0 +1,68 @@
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"
12
+
13
+ DEFAULT_FONTS="JetBrainsMono FiraCode Iosevka"
14
+ FONT_LIST="${*:-$DEFAULT_FONTS}"
15
+
16
+ install_linux() {
17
+ font_name="$1"
18
+ target_dir="$HOME/.local/share/fonts/${font_name}NerdFont"
19
+ mkdir -p "$target_dir"
20
+ tmp_dir="$(umask 077 && mktemp -d)"
21
+ # shellcheck disable=SC2064
22
+ trap "rm -rf '$tmp_dir'" RETURN
23
+ url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${font_name}.zip"
24
+ ui_info "Downloading" "$font_name Nerd Font"
25
+ curl -fL --connect-timeout 10 --max-time 300 "$url" -o "$tmp_dir/${font_name}.zip"
26
+ if ! unzip -o "$tmp_dir/${font_name}.zip" -d "$target_dir" >/dev/null; then
27
+ ui_err "Unzip failed" "${font_name}.zip" >&2
28
+ return 1
29
+ fi
30
+ if command -v fc-cache >/dev/null; then
31
+ fc-cache -f "$target_dir"
32
+ fi
33
+ ui_ok "Installed" "$target_dir"
34
+ }
35
+
36
+ install_macos() {
37
+ font_name="$1"
38
+ if command -v brew >/dev/null; then
39
+ brew tap homebrew/cask-fonts >/dev/null 2>&1 || true
40
+ cask_name="$(printf "%s" "$font_name" | tr '[:upper:]' '[:lower:]')"
41
+ case "$cask_name" in
42
+ jetbrainsmono) cask_name="jetbrains-mono" ;;
43
+ firacode) cask_name="fira-code" ;;
44
+ iosevka) cask_name="iosevka" ;;
45
+ esac
46
+ brew install --cask "font-${cask_name}-nerd-font" || true
47
+ else
48
+ ui_err "Homebrew" "not found. Install font manually."
49
+ exit 1
50
+ fi
51
+ }
52
+
53
+ case "$(uname -s)" in
54
+ Linux)
55
+ for font in $FONT_LIST; do
56
+ install_linux "$font"
57
+ done
58
+ ;;
59
+ Darwin)
60
+ for font in $FONT_LIST; do
61
+ install_macos "$font"
62
+ done
63
+ ;;
64
+ *)
65
+ ui_err "Unsupported OS" "font install"
66
+ exit 1
67
+ ;;
68
+ esac
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ if [[ $# -lt 1 ]]; then
6
+ echo "Usage: patch-fonts.sh <font-file> [output-dir]" >&2
7
+ exit 1
8
+ fi
9
+
10
+ font_file="$1"
11
+ out_dir="${2:-$PWD/patched-fonts}"
12
+
13
+ if [[ ! -f "$font_file" ]]; then
14
+ echo "Font not found: $font_file" >&2
15
+ exit 1
16
+ fi
17
+
18
+ if ! command -v fontforge >/dev/null; then
19
+ echo "fontforge not found. Install it first (brew install fontforge / apt install fontforge)." >&2
20
+ exit 1
21
+ fi
22
+
23
+ patcher="${NERD_FONTS_PATCHER:-$HOME/.local/share/nerd-fonts/font-patcher}"
24
+
25
+ if [[ ! -x "$patcher" ]]; then
26
+ echo "Nerd Fonts patcher not found: $patcher" >&2
27
+ echo "Set NERD_FONTS_PATCHER to the font-patcher path or clone nerd-fonts." >&2
28
+ exit 1
29
+ fi
30
+
31
+ mkdir -p "$out_dir"
32
+
33
+ fontforge -script "$patcher" --complete --outputdir "$out_dir" "$font_file"
34
+
35
+ echo "Patched font written to: $out_dir"
@@ -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.501 standards maintained."
144
+ exit 0
145
+ fi