@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,8 +0,0 @@
1
- * {
2
- font-family: "JetBrainsMono Nerd Font", monospace;
3
- font-size: 12px;
4
- }
5
-
6
- #clock {
7
- padding: 0 10px;
8
- }
@@ -1,22 +0,0 @@
1
- # Zinit plugin manager
2
- ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
3
- if [[ ! -f "$ZINIT_HOME/zinit.zsh" ]]; then
4
- print -P "%F{33}▓▒░ %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
5
- command mkdir -p "$(dirname $ZINIT_HOME)" && command chmod g-rwX "$(dirname $ZINIT_HOME)"
6
- command git clone https://github.com/zdharma-continuum/zinit "$ZINIT_HOME" && \
7
- print -P "%F{33}▓▒░ %F{34}Installation successful.%f%b" || \
8
- print -P "%F{160}▓▒░ The clone has failed.%f%b"
9
- fi
10
-
11
- source "$ZINIT_HOME/zinit.zsh"
12
- autoload -Uz _zinit
13
- (( ${+_comps} )) && _comps[zinit]=_zinit
14
-
15
- # Load Zsh Plugins (Turbo mode - deferred loading, pinned to stable releases)
16
- # fast-syntax-highlighting: Better performance than zsh-syntax-highlighting
17
- zinit ice wait lucid
18
- zinit light zdharma-continuum/fast-syntax-highlighting
19
- zinit ice wait lucid ver"v0.7.1" atload"_zsh_autosuggest_start"
20
- zinit light zsh-users/zsh-autosuggestions
21
- zinit ice wait lucid ver"0.35.0" blockf atpull"zinit creinstall -q ."
22
- zinit light zsh-users/zsh-completions
@@ -1,89 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Zig version manager - installs/updates zig to ~/.local/zig
3
- # Managed by chezmoi
4
-
5
- set -euo pipefail
6
-
7
- ZIG_DIR="$HOME/.local/zig"
8
- ZIG_VERSION="${1:-latest}"
9
-
10
- get_latest_version() {
11
- curl -sf "https://ziglang.org/download/index.json" | jq -r 'keys | map(select(. != "master" and startswith("0."))) | sort_by(split(".") | map(tonumber)) | last'
12
- }
13
-
14
- get_download_url() {
15
- local version="$1"
16
- local arch
17
- arch=$(uname -m)
18
-
19
- case "$arch" in
20
- x86_64) arch="x86_64" ;;
21
- aarch64) arch="aarch64" ;;
22
- arm64) arch="aarch64" ;;
23
- *) echo "Unsupported architecture: $arch" >&2; exit 1 ;;
24
- esac
25
-
26
- local os
27
- os=$(uname -s | tr '[:upper:]' '[:lower:]')
28
-
29
- if [[ "$version" == "master" ]]; then
30
- curl -sf "https://ziglang.org/download/index.json" | jq -r ".master.\"${arch}-${os}\".tarball"
31
- else
32
- curl -sf "https://ziglang.org/download/index.json" | jq -r ".\"${version}\".\"${arch}-${os}\".tarball"
33
- fi
34
- }
35
-
36
- install_zig() {
37
- local version="$1"
38
-
39
- if [[ "$version" == "latest" ]]; then
40
- version=$(get_latest_version)
41
- fi
42
-
43
- echo "Installing Zig $version..."
44
-
45
- local url
46
- url=$(get_download_url "$version")
47
-
48
- if [[ -z "$url" || "$url" == "null" ]]; then
49
- echo "Error: Could not find download URL for Zig $version" >&2
50
- exit 1
51
- fi
52
-
53
- local tmpdir
54
- tmpdir=$(mktemp -d)
55
- trap "rm -rf $tmpdir" EXIT
56
-
57
- echo "Downloading from $url..."
58
- curl -fSL "$url" -o "$tmpdir/zig.tar.xz"
59
-
60
- echo "Extracting..."
61
- rm -rf "$ZIG_DIR"
62
- mkdir -p "$ZIG_DIR"
63
- tar -xJf "$tmpdir/zig.tar.xz" -C "$ZIG_DIR" --strip-components=1
64
-
65
- echo "Zig $version installed to $ZIG_DIR"
66
- "$ZIG_DIR/zig" version
67
- }
68
-
69
- case "${1:-install}" in
70
- install|latest|master|[0-9]*)
71
- install_zig "$ZIG_VERSION"
72
- ;;
73
- version)
74
- if [[ -x "$ZIG_DIR/zig" ]]; then
75
- "$ZIG_DIR/zig" version
76
- else
77
- echo "Zig not installed"
78
- exit 1
79
- fi
80
- ;;
81
- *)
82
- echo "Usage: zig-install [latest|master|<version>|version]"
83
- echo "Examples:"
84
- echo " zig-install # Install latest stable"
85
- echo " zig-install 0.14.0 # Install specific version"
86
- echo " zig-install master # Install latest master"
87
- echo " zig-install version # Show installed version"
88
- ;;
89
- esac
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # voice_ops.sh - Experimental Voice Operations
4
- #
5
-
6
- echo "VoiceOps is experimental and not yet fully implemented."
7
- echo "This feature will use Whisper for local speech-to-text."
@@ -1,380 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2015,SC2034
3
- # =============================================================================
4
- # Dotfiles Health Check Script
5
- # Verifies that dotfiles installation is functioning correctly
6
- # Usage: ./scripts/ops/health-check.sh [--verbose] [--json]
7
- # =============================================================================
8
-
9
- set -euo pipefail
10
-
11
- # Configuration
12
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
- REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
14
- CHEZMOI_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi"
15
- DOTFILES_SOURCE="${HOME}/.dotfiles"
16
-
17
- # Output control
18
- VERBOSE=0
19
- JSON_OUTPUT=0
20
- EXIT_CODE=0
21
-
22
- # Colors (disabled if not a terminal, JSON mode, or NO_COLOR set)
23
- if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]] && [[ "$JSON_OUTPUT" != "1" ]]; then
24
- RED='\033[0;31m'
25
- GREEN='\033[0;32m'
26
- YELLOW='\033[0;33m'
27
- BLUE='\033[0;34m'
28
- BOLD='\033[1m'
29
- NC='\033[0m'
30
- else
31
- RED='' GREEN='' YELLOW='' BLUE='' BOLD='' NC=''
32
- fi
33
-
34
- # Results collection for JSON
35
- declare -a RESULTS=()
36
-
37
- log_info() { [[ "$VERBOSE" == "1" ]] && echo -e "${BLUE}[INFO]${NC} $*" || true; }
38
- log_pass() { echo -e "${GREEN}[PASS]${NC} $*"; }
39
- log_fail() {
40
- echo -e "${RED}[FAIL]${NC} $*"
41
- EXIT_CODE=1
42
- }
43
- log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
44
-
45
- add_result() {
46
- local name="$1" status="$2" message="${3:-}"
47
- RESULTS+=("{\"check\": \"$name\", \"status\": \"$status\", \"message\": \"$message\"}")
48
- }
49
-
50
- # Parse arguments
51
- while [[ $# -gt 0 ]]; do
52
- case "$1" in
53
- -v | --verbose)
54
- VERBOSE=1
55
- shift
56
- ;;
57
- -j | --json)
58
- JSON_OUTPUT=1
59
- shift
60
- ;;
61
- -h | --help)
62
- echo "Usage: $(basename "$0") [OPTIONS]"
63
- echo ""
64
- echo "Options:"
65
- echo " -v, --verbose Show detailed output"
66
- echo " -j, --json Output results as JSON"
67
- echo " -h, --help Show this help message"
68
- exit 0
69
- ;;
70
- *)
71
- echo "Unknown option: $1"
72
- exit 1
73
- ;;
74
- esac
75
- done
76
-
77
- # =============================================================================
78
- # Health Check Functions
79
- # =============================================================================
80
-
81
- check_chezmoi_installed() {
82
- log_info "Checking chezmoi installation..."
83
- if command -v chezmoi >/dev/null 2>&1; then
84
- local version
85
- version=$(chezmoi --version 2>/dev/null | head -1)
86
- log_pass "chezmoi installed: $version"
87
- add_result "chezmoi_installed" "pass" "$version"
88
- return 0
89
- else
90
- log_fail "chezmoi not installed or not in PATH"
91
- add_result "chezmoi_installed" "fail" "not found"
92
- return 1
93
- fi
94
- }
95
-
96
- check_dotfiles_source() {
97
- log_info "Checking dotfiles source directory..."
98
- if [[ -d "$DOTFILES_SOURCE" ]]; then
99
- if [[ -d "$DOTFILES_SOURCE/.git" ]]; then
100
- log_pass "Source directory exists with git: $DOTFILES_SOURCE"
101
- add_result "dotfiles_source" "pass" "$DOTFILES_SOURCE"
102
- return 0
103
- else
104
- log_warn "Source directory exists but no .git: $DOTFILES_SOURCE"
105
- add_result "dotfiles_source" "warn" "no git"
106
- return 0
107
- fi
108
- else
109
- log_fail "Source directory not found: $DOTFILES_SOURCE"
110
- add_result "dotfiles_source" "fail" "not found"
111
- return 1
112
- fi
113
- }
114
-
115
- check_chezmoi_config() {
116
- log_info "Checking chezmoi configuration..."
117
- local config_file="$CHEZMOI_CONFIG_DIR/chezmoi.toml"
118
- if [[ -f "$config_file" ]]; then
119
- log_pass "chezmoi config exists: $config_file"
120
- add_result "chezmoi_config" "pass" "$config_file"
121
- return 0
122
- else
123
- log_warn "chezmoi config not found (using defaults)"
124
- add_result "chezmoi_config" "warn" "using defaults"
125
- return 0
126
- fi
127
- }
128
-
129
- check_critical_files() {
130
- log_info "Checking critical dotfiles..."
131
- local critical_files=(
132
- "$HOME/.bashrc"
133
- "$HOME/.zshrc"
134
- "$HOME/.profile"
135
- )
136
- local missing=0
137
-
138
- for file in "${critical_files[@]}"; do
139
- if [[ -f "$file" ]] || [[ -L "$file" ]]; then
140
- log_info " Found: $file"
141
- else
142
- log_warn " Missing: $file"
143
- ((missing++))
144
- fi
145
- done
146
-
147
- if [[ $missing -eq 0 ]]; then
148
- log_pass "All critical shell configs present"
149
- add_result "critical_files" "pass" "all present"
150
- return 0
151
- else
152
- log_warn "$missing critical file(s) missing"
153
- add_result "critical_files" "warn" "$missing missing"
154
- return 0
155
- fi
156
- }
157
-
158
- check_config_directories() {
159
- log_info "Checking config directories..."
160
- local config_dirs=(
161
- "$HOME/.config/shell"
162
- "$HOME/.config/nvim"
163
- "$HOME/.config/git"
164
- )
165
- local found=0 total=${#config_dirs[@]}
166
-
167
- for dir in "${config_dirs[@]}"; do
168
- if [[ -d "$dir" ]]; then
169
- log_info " Found: $dir"
170
- ((found++))
171
- else
172
- log_info " Missing: $dir"
173
- fi
174
- done
175
-
176
- if [[ $found -eq $total ]]; then
177
- log_pass "All expected config directories present"
178
- add_result "config_directories" "pass" "$found/$total"
179
- return 0
180
- elif [[ $found -gt 0 ]]; then
181
- log_warn "$found of $total config directories present"
182
- add_result "config_directories" "warn" "$found/$total"
183
- return 0
184
- else
185
- log_fail "No config directories found"
186
- add_result "config_directories" "fail" "0/$total"
187
- return 1
188
- fi
189
- }
190
-
191
- check_shell_startup_performance() {
192
- log_info "Checking shell startup performance..."
193
- local threshold_ms=500
194
- local shells=("bash" "zsh")
195
- local slow_shells=0
196
-
197
- for shell in "${shells[@]}"; do
198
- if command -v "$shell" >/dev/null 2>&1; then
199
- local start_ms end_ms duration_ms
200
- start_ms=$(($(date +%s%N) / 1000000))
201
- "$shell" -i -c 'exit' 2>/dev/null || true
202
- end_ms=$(($(date +%s%N) / 1000000))
203
- duration_ms=$((end_ms - start_ms))
204
-
205
- if [[ $duration_ms -gt $threshold_ms ]]; then
206
- log_warn "$shell startup: ${duration_ms}ms (threshold: ${threshold_ms}ms)"
207
- ((slow_shells++))
208
- else
209
- log_info " $shell startup: ${duration_ms}ms"
210
- fi
211
- fi
212
- done
213
-
214
- if [[ $slow_shells -eq 0 ]]; then
215
- log_pass "Shell startup performance OK"
216
- add_result "shell_performance" "pass" "under ${threshold_ms}ms"
217
- return 0
218
- else
219
- log_warn "$slow_shells shell(s) exceed startup threshold"
220
- add_result "shell_performance" "warn" "slow startup"
221
- return 0
222
- fi
223
- }
224
-
225
- check_chezmoi_status() {
226
- log_info "Checking chezmoi managed files status..."
227
- if ! command -v chezmoi >/dev/null 2>&1; then
228
- log_warn "Skipping chezmoi status (not installed)"
229
- add_result "chezmoi_status" "skip" "not installed"
230
- return 0
231
- fi
232
-
233
- local status_output
234
- status_output=$(chezmoi status 2>/dev/null || echo "")
235
-
236
- if [[ -z "$status_output" ]]; then
237
- log_pass "All managed files in sync"
238
- add_result "chezmoi_status" "pass" "in sync"
239
- return 0
240
- else
241
- local changes
242
- changes=$(echo "$status_output" | wc -l | tr -d ' ')
243
- log_warn "$changes file(s) out of sync with source"
244
- add_result "chezmoi_status" "warn" "$changes out of sync"
245
- return 0
246
- fi
247
- }
248
-
249
- check_git_status() {
250
- log_info "Checking git repository status..."
251
- if [[ ! -d "$DOTFILES_SOURCE/.git" ]]; then
252
- log_warn "Not a git repository"
253
- add_result "git_status" "skip" "not a repo"
254
- return 0
255
- fi
256
-
257
- local git_status
258
- git_status=$(cd "$DOTFILES_SOURCE" && git status --porcelain 2>/dev/null || echo "")
259
-
260
- if [[ -z "$git_status" ]]; then
261
- log_pass "Git working tree clean"
262
- add_result "git_status" "pass" "clean"
263
- return 0
264
- else
265
- local changes
266
- changes=$(echo "$git_status" | wc -l | tr -d ' ')
267
- log_warn "Git has $changes uncommitted change(s)"
268
- add_result "git_status" "warn" "$changes changes"
269
- return 0
270
- fi
271
- }
272
-
273
- check_dependencies() {
274
- log_info "Checking recommended dependencies..."
275
- local deps=(git curl zsh)
276
- local optional_deps=(ripgrep fd bat fzf eza jq claude gemini sgpt ollama opencode aider)
277
- local missing_required=0
278
- local missing_optional=0
279
-
280
- for dep in "${deps[@]}"; do
281
- if ! command -v "$dep" >/dev/null 2>&1; then
282
- log_fail "Required dependency missing: $dep"
283
- ((missing_required++))
284
- fi
285
- done
286
-
287
- for dep in "${optional_deps[@]}"; do
288
- if ! command -v "$dep" >/dev/null 2>&1; then
289
- log_info " Optional dependency missing: $dep"
290
- ((missing_optional++))
291
- fi
292
- done
293
-
294
- if [[ $missing_required -eq 0 ]]; then
295
- log_pass "All required dependencies present"
296
- add_result "dependencies" "pass" "optional: $missing_optional missing"
297
- return 0
298
- else
299
- log_fail "$missing_required required dependency(s) missing"
300
- add_result "dependencies" "fail" "$missing_required missing"
301
- return 1
302
- fi
303
- }
304
-
305
- check_symlinks_valid() {
306
- log_info "Checking symlink integrity..."
307
- local broken=0
308
-
309
- while IFS= read -r -d '' link; do
310
- if [[ ! -e "$link" ]]; then
311
- log_warn "Broken symlink: $link"
312
- ((broken++))
313
- fi
314
- done < <(find "$HOME" -maxdepth 2 -type l -print0 2>/dev/null)
315
-
316
- if [[ $broken -eq 0 ]]; then
317
- log_pass "No broken symlinks in home directory"
318
- add_result "symlinks" "pass" "all valid"
319
- return 0
320
- else
321
- log_warn "$broken broken symlink(s) found"
322
- add_result "symlinks" "warn" "$broken broken"
323
- return 0
324
- fi
325
- }
326
-
327
- # =============================================================================
328
- # Main Execution
329
- # =============================================================================
330
-
331
- main() {
332
- if [[ "$JSON_OUTPUT" != "1" ]]; then
333
- echo ""
334
- echo "=========================================="
335
- echo " Dotfiles Health Check"
336
- echo "=========================================="
337
- echo ""
338
- fi
339
-
340
- # Run all checks
341
- check_chezmoi_installed || true
342
- check_dotfiles_source || true
343
- check_chezmoi_config || true
344
- check_critical_files || true
345
- check_config_directories || true
346
- check_dependencies || true
347
- check_chezmoi_status || true
348
- check_git_status || true
349
- check_symlinks_valid || true
350
- check_shell_startup_performance || true
351
-
352
- if [[ "$JSON_OUTPUT" == "1" ]]; then
353
- echo "{"
354
- echo " \"timestamp\": \"$(date -Iseconds)\","
355
- echo " \"exit_code\": $EXIT_CODE,"
356
- echo " \"results\": ["
357
- local first=1
358
- for result in "${RESULTS[@]}"; do
359
- [[ $first -eq 0 ]] && echo ","
360
- echo -n " $result"
361
- first=0
362
- done
363
- echo ""
364
- echo " ]"
365
- echo "}"
366
- else
367
- echo ""
368
- echo "=========================================="
369
- if [[ $EXIT_CODE -eq 0 ]]; then
370
- echo -e "${GREEN}${BOLD}Health Check: PASSED${NC}"
371
- else
372
- echo -e "${RED}${BOLD}Health Check: FAILED${NC}"
373
- fi
374
- echo "=========================================="
375
- fi
376
-
377
- exit $EXIT_CODE
378
- }
379
-
380
- main "$@"