@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,156 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC2015,SC2034,SC2155
3
- set -euo pipefail
4
-
5
- # Performance benchmark runner for shell functions
6
- # Measures execution time and memory usage
7
-
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- REPO_ROOT="$(dirname "$(dirname "$(dirname "$SCRIPT_DIR")")")"
10
-
11
- # Results storage for regression tracking
12
- RESULTS_DIR="${RESULTS_DIR:-$HOME/.local/share/dotfiles/benchmarks}"
13
- RESULTS_FILE="$RESULTS_DIR/benchmark_$(date +%Y%m%d_%H%M%S).json"
14
-
15
- # Thresholds (in milliseconds)
16
- # Note: CI environments may be slower, so thresholds are set conservatively
17
- SHELL_STARTUP_THRESHOLD_MS=500
18
- FUNCTION_LOAD_THRESHOLD_MS=200 # Increased for CI compatibility
19
- CD_OPERATION_THRESHOLD_MS=50
20
-
21
- RED='\033[0;31m'
22
- GREEN='\033[0;32m'
23
- YELLOW='\033[0;33m'
24
- NC='\033[0m'
25
-
26
- # Store benchmark result in JSON format for regression tracking
27
- store_result() {
28
- local metric="$1" value="$2" threshold="$3" status="$4"
29
- mkdir -p "$RESULTS_DIR"
30
-
31
- # Append to JSON results
32
- cat >>"$RESULTS_FILE" <<EOF
33
- {"timestamp": "$(date -Iseconds)", "metric": "$metric", "value": $value, "threshold": $threshold, "status": "$status"}
34
- EOF
35
- }
36
-
37
- measure_time_ms() {
38
- local start end
39
- # Use perl for portable millisecond timing (works on macOS and Linux)
40
- if command -v perl >/dev/null 2>&1; then
41
- start=$(perl -MTime::HiRes=time -e 'printf "%.0f\n", time * 1000')
42
- "$@" >/dev/null 2>&1 || true
43
- end=$(perl -MTime::HiRes=time -e 'printf "%.0f\n", time * 1000')
44
- echo $((end - start))
45
- else
46
- # Fallback: use seconds only (less precise but portable)
47
- start=$(date +%s)
48
- "$@" >/dev/null 2>&1 || true
49
- end=$(date +%s)
50
- echo $(((end - start) * 1000))
51
- fi
52
- }
53
-
54
- benchmark_shell_startup() {
55
- echo "Benchmarking shell startup time..."
56
- local total=0
57
- local iterations=5
58
-
59
- for ((i = 1; i <= iterations; i++)); do
60
- local time_ms
61
- time_ms=$(measure_time_ms "zsh -i -c 'exit' 2>/dev/null || bash -i -c 'exit'")
62
- total=$((total + time_ms))
63
- done
64
-
65
- local avg=$((total / iterations))
66
- local status
67
-
68
- if [[ $avg -gt $SHELL_STARTUP_THRESHOLD_MS ]]; then
69
- status="FAIL"
70
- echo -e "${RED}✗ FAIL${NC}: Shell startup ${avg}ms exceeds threshold ${SHELL_STARTUP_THRESHOLD_MS}ms"
71
- store_result "shell_startup" "$avg" "$SHELL_STARTUP_THRESHOLD_MS" "$status"
72
- return 1
73
- else
74
- status="PASS"
75
- echo -e "${GREEN}✓ PASS${NC}: Shell startup ${avg}ms (threshold: ${SHELL_STARTUP_THRESHOLD_MS}ms)"
76
- store_result "shell_startup" "$avg" "$SHELL_STARTUP_THRESHOLD_MS" "$status"
77
- return 0
78
- fi
79
- }
80
-
81
- benchmark_function_sourcing() {
82
- echo "Benchmarking function file sourcing..."
83
- local failures=0
84
-
85
- for func_file in "$REPO_ROOT"/.chezmoitemplates/functions/*.sh; do
86
- [[ -f "$func_file" ]] || continue
87
- local name=$(basename "$func_file")
88
- local time_ms
89
- time_ms=$(measure_time_ms "source '$func_file'")
90
-
91
- if [[ $time_ms -gt $FUNCTION_LOAD_THRESHOLD_MS ]]; then
92
- echo -e "${YELLOW}⚠ WARN${NC}: $name took ${time_ms}ms to source"
93
- ((failures++))
94
- fi
95
- done
96
-
97
- if [[ $failures -eq 0 ]]; then
98
- echo -e "${GREEN}✓ PASS${NC}: All functions load within threshold"
99
- fi
100
- }
101
-
102
- benchmark_memory_usage() {
103
- echo "Benchmarking memory usage..."
104
-
105
- # Get baseline memory
106
- local baseline
107
- baseline=$(ps -o rss= -p $$ | tr -d ' ')
108
-
109
- # Source all functions
110
- for func_file in "$REPO_ROOT"/.chezmoitemplates/functions/*.sh; do
111
- [[ -f "$func_file" ]] && source "$func_file" 2>/dev/null || true
112
- done
113
-
114
- # Get memory after loading
115
- local after
116
- after=$(ps -o rss= -p $$ | tr -d ' ')
117
-
118
- local diff_kb=$((after - baseline))
119
- local diff_mb=$((diff_kb / 1024))
120
- local status
121
-
122
- echo "Memory increase after loading functions: ${diff_mb}MB (${diff_kb}KB)"
123
-
124
- # Fail if memory usage exceeds 50MB
125
- if [[ $diff_mb -gt 50 ]]; then
126
- status="FAIL"
127
- echo -e "${RED}✗ FAIL${NC}: Memory usage ${diff_mb}MB exceeds 50MB threshold"
128
- store_result "memory_usage_kb" "$diff_kb" "51200" "$status"
129
- return 1
130
- else
131
- status="PASS"
132
- echo -e "${GREEN}✓ PASS${NC}: Memory usage within acceptable limits"
133
- store_result "memory_usage_kb" "$diff_kb" "51200" "$status"
134
- return 0
135
- fi
136
- }
137
-
138
- generate_report() {
139
- echo ""
140
- echo "╔═══════════════════════════════════════╗"
141
- echo "║ Performance Benchmark Report ║"
142
- echo "╚═══════════════════════════════════════╝"
143
- echo ""
144
-
145
- benchmark_shell_startup
146
- echo ""
147
- benchmark_function_sourcing
148
- echo ""
149
- benchmark_memory_usage
150
- }
151
-
152
- main() {
153
- generate_report
154
- }
155
-
156
- main "$@"
@@ -1,73 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2012
3
- set -euo pipefail
4
-
5
- # Compare current benchmark with historical baseline
6
- RESULTS_DIR="${RESULTS_DIR:-$HOME/.local/share/dotfiles/benchmarks}"
7
- BASELINE_FILE="$RESULTS_DIR/baseline.json"
8
- REGRESSION_THRESHOLD=20 # Percentage increase to flag as regression
9
-
10
- check_regression() {
11
- local metric="$1" current="$2"
12
-
13
- if [[ ! -f "$BASELINE_FILE" ]]; then
14
- echo "No baseline found. Creating baseline..."
15
- return 0
16
- fi
17
-
18
- local baseline
19
- baseline=$(jq -r "select(.metric == \"$metric\") | .value" "$BASELINE_FILE" | tail -1)
20
-
21
- if [[ -n "$baseline" && "$baseline" != "null" ]]; then
22
- local pct_change=$(((current - baseline) * 100 / baseline))
23
- if [[ $pct_change -gt $REGRESSION_THRESHOLD ]]; then
24
- echo "REGRESSION: $metric increased by ${pct_change}% (baseline: ${baseline}ms, current: ${current}ms)"
25
- return 1
26
- fi
27
- echo "OK: $metric within threshold (baseline: ${baseline}, current: ${current}, change: ${pct_change}%)"
28
- fi
29
- return 0
30
- }
31
-
32
- main() {
33
- echo "Checking for performance regressions..."
34
- echo ""
35
-
36
- # Find latest results file
37
- local latest
38
- latest=$(ls -t "$RESULTS_DIR"/benchmark_*.json 2>/dev/null | head -1 || true)
39
-
40
- if [[ -z "$latest" ]]; then
41
- echo "No benchmark results found. Run benchmark_runner.sh first."
42
- exit 0
43
- fi
44
-
45
- echo "Comparing against baseline: $BASELINE_FILE"
46
- echo "Latest results: $latest"
47
- echo ""
48
-
49
- local regressions=0
50
-
51
- # Check each metric in the latest results
52
- while IFS= read -r line; do
53
- [[ -z "$line" ]] && continue
54
- local metric value
55
- metric=$(echo "$line" | jq -r '.metric')
56
- value=$(echo "$line" | jq -r '.value')
57
-
58
- if ! check_regression "$metric" "$value"; then
59
- ((regressions++))
60
- fi
61
- done <"$latest"
62
-
63
- echo ""
64
- if [[ $regressions -gt 0 ]]; then
65
- echo "Found $regressions regression(s)!"
66
- exit 1
67
- else
68
- echo "No regressions detected."
69
- exit 0
70
- fi
71
- }
72
-
73
- main "$@"
@@ -1,65 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1091
3
- set -euo pipefail
4
-
5
- # Stress test for shell functions
6
- # Tests behavior under repeated rapid invocation
7
-
8
- ITERATIONS="${1:-100}"
9
-
10
- # Portable millisecond timing function
11
- get_time_ms() {
12
- if command -v perl >/dev/null 2>&1; then
13
- perl -MTime::HiRes=time -e 'printf "%.0f\n", time * 1000'
14
- else
15
- # Fallback: seconds * 1000 (less precise)
16
- echo $(($(date +%s) * 1000))
17
- fi
18
- }
19
-
20
- # Note: This is test-only code. The eval below is necessary to execute
21
- # dynamically constructed test commands. Do not use with untrusted input.
22
- stress_test_function() {
23
- local func_name="$1"
24
- local test_cmd="$2"
25
- local start end elapsed
26
-
27
- # Validate test_cmd is not empty
28
- if [[ -z "$test_cmd" ]]; then
29
- echo " ERROR: empty test command for $func_name"
30
- return 1
31
- fi
32
-
33
- echo "Stress testing $func_name ($ITERATIONS iterations)..."
34
-
35
- start=$(get_time_ms)
36
- for ((i = 1; i <= ITERATIONS; i++)); do
37
- # shellcheck disable=SC2086
38
- eval "$test_cmd" >/dev/null 2>&1 || true
39
- done
40
- end=$(get_time_ms)
41
-
42
- elapsed=$((end - start))
43
- local per_call=$((elapsed / ITERATIONS))
44
-
45
- echo " Total: ${elapsed}ms, Per call: ${per_call}ms"
46
- }
47
-
48
- main() {
49
- echo "Starting stress tests..."
50
- echo ""
51
-
52
- # Test genpass under load
53
- source "$HOME/.dotfiles/.chezmoitemplates/functions/genpass.sh" 2>/dev/null || true
54
- if type genpass &>/dev/null; then
55
- stress_test_function "genpass" "genpass 16"
56
- fi
57
-
58
- # Test extract help (no actual extraction)
59
- source "$HOME/.dotfiles/.chezmoitemplates/functions/extract.sh" 2>/dev/null || true
60
- if type extract &>/dev/null; then
61
- stress_test_function "extract --help" "extract --help"
62
- fi
63
- }
64
-
65
- main "$@"
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env bash
2
- # MIT License
3
- # Copyright (c) 2026 Sebastien Rousseau
4
- # See LICENSE file for details.
5
-
6
- # Script: test-aliases.sh
7
- # Description: Verifies disjoint alias files for syntax errors.
8
-
9
- set -e
10
-
11
- echo "Testing alias syntax..."
12
-
13
- ALIAS_DIR="$HOME/.dotfiles/.chezmoitemplates/aliases"
14
-
15
- find "$ALIAS_DIR" -name "*.aliases.sh" | while read -r file; do
16
- # Check for syntax errors using bash -n
17
- if bash -n "$file"; then
18
- echo " Checked: $(basename "$file")"
19
- else
20
- echo " Syntax Error: $(basename "$file")"
21
- exit 1
22
- fi
23
- done
24
-
25
- echo "All alias files passed syntax check."
@@ -1,48 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Test dotfiles README instructions across all environments using Docker
3
- # Usage: ./scripts/tests/test-docker.sh [target...]
4
- # Examples:
5
- # ./scripts/tests/test-docker.sh # Run all tests
6
- # ./scripts/tests/test-docker.sh ubuntu-test # Run only Ubuntu test
7
- # ./scripts/tests/test-docker.sh arch-test # Run only Arch test
8
-
9
- set -euo pipefail
10
-
11
- RED='\033[0;31m'
12
- GREEN='\033[0;32m'
13
- BLUE='\033[0;34m'
14
- BOLD='\033[1m'
15
- NC='\033[0m'
16
-
17
- TARGETS=(ubuntu-test debian-test arch-test ubuntu-eza-test)
18
- PASSED=0
19
- FAILED=0
20
- FAILURES=()
21
-
22
- # Use specified targets or all
23
- if [ $# -gt 0 ]; then
24
- TARGETS=("$@")
25
- fi
26
-
27
- echo -e "${BLUE}${BOLD}Testing dotfiles across ${#TARGETS[@]} environment(s)${NC}"
28
- echo ""
29
-
30
- for target in "${TARGETS[@]}"; do
31
- echo -e "${BLUE}==> Building: ${BOLD}${target}${NC}"
32
- if docker build --target "$target" -f Dockerfile.test -t "dotfiles-test:${target}" . 2>&1; then
33
- echo -e "${GREEN}==> PASSED: ${target}${NC}"
34
- PASSED=$((PASSED + 1))
35
- else
36
- echo -e "${RED}==> FAILED: ${target}${NC}"
37
- FAILED=$((FAILED + 1))
38
- FAILURES+=("$target")
39
- fi
40
- echo ""
41
- done
42
-
43
- echo -e "${BOLD}Results: ${GREEN}${PASSED} passed${NC}, ${RED}${FAILED} failed${NC} (${#TARGETS[@]} total)"
44
-
45
- if [ ${FAILED} -gt 0 ]; then
46
- echo -e "${RED}Failed targets: ${FAILURES[*]}${NC}"
47
- exit 1
48
- fi
@@ -1,158 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034,SC2030,SC2031
3
- # Test AI aliases functionality
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- source "$SCRIPT_DIR/../framework/assertions.sh"
7
- source "$SCRIPT_DIR/../framework/mocks.sh"
8
-
9
- # Test setup
10
- ALIASES_FILE="$REPO_ROOT/.chezmoitemplates/aliases/ai/ai.aliases.sh"
11
-
12
- test_start "ai_aliases_file_exists"
13
- assert_file_exists "$ALIASES_FILE" "AI aliases file should exist"
14
-
15
- test_start "github_copilot_aliases_when_gh_available"
16
- mock_init
17
- # Mock gh command as available
18
- mock_command "gh" "gh 2.42.0" 0
19
-
20
- # Source aliases in a subshell with expand_aliases enabled
21
- (
22
- shopt -s expand_aliases
23
- export PATH="$MOCK_BIN_DIR:$PATH"
24
- source "$ALIASES_FILE"
25
-
26
- # Check aliases are defined using alias command
27
- alias ghcp >/dev/null 2>&1 && echo "ghcp_defined"
28
- alias ghs >/dev/null 2>&1 && echo "ghs_defined"
29
- alias ghe >/dev/null 2>&1 && echo "ghe_defined"
30
- ) >/tmp/test_output
31
-
32
- assert_file_contains "/tmp/test_output" "ghcp_defined" "ghcp alias should be defined when gh available"
33
- assert_file_contains "/tmp/test_output" "ghs_defined" "ghs alias should be defined when gh available"
34
- assert_file_contains "/tmp/test_output" "ghe_defined" "ghe alias should be defined when gh available"
35
-
36
- rm -f /tmp/test_output
37
- mock_cleanup
38
-
39
- test_start "github_copilot_aliases_when_gh_unavailable"
40
- mock_init
41
- # Use empty mock dir as PATH to ensure real gh isn't found
42
- # (command -v, source, alias are builtins - don't need PATH)
43
-
44
- (
45
- shopt -s expand_aliases
46
- export PATH="$MOCK_BIN_DIR"
47
- source "$ALIASES_FILE"
48
-
49
- # Check aliases are NOT defined
50
- alias ghcp >/dev/null 2>&1 || echo "ghcp_not_defined"
51
- alias ghs >/dev/null 2>&1 || echo "ghs_not_defined"
52
- alias ghe >/dev/null 2>&1 || echo "ghe_not_defined"
53
- ) >/tmp/test_output
54
-
55
- assert_file_contains "/tmp/test_output" "ghcp_not_defined" "ghcp alias should not be defined when gh unavailable"
56
- assert_file_contains "/tmp/test_output" "ghs_not_defined" "ghs alias should not be defined when gh unavailable"
57
- assert_file_contains "/tmp/test_output" "ghe_not_defined" "ghe alias should not be defined when gh unavailable"
58
-
59
- rm -f /tmp/test_output
60
- mock_cleanup
61
-
62
- test_start "fabric_alias_when_fabric_available"
63
- mock_init
64
- mock_command "fabric" "fabric v1.0.0" 0
65
-
66
- (
67
- shopt -s expand_aliases
68
- export PATH="$MOCK_BIN_DIR:$PATH"
69
- source "$ALIASES_FILE"
70
-
71
- alias fab >/dev/null 2>&1 && echo "fab_defined"
72
- ) >/tmp/test_output
73
-
74
- assert_file_contains "/tmp/test_output" "fab_defined" "fab alias should be defined when fabric available"
75
-
76
- rm -f /tmp/test_output
77
- mock_cleanup
78
-
79
- test_start "fabric_alias_when_fabric_unavailable"
80
- mock_init
81
- # Use empty mock dir as PATH to ensure real fabric isn't found
82
-
83
- (
84
- shopt -s expand_aliases
85
- export PATH="$MOCK_BIN_DIR"
86
- source "$ALIASES_FILE"
87
-
88
- alias fab >/dev/null 2>&1 || echo "fab_not_defined"
89
- ) >/tmp/test_output
90
-
91
- assert_file_contains "/tmp/test_output" "fab_not_defined" "fab alias should not be defined when fabric unavailable"
92
-
93
- rm -f /tmp/test_output
94
- mock_cleanup
95
-
96
- test_start "ollama_aliases_when_ollama_available"
97
- mock_init
98
- mock_command "ollama" "ollama version 1.0.0" 0
99
-
100
- (
101
- shopt -s expand_aliases
102
- export PATH="$MOCK_BIN_DIR:$PATH"
103
- source "$ALIASES_FILE"
104
-
105
- alias ol >/dev/null 2>&1 && echo "ol_defined"
106
- alias olr >/dev/null 2>&1 && echo "olr_defined"
107
- alias oll >/dev/null 2>&1 && echo "oll_defined"
108
- alias olp >/dev/null 2>&1 && echo "olp_defined"
109
- alias ollama-status >/dev/null 2>&1 && echo "ollama_status_defined"
110
- alias ollama-show >/dev/null 2>&1 && echo "ollama_show_defined"
111
- ) >/tmp/test_output
112
-
113
- assert_file_contains "/tmp/test_output" "ol_defined" "ol alias should be defined when ollama available"
114
- assert_file_contains "/tmp/test_output" "olr_defined" "olr alias should be defined when ollama available"
115
- assert_file_contains "/tmp/test_output" "oll_defined" "oll alias should be defined when ollama available"
116
- assert_file_contains "/tmp/test_output" "olp_defined" "olp alias should be defined when ollama available"
117
- assert_file_contains "/tmp/test_output" "ollama_status_defined" "ollama-status alias should be defined when ollama available"
118
- assert_file_contains "/tmp/test_output" "ollama_show_defined" "ollama-show alias should be defined when ollama available"
119
-
120
- rm -f /tmp/test_output
121
- mock_cleanup
122
-
123
- test_start "ollama_aliases_when_ollama_unavailable"
124
- mock_init
125
- # Use empty mock dir as PATH to ensure real ollama isn't found
126
-
127
- (
128
- shopt -s expand_aliases
129
- export PATH="$MOCK_BIN_DIR"
130
- source "$ALIASES_FILE"
131
-
132
- alias ol >/dev/null 2>&1 || echo "ol_not_defined"
133
- alias olr >/dev/null 2>&1 || echo "olr_not_defined"
134
- alias oll >/dev/null 2>&1 || echo "oll_not_defined"
135
- alias olp >/dev/null 2>&1 || echo "olp_not_defined"
136
- alias ollama-status >/dev/null 2>&1 || echo "ollama_status_not_defined"
137
- alias ollama-show >/dev/null 2>&1 || echo "ollama_show_not_defined"
138
- ) >/tmp/test_output
139
-
140
- assert_file_contains "/tmp/test_output" "ol_not_defined" "ol alias should not be defined when ollama unavailable"
141
- assert_file_contains "/tmp/test_output" "olr_not_defined" "olr alias should not be defined when ollama unavailable"
142
- assert_file_contains "/tmp/test_output" "oll_not_defined" "oll alias should not be defined when ollama unavailable"
143
- assert_file_contains "/tmp/test_output" "olp_not_defined" "olp alias should not be defined when ollama unavailable"
144
- assert_file_contains "/tmp/test_output" "ollama_status_not_defined" "ollama-status alias should not be defined when ollama unavailable"
145
- assert_file_contains "/tmp/test_output" "ollama_show_not_defined" "ollama-show alias should not be defined when ollama unavailable"
146
-
147
- rm -f /tmp/test_output
148
- mock_cleanup
149
-
150
- test_start "aliases_syntax_check"
151
- assert_exit_code 0 "bash -n '$ALIASES_FILE'"
152
-
153
- test_start "aliases_shellcheck"
154
- if command -v shellcheck >/dev/null 2>&1; then
155
- assert_exit_code 0 "shellcheck '$ALIASES_FILE'"
156
- else
157
- echo "SKIP: shellcheck not available"
158
- fi
@@ -1,47 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
5
-
6
- fail() {
7
- echo "FAIL: $1" >&2
8
- exit 1
9
- }
10
-
11
- pass() {
12
- echo "PASS: $1"
13
- }
14
-
15
- check_contains() {
16
- local file="$1"
17
- local pattern="$2"
18
- if command -v rg >/dev/null 2>&1; then
19
- rg -n --fixed-strings "$pattern" "$file" >/dev/null || fail "Missing pattern in $file: $pattern"
20
- else
21
- grep -nF "$pattern" "$file" >/dev/null || fail "Missing pattern in $file: $pattern"
22
- fi
23
- }
24
-
25
- HC_FILE="$REPO_ROOT/scripts/ops/health-check.sh"
26
- APPLY_FILE="$REPO_ROOT/scripts/ops/chezmoi-apply.sh"
27
- DOC_FILE="$REPO_ROOT/docs/TOOLS.md"
28
- PYTOOLS_FILE="$REPO_ROOT/install/provision/run_onchange_25-python-tools.sh.tmpl"
29
-
30
- # Health check should include AI CLIs in optional deps
31
- check_contains "$HC_FILE" "optional_deps=(ripgrep fd bat fzf eza jq claude gemini sgpt ollama opencode aider)"
32
-
33
- # Chezmoi apply should emit AI CLI checks
34
- check_contains "$APPLY_FILE" "AI provider CLI checks (optional):"
35
- check_contains "$APPLY_FILE" "check_ai_cli \"sgpt\""
36
- check_contains "$APPLY_FILE" "check_ai_cli \"ollama\""
37
-
38
- # Tools catalog should list sgpt and ollama
39
- check_contains "$DOC_FILE" "| sgpt | shell-gpt |"
40
- check_contains "$DOC_FILE" "| ollama | ollama |"
41
-
42
- # Python tools should include key dev tools
43
- check_contains "$PYTOOLS_FILE" "install_python_tool \"pytest\""
44
- check_contains "$PYTOOLS_FILE" "install_python_tool \"bandit\""
45
- check_contains "$PYTOOLS_FILE" "install_python_tool \"mypy\""
46
-
47
- pass "AI CLI dependency checks and docs are wired"