@sebastienrousseau/dotfiles 0.2.481 → 0.2.500

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/CHANGELOG.md +122 -32
  2. package/LICENSE +1 -1
  3. package/README.md +211 -242
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +2 -2
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +58 -249
  9. package/docs/adr/ADR-004-cli-architecture.md +2 -2
  10. package/docs/adr/ADR-006-shell-selection.md +2 -2
  11. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  12. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  13. package/docs/adr/README.md +2 -3
  14. package/docs/architecture/ARCHITECTURE.md +113 -0
  15. package/docs/architecture/INTEROP.md +36 -0
  16. package/docs/architecture/REPO_LAYOUT.md +237 -0
  17. package/docs/architecture/WALKTHROUGH.md +82 -0
  18. package/docs/architecture/fleet-deployment.md +73 -0
  19. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  20. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  21. package/docs/{PLAN.md → archive/PLAN.md} +1 -1
  22. package/docs/guides/INSTALL.md +140 -0
  23. package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
  24. package/docs/guides/THEMING.md +222 -0
  25. package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
  26. package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
  27. package/docs/index.md +39 -0
  28. package/docs/interop/A2A.md +32 -0
  29. package/docs/manual/00-introduction.md +85 -0
  30. package/docs/manual/01-concepts/01-architecture.md +134 -0
  31. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  32. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  33. package/docs/manual/01-concepts/04-fleet.md +142 -0
  34. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  35. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  36. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  37. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  38. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  39. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  40. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  41. package/docs/manual/03-reference/02-config-files.md +259 -0
  42. package/docs/manual/03-reference/03-environment.md +120 -0
  43. package/docs/manual/03-reference/04-templates.md +184 -0
  44. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  45. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  46. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  47. package/docs/manual/04-cookbook/03-faq.md +167 -0
  48. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  49. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  50. package/docs/manual/05-appendices/C-glossary.md +36 -0
  51. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  52. package/docs/manual/05-appendices/E-license.md +34 -0
  53. package/docs/manual/_toc.yml +58 -0
  54. package/docs/manual/command-index.md +58 -0
  55. package/docs/manual/concept-index.md +164 -0
  56. package/docs/operations/ATTESTATION.md +39 -0
  57. package/docs/operations/MAINTENANCE.md +59 -0
  58. package/docs/operations/MIGRATION.md +101 -0
  59. package/docs/operations/OPERATIONS.md +164 -0
  60. package/docs/operations/RELIABILITY.md +116 -0
  61. package/docs/{ROADMAP.md → operations/ROADMAP.md} +11 -11
  62. package/docs/operations/TESTING.md +195 -0
  63. package/docs/operations/TRACEABILITY.md +31 -0
  64. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  65. package/docs/operations/VERSION_SYNC.md +344 -0
  66. package/docs/{ALIASES.md → reference/ALIASES.md} +2 -6
  67. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  68. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  69. package/docs/reference/FEATURES.md +62 -0
  70. package/docs/reference/FONTS.md +108 -0
  71. package/docs/reference/PROFILES.md +65 -0
  72. package/docs/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
  73. package/docs/reference/SCRIPTS.md +67 -0
  74. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  75. package/docs/reference/THEMES.md +113 -0
  76. package/docs/reference/TOOLS.md +105 -0
  77. package/docs/reference/UTILS.md +151 -0
  78. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  79. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  80. package/docs/security/COMPLIANCE.md +453 -0
  81. package/docs/security/ENCRYPTION.md +52 -0
  82. package/docs/security/FMEA.md +155 -0
  83. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  84. package/docs/security/KEYS.md +45 -0
  85. package/docs/security/MCP_POLICY.md +69 -0
  86. package/docs/security/POLICY_RELEASES.md +33 -0
  87. package/docs/security/README.md +24 -0
  88. package/docs/security/SECRETS.md +146 -0
  89. package/docs/security/SECURITY.md +41 -0
  90. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  91. package/docs/security/SOUP_REGISTER.md +32 -0
  92. package/docs/security/THREAT_MODEL.md +120 -0
  93. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  94. package/docs/themes/README.md +3 -17
  95. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  96. package/docs/themes/hero-shot.svg +78 -0
  97. package/dot_config/.module-manifest.json +69 -0
  98. package/dot_config/ai/identity.md +20 -0
  99. package/dot_config/ai/patterns/architect.md +14 -0
  100. package/dot_config/ai/patterns/hardener.md +13 -0
  101. package/dot_config/ai/patterns/refactor.md +13 -0
  102. package/dot_config/aider/aider.conf.yml +1 -1
  103. package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
  104. package/dot_config/atuin/config.toml +18 -1
  105. package/dot_config/bat/config +16 -1
  106. package/dot_config/claude/mcp_servers.json +3 -32
  107. package/dot_config/dotfiles/agent-card.json +29 -0
  108. package/dot_config/dotfiles/agent-profiles.json +92 -0
  109. package/dot_config/dotfiles/boot/README.md +1 -1
  110. package/dot_config/dotfiles/grub/README.md +1 -1
  111. package/dot_config/dotfiles/lock/README.md +1 -1
  112. package/dot_config/dotfiles/mcp-lock.json +33 -0
  113. package/dot_config/dotfiles/mcp-policy.json +52 -0
  114. package/dot_config/dotfiles/mcp-registry.json +47 -0
  115. package/dot_config/dotfiles/model-registry.json +20 -0
  116. package/dot_config/dotfiles/policy-bundles.json +38 -0
  117. package/dot_config/dotfiles/prompt-registry.json +16 -0
  118. package/dot_config/dotfiles/versions.env +18 -0
  119. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  120. package/dot_config/environment.d/90-wayland.conf +19 -0
  121. package/dot_config/firefox/user.js.tmpl +58 -0
  122. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  123. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  124. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  125. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  126. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  127. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  128. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  129. package/dot_config/fish/config.fish.tmpl +44 -0
  130. package/dot_config/fish/fish_plugins +1 -0
  131. package/dot_config/fish/functions/_.fish +3 -0
  132. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  133. package/dot_config/fish/functions/als.fish +46 -0
  134. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  135. package/dot_config/fish/functions/c.fish +3 -0
  136. package/dot_config/fish/functions/cat.fish +9 -0
  137. package/dot_config/fish/functions/d.fish +7 -0
  138. package/dot_config/fish/functions/dot.fish +34 -0
  139. package/dot_config/fish/functions/h.fish +3 -0
  140. package/dot_config/fish/functions/l.fish +7 -0
  141. package/dot_config/fish/functions/la.fish +7 -0
  142. package/dot_config/fish/functions/ll.fish +7 -0
  143. package/dot_config/fish/functions/log_error.fish +13 -0
  144. package/dot_config/fish/functions/log_info.fish +13 -0
  145. package/dot_config/fish/functions/lr.fish +7 -0
  146. package/dot_config/fish/functions/lra.fish +7 -0
  147. package/dot_config/fish/functions/ls.fish +7 -0
  148. package/dot_config/fish/functions/lt.fish +7 -0
  149. package/dot_config/fish/functions/lta.fish +7 -0
  150. package/dot_config/fish/functions/notify-run.fish +11 -0
  151. package/dot_config/fish/functions/q.fish +3 -0
  152. package/dot_config/fish/functions/silent-run.fish +7 -0
  153. package/dot_config/fish/functions/yy.fish +8 -0
  154. package/dot_config/fontconfig/fonts.conf.tmpl +13 -0
  155. package/dot_config/foot/foot.ini.tmpl +33 -0
  156. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  157. package/dot_config/fzf/fzf.zsh +48 -0
  158. package/dot_config/ghostty/config.tmpl +69 -565
  159. package/dot_config/git/allowed_signers.tmpl +18 -0
  160. package/dot_config/git/commit-template +10 -0
  161. package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
  162. package/dot_config/goose/config.yaml +2 -2
  163. package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
  164. package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
  165. package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
  166. package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
  167. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  168. package/dot_config/just/justfile +18 -0
  169. package/dot_config/kanshi/config.tmpl +22 -0
  170. package/dot_config/kitty/kitty.conf.tmpl +44 -508
  171. package/dot_config/lazygit/config.yml +18 -6
  172. package/dot_config/mako/config +47 -0
  173. package/dot_config/micro/settings.json +3 -0
  174. package/dot_config/mimeapps.list +77 -0
  175. package/dot_config/mise/config.toml +63 -5
  176. package/dot_config/mongosh/mongoshrc.js +1 -0
  177. package/dot_config/mpv/input.conf +47 -0
  178. package/dot_config/mpv/mpv.conf +47 -0
  179. package/dot_config/niri/config.kdl.tmpl +327 -0
  180. package/dot_config/nushell/aliases.nu +18 -0
  181. package/dot_config/nushell/completions.nu.tmpl +52 -0
  182. package/dot_config/nushell/config.nu.tmpl +86 -0
  183. package/dot_config/nushell/env.nu.tmpl +94 -0
  184. package/dot_config/nushell/functions.nu.tmpl +17 -0
  185. package/dot_config/nvim/init.lua +14 -0
  186. package/dot_config/nvim/lazy-lock.json +45 -14
  187. package/dot_config/nvim/lua/config/autocmds.lua +45 -1
  188. package/dot_config/nvim/lua/config/keymaps.lua +13 -8
  189. package/dot_config/nvim/lua/config/lazy.lua +22 -12
  190. package/dot_config/nvim/lua/config/options.lua +1 -0
  191. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  192. package/dot_config/nvim/lua/plugins/coding.lua +11 -29
  193. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  194. package/dot_config/nvim/lua/plugins/dap.lua +215 -4
  195. package/dot_config/nvim/lua/plugins/editor.lua +6 -10
  196. package/dot_config/nvim/lua/plugins/git.lua +1 -0
  197. package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
  198. package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
  199. package/dot_config/nvim/lua/plugins/rust.lua +1 -0
  200. package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
  201. package/dot_config/nvim/lua/plugins/ui.lua +23 -51
  202. package/dot_config/paru/paru.conf +10 -0
  203. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  204. package/dot_config/pueue/pueue.yml +34 -0
  205. package/dot_config/raycast/README.md +1 -1
  206. package/dot_config/ripgrep/ripgreprc +21 -0
  207. package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
  208. package/dot_config/shell/05-core-safety.sh +47 -0
  209. package/dot_config/shell/10-secrets.sh +40 -0
  210. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  211. package/dot_config/shell/40-ls-colors.sh +48 -0
  212. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  213. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  214. package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
  215. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
  216. package/dot_config/shell/Brewfile.cli +8 -0
  217. package/dot_config/shell/README.md +9 -9
  218. package/dot_config/shell/als_data.txt.tmpl +65 -0
  219. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  220. package/dot_config/shell/custom/context_suggest.zsh +50 -50
  221. package/dot_config/shell/custom/error_analysis.zsh +29 -29
  222. package/dot_config/starship.toml.tmpl +85 -7
  223. package/dot_config/swaylock/config +43 -0
  224. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  225. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  226. package/dot_config/systemd/user/pueued.service +12 -0
  227. package/dot_config/systemd/user/ssh-agent.service +12 -0
  228. package/dot_config/tmux/tmux.conf.tmpl +80 -38
  229. package/dot_config/topgrade.toml.tmpl +54 -0
  230. package/dot_config/user-dirs.dirs +9 -0
  231. package/dot_config/vscode/settings.json.tmpl +9 -50
  232. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  233. package/dot_config/waybar/style.css.tmpl +211 -0
  234. package/dot_config/wezterm/wezterm.lua.tmpl +31 -203
  235. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  236. package/dot_config/yazi/keymap.toml +67 -0
  237. package/dot_config/yazi/theme.toml +102 -0
  238. package/dot_config/zathura/zathurarc +52 -0
  239. package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
  240. package/dot_config/zsh/dot_zprofile +1 -7
  241. package/dot_config/zsh/dot_zshenv +2 -3
  242. package/dot_config/zsh/dot_zshrc.tmpl +368 -69
  243. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  244. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
  245. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
  246. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  247. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
  248. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  249. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  250. package/dot_local/bin/executable_ai-update +195 -0
  251. package/dot_local/bin/executable_ai_core +113 -91
  252. package/dot_local/bin/executable_antigravity +11 -0
  253. package/dot_local/bin/executable_b64 +61 -36
  254. package/dot_local/bin/executable_bm +77 -0
  255. package/dot_local/bin/executable_cb +39 -0
  256. package/dot_local/bin/executable_dot +543 -132
  257. package/dot_local/bin/executable_dot-ai +36 -0
  258. package/dot_local/bin/executable_dot-bootstrap +77 -0
  259. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  260. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  261. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  262. package/dot_local/bin/executable_dot-theme-sync +952 -0
  263. package/dot_local/bin/executable_dot_completion +2 -0
  264. package/dot_local/bin/executable_dtags +28 -0
  265. package/dot_local/bin/executable_epoch +43 -38
  266. package/dot_local/bin/executable_extract +32 -99
  267. package/dot_local/bin/executable_gbd +52 -0
  268. package/dot_local/bin/executable_gd +42 -0
  269. package/dot_local/bin/executable_git-ai-commit +35 -20
  270. package/dot_local/bin/executable_git-ai-diff +33 -18
  271. package/dot_local/bin/executable_gl +101 -0
  272. package/dot_local/bin/executable_hash +56 -18
  273. package/dot_local/bin/executable_hashsum +160 -0
  274. package/dot_local/bin/executable_hex +44 -8
  275. package/dot_local/bin/executable_jsonv +34 -10
  276. package/dot_local/bin/executable_jwt +22 -6
  277. package/dot_local/bin/executable_kill-port +18 -2
  278. package/dot_local/bin/executable_lorem +21 -6
  279. package/dot_local/bin/executable_mkscript +35 -0
  280. package/dot_local/bin/executable_monitor +56 -0
  281. package/dot_local/bin/{executable_ip → executable_myip} +16 -2
  282. package/dot_local/bin/executable_notify +22 -0
  283. package/dot_local/bin/executable_open +36 -0
  284. package/dot_local/bin/executable_pw +27 -0
  285. package/dot_local/bin/executable_rec-start +46 -0
  286. package/dot_local/bin/executable_rec-stop +35 -0
  287. package/dot_local/bin/executable_regex +49 -13
  288. package/dot_local/bin/executable_start-niri +8 -0
  289. package/dot_local/bin/executable_tmux-sessionizer +276 -149
  290. package/dot_local/bin/executable_tour +112 -74
  291. package/dot_local/bin/executable_up +21 -0
  292. package/dot_local/bin/executable_update +45 -11
  293. package/dot_local/bin/executable_uuid +37 -7
  294. package/dot_local/bin/executable_win +32 -0
  295. package/dot_local/bin/executable_yamlv +25 -7
  296. package/dot_local/share/bash-completion/completions/dot +62 -44
  297. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  298. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  299. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  300. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  301. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  302. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  303. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  304. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  305. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  306. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  307. package/dot_local/share/man/man1/dot.1 +149 -0
  308. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  309. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  310. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  311. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  312. package/dot_local/share/zsh/completions/_dot +283 -0
  313. package/install.sh +297 -210
  314. package/package.json +17 -5
  315. package/scripts/ci/check-copyright-headers.sh +96 -0
  316. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  317. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  318. package/scripts/ci/validate-ci-config.sh +41 -39
  319. package/scripts/demo/record.sh +3 -2
  320. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  321. package/scripts/diagnostics/alias-governance.sh +137 -0
  322. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  323. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  324. package/scripts/diagnostics/benchmark.sh +209 -29
  325. package/scripts/diagnostics/conflicts.sh +72 -0
  326. package/scripts/diagnostics/doctor-unified.sh +38 -0
  327. package/scripts/diagnostics/doctor.sh +491 -65
  328. package/scripts/diagnostics/drift-dashboard.sh +17 -6
  329. package/scripts/diagnostics/health.sh +351 -110
  330. package/scripts/diagnostics/history-analysis.sh +12 -4
  331. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  332. package/scripts/diagnostics/perf.sh +225 -0
  333. package/scripts/diagnostics/scorecard.sh +118 -0
  334. package/scripts/diagnostics/secret-governance.sh +58 -0
  335. package/scripts/diagnostics/security-score.sh +139 -93
  336. package/scripts/diagnostics/smoke-test.sh +87 -0
  337. package/scripts/diagnostics/snapshot.sh +89 -0
  338. package/scripts/diagnostics/verify.sh +107 -0
  339. package/scripts/diagnostics/verify_state.sh +2 -2
  340. package/scripts/diagnostics/version-locks.sh +79 -0
  341. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  342. package/scripts/docs/build-manual.sh +883 -0
  343. package/scripts/docs/check-manual.sh +213 -0
  344. package/scripts/dot/commands/agent.sh +465 -0
  345. package/scripts/dot/commands/ai.sh +416 -0
  346. package/scripts/dot/commands/aliases.sh +250 -0
  347. package/scripts/dot/commands/appearance.sh +21 -4
  348. package/scripts/dot/commands/core.sh +59 -4
  349. package/scripts/dot/commands/diagnostics.sh +132 -3
  350. package/scripts/dot/commands/fleet.sh +399 -0
  351. package/scripts/dot/commands/lint.sh +177 -0
  352. package/scripts/dot/commands/manual.sh +168 -0
  353. package/scripts/dot/commands/meta.sh +148 -17
  354. package/scripts/dot/commands/patterns.sh +54 -0
  355. package/scripts/dot/commands/restore.sh +57 -35
  356. package/scripts/dot/commands/secrets.sh +151 -9
  357. package/scripts/dot/commands/security.sh +3 -0
  358. package/scripts/dot/commands/tools.sh +268 -27
  359. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  360. package/scripts/dot/lib/bento.sh +49 -0
  361. package/scripts/dot/lib/log.sh +194 -0
  362. package/scripts/dot/lib/platform.sh +98 -0
  363. package/scripts/dot/lib/ui.sh +507 -0
  364. package/scripts/dot/lib/utils.sh +318 -18
  365. package/scripts/fonts/install-nerd-fonts.sh +19 -10
  366. package/scripts/fonts/patch-fonts.sh +1 -0
  367. package/scripts/git-hooks/install.sh +11 -0
  368. package/scripts/git-hooks/pre-commit +12 -0
  369. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  370. package/scripts/git-hooks/pre-push +29 -0
  371. package/scripts/git-hooks/prepare-commit-msg +29 -0
  372. package/scripts/lib/secrets_provider.sh +158 -0
  373. package/scripts/maintenance/check-updates.sh +131 -0
  374. package/scripts/ops/ai-setup.sh +55 -0
  375. package/scripts/ops/bundle.sh +77 -0
  376. package/scripts/ops/chaos.sh +49 -0
  377. package/scripts/ops/chezmoi-apply.sh +245 -17
  378. package/scripts/ops/chezmoi-diff.sh +1 -0
  379. package/scripts/ops/chezmoi-remove.sh +2 -0
  380. package/scripts/ops/chezmoi-update.sh +34 -2
  381. package/scripts/ops/heal-chezmoi.sh +51 -0
  382. package/scripts/ops/heal-system.sh +128 -0
  383. package/scripts/ops/heal-tools.sh +340 -0
  384. package/scripts/ops/heal.sh +98 -342
  385. package/scripts/ops/post-apply-repair.sh +106 -0
  386. package/scripts/ops/prewarm.sh +127 -0
  387. package/scripts/ops/release.sh +252 -0
  388. package/scripts/ops/rollback.sh +86 -28
  389. package/scripts/ops/setup.sh +137 -0
  390. package/scripts/ops/teleport.sh +2 -1
  391. package/scripts/qa/coverage-baseline.sh +60 -0
  392. package/scripts/qa/docs-coverage.sh +111 -0
  393. package/scripts/qa/reliability-audit.sh +138 -0
  394. package/scripts/qa/traceability-coverage.sh +116 -0
  395. package/scripts/qa/validate-examples.sh +26 -0
  396. package/scripts/qa/wsl-contract.sh +11 -0
  397. package/scripts/release/package-policy-bundles.sh +125 -0
  398. package/scripts/secrets/age-init.sh +1 -0
  399. package/scripts/secrets/create-secrets-file.sh +1 -0
  400. package/scripts/secrets/encrypt-ssh-key.sh +1 -0
  401. package/scripts/security/backup.sh +44 -4
  402. package/scripts/security/dns-doh.sh +36 -14
  403. package/scripts/security/encryption-check.sh +27 -12
  404. package/scripts/security/enforce-policies.sh +11 -16
  405. package/scripts/security/firewall.sh +76 -20
  406. package/scripts/security/lock-configs.sh +2 -2
  407. package/scripts/security/lock-screen.sh +40 -18
  408. package/scripts/security/manage-secrets.sh +42 -29
  409. package/scripts/security/ssh-cert.sh +203 -0
  410. package/scripts/security/telemetry-kill.sh +40 -18
  411. package/scripts/security/usb-safety.sh +37 -15
  412. package/scripts/theme/apply-gnome-theme.sh +87 -56
  413. package/scripts/theme/extract-theme.py +677 -0
  414. package/scripts/theme/install-boot-logo.sh +1 -0
  415. package/scripts/theme/install-catppuccin-themes.sh +57 -33
  416. package/scripts/theme/install-cursors.sh +1 -0
  417. package/scripts/theme/install-file-icons.sh +1 -0
  418. package/scripts/theme/install-grub-theme.sh +11 -1
  419. package/scripts/theme/install-lock-icon.sh +1 -0
  420. package/scripts/theme/merge-wallpaper.sh +141 -0
  421. package/scripts/theme/rebuild-themes.sh +309 -0
  422. package/scripts/theme/switch.sh +308 -137
  423. package/scripts/theme/wallpaper-rotate.sh +66 -12
  424. package/scripts/theme/wallpaper-sync.sh +386 -31
  425. package/scripts/tools/cmatrix.sh +1 -0
  426. package/scripts/tools/detect-collisions.py +1 -1
  427. package/scripts/tools/emoji-picker.sh +4 -1
  428. package/scripts/tools/figlet-banner.sh +1 -0
  429. package/scripts/tools/log-rotate.sh +2 -1
  430. package/scripts/tools/lolcat-wrap.sh +1 -0
  431. package/scripts/tools/pipes.sh +1 -0
  432. package/scripts/tuning/linux.sh +23 -13
  433. package/scripts/tuning/macos.sh +13 -4
  434. package/scripts/uninstall.sh +85 -0
  435. package/scripts/version-sync.sh +487 -0
  436. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  437. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  438. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  439. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  440. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  441. package/templates/projects/go/README.md +1 -1
  442. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  443. package/templates/projects/go/go.sum +0 -0
  444. package/templates/projects/molecule/README.md +1 -1
  445. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  446. package/templates/projects/node/README.md +1 -1
  447. package/templates/projects/node/package-lock.json +12 -0
  448. package/templates/projects/node/src/index.js +1 -0
  449. package/templates/projects/packer/README.md +1 -1
  450. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  451. package/templates/projects/python/README.md +1 -1
  452. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  453. package/templates/projects/python/tests/test_basic.py +1 -0
  454. package/docs/ARCHITECTURE.md +0 -229
  455. package/docs/COMPLIANCE.md +0 -47
  456. package/docs/FEATURES.md +0 -166
  457. package/docs/FONTS.md +0 -147
  458. package/docs/INSTALL.md +0 -119
  459. package/docs/KEYS.md +0 -40
  460. package/docs/OPERATIONS.md +0 -130
  461. package/docs/PR_DESCRIPTION.md +0 -149
  462. package/docs/SECRETS.md +0 -76
  463. package/docs/SECURITY.md +0 -30
  464. package/docs/SECURITY_CHECKLIST.md +0 -25
  465. package/docs/TASK.md +0 -99
  466. package/docs/TESTING.md +0 -190
  467. package/docs/TOOLS.md +0 -146
  468. package/docs/UTILS.md +0 -105
  469. package/docs/WALKTHROUGH.md +0 -165
  470. package/dot_config/clippy.toml +0 -55
  471. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  472. package/dot_config/firefox/user.js +0 -8
  473. package/dot_config/git/config.tmpl +0 -77
  474. package/dot_config/go/aliases.sh +0 -61
  475. package/dot_config/go/env.sh +0 -24
  476. package/dot_config/ice/README.md +0 -13
  477. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  478. package/dot_config/lsd/config.yaml +0 -19
  479. package/dot_config/nvim/snippets/all.lua +0 -9
  480. package/dot_config/nvim/snippets/python.lua +0 -16
  481. package/dot_config/shell/00-container-detect.sh +0 -53
  482. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  483. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  484. package/dot_config/shell/90-theme-switch.sh +0 -70
  485. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  486. package/dot_config/waybar/style.css +0 -8
  487. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  488. package/dot_local/bin/executable_zig-install +0 -89
  489. package/dot_local/bin/voice_ops +0 -7
  490. package/scripts/ops/health-check.sh +0 -380
  491. package/scripts/tests/README.md +0 -241
  492. package/scripts/tests/benchmark.sh +0 -91
  493. package/scripts/tests/framework/assertions.sh +0 -283
  494. package/scripts/tests/framework/mocks.sh +0 -201
  495. package/scripts/tests/framework/test_runner.sh +0 -189
  496. package/scripts/tests/integration/test_install.sh +0 -237
  497. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  498. package/scripts/tests/performance/regression_check.sh +0 -73
  499. package/scripts/tests/performance/stress_test.sh +0 -65
  500. package/scripts/tests/test-aliases.sh +0 -25
  501. package/scripts/tests/test-docker.sh +0 -48
  502. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  503. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  504. package/scripts/tests/unit/test_backup.sh +0 -227
  505. package/scripts/tests/unit/test_case_functions.sh +0 -238
  506. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  507. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  508. package/scripts/tests/unit/test_encode64.sh +0 -67
  509. package/scripts/tests/unit/test_environment.sh +0 -78
  510. package/scripts/tests/unit/test_extract.sh +0 -163
  511. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  512. package/scripts/tests/unit/test_genpass.sh +0 -298
  513. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  514. package/scripts/tests/unit/test_installers.sh +0 -172
  515. package/scripts/tests/unit/test_keygen.sh +0 -68
  516. package/scripts/tests/unit/test_logging.sh +0 -96
  517. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  518. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  519. package/scripts/tests/unit/test_prependpath.sh +0 -66
  520. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  521. package/scripts/tests/unit/test_rd.sh +0 -230
  522. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  523. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  524. package/scripts/tests/unit/test_template_validation.sh +0 -238
  525. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  526. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  527. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  528. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  529. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  530. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  531. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  532. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  533. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  534. package/scripts/tests/unit/test_zipf.sh +0 -76
  535. /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
  536. /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
  537. /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
  538. /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
  539. /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
  540. /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
  541. /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
  542. /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
  543. /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
  544. /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
  545. /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
  546. /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
