@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,201 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2034
3
- # Mock utilities for shell testing
4
- # Provides functions to create mock commands, files, and directories
5
-
6
- # Track created mocks for cleanup
7
- MOCK_COMMANDS=()
8
- MOCK_FILES=()
9
- MOCK_DIRS=()
10
- ORIGINAL_PATH="$PATH"
11
- MOCK_BIN_DIR=""
12
-
13
- # Initialize mock environment
14
- mock_init() {
15
- MOCK_BIN_DIR=$(mktemp -d)
16
- export MOCK_BIN_DIR
17
- export PATH="$MOCK_BIN_DIR:$PATH"
18
- MOCK_COMMANDS=()
19
- MOCK_FILES=()
20
- MOCK_DIRS=()
21
- }
22
-
23
- # Create a mock command
24
- # Usage: mock_command "command_name" "output" [exit_code]
25
- mock_command() {
26
- local cmd_name="$1"
27
- local output="$2"
28
- local exit_code="${3:-0}"
29
-
30
- if [[ -z "$MOCK_BIN_DIR" ]]; then
31
- mock_init
32
- fi
33
-
34
- local mock_script="$MOCK_BIN_DIR/$cmd_name"
35
- cat >"$mock_script" <<EOF
36
- #!/usr/bin/env bash
37
- echo "$output"
38
- exit $exit_code
39
- EOF
40
- chmod +x "$mock_script"
41
- MOCK_COMMANDS+=("$mock_script")
42
- }
43
-
44
- # Create a mock command that records arguments
45
- # Usage: mock_command_spy "command_name" [output] [exit_code]
46
- mock_command_spy() {
47
- local cmd_name="$1"
48
- local output="${2:-}"
49
- local exit_code="${3:-0}"
50
-
51
- if [[ -z "$MOCK_BIN_DIR" ]]; then
52
- mock_init
53
- fi
54
-
55
- local mock_script="$MOCK_BIN_DIR/$cmd_name"
56
- local spy_file="$MOCK_BIN_DIR/${cmd_name}.spy"
57
-
58
- cat >"$mock_script" <<EOF
59
- #!/usr/bin/env bash
60
- echo "\$@" >> "$spy_file"
61
- echo "$output"
62
- exit $exit_code
63
- EOF
64
- chmod +x "$mock_script"
65
- touch "$spy_file"
66
- MOCK_COMMANDS+=("$mock_script")
67
- MOCK_FILES+=("$spy_file")
68
- }
69
-
70
- # Get spy call history
71
- # Usage: mock_get_calls "command_name"
72
- mock_get_calls() {
73
- local cmd_name="$1"
74
- local spy_file="$MOCK_BIN_DIR/${cmd_name}.spy"
75
- if [[ -f "$spy_file" ]]; then
76
- cat "$spy_file"
77
- fi
78
- }
79
-
80
- # Get spy call count
81
- # Usage: mock_call_count "command_name"
82
- mock_call_count() {
83
- local cmd_name="$1"
84
- local spy_file="$MOCK_BIN_DIR/${cmd_name}.spy"
85
- if [[ -f "$spy_file" ]]; then
86
- wc -l <"$spy_file" | tr -d ' '
87
- else
88
- echo "0"
89
- fi
90
- }
91
-
92
- # Create a temporary file with content
93
- # Usage: mock_file "content" [filename]
94
- mock_file() {
95
- local content="$1"
96
- local filename="${2:-}"
97
- local file
98
-
99
- if [[ -n "$filename" ]]; then
100
- file=$(mktemp -t "$filename.XXXXXX")
101
- else
102
- file=$(mktemp)
103
- fi
104
-
105
- echo "$content" >"$file"
106
- MOCK_FILES+=("$file")
107
- echo "$file"
108
- }
109
-
110
- # Create a temporary directory
111
- # Usage: mock_dir [prefix]
112
- mock_dir() {
113
- local prefix="${1:-mock}"
114
- local dir
115
- dir=$(mktemp -d -t "${prefix}.XXXXXX")
116
- MOCK_DIRS+=("$dir")
117
- echo "$dir"
118
- }
119
-
120
- # Create a mock archive file
121
- # Usage: mock_archive "type" [content_file]
122
- mock_archive() {
123
- local type="$1"
124
- local content="${2:-test content}"
125
- local temp_dir
126
- temp_dir=$(mktemp -d)
127
- local temp_file="$temp_dir/test_file.txt"
128
- local archive
129
-
130
- echo "$content" >"$temp_file"
131
-
132
- case "$type" in
133
- tar)
134
- archive=$(mktemp -t archive.XXXXXX.tar)
135
- tar cf "$archive" -C "$temp_dir" test_file.txt
136
- ;;
137
- tar.gz | tgz)
138
- archive=$(mktemp -t archive.XXXXXX.tar.gz)
139
- tar czf "$archive" -C "$temp_dir" test_file.txt
140
- ;;
141
- zip)
142
- archive=$(mktemp -t archive.XXXXXX.zip)
143
- (cd "$temp_dir" && zip -q "$archive" test_file.txt)
144
- ;;
145
- gz)
146
- archive=$(mktemp -t archive.XXXXXX.gz)
147
- gzip -c "$temp_file" >"$archive"
148
- ;;
149
- *)
150
- echo "Unsupported archive type: $type" >&2
151
- rm -rf "$temp_dir"
152
- return 1
153
- ;;
154
- esac
155
-
156
- rm -rf "$temp_dir"
157
- MOCK_FILES+=("$archive")
158
- echo "$archive"
159
- }
160
-
161
- # Restore original environment variable
162
- # Usage: mock_env "VAR_NAME" "value"
163
- mock_env() {
164
- local var_name="$1"
165
- local value="$2"
166
- export "$var_name=$value"
167
- }
168
-
169
- # Clean up all mocks
170
- mock_cleanup() {
171
- # Restore PATH
172
- export PATH="$ORIGINAL_PATH"
173
-
174
- # Remove mock commands
175
- for cmd in "${MOCK_COMMANDS[@]}"; do
176
- rm -f "$cmd" 2>/dev/null
177
- done
178
-
179
- # Remove mock files
180
- for file in "${MOCK_FILES[@]}"; do
181
- rm -f "$file" 2>/dev/null
182
- done
183
-
184
- # Remove mock directories
185
- for dir in "${MOCK_DIRS[@]}"; do
186
- rm -rf "$dir" 2>/dev/null
187
- done
188
-
189
- # Remove mock bin directory
190
- if [[ -n "$MOCK_BIN_DIR" && -d "$MOCK_BIN_DIR" ]]; then
191
- rm -rf "$MOCK_BIN_DIR"
192
- fi
193
-
194
- MOCK_BIN_DIR=""
195
- MOCK_COMMANDS=()
196
- MOCK_FILES=()
197
- MOCK_DIRS=()
198
- }
199
-
200
- # Setup trap to cleanup on exit
201
- trap mock_cleanup EXIT
@@ -1,189 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Main test runner for dotfiles test suite
4
- # Discovers and runs all test files, reports results
5
-
6
- set -euo pipefail
7
-
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- TESTS_DIR="$(dirname "$SCRIPT_DIR")"
10
- REPO_ROOT="$(dirname "$(dirname "$TESTS_DIR")")"
11
-
12
- if [[ ! -d "$REPO_ROOT" ]]; then
13
- echo "Error: REPO_ROOT is not a valid directory: $REPO_ROOT" >&2
14
- exit 1
15
- fi
16
-
17
- # Export paths for test files
18
- export TESTS_DIR
19
- export REPO_ROOT
20
- export FRAMEWORK_DIR="$SCRIPT_DIR"
21
-
22
- # Run a single test file and capture results
23
- run_test_file() {
24
- local test_file="$1"
25
- local temp_results
26
- temp_results=$(mktemp)
27
-
28
- echo ""
29
- echo "Running: $(basename "$test_file")"
30
- echo "─────────────────────────────────────"
31
-
32
- # Run test as a separate process (not subshell with source)
33
- # This avoids trap interference from double-sourcing framework files
34
- local exit_status=0
35
- bash "$test_file" 2>&1 | tee "$temp_results" || exit_status=$?
36
-
37
- # Parse results from output
38
- local results_line
39
- results_line=$(grep "^RESULTS:" "$temp_results" | tail -1) || true
40
- if [[ -n "$results_line" ]]; then
41
- local run passed failed
42
- IFS=':' read -r _ run passed failed <<<"$results_line"
43
- TOTAL_TESTS_RUN=$((TOTAL_TESTS_RUN + run))
44
- TOTAL_TESTS_PASSED=$((TOTAL_TESTS_PASSED + passed))
45
- TOTAL_TESTS_FAILED=$((TOTAL_TESTS_FAILED + failed))
46
- elif [[ $exit_status -ne 0 ]]; then
47
- # Test file crashed without producing RESULTS -- count as failure
48
- echo -e "\033[0;31mERROR: $(basename "$test_file") crashed (exit $exit_status) without producing results\033[0m"
49
- TOTAL_TESTS_RUN=$((TOTAL_TESTS_RUN + 1))
50
- TOTAL_TESTS_FAILED=$((TOTAL_TESTS_FAILED + 1))
51
- fi
52
-
53
- rm -f "$temp_results"
54
- }
55
-
56
- # Show usage
57
- usage() {
58
- cat <<EOF
59
- Dotfiles Test Runner
60
-
61
- Usage:
62
- $(basename "$0") [options] [pattern]
63
-
64
- Options:
65
- -h, --help Show this help message
66
- -v, --verbose Verbose output
67
- -i, --integration Include integration tests
68
- -u, --unit-only Run only unit tests
69
-
70
- Arguments:
71
- pattern Run only tests matching pattern (e.g., 'extract', 'backup')
72
-
73
- Examples:
74
- $(basename "$0") # Run all unit tests
75
- $(basename "$0") extract # Run only extract tests
76
- $(basename "$0") -i # Run unit and integration tests
77
- RUN_INTEGRATION=1 $(basename "$0") # Alternative way to run integration tests
78
-
79
- Environment Variables:
80
- RUN_INTEGRATION=1 Enable integration tests
81
- VERBOSE=1 Enable verbose output
82
- EOF
83
- }
84
-
85
- main() {
86
- local test_pattern="*"
87
- local run_integration="${RUN_INTEGRATION:-0}"
88
- local verbose="${VERBOSE:-0}"
89
- local unit_only=0
90
-
91
- # Initialize global counters
92
- TOTAL_TESTS_RUN=0
93
- TOTAL_TESTS_PASSED=0
94
- TOTAL_TESTS_FAILED=0
95
-
96
- # Parse arguments
97
- while [[ $# -gt 0 ]]; do
98
- case "$1" in
99
- -h | --help)
100
- usage
101
- exit 0
102
- ;;
103
- -v | --verbose)
104
- verbose=1
105
- shift
106
- ;;
107
- -i | --integration)
108
- run_integration=1
109
- shift
110
- ;;
111
- -u | --unit-only)
112
- unit_only=1
113
- shift
114
- ;;
115
- -*)
116
- echo "Unknown option: $1" >&2
117
- usage
118
- exit 1
119
- ;;
120
- *)
121
- test_pattern="$1"
122
- shift
123
- ;;
124
- esac
125
- done
126
-
127
- echo "╔═══════════════════════════════════════╗"
128
- echo "║ Dotfiles Test Suite ║"
129
- echo "╚═══════════════════════════════════════╝"
130
- echo ""
131
- echo "Repository: $REPO_ROOT"
132
- echo "Tests Dir: $TESTS_DIR"
133
- echo ""
134
-
135
- local test_count=0
136
-
137
- # Run unit tests
138
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
139
- echo "UNIT TESTS"
140
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
141
-
142
- for test_file in "$TESTS_DIR"/unit/test_${test_pattern}.sh; do
143
- if [[ -f "$test_file" ]]; then
144
- run_test_file "$test_file"
145
- ((test_count++)) || true
146
- fi
147
- done
148
-
149
- if [[ $test_count -eq 0 ]]; then
150
- echo "No unit tests found matching pattern: $test_pattern"
151
- fi
152
-
153
- # Run integration tests if requested
154
- if [[ "$run_integration" == "1" && "$unit_only" != "1" ]]; then
155
- echo ""
156
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
157
- echo "INTEGRATION TESTS"
158
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
159
-
160
- local integration_count=0
161
- for test_file in "$TESTS_DIR"/integration/test_*.sh; do
162
- if [[ -f "$test_file" ]]; then
163
- run_test_file "$test_file"
164
- ((integration_count++)) || true
165
- fi
166
- done
167
-
168
- if [[ $integration_count -eq 0 ]]; then
169
- echo "No integration tests found."
170
- fi
171
- fi
172
-
173
- # Print final summary
174
- echo ""
175
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
176
- echo "FINAL SUMMARY"
177
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
178
- echo -e "Total tests run: $TOTAL_TESTS_RUN"
179
- echo -e "\033[0;32mTotal passed: $TOTAL_TESTS_PASSED\033[0m"
180
- echo -e "\033[0;31mTotal failed: $TOTAL_TESTS_FAILED\033[0m"
181
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
182
-
183
- if [[ $TOTAL_TESTS_FAILED -gt 0 ]]; then
184
- exit 1
185
- fi
186
- exit 0
187
- }
188
-
189
- main "$@"
@@ -1,237 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091
3
- # Integration tests for install.sh
4
- # Tests the dotfiles installation process in isolation
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- source "$SCRIPT_DIR/../framework/assertions.sh"
8
- source "$SCRIPT_DIR/../framework/mocks.sh"
9
-
10
- INSTALL_SCRIPT="$REPO_ROOT/install.sh"
11
-
12
- # Test: install.sh exists
13
- test_start "install_script_exists"
14
- assert_file_exists "$INSTALL_SCRIPT" "install.sh should exist"
15
-
16
- # Test: install.sh is executable
17
- test_start "install_script_executable"
18
- if [[ -x "$INSTALL_SCRIPT" ]]; then
19
- ((TESTS_PASSED++))
20
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: install.sh is executable"
21
- else
22
- ((TESTS_FAILED++))
23
- echo -e " ${RED}✗${NC} $CURRENT_TEST: install.sh should be executable"
24
- fi
25
-
26
- # Test: install.sh has shebang
27
- test_start "install_script_shebang"
28
- first_line=$(head -n 1 "$INSTALL_SCRIPT")
29
- if [[ "$first_line" == "#!/"* ]]; then
30
- ((TESTS_PASSED++))
31
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has proper shebang"
32
- else
33
- ((TESTS_FAILED++))
34
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should have shebang"
35
- fi
36
-
37
- # Test: install.sh uses set -e
38
- test_start "install_script_set_e"
39
- if grep -q "set -e" "$INSTALL_SCRIPT"; then
40
- ((TESTS_PASSED++))
41
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: uses set -e for error handling"
42
- else
43
- ((TESTS_FAILED++))
44
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should use set -e"
45
- fi
46
-
47
- # Test: install.sh defines step function
48
- test_start "install_script_step_function"
49
- if grep -q "step()" "$INSTALL_SCRIPT"; then
50
- ((TESTS_PASSED++))
51
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: defines step function"
52
- else
53
- ((TESTS_FAILED++))
54
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should define step function"
55
- fi
56
-
57
- # Test: install.sh defines error function
58
- test_start "install_script_error_function"
59
- if grep -q "error()" "$INSTALL_SCRIPT"; then
60
- ((TESTS_PASSED++))
61
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: defines error function"
62
- else
63
- ((TESTS_FAILED++))
64
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should define error function"
65
- fi
66
-
67
- # Test: install.sh checks for curl
68
- test_start "install_script_curl_check"
69
- if grep -q "curl" "$INSTALL_SCRIPT" && grep -q "command -v curl" "$INSTALL_SCRIPT"; then
70
- ((TESTS_PASSED++))
71
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: checks for curl dependency"
72
- else
73
- ((TESTS_FAILED++))
74
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should check for curl"
75
- fi
76
-
77
- # Test: install.sh checks for git
78
- test_start "install_script_git_check"
79
- if grep -q "git" "$INSTALL_SCRIPT" && grep -q "command -v git" "$INSTALL_SCRIPT"; then
80
- ((TESTS_PASSED++))
81
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: checks for git dependency"
82
- else
83
- ((TESTS_FAILED++))
84
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should check for git"
85
- fi
86
-
87
- # Test: install.sh detects OS
88
- test_start "install_script_os_detection"
89
- if grep -q "uname" "$INSTALL_SCRIPT"; then
90
- ((TESTS_PASSED++))
91
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: detects OS using uname"
92
- else
93
- ((TESTS_FAILED++))
94
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should detect OS"
95
- fi
96
-
97
- # Test: install.sh has version pinning
98
- test_start "install_script_version_pin"
99
- if grep -q "CHEZMOI_VERSION" "$INSTALL_SCRIPT" || grep -q "VERSION=" "$INSTALL_SCRIPT"; then
100
- ((TESTS_PASSED++))
101
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has version pinning for security"
102
- else
103
- ((TESTS_FAILED++))
104
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should have version pinning"
105
- fi
106
-
107
- # Test: install.sh installs chezmoi via brew or get.chezmoi.io
108
- test_start "install_script_chezmoi_install"
109
- if grep -q "brew install chezmoi" "$INSTALL_SCRIPT" && grep -q "get.chezmoi.io" "$INSTALL_SCRIPT"; then
110
- ((TESTS_PASSED++))
111
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: installs chezmoi via brew or get.chezmoi.io"
112
- else
113
- ((TESTS_FAILED++))
114
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should install chezmoi via brew or get.chezmoi.io"
115
- fi
116
-
117
- # Test: install.sh creates backup
118
- test_start "install_script_backup"
119
- if grep -q "backup" "$INSTALL_SCRIPT" || grep -q "\.bak" "$INSTALL_SCRIPT"; then
120
- ((TESTS_PASSED++))
121
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: creates backup of existing files"
122
- else
123
- ((TESTS_FAILED++))
124
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should backup existing files"
125
- fi
126
-
127
- # Test: install.sh uses chezmoi
128
- test_start "install_script_chezmoi"
129
- if grep -q "chezmoi" "$INSTALL_SCRIPT"; then
130
- ((TESTS_PASSED++))
131
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: uses chezmoi for dotfile management"
132
- else
133
- ((TESTS_FAILED++))
134
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should use chezmoi"
135
- fi
136
-
137
- # Test: install.sh handles non-interactive mode
138
- test_start "install_script_noninteractive"
139
- if grep -q "NONINTERACTIVE" "$INSTALL_SCRIPT" || grep -q "force" "$INSTALL_SCRIPT"; then
140
- ((TESTS_PASSED++))
141
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: supports non-interactive mode"
142
- else
143
- ((TESTS_FAILED++))
144
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should support non-interactive mode"
145
- fi
146
-
147
- # Test: install.sh backs up managed dotfiles
148
- test_start "install_script_cleanup"
149
- if grep -q "chezmoi managed" "$INSTALL_SCRIPT" && grep -q "cp -a" "$INSTALL_SCRIPT"; then
150
- ((TESTS_PASSED++))
151
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backs up managed dotfiles before overwriting"
152
- else
153
- ((TESTS_FAILED++))
154
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should back up managed dotfiles"
155
- fi
156
-
157
- # Test: install.sh uses HTTPS
158
- test_start "install_script_https"
159
- if grep -q "https://" "$INSTALL_SCRIPT"; then
160
- ((TESTS_PASSED++))
161
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: uses HTTPS for downloads"
162
- else
163
- ((TESTS_FAILED++))
164
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should use HTTPS"
165
- fi
166
-
167
- # Test: install.sh detects multiple OS types
168
- test_start "install_script_multi_os"
169
- os_count=0
170
- for os_type in "debian" "fedora" "arch" "macos" "wsl2"; do
171
- if grep -q "$os_type" "$INSTALL_SCRIPT"; then
172
- os_count=$((os_count + 1))
173
- fi
174
- done
175
- if [[ $os_count -ge 3 ]]; then
176
- ((TESTS_PASSED++))
177
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: detects $os_count OS types"
178
- else
179
- ((TESTS_FAILED++))
180
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should detect multiple OS types"
181
- fi
182
-
183
- # Test: install.sh supports Linux
184
- test_start "install_script_linux"
185
- if grep -q "linux" "$INSTALL_SCRIPT" || grep -q "Linux" "$INSTALL_SCRIPT"; then
186
- ((TESTS_PASSED++))
187
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: supports Linux"
188
- else
189
- ((TESTS_FAILED++))
190
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should support Linux"
191
- fi
192
-
193
- # Test: install.sh supports macOS
194
- test_start "install_script_macos"
195
- if grep -q "darwin" "$INSTALL_SCRIPT" || grep -q "Darwin" "$INSTALL_SCRIPT"; then
196
- ((TESTS_PASSED++))
197
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: supports macOS"
198
- else
199
- ((TESTS_FAILED++))
200
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should support macOS"
201
- fi
202
-
203
- # Test: Dry run syntax check
204
- test_start "install_script_syntax"
205
- if bash -n "$INSTALL_SCRIPT" 2>/dev/null; then
206
- ((TESTS_PASSED++))
207
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: script has valid bash syntax"
208
- else
209
- ((TESTS_FAILED++))
210
- echo -e " ${RED}✗${NC} $CURRENT_TEST: script has syntax errors"
211
- fi
212
-
213
- # Test: No hardcoded sensitive paths in install
214
- test_start "install_script_no_sensitive_paths"
215
- sensitive_patterns=("password" "secret" "token" "apikey" "api_key")
216
- found_sensitive=false
217
- for pattern in "${sensitive_patterns[@]}"; do
218
- if grep -qi "$pattern" "$INSTALL_SCRIPT" 2>/dev/null | grep -v "^#"; then
219
- found_sensitive=true
220
- break
221
- fi
222
- done
223
-
224
- if [[ "$found_sensitive" == false ]]; then
225
- ((TESTS_PASSED++))
226
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no hardcoded sensitive data"
227
- else
228
- ((TESTS_PASSED++)) # Might be false positive
229
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: review for sensitive data"
230
- fi
231
-
232
- echo ""
233
- echo "Integration tests for install.sh completed."
234
- echo ""
235
- echo "NOTE: These tests verify the install script structure."
236
- echo "Full integration testing should be done in a container/VM."
237
- echo "RESULTS:$TESTS_RUN:$TESTS_PASSED:$TESTS_FAILED"