@sebastienrousseau/dotfiles 0.2.499 → 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 (538) hide show
  1. package/CHANGELOG.md +375 -0
  2. package/LICENSE +1283 -0
  3. package/README.md +284 -0
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +4 -3
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +78 -0
  9. package/docs/adr/ADR-001-ci-cd-pipeline.md +101 -0
  10. package/docs/adr/ADR-002-shell-performance.md +121 -0
  11. package/docs/adr/ADR-003-security-first.md +140 -0
  12. package/docs/adr/ADR-004-cli-architecture.md +157 -0
  13. package/docs/adr/ADR-005-chezmoi-choice.md +89 -0
  14. package/docs/adr/ADR-006-shell-selection.md +115 -0
  15. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  16. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  17. package/docs/adr/README.md +32 -0
  18. package/docs/architecture/ARCHITECTURE.md +113 -0
  19. package/docs/architecture/INTEROP.md +36 -0
  20. package/docs/architecture/REPO_LAYOUT.md +237 -0
  21. package/docs/architecture/WALKTHROUGH.md +82 -0
  22. package/docs/architecture/fleet-deployment.md +73 -0
  23. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  24. package/docs/archive/LEGACY_ROADMAP.md +142 -0
  25. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  26. package/docs/{PLAN.md → archive/PLAN.md} +4 -4
  27. package/docs/archive/REPO_AUDIT.md +23 -0
  28. package/docs/guides/INSTALL.md +140 -0
  29. package/docs/guides/NEOVIM_IDE_GUIDE.md +52 -0
  30. package/docs/guides/THEMING.md +222 -0
  31. package/docs/guides/TROUBLESHOOTING.md +148 -0
  32. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +723 -0
  33. package/docs/index.md +39 -0
  34. package/docs/interop/A2A.md +32 -0
  35. package/docs/manual/00-introduction.md +85 -0
  36. package/docs/manual/01-concepts/01-architecture.md +134 -0
  37. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  38. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  39. package/docs/manual/01-concepts/04-fleet.md +142 -0
  40. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  41. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  42. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  43. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  44. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  45. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  46. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  47. package/docs/manual/03-reference/02-config-files.md +259 -0
  48. package/docs/manual/03-reference/03-environment.md +120 -0
  49. package/docs/manual/03-reference/04-templates.md +184 -0
  50. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  51. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  52. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  53. package/docs/manual/04-cookbook/03-faq.md +167 -0
  54. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  55. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  56. package/docs/manual/05-appendices/C-glossary.md +36 -0
  57. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  58. package/docs/manual/05-appendices/E-license.md +34 -0
  59. package/docs/manual/_toc.yml +58 -0
  60. package/docs/manual/command-index.md +58 -0
  61. package/docs/manual/concept-index.md +164 -0
  62. package/docs/operations/ATTESTATION.md +39 -0
  63. package/docs/operations/MAINTENANCE.md +59 -0
  64. package/docs/operations/MIGRATION.md +101 -0
  65. package/docs/operations/OPERATIONS.md +164 -0
  66. package/docs/operations/RELIABILITY.md +116 -0
  67. package/docs/{ROADMAP.md → operations/ROADMAP.md} +22 -22
  68. package/docs/operations/TESTING.md +195 -0
  69. package/docs/operations/TRACEABILITY.md +31 -0
  70. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  71. package/docs/operations/VERSION_SYNC.md +344 -0
  72. package/docs/reference/ALIASES.md +124 -0
  73. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  74. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  75. package/docs/reference/FEATURES.md +62 -0
  76. package/docs/reference/FONTS.md +108 -0
  77. package/docs/reference/PROFILES.md +65 -0
  78. package/docs/reference/SCREENSHOTS.md +117 -0
  79. package/docs/reference/SCRIPTS.md +67 -0
  80. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  81. package/docs/reference/THEMES.md +113 -0
  82. package/docs/reference/TOOLS.md +105 -0
  83. package/docs/reference/UTILS.md +151 -0
  84. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  85. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  86. package/docs/security/COMPLIANCE.md +453 -0
  87. package/docs/security/ENCRYPTION.md +52 -0
  88. package/docs/security/FMEA.md +155 -0
  89. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  90. package/docs/security/KEYS.md +45 -0
  91. package/docs/security/KEY_ROTATION.md +219 -0
  92. package/docs/security/MCP_POLICY.md +69 -0
  93. package/docs/security/POLICY_RELEASES.md +33 -0
  94. package/docs/security/README.md +24 -0
  95. package/docs/security/SECRETS.md +146 -0
  96. package/docs/security/SECURITY.md +41 -0
  97. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  98. package/docs/security/SOUP_REGISTER.md +32 -0
  99. package/docs/security/THREAT_MODEL.md +120 -0
  100. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  101. package/docs/themes/README.md +6 -0
  102. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  103. package/docs/themes/hero-shot.svg +78 -0
  104. package/dot_config/.module-manifest.json +69 -0
  105. package/dot_config/ai/identity.md +20 -0
  106. package/dot_config/ai/patterns/architect.md +14 -0
  107. package/dot_config/ai/patterns/hardener.md +13 -0
  108. package/dot_config/ai/patterns/refactor.md +13 -0
  109. package/dot_config/aider/aider.conf.yml +32 -0
  110. package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
  111. package/dot_config/ansible/ansible.cfg +11 -0
  112. package/dot_config/atuin/config.toml +40 -0
  113. package/dot_config/bat/config +23 -0
  114. package/dot_config/brave-flags.conf.tmpl +7 -0
  115. package/dot_config/btop/btop.conf +16 -0
  116. package/dot_config/btop/themes/tokyonight.theme +34 -0
  117. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  118. package/dot_config/claude/mcp_servers.json +20 -0
  119. package/dot_config/containers/containers.conf +14 -0
  120. package/dot_config/curl/dot_curlrc +18 -0
  121. package/dot_config/dlv/config.yml +39 -0
  122. package/dot_config/docker/config.json +15 -0
  123. package/dot_config/dotfiles/agent-card.json +29 -0
  124. package/dot_config/dotfiles/agent-profiles.json +92 -0
  125. package/dot_config/dotfiles/boot/README.md +11 -0
  126. package/dot_config/dotfiles/grub/README.md +11 -0
  127. package/dot_config/dotfiles/lock/README.md +11 -0
  128. package/dot_config/dotfiles/mcp-lock.json +33 -0
  129. package/dot_config/dotfiles/mcp-policy.json +52 -0
  130. package/dot_config/dotfiles/mcp-registry.json +47 -0
  131. package/dot_config/dotfiles/model-registry.json +20 -0
  132. package/dot_config/dotfiles/policy-bundles.json +38 -0
  133. package/dot_config/dotfiles/prompt-registry.json +16 -0
  134. package/dot_config/dotfiles/versions.env +18 -0
  135. package/dot_config/duf/duf.conf +6 -0
  136. package/dot_config/duti/defaults.duti +5 -0
  137. package/dot_config/emoji/emoji.txt +34 -0
  138. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  139. package/dot_config/environment.d/90-wayland.conf +19 -0
  140. package/dot_config/fastfetch/config.jsonc +28 -0
  141. package/dot_config/firefox/user.js.tmpl +58 -0
  142. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  143. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  144. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  145. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  146. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  147. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  148. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  149. package/dot_config/fish/config.fish.tmpl +44 -0
  150. package/dot_config/fish/fish_plugins +1 -0
  151. package/dot_config/fish/functions/_.fish +3 -0
  152. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  153. package/dot_config/fish/functions/als.fish +46 -0
  154. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  155. package/dot_config/fish/functions/c.fish +3 -0
  156. package/dot_config/fish/functions/cat.fish +9 -0
  157. package/dot_config/fish/functions/d.fish +7 -0
  158. package/dot_config/fish/functions/dot.fish +34 -0
  159. package/dot_config/fish/functions/h.fish +3 -0
  160. package/dot_config/fish/functions/l.fish +7 -0
  161. package/dot_config/fish/functions/la.fish +7 -0
  162. package/dot_config/fish/functions/ll.fish +7 -0
  163. package/dot_config/fish/functions/log_error.fish +13 -0
  164. package/dot_config/fish/functions/log_info.fish +13 -0
  165. package/dot_config/fish/functions/lr.fish +7 -0
  166. package/dot_config/fish/functions/lra.fish +7 -0
  167. package/dot_config/fish/functions/ls.fish +7 -0
  168. package/dot_config/fish/functions/lt.fish +7 -0
  169. package/dot_config/fish/functions/lta.fish +7 -0
  170. package/dot_config/fish/functions/notify-run.fish +11 -0
  171. package/dot_config/fish/functions/q.fish +3 -0
  172. package/dot_config/fish/functions/silent-run.fish +7 -0
  173. package/dot_config/fish/functions/yy.fish +8 -0
  174. package/dot_config/flatpak/flatpak.list +4 -0
  175. package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
  176. package/dot_config/foot/foot.ini.tmpl +33 -0
  177. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  178. package/dot_config/fzf/fzf.zsh +48 -0
  179. package/dot_config/gem/gemrc +9 -0
  180. package/dot_config/gh/config.yml +12 -0
  181. package/dot_config/ghostty/config.tmpl +165 -0
  182. package/dot_config/git/allowed_signers.tmpl +18 -0
  183. package/dot_config/git/attributes +12 -0
  184. package/dot_config/git/commit-template +10 -0
  185. package/dot_config/git/ignore +27 -0
  186. package/dot_config/gnupg/gpg-agent.conf +11 -0
  187. package/dot_config/go/golangci.yml +118 -0
  188. package/dot_config/go/gopls.json +30 -0
  189. package/dot_config/goose/config.yaml +29 -0
  190. package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
  191. package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
  192. package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
  193. package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
  194. package/dot_config/htop/htoprc +20 -0
  195. package/dot_config/inputrc +2 -0
  196. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  197. package/dot_config/just/justfile +122 -0
  198. package/dot_config/k9s/config.yaml +65 -0
  199. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  200. package/dot_config/kanshi/config.tmpl +22 -0
  201. package/dot_config/karabiner/karabiner.json +14 -0
  202. package/dot_config/kitty/kitty.conf.tmpl +53 -0
  203. package/dot_config/lazydocker/config.yml +186 -0
  204. package/dot_config/lazygit/config.yml +35 -0
  205. package/dot_config/mako/config +47 -0
  206. package/dot_config/mas/masapps.txt +5 -0
  207. package/dot_config/micro/settings.json +3 -0
  208. package/dot_config/mimeapps.list +77 -0
  209. package/dot_config/minikube/config.json +13 -0
  210. package/dot_config/mise/config.toml +99 -0
  211. package/dot_config/mongosh/mongoshrc.js +68 -0
  212. package/dot_config/mpv/input.conf +47 -0
  213. package/dot_config/mpv/mpv.conf +47 -0
  214. package/dot_config/mycli/myclirc +67 -0
  215. package/dot_config/nano/nanorc +28 -0
  216. package/dot_config/ncdu/config +12 -0
  217. package/dot_config/niri/config.kdl.tmpl +327 -0
  218. package/dot_config/nushell/aliases.nu +18 -0
  219. package/dot_config/nushell/completions.nu.tmpl +52 -0
  220. package/dot_config/nushell/config.nu.tmpl +86 -0
  221. package/dot_config/nushell/env.nu.tmpl +94 -0
  222. package/dot_config/nushell/functions.nu.tmpl +17 -0
  223. package/dot_config/nvim/init.lua +18 -0
  224. package/dot_config/nvim/lazy-lock.json +58 -0
  225. package/dot_config/nvim/lua/config/autocmds.lua +107 -0
  226. package/dot_config/nvim/lua/config/keymaps.lua +92 -0
  227. package/dot_config/nvim/lua/config/lazy.lua +44 -0
  228. package/dot_config/nvim/lua/config/options.lua +49 -0
  229. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  230. package/dot_config/nvim/lua/plugins/coding.lua +216 -0
  231. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  232. package/dot_config/nvim/lua/plugins/dap.lua +412 -0
  233. package/dot_config/nvim/lua/plugins/editor.lua +55 -0
  234. package/dot_config/nvim/lua/plugins/git.lua +10 -0
  235. package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
  236. package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
  237. package/dot_config/nvim/lua/plugins/rust.lua +34 -0
  238. package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
  239. package/dot_config/nvim/lua/plugins/ui.lua +509 -0
  240. package/dot_config/paru/paru.conf +10 -0
  241. package/dot_config/pip/pip.conf.tmpl +32 -0
  242. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  243. package/dot_config/pueue/pueue.yml +34 -0
  244. package/dot_config/pypoetry/config.toml +6 -0
  245. package/dot_config/pyrightconfig.json +5 -0
  246. package/dot_config/raycast/README.md +13 -0
  247. package/dot_config/redis/redisclirc +41 -0
  248. package/dot_config/ripgrep/ripgreprc +21 -0
  249. package/dot_config/shell/00-core-paths.sh.tmpl +133 -0
  250. package/dot_config/shell/05-core-safety.sh +47 -0
  251. package/dot_config/shell/10-secrets.sh +40 -0
  252. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  253. package/dot_config/shell/40-ls-colors.sh +48 -0
  254. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  255. package/dot_config/shell/50-logic-functions.sh.tmpl +10 -0
  256. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  257. package/dot_config/shell/90-ux-aliases.sh.tmpl +120 -0
  258. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +54 -0
  259. package/dot_config/shell/Brewfile +207 -0
  260. package/dot_config/shell/Brewfile.cask +92 -0
  261. package/dot_config/shell/Brewfile.cli +127 -0
  262. package/dot_config/shell/README.md +267 -0
  263. package/dot_config/shell/als_data.txt.tmpl +65 -0
  264. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  265. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  266. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  267. package/dot_config/sops/dot_sops.yaml +23 -0
  268. package/dot_config/starship.toml.tmpl +202 -0
  269. package/dot_config/swaylock/config +43 -0
  270. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  271. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  272. package/dot_config/systemd/user/pueued.service +12 -0
  273. package/dot_config/systemd/user/ssh-agent.service +12 -0
  274. package/dot_config/task/Taskfile.yml +86 -0
  275. package/dot_config/tflint/tflint.hcl +9 -0
  276. package/dot_config/tmux/tmux.conf.tmpl +223 -0
  277. package/dot_config/topgrade.toml.tmpl +54 -0
  278. package/dot_config/user-dirs.dirs +9 -0
  279. package/dot_config/vscode/extensions.txt +11 -0
  280. package/dot_config/vscode/settings.json.tmpl +82 -0
  281. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  282. package/dot_config/waybar/style.css.tmpl +211 -0
  283. package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
  284. package/dot_config/wget/wgetrc +12 -0
  285. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  286. package/dot_config/yarn/yarnrc.yml +36 -0
  287. package/dot_config/yazi/keymap.toml +67 -0
  288. package/dot_config/yazi/theme.toml +102 -0
  289. package/dot_config/yazi/yazi.toml +40 -0
  290. package/dot_config/zathura/zathurarc +52 -0
  291. package/dot_config/zellij/config.kdl.tmpl +79 -0
  292. package/dot_config/zsh/dot_zprofile +7 -0
  293. package/dot_config/zsh/dot_zshenv +5 -0
  294. package/dot_config/zsh/dot_zshrc.tmpl +498 -0
  295. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  296. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
  297. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  298. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  299. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +194 -0
  300. package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
  301. package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
  302. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  303. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  304. package/dot_local/bin/executable_ai-update +195 -0
  305. package/dot_local/bin/executable_ai_core +152 -0
  306. package/dot_local/bin/executable_antigravity +11 -0
  307. package/dot_local/bin/executable_b64 +84 -0
  308. package/dot_local/bin/executable_bm +77 -0
  309. package/dot_local/bin/executable_cb +39 -0
  310. package/dot_local/bin/executable_dot +589 -0
  311. package/dot_local/bin/executable_dot-ai +36 -0
  312. package/dot_local/bin/executable_dot-bootstrap +77 -0
  313. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  314. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  315. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  316. package/dot_local/bin/executable_dot-theme-sync +952 -0
  317. package/dot_local/bin/executable_dot_completion +57 -0
  318. package/dot_local/bin/executable_dtags +28 -0
  319. package/dot_local/bin/executable_epoch +67 -0
  320. package/dot_local/bin/executable_extract +41 -0
  321. package/dot_local/bin/executable_gbd +52 -0
  322. package/dot_local/bin/executable_gd +42 -0
  323. package/dot_local/bin/executable_git-ai-commit +175 -0
  324. package/dot_local/bin/executable_git-ai-diff +169 -0
  325. package/dot_local/bin/executable_gl +101 -0
  326. package/dot_local/bin/executable_hash +161 -0
  327. package/dot_local/bin/executable_hashsum +160 -0
  328. package/dot_local/bin/executable_hex +115 -0
  329. package/dot_local/bin/executable_jsonv +78 -0
  330. package/dot_local/bin/executable_jwt +94 -0
  331. package/dot_local/bin/executable_kill-port +75 -0
  332. package/dot_local/bin/executable_lorem +118 -0
  333. package/dot_local/bin/executable_mkscript +35 -0
  334. package/dot_local/bin/executable_monitor +56 -0
  335. package/dot_local/bin/executable_myip +51 -0
  336. package/dot_local/bin/executable_notify +22 -0
  337. package/dot_local/bin/executable_open +36 -0
  338. package/dot_local/bin/executable_pw +27 -0
  339. package/dot_local/bin/executable_rec-start +46 -0
  340. package/dot_local/bin/executable_rec-stop +35 -0
  341. package/dot_local/bin/executable_regex +132 -0
  342. package/dot_local/bin/executable_start-niri +8 -0
  343. package/dot_local/bin/executable_tmux-sessionizer +314 -0
  344. package/dot_local/bin/executable_tour +175 -0
  345. package/dot_local/bin/executable_up +21 -0
  346. package/dot_local/bin/executable_update +142 -0
  347. package/dot_local/bin/executable_uuid +87 -0
  348. package/dot_local/bin/executable_win +32 -0
  349. package/dot_local/bin/executable_yamlv +57 -0
  350. package/dot_local/share/bash-completion/completions/dot +72 -0
  351. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  352. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  353. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  354. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  355. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  356. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  357. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  358. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  359. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  360. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  361. package/dot_local/share/man/man1/dot.1 +149 -0
  362. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  363. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  364. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  365. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  366. package/dot_local/share/zsh/completions/.keep +0 -0
  367. package/dot_local/share/zsh/completions/_dot +283 -0
  368. package/install.sh +342 -0
  369. package/package.json +1 -1
  370. package/scripts/ci/check-copyright-headers.sh +96 -0
  371. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  372. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  373. package/scripts/ci/validate-ci-config.sh +224 -0
  374. package/scripts/demo/record.sh +42 -0
  375. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  376. package/scripts/diagnostics/alias-governance.sh +137 -0
  377. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  378. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  379. package/scripts/diagnostics/benchmark.sh +381 -0
  380. package/scripts/diagnostics/conflicts.sh +72 -0
  381. package/scripts/diagnostics/doctor-unified.sh +38 -0
  382. package/scripts/diagnostics/doctor.sh +541 -0
  383. package/scripts/diagnostics/drift-dashboard.sh +37 -0
  384. package/scripts/diagnostics/health.sh +597 -0
  385. package/scripts/diagnostics/history-analysis.sh +85 -0
  386. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  387. package/scripts/diagnostics/perf.sh +225 -0
  388. package/scripts/diagnostics/scorecard.sh +118 -0
  389. package/scripts/diagnostics/secret-governance.sh +58 -0
  390. package/scripts/diagnostics/security-score.sh +438 -0
  391. package/scripts/diagnostics/smoke-test.sh +87 -0
  392. package/scripts/diagnostics/snapshot.sh +89 -0
  393. package/scripts/diagnostics/verify.sh +107 -0
  394. package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
  395. package/scripts/diagnostics/version-locks.sh +79 -0
  396. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  397. package/scripts/docs/build-manual.sh +883 -0
  398. package/scripts/docs/check-manual.sh +213 -0
  399. package/scripts/dot/commands/agent.sh +465 -0
  400. package/scripts/dot/commands/ai.sh +416 -0
  401. package/scripts/dot/commands/aliases.sh +250 -0
  402. package/scripts/dot/commands/appearance.sh +80 -0
  403. package/scripts/dot/commands/core.sh +185 -0
  404. package/scripts/dot/commands/diagnostics.sh +229 -0
  405. package/scripts/dot/commands/fleet.sh +399 -0
  406. package/scripts/dot/commands/lint.sh +177 -0
  407. package/scripts/dot/commands/manual.sh +168 -0
  408. package/scripts/dot/commands/meta.sh +248 -0
  409. package/scripts/dot/commands/patterns.sh +54 -0
  410. package/scripts/dot/commands/restore.sh +231 -0
  411. package/scripts/dot/commands/secrets.sh +223 -0
  412. package/scripts/dot/commands/security.sh +76 -0
  413. package/scripts/dot/commands/tools.sh +469 -0
  414. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  415. package/scripts/dot/lib/bento.sh +49 -0
  416. package/scripts/dot/lib/log.sh +194 -0
  417. package/scripts/dot/lib/platform.sh +98 -0
  418. package/scripts/dot/lib/ui.sh +507 -0
  419. package/scripts/dot/lib/utils.sh +372 -0
  420. package/scripts/fonts/install-nerd-fonts.sh +68 -0
  421. package/scripts/fonts/patch-fonts.sh +35 -0
  422. package/scripts/git-hooks/install.sh +11 -0
  423. package/scripts/git-hooks/pre-commit +12 -0
  424. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  425. package/scripts/git-hooks/pre-push +29 -0
  426. package/scripts/git-hooks/prepare-commit-msg +29 -0
  427. package/scripts/lib/secrets_provider.sh +158 -0
  428. package/scripts/maintenance/check-updates.sh +131 -0
  429. package/scripts/ops/ai-setup.sh +55 -0
  430. package/scripts/ops/bundle.sh +77 -0
  431. package/scripts/ops/chaos.sh +49 -0
  432. package/scripts/ops/chezmoi-apply.sh +270 -0
  433. package/scripts/ops/chezmoi-diff.sh +15 -0
  434. package/scripts/ops/chezmoi-remove.sh +45 -0
  435. package/scripts/ops/chezmoi-update.sh +48 -0
  436. package/scripts/ops/heal-chezmoi.sh +51 -0
  437. package/scripts/ops/heal-system.sh +128 -0
  438. package/scripts/ops/heal-tools.sh +340 -0
  439. package/scripts/ops/heal.sh +222 -0
  440. package/scripts/ops/post-apply-repair.sh +106 -0
  441. package/scripts/ops/prewarm.sh +127 -0
  442. package/scripts/ops/release.sh +252 -0
  443. package/scripts/ops/rollback.sh +589 -0
  444. package/scripts/ops/setup.sh +137 -0
  445. package/scripts/ops/teleport.sh +33 -0
  446. package/scripts/qa/coverage-baseline.sh +60 -0
  447. package/scripts/qa/docs-coverage.sh +111 -0
  448. package/scripts/qa/reliability-audit.sh +138 -0
  449. package/scripts/qa/traceability-coverage.sh +116 -0
  450. package/scripts/qa/validate-examples.sh +26 -0
  451. package/scripts/qa/wsl-contract.sh +11 -0
  452. package/scripts/release/package-policy-bundles.sh +125 -0
  453. package/scripts/secrets/age-init.sh +70 -0
  454. package/scripts/secrets/create-secrets-file.sh +45 -0
  455. package/scripts/secrets/encrypt-ssh-key.sh +43 -0
  456. package/scripts/security/backup.sh +57 -0
  457. package/scripts/security/dns-doh.sh +51 -0
  458. package/scripts/security/encryption-check.sh +54 -0
  459. package/scripts/security/enforce-policies.sh +334 -0
  460. package/scripts/security/firewall.sh +90 -0
  461. package/scripts/security/lock-configs.sh +57 -0
  462. package/scripts/security/lock-screen.sh +55 -0
  463. package/scripts/security/manage-secrets.sh +428 -0
  464. package/scripts/security/ssh-cert.sh +203 -0
  465. package/scripts/security/telemetry-kill.sh +50 -0
  466. package/scripts/security/usb-safety.sh +51 -0
  467. package/scripts/theme/apply-gnome-theme.sh +328 -0
  468. package/scripts/theme/extract-theme.py +677 -0
  469. package/scripts/theme/install-boot-logo.sh +62 -0
  470. package/scripts/theme/install-catppuccin-themes.sh +370 -0
  471. package/scripts/theme/install-cursors.sh +25 -0
  472. package/scripts/theme/install-file-icons.sh +26 -0
  473. package/scripts/theme/install-grub-theme.sh +61 -0
  474. package/scripts/theme/install-lock-icon.sh +30 -0
  475. package/scripts/theme/merge-wallpaper.sh +141 -0
  476. package/scripts/theme/rebuild-themes.sh +309 -0
  477. package/scripts/theme/switch.sh +421 -0
  478. package/scripts/theme/wallpaper-rotate.sh +136 -0
  479. package/scripts/theme/wallpaper-sync.sh +397 -0
  480. package/scripts/tools/cmatrix.sh +21 -0
  481. package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
  482. package/scripts/tools/emoji-picker.sh +48 -0
  483. package/scripts/tools/figlet-banner.sh +18 -0
  484. package/scripts/tools/log-rotate.sh +30 -0
  485. package/scripts/tools/lolcat-wrap.sh +19 -0
  486. package/scripts/tools/pipes.sh +48 -0
  487. package/scripts/tuning/linux.sh +185 -0
  488. package/scripts/tuning/macos.sh +55 -0
  489. package/scripts/uninstall.sh +85 -0
  490. package/scripts/version-sync.sh +487 -0
  491. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  492. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  493. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  494. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  495. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  496. package/templates/projects/go/README.md +4 -0
  497. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  498. package/templates/projects/go/go.sum +0 -0
  499. package/templates/projects/molecule/README.md +7 -0
  500. package/templates/projects/molecule/converge.yml +7 -0
  501. package/templates/projects/molecule/molecule.yml +16 -0
  502. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  503. package/templates/projects/node/README.md +4 -0
  504. package/templates/projects/node/package-lock.json +12 -0
  505. package/templates/projects/node/src/index.js +1 -0
  506. package/templates/projects/packer/README.md +15 -0
  507. package/templates/projects/packer/main.pkr.hcl +15 -0
  508. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  509. package/templates/projects/python/README.md +4 -0
  510. package/templates/projects/python/pyproject.toml +15 -0
  511. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  512. package/templates/projects/python/tests/test_basic.py +1 -0
  513. package/docs/ARCHITECTURE.md +0 -62
  514. package/docs/COMPLIANCE.md +0 -47
  515. package/docs/OPERATIONS.md +0 -103
  516. package/docs/PR_DESCRIPTION.md +0 -150
  517. package/docs/ROADMAP_legacy.md +0 -556
  518. package/docs/SECURITY_CHECKLIST.md +0 -25
  519. package/docs/TASK.md +0 -99
  520. package/docs/WALKTHROUGH.md +0 -46
  521. package/scripts/backup.sh +0 -142
  522. package/scripts/banner.sh +0 -20
  523. package/scripts/benchmark.sh +0 -20
  524. package/scripts/build.sh +0 -41
  525. package/scripts/clean.sh +0 -31
  526. package/scripts/compile.sh +0 -54
  527. package/scripts/copy.sh +0 -108
  528. package/scripts/doctor.sh +0 -79
  529. package/scripts/dotfiles.sh +0 -63
  530. package/scripts/download.sh +0 -35
  531. package/scripts/help.sh +0 -57
  532. package/scripts/lock-configs.sh +0 -57
  533. package/scripts/package.sh +0 -46
  534. package/scripts/ssh.sh +0 -55
  535. package/scripts/teleport.sh +0 -23
  536. package/scripts/test-aliases.sh +0 -25
  537. package/scripts/test_smoke.sh +0 -88
  538. package/scripts/unpack.sh +0 -28