@@ -1,12 +1,57 @@
1
1
  #!/usr/bin/env bash
2
- # Dotfiles CLI - Secrets Commands
3
- # secrets-init, secrets, secrets-create, ssh-key
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Dotfiles CLI - Secrets/Env Commands
4
+ # secrets-init, secrets, secrets-create, ssh-key, env load
4
5
 
5
6
  set -euo pipefail
6
7
 
7
8
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
9
  # shellcheck source=../lib/utils.sh
9
10
  source "$SCRIPT_DIR/../lib/utils.sh"
11
+ # shellcheck source=../../lib/secrets_provider.sh
12
+ source "$SCRIPT_DIR/../../lib/secrets_provider.sh"
13
+
14
+ dot_ui_command_banner "Secrets" "${1:-}"
15
+
16
+ dot_data_file() {
17
+ local src_dir
18
+ src_dir="$(require_source_dir)"
19
+ printf "%s\n" "$src_dir/.chezmoidata.toml"
20
+ }
21
+
22
+ dot_load_secrets_policy_env() {
23
+ local data_file provider auto_load
24
+ data_file="$(dot_data_file)"
25
+ [[ -f "$data_file" ]] || return 0
26
+
27
+ provider="$(awk -F'=' '
28
+ /^\[secrets\.policy\]/ {in_policy=1; next}
29
+ /^\[/ {if (in_policy) exit}
30
+ in_policy && $1 ~ /provider/ {
31
+ gsub(/["[:space:]]/, "", $2); print $2; exit
32
+ }
33
+ ' "$data_file")"
34
+ auto_load="$(awk -F'=' '
35
+ /^\[secrets\.policy\]/ {in_policy=1; next}
36
+ /^\[/ {if (in_policy) exit}
37
+ in_policy && $1 ~ /auto_load/ {
38
+ gsub(/[[:space:]]/, "", $2); print $2; exit
39
+ }
40
+ ' "$data_file")"
41
+
42
+ if [[ -n "$provider" && -z "${DOTFILES_SECRETS_PROVIDER:-}" ]]; then
43
+ export DOTFILES_SECRETS_PROVIDER="$provider"
44
+ fi
45
+ if [[ -n "$auto_load" && -z "${DOTFILES_SECRETS_AUTO_LOAD:-}" ]]; then
46
+ if [[ "$auto_load" == "true" ]]; then
47
+ export DOTFILES_SECRETS_AUTO_LOAD=1
48
+ else
49
+ export DOTFILES_SECRETS_AUTO_LOAD=0
50
+ fi
51
+ fi
52
+ }
53
+
54
+ dot_load_secrets_policy_env
10
55
 
11
56
  cmd_secrets_init() {
12
57
  local src_dir
@@ -22,7 +67,7 @@ cmd_secrets_init() {
22
67
  mkdir -p "$secrets_dir"
23
68
 
24
69
  if [ -f "$key_file" ]; then
25
- echo "Age key already exists: $key_file"
70
+ ui_info "Age key already exists: $key_file"
26
71
  exit 0
27
72
  fi
28
73
 
@@ -32,12 +77,12 @@ cmd_secrets_init() {
32
77
 
33
78
  age-keygen -o "$key_file"
34
79
  chmod 600 "$key_file"
35
- echo "Age key created at $key_file"
36
- echo "Public key:"
80
+ ui_ok "Age key created" "$key_file"
81
+ ui_header "Public key"
37
82
  age-keygen -y "$key_file"
38
83
  }
39
84
 
40
- cmd_secrets() {
85
+ cmd_secrets_edit() {
41
86
  local secrets_dir="$HOME/.config/chezmoi"
42
87
  local key_file="$secrets_dir/key.txt"
43
88
 
@@ -56,15 +101,99 @@ cmd_ssh_key() {
56
101
  run_script "scripts/secrets/encrypt-ssh-key.sh" "SSH key encryption script" "$@"
57
102
  }
58
103
 
104
+ cmd_ssh_cert() {
105
+ run_script "scripts/security/ssh-cert.sh" "SSH cert script" "$@"
106
+ }
107
+
108
+ cmd_secrets_provider() {
109
+ local provider
110
+ provider="$(dot_secrets_provider)"
111
+ ui_info "Provider" "$provider"
112
+ }
113
+
114
+ cmd_secrets_set() {
115
+ local key="${1:-}" value="${2:-}"
116
+ [[ -n "$key" ]] || die "Usage: dot secrets set <KEY> [VALUE]"
117
+
118
+ if [[ -z "$value" ]]; then
119
+ read -r -s -p "Value for $key: " value
120
+ echo ""
121
+ fi
122
+ [[ -n "$value" ]] || die "Empty value refused for key: $key"
123
+
124
+ dot_secrets_set "$key" "$value" || die "Failed to store key: $key"
125
+ ui_ok "Stored" "$key"
126
+ }
127
+
128
+ cmd_secrets_get() {
129
+ local key="${1:-}" raw="${2:-}"
130
+ [[ -n "$key" ]] || die "Usage: dot secrets get <KEY> [--raw]"
131
+ local value
132
+ value="$(dot_secrets_get "$key" || true)"
133
+ [[ -n "$value" ]] || die "Secret not found: $key"
134
+ if [[ "$raw" == "--raw" ]]; then
135
+ printf "%s\n" "$value"
136
+ else
137
+ ui_ok "$key" "***"
138
+ fi
139
+ }
140
+
141
+ cmd_secrets_list() {
142
+ local any=0
143
+ while IFS= read -r key; do
144
+ any=1
145
+ printf "%s\n" "$key"
146
+ done < <(dot_secrets_index_list)
147
+ if [[ "$any" -eq 0 ]]; then
148
+ ui_warn "No secrets indexed" "use: dot secrets set <KEY> <VALUE>"
149
+ fi
150
+ }
151
+
152
+ cmd_env_load() {
153
+ local bucket="${1:-ai}" data_file key value count=0
154
+ data_file="$(dot_data_file)"
155
+ [[ -f "$data_file" ]] || die "Missing data file: $data_file"
156
+
157
+ while IFS= read -r key; do
158
+ value="$(dot_secrets_get "$key" || true)"
159
+ if [[ -n "$value" ]]; then
160
+ # shell-safe export lines intended for: eval "$(dot env load <bucket>)"
161
+ printf "export %s=%q\n" "$key" "$value"
162
+ count=$((count + 1))
163
+ fi
164
+ done < <(dot_secrets_bucket_keys "$data_file" "$bucket")
165
+
166
+ if [[ "$count" -eq 0 ]]; then
167
+ die "No secrets loaded for bucket: $bucket"
168
+ fi
169
+ }
170
+
171
+ cmd_secrets_load() {
172
+ cmd_env_load "${1:-ai}"
173
+ }
174
+
59
175
  # Dispatch
60
- case "${1:-}" in
176
+ top="${1:-}"
177
+ case "$top" in
61
178
  secrets-init)
62
179
  shift
63
180
  cmd_secrets_init "$@"
64
181
  ;;
65
182
  secrets)
66
- shift
67
- cmd_secrets "$@"
183
+ shift || true
184
+ sub="${1:-edit}"
185
+ if [[ $# -gt 0 ]]; then shift; fi
186
+ case "$sub" in
187
+ edit) cmd_secrets_edit "$@" ;;
188
+ set) cmd_secrets_set "$@" ;;
189
+ get) cmd_secrets_get "$@" ;;
190
+ list) cmd_secrets_list "$@" ;;
191
+ load) cmd_secrets_load "$@" ;;
192
+ provider) cmd_secrets_provider "$@" ;;
193
+ *)
194
+ die "Usage: dot secrets [edit|set|get|list|load|provider]"
195
+ ;;
196
+ esac
68
197
  ;;
69
198
  secrets-create)
