@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,367 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Unit tests for cd aliases and navigation functions
4
- # Tests directory navigation, bookmarks, and helper functions
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
- source "$SCRIPT_DIR/../framework/mocks.sh"
10
-
11
- # Source the aliases file being tested
12
- ALIAS_FILE="$REPO_ROOT/.chezmoitemplates/aliases/cd/cd.aliases.sh"
13
- if [[ -f "$ALIAS_FILE" ]]; then
14
- # Reset some variables to avoid side effects
15
- RESTORE_LAST_DIR=false
16
- AUTO_LIST_AFTER_CD=false
17
- source "$ALIAS_FILE"
18
- else
19
- echo "Warning: cd.aliases.sh not found at $ALIAS_FILE"
20
- fi
21
-
22
- # Test: safe_write_file function exists
23
- test_start "safe_write_file_exists"
24
- if declare -f safe_write_file >/dev/null 2>&1; then
25
- ((TESTS_PASSED++))
26
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: safe_write_file function exists"
27
- else
28
- ((TESTS_FAILED++))
29
- echo -e " ${RED}✗${NC} $CURRENT_TEST: safe_write_file function should exist"
30
- fi
31
-
32
- # Test: safe_write_file creates file
33
- test_start "safe_write_file_creates"
34
- if declare -f safe_write_file >/dev/null 2>&1; then
35
- test_dir=$(mock_dir "cd_test")
36
- test_file="$test_dir/test_file.txt"
37
- safe_write_file "$test_file" "test content"
38
-
39
- if [[ -f "$test_file" ]]; then
40
- ((TESTS_PASSED++))
41
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: safe_write_file creates file"
42
- else
43
- ((TESTS_FAILED++))
44
- echo -e " ${RED}✗${NC} $CURRENT_TEST: file should be created"
45
- fi
46
- rm -rf "$test_dir"
47
- else
48
- ((TESTS_PASSED++))
49
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
50
- fi
51
-
52
- # Test: safe_write_file writes content
53
- test_start "safe_write_file_content"
54
- if declare -f safe_write_file >/dev/null 2>&1; then
55
- test_dir=$(mock_dir "cd_test")
56
- test_file="$test_dir/test_file.txt"
57
- safe_write_file "$test_file" "expected content"
58
-
59
- content=$(cat "$test_file" 2>/dev/null)
60
- if [[ "$content" == "expected content" ]]; then
61
- ((TESTS_PASSED++))
62
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: correct content written"
63
- else
64
- ((TESTS_FAILED++))
65
- echo -e " ${RED}✗${NC} $CURRENT_TEST: content should match"
66
- fi
67
- rm -rf "$test_dir"
68
- else
69
- ((TESTS_PASSED++))
70
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
71
- fi
72
-
73
- # Test: safe_write_file append mode
74
- test_start "safe_write_file_append"
75
- if declare -f safe_write_file >/dev/null 2>&1; then
76
- test_dir=$(mock_dir "cd_test")
77
- test_file="$test_dir/test_file.txt"
78
- safe_write_file "$test_file" "line1"
79
- safe_write_file "$test_file" "line2" "a"
80
-
81
- line_count=$(wc -l <"$test_file" | tr -d ' ')
82
- if [[ "$line_count" -eq 2 ]]; then
83
- ((TESTS_PASSED++))
84
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: append mode works"
85
- else
86
- ((TESTS_FAILED++))
87
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should have 2 lines"
88
- fi
89
- rm -rf "$test_dir"
90
- else
91
- ((TESTS_PASSED++))
92
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
93
- fi
94
-
95
- # Test: count_dir_items function exists
96
- test_start "count_dir_items_exists"
97
- if declare -f count_dir_items >/dev/null 2>&1; then
98
- ((TESTS_PASSED++))
99
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: count_dir_items function exists"
100
- else
101
- ((TESTS_FAILED++))
102
- echo -e " ${RED}✗${NC} $CURRENT_TEST: count_dir_items function should exist"
103
- fi
104
-
105
- # Test: count_dir_items counts correctly
106
- test_start "count_dir_items_count"
107
- if declare -f count_dir_items >/dev/null 2>&1; then
108
- test_dir=$(mock_dir "cd_test")
109
- touch "$test_dir/file1.txt"
110
- touch "$test_dir/file2.txt"
111
- touch "$test_dir/file3.txt"
112
-
113
- count=$(count_dir_items "$test_dir")
114
- if [[ "$count" -eq 3 ]]; then
115
- ((TESTS_PASSED++))
116
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: counts 3 items correctly"
117
- else
118
- ((TESTS_FAILED++))
119
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should count 3, got $count"
120
- fi
121
- rm -rf "$test_dir"
122
- else
123
- ((TESTS_PASSED++))
124
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
125
- fi
126
-
127
- # Test: mkcd function exists
128
- test_start "mkcd_exists"
129
- if declare -f mkcd >/dev/null 2>&1; then
130
- ((TESTS_PASSED++))
131
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: mkcd function exists"
132
- else
133
- ((TESTS_FAILED++))
134
- echo -e " ${RED}✗${NC} $CURRENT_TEST: mkcd function should exist"
135
- fi
136
-
137
- # Test: mkcd with no arguments shows error
138
- test_start "mkcd_no_args"
139
- if declare -f mkcd >/dev/null 2>&1; then
140
- output=$(mkcd 2>&1)
141
- exit_code=$?
142
- if [[ "$exit_code" -eq 1 ]] || [[ "$output" == *"Usage"* ]]; then
143
- ((TESTS_PASSED++))
144
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: mkcd shows usage with no args"
145
- else
146
- ((TESTS_FAILED++))
147
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should show usage"
148
- fi
149
- else
150
- ((TESTS_PASSED++))
151
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
152
- fi
153
-
154
- # Test: mkcd creates directory
155
- test_start "mkcd_creates_dir"
156
- if declare -f mkcd >/dev/null 2>&1; then
157
- test_dir=$(mock_dir "cd_test")
158
- new_dir="$test_dir/new_directory"
159
-
160
- (mkcd "$new_dir" >/dev/null 2>&1)
161
-
162
- if [[ -d "$new_dir" ]]; then
163
- ((TESTS_PASSED++))
164
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: mkcd creates directory"
165
- else
166
- ((TESTS_FAILED++))
167
- echo -e " ${RED}✗${NC} $CURRENT_TEST: directory should be created"
168
- fi
169
- rm -rf "$test_dir"
170
- else
171
- ((TESTS_PASSED++))
172
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
173
- fi
174
-
175
- # Test: bookmark function exists
176
- test_start "bookmark_exists"
177
- if declare -f bookmark >/dev/null 2>&1; then
178
- ((TESTS_PASSED++))
179
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: bookmark function exists"
180
- else
181
- ((TESTS_FAILED++))
182
- echo -e " ${RED}✗${NC} $CURRENT_TEST: bookmark function should exist"
183
- fi
184
-
185
- # Test: bookmark with no args shows list/usage
186
- test_start "bookmark_no_args"
187
- if declare -f bookmark >/dev/null 2>&1; then
188
- output=$(
189
- set +u
190
- bookmark 2>&1
191
- )
192
- if [[ "$output" == *"Usage"* ]] || [[ "$output" == *"bookmark"* ]] || [[ "$output" == *"No bookmarks"* ]]; then
193
- ((TESTS_PASSED++))
194
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: bookmark shows usage/list"
195
- else
196
- ((TESTS_FAILED++))
197
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should show usage or list"
198
- echo -e " Output: $output"
199
- fi
200
- else
201
- ((TESTS_PASSED++))
202
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
203
- fi
204
-
205
- # Test: bookmark rejects invalid names
206
- test_start "bookmark_invalid_name"
207
- if declare -f bookmark >/dev/null 2>&1; then
208
- output=$(bookmark "invalid name with spaces" 2>&1)
209
- exit_code=$?
210
- if [[ "$exit_code" -ne 0 ]] || [[ "$output" == *"Error"* ]]; then
211
- ((TESTS_PASSED++))
212
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: rejects invalid bookmark names"
213
- else
214
- ((TESTS_FAILED++))
215
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should reject invalid names"
216
- fi
217
- else
218
- ((TESTS_PASSED++))
219
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
220
- fi
221
-
222
- # Test: goto function exists
223
- test_start "goto_exists"
224
- if declare -f goto >/dev/null 2>&1; then
225
- ((TESTS_PASSED++))
226
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: goto function exists"
227
- else
228
- ((TESTS_FAILED++))
229
- echo -e " ${RED}✗${NC} $CURRENT_TEST: goto function should exist"
230
- fi
231
-
232
- # Test: goto with no args shows usage
233
- test_start "goto_no_args"
234
- if declare -f goto >/dev/null 2>&1; then
235
- output=$(goto 2>&1)
236
- exit_code=$?
237
- if [[ "$exit_code" -eq 1 ]] || [[ "$output" == *"Usage"* ]]; then
238
- ((TESTS_PASSED++))
239
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: goto shows usage with no args"
240
- else
241
- ((TESTS_FAILED++))
242
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should show usage"
243
- fi
244
- else
245
- ((TESTS_PASSED++))
246
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
247
- fi
248
-
249
- # Test: goto with nonexistent bookmark shows error
250
- test_start "goto_nonexistent"
251
- if declare -f goto >/dev/null 2>&1; then
252
- output=$(goto "nonexistent_bookmark_12345" 2>&1)
253
- exit_code=$?
254
- if [[ "$exit_code" -ne 0 ]] || [[ "$output" == *"not found"* ]] || [[ "$output" == *"No bookmarks"* ]]; then
255
- ((TESTS_PASSED++))
256
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: goto handles nonexistent bookmark"
257
- else
258
- ((TESTS_FAILED++))
259
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should handle nonexistent bookmark"
260
- fi
261
- else
262
- ((TESTS_PASSED++))
263
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
264
- fi
265
-
266
- # Test: proj function exists
267
- test_start "proj_exists"
268
- if declare -f proj >/dev/null 2>&1; then
269
- ((TESTS_PASSED++))
270
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: proj function exists"
271
- else
272
- ((TESTS_FAILED++))
273
- echo -e " ${RED}✗${NC} $CURRENT_TEST: proj function should exist"
274
- fi
275
-
276
- # Test: cd_with_history validates directory
277
- test_start "cd_with_history_validates"
278
- if declare -f cd_with_history >/dev/null 2>&1; then
279
- output=$(cd_with_history "/nonexistent/directory" 2>&1)
280
- exit_code=$?
281
- if [[ "$exit_code" -ne 0 ]] || [[ "$output" == *"Error"* ]] || [[ "$output" == *"not found"* ]]; then
282
- ((TESTS_PASSED++))
283
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: validates directory exists"
284
- else
285
- ((TESTS_FAILED++))
286
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should validate directory"
287
- fi
288
- else
289
- ((TESTS_PASSED++))
290
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
291
- fi
292
-
293
- # Test: cd_aliases_help function exists
294
- test_start "cd_aliases_help_exists"
295
- if declare -f cd_aliases_help >/dev/null 2>&1; then
296
- ((TESTS_PASSED++))
297
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: cd_aliases_help function exists"
298
- else
299
- ((TESTS_FAILED++))
300
- echo -e " ${RED}✗${NC} $CURRENT_TEST: cd_aliases_help function should exist"
301
- fi
302
-
303
- # Test: cd_aliases_help shows documentation
304
- test_start "cd_aliases_help_output"
305
- if declare -f cd_aliases_help >/dev/null 2>&1; then
306
- output=$(cd_aliases_help 2>&1)
307
- if [[ "$output" == *"NAVIGATION"* ]] || [[ "$output" == *"BOOKMARK"* ]]; then
308
- ((TESTS_PASSED++))
309
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: help shows documentation"
310
- else
311
- ((TESTS_FAILED++))
312
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should show documentation"
313
- fi
314
- else
315
- ((TESTS_PASSED++))
316
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
317
- fi
318
-
319
- # Test: cd_aliases_version function exists
320
- test_start "cd_aliases_version_exists"
321
- if declare -f cd_aliases_version >/dev/null 2>&1; then
322
- ((TESTS_PASSED++))
323
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: cd_aliases_version function exists"
324
- else
325
- ((TESTS_FAILED++))
326
- echo -e " ${RED}✗${NC} $CURRENT_TEST: cd_aliases_version function should exist"
327
- fi
328
-
329
- # Test: cd_aliases_version shows version
330
- test_start "cd_aliases_version_output"
331
- if declare -f cd_aliases_version >/dev/null 2>&1; then
332
- output=$(cd_aliases_version 2>&1)
333
- if [[ "$output" == *"v"* ]] || [[ "$output" =~ [0-9]+\.[0-9]+ ]]; then
334
- ((TESTS_PASSED++))
335
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: version shows version number"
336
- else
337
- ((TESTS_FAILED++))
338
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should show version"
339
- fi
340
- else
341
- ((TESTS_PASSED++))
342
- echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
343
- fi
344
-
345
- # Test: DOTFILES_VERSION is set
346
- test_start "dotfiles_version_set"
347
- if [[ -n "${DOTFILES_VERSION:-}" ]]; then
348
- ((TESTS_PASSED++))
349
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: DOTFILES_VERSION is set ($DOTFILES_VERSION)"
350
- else
351
- ((TESTS_FAILED++))
352
- echo -e " ${RED}✗${NC} $CURRENT_TEST: DOTFILES_VERSION should be set"
353
- fi
354
-
355
- # Test: OS detection works
356
- test_start "os_detection"
357
- if [[ -n "${DOTFILES_OS:-}" ]]; then
358
- ((TESTS_PASSED++))
359
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: OS detected ($DOTFILES_OS)"
360
- else
361
- ((TESTS_FAILED++))
362
- echo -e " ${RED}✗${NC} $CURRENT_TEST: DOTFILES_OS should be set"
363
- fi
364
-
365
- echo ""
366
- echo "CD aliases tests completed."
367
- echo "RESULTS:$TESTS_RUN:$TESTS_PASSED:$TESTS_FAILED"
@@ -1,217 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Unit tests for the dot CLI entry point (executable_dot)
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
- source "$SCRIPT_DIR/../framework/mocks.sh"
10
-
11
- DOT_CLI="$REPO_ROOT/dot_local/bin/executable_dot"
12
-
13
- echo "Testing dot CLI entry point..."
14
-
15
- # Test: dot CLI file exists
16
- test_start "dot_cli_exists"
17
- assert_file_exists "$DOT_CLI" "executable_dot should exist"
18
-
19
- # Test: dot CLI has valid bash syntax
20
- test_start "dot_cli_syntax"
21
- assert_exit_code 0 "bash -n '$DOT_CLI'"
22
-
23
- # Test: dot CLI has shebang
24
- test_start "dot_cli_shebang"
25
- first_line=$(head -n 1 "$DOT_CLI")
26
- if [[ "$first_line" == "#!/usr/bin/env bash" ]]; then
27
- ((TESTS_PASSED++)) || true
28
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: has proper shebang"
29
- else
30
- ((TESTS_FAILED++)) || true
31
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should have #!/usr/bin/env bash shebang"
32
- fi
33
-
34
- # Test: dot CLI uses set -e
35
- test_start "dot_cli_set_e"
36
- assert_file_contains "$DOT_CLI" "set -e" "should use set -e for error handling"
37
-
38
- # Test: dot --help shows usage
39
- test_start "dot_cli_help"
40
- output=$(bash "$DOT_CLI" help 2>&1) || true
41
- if [[ "$output" == *"Usage:"* ]] && [[ "$output" == *"dot"* ]]; then
42
- ((TESTS_PASSED++)) || true
43
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: help shows usage"
44
- else
45
- ((TESTS_FAILED++)) || true
46
- echo -e " ${RED}✗${NC} $CURRENT_TEST: help should show usage"
47
- echo -e " Output: ${output:0:200}"
48
- fi
49
-
50
- # Test: dot --version shows version
51
- test_start "dot_cli_version"
52
- output=$(bash "$DOT_CLI" --version 2>&1) || true
53
- if [[ "$output" == *"dot v"* ]]; then
54
- ((TESTS_PASSED++)) || true
55
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: --version shows version string"
56
- else
57
- ((TESTS_FAILED++)) || true
58
- echo -e " ${RED}✗${NC} $CURRENT_TEST: --version should show version"
59
- echo -e " Output: $output"
60
- fi
61
-
62
- # Test: dot (no args) shows help
63
- test_start "dot_cli_no_args"
64
- output=$(bash "$DOT_CLI" 2>&1) || true
65
- if [[ "$output" == *"Usage:"* ]]; then
66
- ((TESTS_PASSED++)) || true
67
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no args shows help"
68
- else
69
- ((TESTS_FAILED++)) || true
70
- echo -e " ${RED}✗${NC} $CURRENT_TEST: no args should show help"
71
- fi
72
-
73
- # Test: dot unknown-command shows error
74
- test_start "dot_cli_unknown_cmd"
75
- set +e
76
- output=$(bash "$DOT_CLI" totally-invalid-command-12345 2>&1)
77
- ec=$?
78
- set -e
79
- if [[ "$output" == *"Unknown command"* ]] && [[ $ec -ne 0 ]]; then
80
- ((TESTS_PASSED++)) || true
81
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: unknown command shows error and exits non-zero"
82
- else
83
- ((TESTS_FAILED++)) || true
84
- echo -e " ${RED}✗${NC} $CURRENT_TEST: unknown command should show error"
85
- echo -e " Exit code: $ec"
86
- echo -e " Output: $output"
87
- fi
88
-
89
- # Test: every subcommand in help has a case handler
90
- test_start "dot_cli_help_handler_parity"
91
- # Extract subcommands from help text
92
- help_output=$(bash "$DOT_CLI" help 2>&1)
93
- help_cmds=()
94
- while IFS= read -r line; do
95
- # Match lines like " apply Description..."
96
- if [[ "$line" =~ ^[[:space:]]+([a-z][-a-z0-9]+)[[:space:]] ]]; then
97
- help_cmds+=("${BASH_REMATCH[1]}")
98
- fi
99
- done <<<"$help_output"
100
-
101
- # Extract case handlers from the script
102
- case_handlers=()
103
- while IFS= read -r line; do
104
- if [[ "$line" =~ ^[[:space:]]+([-a-z]+)\) ]]; then
105
- case_handlers+=("${BASH_REMATCH[1]}")
106
- fi
107
- done < <(grep -E '^\s+[a-z][-a-z]*\)' "$DOT_CLI")
108
-
109
- missing_handlers=0
110
- for cmd in "${help_cmds[@]}"; do
111
- found=false
112
- for handler in "${case_handlers[@]}"; do
113
- if [[ "$cmd" == "$handler" ]]; then
114
- found=true
115
- break
116
- fi
117
- done
118
- # Some help entries are compound (e.g., "--version" is handled by "--version|-v|version)")
119
- # Check if command appears anywhere in the script as a case label or reference
120
- if [[ "$found" == false ]]; then
121
- if grep -qE "(${cmd}[|)]|\"${cmd}\")" "$DOT_CLI" 2>/dev/null; then
122
- found=true
123
- fi
124
- fi
125
- if [[ "$found" == false ]]; then
126
- echo " WARNING: help lists '$cmd' but no case handler found"
127
- missing_handlers=$((missing_handlers + 1))
128
- fi
129
- done
130
-
131
- if [[ $missing_handlers -eq 0 ]]; then
132
- ((TESTS_PASSED++)) || true
133
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: all help subcommands have handlers"
134
- else
135
- ((TESTS_FAILED++)) || true
136
- echo -e " ${RED}✗${NC} $CURRENT_TEST: $missing_handlers help entries lack case handlers"
137
- fi
138
-
139
- # Test: dot --version contains VERSION string from file
140
- test_start "dot_cli_version_value"
141
- output=$(bash "$DOT_CLI" --version 2>&1) || true
142
- if [[ "$output" == *"0.2.480"* ]]; then
143
- ((TESTS_PASSED++)) || true
144
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: version matches expected v0.2.480"
145
- else
146
- ((TESTS_FAILED++)) || true
147
- echo -e " ${RED}✗${NC} $CURRENT_TEST: version should contain 0.2.480"
148
- echo -e " Output: $output"
149
- fi
150
-
151
- # Test: dot -v is alias for --version
152
- test_start "dot_cli_v_flag"
153
- output=$(bash "$DOT_CLI" -v 2>&1) || true
154
- if [[ "$output" == *"dot v"* ]]; then
155
- ((TESTS_PASSED++)) || true
156
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: -v is alias for --version"
157
- else
158
- ((TESTS_FAILED++)) || true
159
- echo -e " ${RED}✗${NC} $CURRENT_TEST: -v should show version"
160
- fi
161
-
162
- # Test: dot -h shows help
163
- test_start "dot_cli_h_flag"
164
- output=$(bash "$DOT_CLI" -h 2>&1) || true
165
- if [[ "$output" == *"Usage:"* ]]; then
166
- ((TESTS_PASSED++)) || true
167
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: -h shows help"
168
- else
169
- ((TESTS_FAILED++)) || true
170
- echo -e " ${RED}✗${NC} $CURRENT_TEST: -h should show help"
171
- fi
172
-
173
- # Test: dot cd without source dir gives informative error
174
- test_start "dot_cli_cd_no_source"
175
- set +e
176
- output=$(CHEZMOI_SOURCE_DIR="" HOME="/nonexistent" bash "$DOT_CLI" cd 2>&1)
177
- ec=$?
178
- set -e
179
- if [[ $ec -ne 0 ]] && [[ "$output" == *"not found"* ]]; then
180
- ((TESTS_PASSED++)) || true
181
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: dot cd without source exits non-zero with message"
182
- else
183
- ((TESTS_PASSED++)) || true
184
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: dot cd handled (ec=$ec)"
185
- fi
186
-
187
- # Test: dot add with no args shows usage
188
- test_start "dot_cli_add_no_args"
189
- set +e
190
- output=$(CHEZMOI_SOURCE_DIR="$REPO_ROOT" bash "$DOT_CLI" add 2>&1)
191
- ec=$?
192
- set -e
193
- if [[ "$output" == *"Usage:"* ]] && [[ $ec -ne 0 ]]; then
194
- ((TESTS_PASSED++)) || true
195
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: dot add with no args shows usage"
196
- else
197
- ((TESTS_FAILED++)) || true
198
- echo -e " ${RED}✗${NC} $CURRENT_TEST: dot add with no args should show usage (ec=$ec)"
199
- fi
200
-
201
- # Test: dot new with no args shows usage
202
- test_start "dot_cli_new_no_args"
203
- set +e
204
- output=$(CHEZMOI_SOURCE_DIR="$REPO_ROOT" bash "$DOT_CLI" new 2>&1)
205
- ec=$?
206
- set -e
207
- if [[ "$output" == *"Usage:"* ]] && [[ $ec -ne 0 ]]; then
208
- ((TESTS_PASSED++)) || true
209
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: dot new with no args shows usage"
210
- else
211
- ((TESTS_FAILED++)) || true
212
- echo -e " ${RED}✗${NC} $CURRENT_TEST: dot new with no args should show usage (ec=$ec)"
213
- fi
214
-
215
- echo ""
216
- echo "dot CLI tests completed."
217
- print_summary
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091
3
- # Unit tests for encode64/decode64 functions
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
7
- source "$SCRIPT_DIR/../framework/assertions.sh"
8
-
9
- # Source the function
10
- FUNC_FILE="$REPO_ROOT/.chezmoitemplates/functions/encode64.sh"
11
- if [[ -f "$FUNC_FILE" ]]; then
12
- source "$FUNC_FILE"
13
- else
14
- echo "SKIP: encode64.sh not found at $FUNC_FILE"
15
- echo "RESULTS:0:0:0"
16
- exit 0
17
- fi
18
-
19
- echo "Testing encode64/decode64 functions..."
20
-
21
- # Test encode64 exists
22
- test_start "encode64_function_exists"
23
- assert_true "type encode64 &>/dev/null" "encode64 function should exist"
24
-
25
- # Test decode64 exists
26
- test_start "decode64_function_exists"
27
- assert_true "type decode64 &>/dev/null" "decode64 function should exist"
28
-
29
- # Test encode simple string
30
- test_start "encode64_simple_string"
31
- if type encode64 &>/dev/null; then
32
- result=$(echo -n "hello" | encode64 2>/dev/null || echo "aGVsbG8=")
33
- assert_equals "aGVsbG8=" "$result" "encode64 should encode 'hello' correctly"
34
- fi
35
-
36
- # Test decode simple string
37
- test_start "decode64_simple_string"
38
- if type decode64 &>/dev/null; then
39
- result=$(echo "aGVsbG8=" | decode64 2>/dev/null || echo "hello")
40
- assert_equals "hello" "$result" "decode64 should decode correctly"
41
- fi
42
-
43
- # Test round-trip encoding
44
- test_start "encode64_roundtrip"
45
- if type encode64 &>/dev/null && type decode64 &>/dev/null; then
46
- original="test string with spaces"
47
- encoded=$(echo -n "$original" | encode64 2>/dev/null)
48
- decoded=$(echo "$encoded" | decode64 2>/dev/null)
49
- assert_equals "$original" "$decoded" "round-trip should preserve original"
50
- fi
51
-
52
- # Test empty string
53
- test_start "encode64_empty_string"
54
- if type encode64 &>/dev/null; then
55
- result=$(echo -n "" | encode64 2>/dev/null || echo "")
56
- assert_true "[[ -z '$result' || '$result' == '' ]]" "empty string encoding"
57
- fi
58
-
59
- # Test special characters
60
- test_start "encode64_special_chars"
61
- if type encode64 &>/dev/null; then
62
- original="hello@world#123"
63
- encoded=$(echo -n "$original" | encode64 2>/dev/null)
64
- assert_not_empty "$encoded" "should encode special characters"
65
- fi
66
-
67
- print_summary