@@ -0,0 +1,372 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Dotfiles CLI Utilities
4
+ # Shared functions for dot command modules
5
+
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.
18
+ resolve_source_dir() {
19
+ if [[ -n "${_DOT_SOURCE_DIR_CACHE:-}" ]] && [[ -d "$_DOT_SOURCE_DIR_CACHE" ]]; then
20
+ printf "%s\n" "$_DOT_SOURCE_DIR_CACHE"
21
+ return
22
+ fi
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=""
31
+ fi
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" ""
53
+ fi
54
+ }
55
+
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.
59
+ run_script() {
60
+ local script_rel="$1"
61
+ local label="$2"
62
+ shift 2
63
+ local src_dir
64
+ src_dir="$(resolve_source_dir)"
65
+ if [ -z "$src_dir" ]; then
66
+ echo "Dotfiles source not found." >&2
67
+ exit 1
68
+ fi
69
+ if [ -f "$src_dir/$script_rel" ]; then
70
+ exec bash "$src_dir/$script_rel" "$@"
71
+ else
72
+ echo "$label not found." >&2
73
+ exit 1
74
+ fi
75
+ }
76
+
77
+ ## require_source_dir — Print source dir path or exit 1 if not found.
78
+ require_source_dir() {
79
+ local src_dir
80
+ src_dir="$(resolve_source_dir)"
81
+ if [ -z "$src_dir" ]; then
82
+ echo "Dotfiles source not found." >&2
83
+ exit 1
84
+ fi
85
+ echo "$src_dir"
86
+ }
87
+
88
+ ## has_command <name> — Return 0 if <name> is on PATH, 1 otherwise.
89
+ has_command() {
90
+ command -v "$1" >/dev/null 2>&1
91
+ }
92
+
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).
114
+ die() {
115
+ ui_err "$1" >&2
116
+ exit "${2:-1}"
117
+ }
118
+
119
+ # Print warning message
120
+ warn() {
121
+ ui_warn "$1" >&2
122
+ }
123
+
124
+ # Print info message
125
+ info() {
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"
372
+ }
@@ -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.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