70
199
  shift
@@ -74,6 +203,19 @@ case "${1:-}" in
74
203
  shift
75
204
  cmd_ssh_key "$@"
76
205
  ;;
206
+ ssh-cert)
207
+ shift
208
+ cmd_ssh_cert "$@"
209
+ ;;
210
+ env)
211
+ shift || true
212
+ sub="${1:-load}"
213
+ if [[ $# -gt 0 ]]; then shift; fi
214
+ case "$sub" in
215
+ load) cmd_env_load "$@" ;;
216
+ *) die "Usage: dot env load <bucket>" ;;
217
+ esac
218
+ ;;
77
219
  *)
78
220
  echo "Unknown secrets command: ${1:-}" >&2
79
221
  exit 1
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  # Dotfiles CLI - Security Commands
3
4
  # backup, encrypt-check, firewall, telemetry, dns-doh, lock-screen, usb-safety
4
5
 
@@ -8,6 +9,8 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
9
  # shellcheck source=../lib/utils.sh
9
10
  source "$SCRIPT_DIR/../lib/utils.sh"
10
11
 
12
+ dot_ui_command_banner "Security" "${1:-}"
13
+
11
14
  cmd_backup() {
12
15
  run_script "scripts/security/backup.sh" "Backup script" "$@"
13
16
  }
