@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,144 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Unit tests for utility functions: hostinfo, size, banner, stopwatch
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
- source "$SCRIPT_DIR/../framework/mocks.sh"
10
-
11
- FUNCS_DIR="$REPO_ROOT/.chezmoitemplates/functions"
12
-
13
- echo "Testing utility functions..."
14
-
15
- # ============ hostinfo ============
16
-
17
- if [[ -f "$FUNCS_DIR/hostinfo.sh" ]]; then
18
- source "$FUNCS_DIR/hostinfo.sh"
19
- fi
20
-
21
- test_start "hostinfo_function_exists"
22
- assert_true "type hostinfo &>/dev/null" "hostinfo function should exist"
23
-
24
- test_start "hostinfo_help"
25
- if type hostinfo &>/dev/null; then
26
- output=$(hostinfo --help 2>&1)
27
- if [[ "$output" == *"Usage:"* ]]; then
28
- ((TESTS_PASSED++))
29
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: --help shows usage"
30
- else
31
- ((TESTS_FAILED++))
32
- echo -e " ${RED}✗${NC} $CURRENT_TEST: --help should show usage"
33
- fi
34
- fi
35
-
36
- test_start "hostinfo_help_exit_code"
37
- if type hostinfo &>/dev/null; then
38
- hostinfo --help >/dev/null 2>&1
39
- assert_equals "0" "$?" "hostinfo --help should exit 0"
40
- fi
41
-
42
- test_start "hostinfo_shows_username"
43
- if type hostinfo &>/dev/null; then
44
- # Use timeout to avoid network-dependent delays (hostinfo fetches public IP)
45
- set +e
46
- output=$(timeout 5 bash -c 'source "'"$FUNCS_DIR/hostinfo.sh"'" && hostinfo' 2>&1)
47
- set -e
48
- if [[ "$output" == *"Username"* ]]; then
49
- ((TESTS_PASSED++))
50
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: output contains Username"
51
- else
52
- ((TESTS_FAILED++))
53
- echo -e " ${RED}✗${NC} $CURRENT_TEST: output should contain Username"
54
- echo -e " Output: ${output:0:200}"
55
- fi
56
- fi
57
-
58
- test_start "hostinfo_shows_hostname"
59
- if type hostinfo &>/dev/null; then
60
- set +e
61
- output=$(timeout 5 bash -c 'source "'"$FUNCS_DIR/hostinfo.sh"'" && hostinfo' 2>&1)
62
- set -e
63
- if [[ "$output" == *"Hostname"* ]]; then
64
- ((TESTS_PASSED++))
65
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: output contains Hostname"
66
- else
67
- ((TESTS_FAILED++))
68
- echo -e " ${RED}✗${NC} $CURRENT_TEST: output should contain Hostname"
69
- fi
70
- fi
71
-
72
- # ============ size ============
73
-
74
- if [[ -f "$FUNCS_DIR/size.sh" ]]; then
75
- source "$FUNCS_DIR/size.sh"
76
- fi
77
-
78
- test_start "size_function_exists"
79
- assert_true "type size &>/dev/null" "size function should exist"
80
-
81
- test_start "size_no_args"
82
- if type size &>/dev/null; then
83
- set +e
84
- output=$(size 2>&1)
85
- ec=$?
86
- set -e
87
- assert_equals "1" "$ec" "size with no args should fail"
88
- fi
89
-
90
- test_start "size_with_file"
91
- if type size &>/dev/null; then
92
- test_dir=$(mock_dir "size_test")
93
- echo "test content" >"$test_dir/test.txt"
94
- output=$(size "$test_dir/test.txt" 2>&1) || true
95
- if [[ "$output" == *"INFO"* ]] || [[ "$output" == *"bytes"* ]] || [[ "$output" == *"size"* ]]; then
96
- ((TESTS_PASSED++))
97
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: shows size information"
98
- else
99
- ((TESTS_FAILED++))
100
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should show size information"
101
- echo -e " Output: $output"
102
- fi
103
- rm -rf "$test_dir"
104
- fi
105
-
106
- # ============ banner ============
107
-
108
- if [[ -f "$FUNCS_DIR/banner.sh" ]]; then
109
- source "$FUNCS_DIR/banner.sh"
110
- fi
111
-
112
- test_start "banner_function_exists"
113
- assert_true "type banner &>/dev/null" "banner function should exist"
114
-
115
- test_start "banner_no_script_error"
116
- if type banner &>/dev/null; then
117
- # Without the figlet-banner.sh script, banner should fail gracefully
118
- set +e
119
- DOTFILES_DIR="/nonexistent" output=$(banner "test" 2>&1)
120
- ec=$?
121
- set -e
122
- if [[ $ec -ne 0 ]] || [[ "$output" == *"not found"* ]] || [[ "$output" == *"ERROR"* ]]; then
123
- ((TESTS_PASSED++))
124
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: graceful error when script missing"
125
- else
126
- ((TESTS_PASSED++))
127
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: banner handled missing script"
128
- fi
129
- fi
130
-
131
- # ============ Cross-cutting: error path tests ============
132
-
133
- test_start "size_too_many_args"
134
- if type size &>/dev/null; then
135
- set +e
136
- output=$(size "arg1" "arg2" 2>&1)
137
- ec=$?
138
- set -e
139
- assert_equals "1" "$ec" "size with 2 args should fail"
140
- fi
141
-
142
- echo ""
143
- echo "Utility function tests completed."
144
- print_summary
@@ -1,132 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034,SC2016
3
- # Unit tests for Wave 1: Eager/Lazy alias split (90/91 templates)
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
-
10
- EAGER_TMPL="$REPO_ROOT/dot_config/shell/90-ux-aliases.sh.tmpl"
11
- LAZY_TMPL="$REPO_ROOT/dot_config/shell/91-ux-aliases-lazy.sh.tmpl"
12
-
13
- echo "Testing Wave 1: Eager/Lazy alias split..."
14
-
15
- # --- Eager template (90) ---
16
-
17
- test_start "eager_template_exists"
18
- assert_file_exists "$EAGER_TMPL" "90-ux-aliases.sh.tmpl should exist"
19
-
20
- test_start "eager_template_has_shebang"
21
- first_line=$(head -n 1 "$EAGER_TMPL")
22
- if [[ "$first_line" == "#!/usr/bin/env bash" ]]; then
23
- ((TESTS_PASSED++))
24
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has proper shebang"
25
- else
26
- ((TESTS_FAILED++))
27
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should have #!/usr/bin/env bash shebang"
28
- fi
29
-
30
- test_start "eager_template_defines_core_categories"
31
- assert_file_contains "$EAGER_TMPL" 'coreCategories' "should define coreCategories list"
32
-
33
- test_start "eager_template_includes_cd"
34
- assert_file_contains "$EAGER_TMPL" '"cd"' "should include cd in core categories"
35
-
36
- test_start "eager_template_includes_git"
37
- assert_file_contains "$EAGER_TMPL" '"git"' "should include git in core categories"
38
-
39
- test_start "eager_template_includes_editor"
40
- assert_file_contains "$EAGER_TMPL" '"editor"' "should include editor in core categories"
41
-
42
- test_start "eager_template_includes_sudo"
43
- assert_file_contains "$EAGER_TMPL" '"sudo"' "should include sudo in core categories"
44
-
45
- test_start "eager_template_includes_modern"
46
- assert_file_contains "$EAGER_TMPL" '"modern"' "should include modern in core categories"
47
-
48
- test_start "eager_template_filters_isCore"
49
- assert_file_contains "$EAGER_TMPL" 'if and $isCore' "should filter by isCore == true"
50
-
51
- test_start "eager_template_excludes_macOS_inline"
52
- assert_file_contains "$EAGER_TMPL" 'not (contains "/macOS/" $name)' "should exclude macOS aliases from main loop"
53
-
54
- test_start "eager_template_has_macos_section"
55
- assert_file_contains "$EAGER_TMPL" 'eq .chezmoi.os "darwin"' "should have OS-specific macOS section"
56
-
57
- test_start "eager_template_uses_glob"
58
- assert_file_contains "$EAGER_TMPL" 'glob $globPattern' "should discover aliases via glob"
59
-
60
- test_start "eager_template_has_bash_compat"
61
- assert_file_contains "$EAGER_TMPL" 'expand_aliases' "should enable expand_aliases for bash compatibility"
62
-
63
- # Count expected core categories (14)
64
- test_start "eager_template_has_14_core_categories"
65
- core_count=$(grep -oE '"[a-z]+"' "$EAGER_TMPL" | head -14 | wc -l)
66
- if [[ $core_count -eq 14 ]]; then
67
- ((TESTS_PASSED++))
68
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has 14 core categories"
69
- else
70
- ((TESTS_FAILED++))
71
- echo -e " ${RED}✗${NC} $CURRENT_TEST: expected 14 core categories, found $core_count"
72
- fi
73
-
74
- # --- Lazy template (91) ---
75
-
76
- test_start "lazy_template_exists"
77
- assert_file_exists "$LAZY_TMPL" "91-ux-aliases-lazy.sh.tmpl should exist"
78
-
79
- test_start "lazy_template_has_shebang"
80
- first_line=$(head -n 1 "$LAZY_TMPL")
81
- if [[ "$first_line" == "#!/usr/bin/env bash" ]]; then
82
- ((TESTS_PASSED++))
83
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has proper shebang"
84
- else
85
- ((TESTS_FAILED++))
86
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should have #!/usr/bin/env bash shebang"
87
- fi
88
-
89
- test_start "lazy_template_defines_core_categories"
90
- assert_file_contains "$LAZY_TMPL" 'coreCategories' "should define coreCategories for exclusion"
91
-
92
- test_start "lazy_template_excludes_core"
93
- assert_file_contains "$LAZY_TMPL" 'not $isCore' "should filter by NOT isCore"
94
-
95
- test_start "lazy_template_excludes_macOS"
96
- assert_file_contains "$LAZY_TMPL" 'not (contains "/macOS/" $name)' "should exclude macOS aliases"
97
-
98
- test_start "lazy_template_has_bash_compat"
99
- assert_file_contains "$LAZY_TMPL" 'expand_aliases' "should enable expand_aliases for bash compatibility"
100
-
101
- test_start "lazy_template_uses_glob"
102
- assert_file_contains "$LAZY_TMPL" 'glob $globPattern' "should discover aliases via glob"
103
-
104
- # Verify both templates use the same coreCategories list
105
- test_start "templates_share_core_categories"
106
- eager_cats=$(grep 'coreCategories' "$EAGER_TMPL" | head -1)
107
- lazy_cats=$(grep 'coreCategories' "$LAZY_TMPL" | head -1)
108
- if [[ "$eager_cats" == "$lazy_cats" ]]; then
109
- ((TESTS_PASSED++))
110
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: eager and lazy templates use identical coreCategories"
111
- else
112
- ((TESTS_FAILED++))
113
- echo -e " ${RED}✗${NC} $CURRENT_TEST: coreCategories differ between templates"
114
- echo -e " Eager: $eager_cats"
115
- echo -e " Lazy: $lazy_cats"
116
- fi
117
-
118
- # Verify both templates use the same glob pattern
119
- test_start "templates_share_glob_pattern"
120
- eager_glob=$(grep 'globPattern' "$EAGER_TMPL" | head -1)
121
- lazy_glob=$(grep 'globPattern' "$LAZY_TMPL" | head -1)
122
- if [[ "$eager_glob" == "$lazy_glob" ]]; then
123
- ((TESTS_PASSED++))
124
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: eager and lazy templates use identical globPattern"
125
- else
126
- ((TESTS_FAILED++))
127
- echo -e " ${RED}✗${NC} $CURRENT_TEST: globPattern differs between templates"
128
- fi
129
-
130
- echo ""
131
- echo "Wave 1 alias split tests completed."
132
- print_summary
@@ -1,61 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Unit tests for Wave 1: CI chezmoi version pinning
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
-
10
- CI_FILE="$REPO_ROOT/.github/workflows/ci.yml"
11
-
12
- echo "Testing Wave 1: CI chezmoi version pinning..."
13
-
14
- test_start "ci_yml_exists"
15
- assert_file_exists "$CI_FILE" "ci.yml should exist"
16
-
17
- test_start "ci_chezmoi_version_env"
18
- assert_file_contains "$CI_FILE" "CHEZMOI_VERSION:" "should define CHEZMOI_VERSION env variable"
19
-
20
- test_start "ci_chezmoi_version_pinned"
21
- # Verify the version is a proper semver (not 'latest')
22
- if grep -q 'CHEZMOI_VERSION:.*"[0-9]' "$CI_FILE"; then
23
- ((TESTS_PASSED++))
24
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: CHEZMOI_VERSION is pinned to a semver"
25
- else
26
- ((TESTS_FAILED++))
27
- echo -e " ${RED}✗${NC} $CURRENT_TEST: CHEZMOI_VERSION should be pinned to a semver"
28
- fi
29
-
30
- test_start "ci_chezmoi_not_latest"
31
- if grep -q 'CHEZMOI_VERSION.*latest' "$CI_FILE" 2>/dev/null; then
32
- ((TESTS_FAILED++))
33
- echo -e " ${RED}✗${NC} $CURRENT_TEST: CHEZMOI_VERSION should not be 'latest'"
34
- else
35
- ((TESTS_PASSED++))
36
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: CHEZMOI_VERSION is not 'latest'"
37
- fi
38
-
39
- test_start "ci_chezmoi_uses_tag_flag"
40
- # get.chezmoi.io uses -t flag, not -v
41
- if grep -q 'get.chezmoi.io.*-v ' "$CI_FILE" 2>/dev/null; then
42
- ((TESTS_FAILED++))
43
- echo -e " ${RED}✗${NC} $CURRENT_TEST: get.chezmoi.io should use -t flag, not -v"
44
- else
45
- ((TESTS_PASSED++))
46
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: get.chezmoi.io does not use incorrect -v flag"
47
- fi
48
-
49
- test_start "ci_chezmoi_tag_format"
50
- # Should use -t vX.Y.Z format
51
- if grep -q '\-t v' "$CI_FILE"; then
52
- ((TESTS_PASSED++))
53
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: uses -t v prefix for chezmoi tag"
54
- else
55
- ((TESTS_FAILED++))
56
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should use -t vX.Y.Z format"
57
- fi
58
-
59
- echo ""
60
- echo "Wave 1 CI pinning tests completed."
61
- print_summary
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Unit tests for Wave 1: gitleaks configuration
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
-
10
- GITLEAKS_CONF="$REPO_ROOT/config/gitleaks.toml"
11
-
12
- echo "Testing Wave 1: gitleaks configuration..."
13
-
14
- test_start "gitleaks_config_exists"
15
- assert_file_exists "$GITLEAKS_CONF" ".gitleaks.toml should exist"
16
-
17
- test_start "gitleaks_extends_default"
18
- assert_file_contains "$GITLEAKS_CONF" "useDefault = true" "should extend default gitleaks config"
19
-
20
- test_start "gitleaks_has_allowlist"
21
- assert_file_contains "$GITLEAKS_CONF" "[allowlist]" "should have allowlist section"
22
-
23
- test_start "gitleaks_allows_gpg_key"
24
- assert_file_contains "$GITLEAKS_CONF" "CHEZMOI_GPG_KEY=" "should allowlist GPG key variable"
25
-
26
- test_start "gitleaks_has_path_ignores"
27
- assert_file_contains "$GITLEAKS_CONF" "paths = [" "should have path-based ignores"
28
-
29
- test_start "gitleaks_ignores_docs"
30
- assert_file_contains "$GITLEAKS_CONF" "docs/" "should ignore docs directory"
31
-
32
- test_start "gitleaks_has_commit_allowlist"
33
- assert_file_contains "$GITLEAKS_CONF" "commits = [" "should have commit allowlist"
34
-
35
- test_start "gitleaks_has_stopwords"
36
- assert_file_contains "$GITLEAKS_CONF" "stopwords = [" "should have stopwords list"
37
-
38
- test_start "gitleaks_has_custom_rules"
39
- assert_file_contains "$GITLEAKS_CONF" "[[rules]]" "should define custom detection rules"
40
-
41
- test_start "gitleaks_aws_rule"
42
- assert_file_contains "$GITLEAKS_CONF" "aws-session-token" "should detect AWS session tokens"
43
-
44
- test_start "gitleaks_gcp_rule"
45
- assert_file_contains "$GITLEAKS_CONF" "gcp-api-key" "should detect GCP API keys"
46
-
47
- test_start "gitleaks_azure_rule"
48
- assert_file_contains "$GITLEAKS_CONF" "azure-connection-string" "should detect Azure connection strings"
49
-
50
- echo ""
51
- echo "Wave 1 gitleaks configuration tests completed."
52
- print_summary
@@ -1,97 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Unit tests for Wave 1: heal.sh shellcheck and shfmt fixes
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
-
10
- HEAL_SCRIPT="$REPO_ROOT/scripts/ops/heal.sh"
11
-
12
- echo "Testing Wave 1: heal.sh fixes..."
13
-
14
- test_start "heal_exists"
15
- assert_file_exists "$HEAL_SCRIPT" "heal.sh should exist"
16
-
17
- test_start "heal_syntax"
18
- assert_exit_code 0 "bash -n '$HEAL_SCRIPT'"
19
-
20
- test_start "heal_strict_mode"
21
- assert_file_contains "$HEAL_SCRIPT" "set -euo pipefail" "should use strict mode"
22
-
23
- test_start "heal_no_sc2015_pattern"
24
- # SC2015: A && B || C is not if-then-else. Should use proper if/then.
25
- # Check that the backup loop does NOT use && ... || pattern
26
- backup_block=$(sed -n '/create_pre_heal_backup/,/^}/p' "$HEAL_SCRIPT")
27
- if echo "$backup_block" | grep -q '&&.*cp.*||' 2>/dev/null; then
28
- ((TESTS_FAILED++))
29
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should not use A && B || C pattern (SC2015)"
30
- else
31
- ((TESTS_PASSED++))
32
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no SC2015 pattern in backup block"
33
- fi
34
-
35
- test_start "heal_backup_uses_if"
36
- # The backup file copy should use proper if/then
37
- if echo "$backup_block" | grep -q 'if \[\[.*-f.*\]\]; then' 2>/dev/null; then
38
- ((TESTS_PASSED++))
39
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backup uses proper if/then for file copy"
40
- else
41
- ((TESTS_PASSED++))
42
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backup block refactored (no A&&B||C)"
43
- fi
44
-
45
- test_start "heal_shfmt_case_spacing"
46
- # Verify case branch formatting (should not have extra spaces like "brew) ")
47
- if grep -qP 'brew\)\s{3,}' "$HEAL_SCRIPT" 2>/dev/null; then
48
- ((TESTS_FAILED++))
49
- echo -e " ${RED}✗${NC} $CURRENT_TEST: case branches should not have extra spaces"
50
- else
51
- ((TESTS_PASSED++))
52
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: case branch spacing is correct"
53
- fi
54
-
55
- test_start "heal_shfmt_pipe_spacing"
56
- # Verify pipe spacing in case patterns (should be "apt | dnf" not "apt|dnf")
57
- if grep -qP 'apt\|dnf' "$HEAL_SCRIPT" 2>/dev/null; then
58
- ((TESTS_FAILED++))
59
- echo -e " ${RED}✗${NC} $CURRENT_TEST: case pipes should have spaces (apt | dnf)"
60
- else
61
- ((TESTS_PASSED++))
62
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: case pipe spacing is correct"
63
- fi
64
-
65
- test_start "heal_has_help_flag"
66
- if grep -qF -- "--help" "$HEAL_SCRIPT"; then
67
- ((TESTS_PASSED++))
68
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: should support --help flag"
69
- else
70
- ((TESTS_FAILED++))
71
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should support --help flag"
72
- fi
73
-
74
- test_start "heal_has_dry_run"
75
- if grep -qF -- "--dry-run" "$HEAL_SCRIPT"; then
76
- ((TESTS_PASSED++))
77
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: should support --dry-run flag"
78
- else
79
- ((TESTS_FAILED++))
80
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should support --dry-run flag"
81
- fi
82
-
83
- test_start "heal_has_force"
84
- if grep -qF -- "--force" "$HEAL_SCRIPT"; then
85
- ((TESTS_PASSED++))
86
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: should support --force flag"
87
- else
88
- ((TESTS_FAILED++))
89
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should support --force flag"
90
- fi
91
-
92
- test_start "heal_persist_log"
93
- assert_file_contains "$HEAL_SCRIPT" "persist_log" "should log actions persistently"
94
-
95
- echo ""
96
- echo "Wave 1 heal.sh fix tests completed."
97
- print_summary
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2016,SC2034
3
- # Unit tests for Wave 1: install.sh chezmoi installation strategy
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
-
10
- INSTALL_SCRIPT="$REPO_ROOT/install.sh"
11
-
12
- echo "Testing Wave 1: install.sh chezmoi installation..."
13
-
14
- test_start "install_brew_chezmoi"
15
- assert_file_contains "$INSTALL_SCRIPT" "brew install chezmoi" "should install chezmoi via Homebrew when available"
16
-
17
- test_start "install_fallback_get_chezmoi"
18
- assert_file_contains "$INSTALL_SCRIPT" "get.chezmoi.io" "should fall back to get.chezmoi.io"
19
-
20
- test_start "install_chezmoi_already_installed"
21
- assert_file_contains "$INSTALL_SCRIPT" "chezmoi already installed" "should detect existing chezmoi"
22
-
23
- test_start "install_local_bin_path"
24
- assert_file_contains "$INSTALL_SCRIPT" 'bin_dir="$HOME/.local/bin"' "should install to ~/.local/bin as fallback"
25
-
26
- test_start "install_version_pinned"
27
- # VERSION is used for the dotfiles tag, not chezmoi binary
28
- assert_file_contains "$INSTALL_SCRIPT" 'VERSION=' "should pin dotfiles version"
29
-
30
- test_start "install_source_dir_defined"
31
- assert_file_contains "$INSTALL_SCRIPT" 'SOURCE_DIR="$HOME/.dotfiles"' "should define source directory"
32
-
33
- echo ""
34
- echo "Wave 1 install.sh chezmoi installation tests completed."
35
- print_summary
@@ -1,89 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034,SC2016
3
- # Unit tests for Wave 1: dot_zshenv PATH entries
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
-
10
- ZSHENV="$REPO_ROOT/dot_zshenv"
11
-
12
- echo "Testing Wave 1: dot_zshenv PATH entries..."
13
-
14
- test_start "zshenv_exists"
15
- assert_file_exists "$ZSHENV" "dot_zshenv should exist"
16
-
17
- test_start "zshenv_xdg_config"
18
- assert_file_contains "$ZSHENV" 'XDG_CONFIG_HOME' "should set XDG_CONFIG_HOME"
19
-
20
- test_start "zshenv_xdg_cache"
21
- assert_file_contains "$ZSHENV" 'XDG_CACHE_HOME' "should set XDG_CACHE_HOME"
22
-
23
- test_start "zshenv_xdg_data"
24
- assert_file_contains "$ZSHENV" 'XDG_DATA_HOME' "should set XDG_DATA_HOME"
25
-
26
- test_start "zshenv_xdg_state"
27
- assert_file_contains "$ZSHENV" 'XDG_STATE_HOME' "should set XDG_STATE_HOME"
28
-
29
- test_start "zshenv_local_bin_path"
30
- assert_file_contains "$ZSHENV" '.local/bin' "should add ~/.local/bin to PATH"
31
-
32
- test_start "zshenv_local_bin_guard"
33
- # Should use idempotent guard (check before adding)
34
- if grep -qF 'PATH' "$ZSHENV" && grep -qF '.local/bin' "$ZSHENV"; then
35
- ((TESTS_PASSED++)) || true
36
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: ~/.local/bin has PATH guard"
37
- else
38
- ((TESTS_FAILED++)) || true
39
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should use idempotent guard for ~/.local/bin"
40
- fi
41
-
42
- test_start "zshenv_local_bin_dir_check"
43
- # grep -qF interprets -d as a flag, so use -- separator
44
- if grep -qF -- '-d "${HOME}/.local/bin"' "$ZSHENV"; then
45
- ((TESTS_PASSED++)) || true
46
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: checks ~/.local/bin directory exists"
47
- else
48
- ((TESTS_FAILED++)) || true
49
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should check ~/.local/bin directory exists"
50
- fi
51
-
52
- test_start "zshenv_homebrew_path"
53
- assert_file_contains "$ZSHENV" '/opt/homebrew/bin' "should add /opt/homebrew/bin to PATH"
54
-
55
- test_start "zshenv_homebrew_guard"
56
- # Should use idempotent guard for Homebrew
57
- if grep -qF '/opt/homebrew/bin' "$ZSHENV" && grep -qF 'PATH' "$ZSHENV"; then
58
- ((TESTS_PASSED++)) || true
59
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: /opt/homebrew/bin has PATH guard"
60
- else
61
- ((TESTS_FAILED++)) || true
62
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should use idempotent guard for /opt/homebrew/bin"
63
- fi
64
-
65
- test_start "zshenv_homebrew_dir_check"
66
- if grep -qF -- '-d "/opt/homebrew/bin"' "$ZSHENV"; then
67
- ((TESTS_PASSED++)) || true
68
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: checks /opt/homebrew/bin directory exists"
69
- else
70
- ((TESTS_FAILED++)) || true
71
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should check /opt/homebrew/bin directory exists"
72
- fi
73
-
74
- test_start "zshenv_zdotdir"
75
- assert_file_contains "$ZSHENV" 'ZDOTDIR' "should set ZDOTDIR"
76
-
77
- test_start "zshenv_no_heavy_init"
78
- # zshenv should NOT contain eval statements (heavy init belongs in zshrc)
79
- if grep -q '^eval ' "$ZSHENV" 2>/dev/null; then
80
- ((TESTS_FAILED++)) || true
81
- echo -e " ${RED}✗${NC} $CURRENT_TEST: zshenv should not contain eval (heavy init)"
82
- else
83
- ((TESTS_PASSED++)) || true
84
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no heavy eval in zshenv"
85
- fi
86
-
87
- echo ""
88
- echo "Wave 1 dot_zshenv PATH tests completed."
89
- print_summary