@@ -1,12 +1,138 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  # Dotfiles CLI - Tools Commands
3
- # tools, new, packages, log-rotate
4
+ # tools, new, packages, log-rotate, aliases, alias-check, env, profile
4
5
 
5
6
  set -euo pipefail
6
7
 
7
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ _TOOLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
9
  # shellcheck source=../lib/utils.sh
9
- source "$SCRIPT_DIR/../lib/utils.sh"
10
+ source "$_TOOLS_DIR/../lib/utils.sh"
11
+ # shellcheck source=aliases.sh
12
+ source "$_TOOLS_DIR/aliases.sh"
13
+
14
+ # Cross-platform sed in-place (BSD vs GNU)
15
+ sed_in_place() {
16
+ if sed --version >/dev/null 2>&1; then
17
+ sed -i "$@" # GNU
18
+ else
19
+ sed -i '' "$@" # BSD (macOS)
20
+ fi
21
+ }
22
+
23
+ dot_ui_command_banner "Tools" "${1:-}"
24
+
25
+ ensure_line_in_file() {
26
+ local file="$1"
27
+ local line="$2"
28
+ if ! grep -Fqx "$line" "$file" 2>/dev/null; then
29
+ printf "%s\n" "$line" >>"$file"
30
+ fi
31
+ }
32
+
33
+ apply_template_security_baseline() {
34
+ local dest="$1"
35
+ local template_lang="$2"
36
+
37
+ # Baseline repo hygiene defaults
38
+ if [[ ! -f "$dest/.editorconfig" ]]; then
39
+ cat >"$dest/.editorconfig" <<'EOF'
40
+ root = true
41
+
42
+ [*]
43
+ charset = utf-8
44
+ end_of_line = lf
45
+ insert_final_newline = true
46
+ indent_style = space
47
+ indent_size = 2
48
+ trim_trailing_whitespace = true
49
+ EOF
50
+ fi
51
+
52
+ if [[ ! -f "$dest/.gitattributes" ]]; then
53
+ cat >"$dest/.gitattributes" <<'EOF'
54
+ * text=auto eol=lf
55
+ *.sh text eol=lf
56
+ *.yml text eol=lf
57
+ *.yaml text eol=lf
58
+ EOF
59
+ fi
60
+
61
+ if [[ ! -f "$dest/.gitignore" ]]; then
62
+ : >"$dest/.gitignore"
63
+ fi
64
+ ensure_line_in_file "$dest/.gitignore" ".env"
65
+ ensure_line_in_file "$dest/.gitignore" ".env.*"
66
+ ensure_line_in_file "$dest/.gitignore" "*.pem"
67
+ ensure_line_in_file "$dest/.gitignore" "*.key"
68
+ ensure_line_in_file "$dest/.gitignore" "*.p12"
69
+ ensure_line_in_file "$dest/.gitignore" "*.agekey"
70
+
71
+ if [[ ! -f "$dest/SECURITY.md" ]]; then
72
+ cat >"$dest/SECURITY.md" <<'EOF'
73
+ # Security Policy
74
+
75
+ ## Reporting
76
+
77
+ Do not disclose vulnerabilities publicly before a fix is available.
78
+ Open a private security advisory or contact maintainers directly.
79
+
80
+ ## Baseline Controls
81
+
82
+ - No secrets in source control.
83
+ - Use environment variables for API keys/tokens.
84
+ - Keep dependencies and lockfiles up to date.
85
+ - Enable secret scanning in CI.
86
+ EOF
87
+ fi
88
+
89
+ mkdir -p "$dest/.github/workflows"
90
+ if [[ ! -f "$dest/.github/workflows/security.yml" ]]; then
91
+ cat >"$dest/.github/workflows/security.yml" <<'EOF'
92
+ name: Security Baseline
93
+
94
+ on:
95
+ pull_request:
96
+ push:
97
+ branches: [main, master]
98
+
99
+ permissions:
100
+ contents: read
101
+
102
+ jobs:
103
+ secrets:
104
+ runs-on: ubuntu-latest
105
+ timeout-minutes: 10
106
+ steps:
107
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
108
+ - uses: gitleaks/gitleaks-action@ff98106e4c7b2bc287b24eaf42907196329070c7 # v2
109
+ env:
110
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
111
+ - uses: trufflesecurity/trufflehog@6961f2bace57ab32b23b3ba40f8f420f6bc7e004 # v3.93.3
112
+ with:
113
+ extra_args: --only-verified
114
+ EOF
115
+ fi
116
+
117
+ # Best-effort lockfile generation to improve reproducibility.
118
+ case "$template_lang" in
119
+ node)
120
+ if has_command npm && [[ -f "$dest/package.json" ]] && [[ ! -f "$dest/package-lock.json" ]]; then
121
+ (cd "$dest" && npm install --package-lock-only --ignore-scripts --silent >/dev/null 2>&1) || true
122
+ fi
123
+ ;;
124
+ python)
125
+ if has_command uv && [[ -f "$dest/pyproject.toml" ]] && [[ ! -f "$dest/uv.lock" ]]; then
126
+ (cd "$dest" && uv lock >/dev/null 2>&1) || true
127
+ fi
128
+ ;;
129
+ go)
130
+ if has_command go && [[ -f "$dest/go.mod" ]]; then
131
+ (cd "$dest" && go mod tidy >/dev/null 2>&1) || true
132
+ fi
133
+ ;;
134
+ esac
135
+ }
10
136
 
11
137
  show_system_package_managers() {
12
138
  if has_command brew; then
@@ -75,6 +201,10 @@ show_language_package_managers() {
75
201
  fi
76
202
  }
77
203
 
204
+ cmd_setup() {
205
+ run_script "scripts/ops/setup.sh" "Setup script" "$@"
206
+ }
207
+
78
208
  cmd_tools() {
79
209
  local src_dir subcommand
80
210
  src_dir="$(resolve_source_dir)"
@@ -82,41 +212,53 @@ cmd_tools() {
82
212
 
83
213
  if [ "$subcommand" = "install" ]; then
84
214
  if ! has_command nix; then
85
- echo "Nix is not installed."
215
+ ui_err "Nix" "not installed"
86
216
  echo ""
87
- echo "To install Nix, run:"
88
- echo " curl -L https://nixos.org/nix/install | sh"
217
+ ui_header "Install Nix"
218
+ echo " Follow the verified installer instructions:"
219
+ echo " https://nixos.org/download/"
89
220
  echo ""
90
- echo "Or use Homebrew/apt for individual tools."
221
+ ui_info "Or" "use Homebrew/apt for individual tools"
91
222
  exit 1
92
223
  fi
93
224
  shift
225
+ # Validate any tool name arguments
226
+ for arg in "$@"; do
227
+ [[ "$arg" == -* ]] && continue
228
+ validate_name "$arg" "tool name"
229
+ done
94
230
  if [ -n "$src_dir" ] && [ -f "$src_dir/nix/flake.nix" ]; then
95
- echo "Entering Nix development shell..."
231
+ ui_info "Entering" "Nix development shell"
96
232
  exec nix develop "$src_dir/nix" "$@"
97
233
  else
98
- echo "Nix flake not found in source directory."
234
+ ui_err "Nix flake" "not found in source directory"
99
235
  exit 1
100
236
  fi
101
- elif [ -n "$src_dir" ] && [ -f "$src_dir/docs/TOOLS.md" ]; then
102
- exec cat "$src_dir/docs/TOOLS.md"
103
- elif [ -n "$src_dir" ] && [ -f "$src_dir/docs/UTILS.md" ]; then
104
- exec cat "$src_dir/docs/UTILS.md"
237
+ elif [ "$subcommand" = "docs" ]; then
238
+ if [ -n "$src_dir" ] && [ -f "$src_dir/docs/TOOLS.md" ]; then
239
+ exec cat "$src_dir/docs/TOOLS.md"
240
+ elif [ -n "$src_dir" ] && [ -f "$src_dir/docs/UTILS.md" ]; then
241
+ exec cat "$src_dir/docs/UTILS.md"
242
+ fi
243
+ ui_err "Docs" "TOOLS.md not found"
244
+ exit 1
105
245
  else
106
- echo "Dot Tools:"
246
+ ui_header "Dot Tools"
107
247
  echo ""
108
- echo "Usage: dot tools [command]"
248
+ ui_info "Usage" "dot tools [command]"
109
249
  echo ""
110
- echo "Commands:"
111
- echo " (none) Show tools documentation"
112
- echo " install Enter Nix development shell with all tools"
250
+ ui_header "Commands"
251
+ ui_ok "(none)" "Show tools documentation"
252
+ ui_ok "install" "Enter Nix development shell with all tools"
253
+ ui_ok "docs" "Show full tools markdown documentation"
113
254
  echo ""
114
- echo "Quick Reference:"
115
- echo " dot sync - Apply dotfiles"
116
- echo " dot update - Pull latest changes and apply"
117
- echo " dot doctor - Run health checks"
118
- echo " dot keys - Show keybindings catalog"
119
- echo " dot learn - Interactive tour"
255
+ ui_header "Quick Reference"
256
+ ui_ok "dot sync" "Apply dotfiles"
257
+ ui_ok "dot update" "Pull latest changes and apply"
258
+ ui_ok "dot doctor" "Run health checks"
259
+ ui_ok "dot verify" "Run post-merge verification checks"
260
+ ui_ok "dot keys" "Show keybindings catalog"
261
+ ui_ok "dot learn" "Interactive tour"
120
262
  fi
121
263
  }
122
264
 
@@ -187,15 +329,17 @@ with open(path, "w", encoding="utf-8") as f:
187
329
  PY
188
330
  done
189
331
 
332
+ apply_template_security_baseline "$dest" "$template_lang"
333
+
190
334
  echo "Created $template_lang project at $dest"
191
335
  }
192
336
 
193
337
  cmd_packages() {
194
- echo "Package Managers:"
338
+ ui_header "Package Managers"
195
339
  echo ""
196
340
  show_system_package_managers
197
341
  echo ""
198
- echo "Language Package Managers:"
342
+ ui_header "Language Package Managers"
199
343
  show_language_package_managers
200
344
  }
201
345
 
@@ -203,12 +347,89 @@ cmd_log_rotate() {
203
347
  run_script "scripts/tools/log-rotate.sh" "Log rotation script" "$@"
204
348
  }
205
349
 
206
- # Dispatch
350
+ cmd_env_mise() {
351
+ if ! has_command mise; then
352
+ ui_err "mise not installed (required for dot env)"
353
+ exit 1
354
+ fi
355
+ case "${1:-list}" in
356
+ list | ls) mise ls ;;
357
+ install)
358
+ shift
359
+ # Validate tool names to prevent injection
360
+ for arg in "$@"; do
361
+ [[ "$arg" == -* ]] && continue
362
+ validate_name "$arg" "tool name"
363
+ done
364
+ mise install "$@"
365
+ ;;
366
+ use)
367
+ shift
368
+ for arg in "$@"; do
369
+ [[ "$arg" == -* ]] && continue
370
+ validate_name "$arg" "tool name"
371
+ done
372
+ mise use "$@"
373
+ ;;
374
+ *) mise "$@" ;;
375
+ esac
376
+ }
377
+
378
+ cmd_profile() {
379
+ local data_file
380
+ data_file="$(resolve_source_dir)/.chezmoidata.toml"
381
+ if [[ ! -f "$data_file" ]]; then
382
+ die ".chezmoidata.toml not found"
383
+ fi
384
+ case "${1:-show}" in
385
+ show)
386
+ ui_header "Dotfiles Profile"
387
+ local profile_val
388
+ profile_val="$(grep '^profile' "$data_file" | head -1 | sed 's/.*=\s*"\(.*\)"/\1/')"
389
+ ui_info "Profile" "${profile_val:-default}"
390
+ echo ""
391
+ ui_section "Feature Flags"
392
+ grep -A 100 '^\[features\]' "$data_file" | tail -n +2 | while IFS= read -r line; do
393
+ [[ "$line" =~ ^\[ ]] && break
394
+ [[ -z "$line" || "$line" =~ ^# ]] && continue
395
+ local key val
396
+ key="${line%%=*}"
397
+ key="${key// /}"
398
+ val="${line#*=}"
399
+ val="${val// /}"
400
+ val="${val//\"/}"
401
+ ui_info "$key" "$val"
402
+ done
403
+ ;;
404
+ set)
405
+ shift
406
+ local new_profile="${1:-}"
407
+ if [[ -z "$new_profile" ]]; then
408
+ die "Usage: dot profile set <name>"
409
+ fi
410
+ if grep -q '^profile' "$data_file"; then
411
+ sed_in_place "s/^profile = \".*\"/profile = \"$new_profile\"/" "$data_file"
412
+ else
413
+ sed_in_place "1a profile = \"$new_profile\"" "$data_file"
414
+ fi
415
+ ui_info "Profile" "Set to '$new_profile'. Run 'dot sync' to apply."
416
+ ;;
417
+ *)
418
+ die "Unknown profile subcommand: ${1:-}. Use 'show' or 'set'."
419
+ ;;
420
+ esac
421
+ }
422
+
423
+ # Dispatch — aliases and alias-check are defined in aliases.sh (sourced above)
207
424
  case "${1:-}" in
208
425
  tools)
209
426
  shift
210
427
  cmd_tools "$@"
211
428
  ;;
429
+ alias-check)
430
+ shift
431
+ cmd_alias_check "$@"
432
+ ;;
212
433
  new)
213
434
  shift
214
435
  cmd_new "$@"
@@ -221,6 +442,26 @@ case "${1:-}" in
221
442
  shift
222
443
  cmd_log_rotate "$@"
223
444
  ;;
445
+ setup)
446
+ shift
447
+ cmd_setup "$@"
448
+ ;;
449
+ aliases)
450
+ shift
451
+ cmd_aliases "$@"
452
+ ;;
453
+ env)
454
+ shift
455
+ cmd_env_mise "$@"
456
+ ;;
457
+ profile)
458
+ shift
459
+ cmd_profile "$@"
460
+ ;;
461
+ lint)
462
+ shift
463
+ exec bash "$(require_source_dir)/scripts/dot/commands/lint.sh" lint "$@"
464
+ ;;
224
465
  *)
225
466
  echo "Unknown tools command: ${1:-}" >&2
226
467
  exit 1
@@ -0,0 +1,2 @@
1
+ # alias replacement remove_in note
2
+ dlogsf dklf v0.2.487 Removed duplicate logs-follow alias
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Dotfiles 2026: Atomic Intelligence Surface
4
+ # High-fidelity, perfectly aligned, and professional.
5
+
6
+ _dotfiles_bento_render() {
7
+ # Catppuccin Mocha palette — consistent with the project's terminal theme
8
+ # so the bento card matches the user's configured color scheme.
9
+ local c_cyan='\x1b[38;2;0;255;255m' # Accent: header + bullet markers
10
+ local c_gray='\x1b[38;2;147;153;178m' # Overlay1: metric labels (subdued)
11
+ local c_blue='\x1b[38;2;116;199;236m' # Sapphire: metric values (readable)
12
+ local c_slate='\x1b[38;2;49;50;68m' # Surface0: dividers (near-invisible)
13
+ local c_green='\x1b[38;2;166;227;161m' # Green: status confirmations
14
+ local c_reset='\x1b[0m'
15
+ local c_bold='\x1b[1m'
16
+
17
+ # Detect OS to show platform-specific icon in the bento card
18
+ local os_name="Linux"
19
+ local os_icon=""
20
+ case "$(uname)" in
21
+ Darwin)
22
+ os_name="macOS"
23
+ os_icon=""
24
+ ;;
25
+ *)
26
+ [[ -f /proc/sys/kernel/osrelease ]] && grep -qiE '(microsoft|wsl)' /proc/sys/kernel/osrelease && os_name="WSL"
27
+ os_icon=""
28
+ ;;
29
+ esac
30
+
31
+ # Render a fixed-width card (42 cols) so output aligns in any terminal width
32
+ printf "\n"
33
+ printf " ${c_cyan}${c_bold}💎 D O T F I L E S${c_reset} ${c_slate}[v0.2.500]${c_reset}\n"
34
+ printf " ${c_slate}──────────────────────────────────────────${c_reset}\n"
35
+
36
+ # Key system properties at a glance — answers "is my env healthy?" in 1 second
37
+ printf " ${c_cyan}•${c_reset} ${c_gray}%-12s${c_reset} ${c_blue}rousseau @ %s (%s)${c_reset}\n" "Platform" "$os_name" "$os_icon"
38
+ printf " ${c_cyan}•${c_reset} ${c_gray}%-12s${c_reset} ${c_blue}Hardened (GPG/SOPS/Enclave)${c_reset}\n" "Security"
39
+ printf " ${c_cyan}•${c_reset} ${c_gray}%-12s${c_reset} ${c_blue}Idempotent • Deterministic${c_reset}\n" "Strategy"
40
+ printf " ${c_cyan}•${c_reset} ${c_gray}%-12s${c_reset} ${c_blue}Active (Vault Synced)${c_reset}\n" "Cloud"
41
+ printf " ${c_cyan}•${c_reset} ${c_gray}%-12s${c_reset} ${c_blue}60fps UI • <45ms Initial${c_reset}\n" "Latency"
42
+
43
+ # Footer confirms shell startup strategy — reassures user the env is optimized
44
+ printf " ${c_slate}──────────────────────────────────────────${c_reset}\n"
45
+ printf " ${c_green}✓ Hydrated${c_reset} ${c_slate}•${c_reset} ${c_green}Zero-Jank Async${c_reset} ${c_slate}•${c_reset} ${c_cyan}Atomic${c_reset}\n"
46
+ printf "\n"
47
+ }
48
+
49
+ _dotfiles_bento_render