@sebastienrousseau/dotfiles 0.2.501 → 0.2.503

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 (420) hide show
  1. package/CHANGELOG.md +155 -4
  2. package/LICENSE +21 -1283
  3. package/README.md +40 -8
  4. package/docs/CONFIG_STRATEGY.md +124 -0
  5. package/docs/COPYRIGHT +1 -1
  6. package/docs/GOVERNANCE.md +98 -0
  7. package/docs/MAINTAINERS.md +41 -0
  8. package/docs/OPENCODE.md +127 -0
  9. package/docs/README.md +2 -0
  10. package/docs/STRUCTURE.md +102 -0
  11. package/docs/adr/ADR-011-nushell-tier3-keep.md +2 -2
  12. package/docs/architecture/AI_COST_OPTIMIZATION.md +143 -0
  13. package/docs/architecture/REPO_LAYOUT.md +8 -8
  14. package/docs/archive/MILESTONE_v0.2.493.md +1 -1
  15. package/docs/index.md +2 -2
  16. package/docs/interop/POWERSHELL.md +1 -1
  17. package/docs/manual/00-introduction.md +1 -1
  18. package/docs/manual/01-concepts/02-trust-model.md +1 -1
  19. package/docs/manual/03-reference/01-dot-cli.md +63 -45
  20. package/docs/manual/03-reference/02-config-files.md +2 -2
  21. package/docs/manual/03-reference/05-feature-flags.md +62 -3
  22. package/docs/manual/_toc.yml +1 -1
  23. package/docs/manual/command-index.md +72 -55
  24. package/docs/manual/index.md +66 -0
  25. package/docs/operations/CI_COMPOSITES.md +2 -2
  26. package/docs/operations/COMPLETIONS.md +2 -2
  27. package/docs/operations/COVERAGE.md +40 -6
  28. package/docs/operations/HARD_AUDIT_2026.md +631 -0
  29. package/docs/operations/MAINTENANCE.md +3 -3
  30. package/docs/operations/MANIFEST.md +127 -0
  31. package/docs/operations/REGISTRY.md +89 -0
  32. package/docs/operations/RELEASE_PIPELINE.md +130 -0
  33. package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
  34. package/docs/operations/ROADMAP_2026.md +665 -0
  35. package/docs/operations/ROADMAP_V0_2_503.md +134 -0
  36. package/docs/operations/TESTING.md +17 -0
  37. package/docs/operations/TRACEABILITY.md +9 -3
  38. package/docs/operations/VERSION_SYNC.md +4 -4
  39. package/docs/reference/POWERSHELL_PARITY.md +81 -0
  40. package/docs/registry.json +6 -0
  41. package/docs/schema/dot-env-v1.json +110 -0
  42. package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
  43. package/docs/security/CI_PINNING.md +121 -0
  44. package/docs/security/COMMIT_SIGNING.md +138 -0
  45. package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
  46. package/docs/security/DISCLOSURE.md +130 -0
  47. package/docs/security/FUZZING.md +114 -0
  48. package/docs/security/INSTALL_VERIFICATION.md +2 -2
  49. package/docs/security/KEY_ROTATION.md +81 -1
  50. package/docs/security/POLICY_RELEASES.md +2 -2
  51. package/docs/security/SCORECARD.md +130 -15
  52. package/docs/security/SHELL_EXEMPTIONS.md +4 -4
  53. package/docs/security/VERIFY_RELEASE.md +201 -0
  54. package/docs/security/security-pubkey.asc +15 -0
  55. package/install.sh +67 -38
  56. package/package.json +1 -1
  57. package/scripts/README.md +123 -0
  58. package/scripts/ci/check-copyright-headers.sh +4 -93
  59. package/scripts/ci/check-shell-preamble.sh +4 -103
  60. package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
  61. package/scripts/diagnostics/a2a-conformance.sh +4 -4
  62. package/scripts/diagnostics/alias-governance.sh +1 -1
  63. package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
  64. package/scripts/diagnostics/benchmark.sh +4 -4
  65. package/scripts/diagnostics/conflicts.sh +2 -2
  66. package/scripts/diagnostics/doctor-unified.sh +2 -2
  67. package/scripts/diagnostics/doctor.sh +45 -15
  68. package/scripts/diagnostics/drift-dashboard.sh +2 -2
  69. package/scripts/diagnostics/health.sh +4 -4
  70. package/scripts/diagnostics/history-analysis.sh +2 -2
  71. package/scripts/diagnostics/mcp-doctor.sh +10 -7
  72. package/scripts/diagnostics/perf.sh +4 -4
  73. package/scripts/diagnostics/scorecard.sh +4 -4
  74. package/scripts/diagnostics/security-score.sh +2 -2
  75. package/scripts/diagnostics/smoke-test.sh +2 -2
  76. package/scripts/diagnostics/snapshot.sh +2 -2
  77. package/scripts/diagnostics/verify.sh +4 -4
  78. package/scripts/diagnostics/version-locks.sh +2 -2
  79. package/scripts/diagnostics/workstation-attestation.sh +14 -14
  80. package/scripts/dot/commands/agent.sh +27 -22
  81. package/scripts/dot/commands/agents.sh +335 -0
  82. package/scripts/dot/commands/ai.sh +144 -25
  83. package/scripts/dot/commands/aliases.sh +10 -8
  84. package/scripts/dot/commands/appearance.sh +2 -2
  85. package/scripts/dot/commands/core.sh +12 -6
  86. package/scripts/dot/commands/diagnostics.sh +5 -5
  87. package/scripts/dot/commands/env-emit.sh +202 -0
  88. package/scripts/dot/commands/fleet.sh +290 -14
  89. package/scripts/dot/commands/init.sh +184 -0
  90. package/scripts/dot/commands/lint.sh +9 -4
  91. package/scripts/dot/commands/manual.sh +3 -3
  92. package/scripts/dot/commands/meta.sh +19 -10
  93. package/scripts/dot/commands/patterns.sh +2 -2
  94. package/scripts/dot/commands/registry.sh +263 -0
  95. package/scripts/dot/commands/restore.sh +4 -4
  96. package/scripts/dot/commands/secrets.sh +4 -3
  97. package/scripts/dot/commands/security.sh +2 -2
  98. package/scripts/dot/commands/tools.sh +62 -4
  99. package/scripts/dot/powershell/Dot.psm1 +199 -0
  100. package/scripts/fonts/install-nerd-fonts.sh +2 -2
  101. package/scripts/git-hooks/pre-commit-audit.sh +2 -2
  102. package/scripts/git-hooks/pre-push +13 -0
  103. package/scripts/lib/secrets_provider.sh +32 -6
  104. package/scripts/ops/ai-setup.sh +1 -1
  105. package/scripts/ops/bundle.sh +2 -2
  106. package/scripts/ops/chaos.sh +2 -2
  107. package/scripts/ops/chezmoi-apply.sh +4 -4
  108. package/scripts/ops/heal.sh +4 -4
  109. package/scripts/ops/post-apply-repair.sh +2 -2
  110. package/scripts/ops/prewarm.sh +2 -2
  111. package/scripts/ops/release.sh +4 -4
  112. package/scripts/ops/rollback.sh +18 -4
  113. package/scripts/ops/setup.sh +2 -2
  114. package/scripts/qa/check-version-consistency.sh +123 -0
  115. package/scripts/qa/coverage-baseline.sh +1 -1
  116. package/scripts/qa/docs-coverage.sh +2 -2
  117. package/scripts/qa/powershell-contract.ps1 +1 -1
  118. package/scripts/qa/scorecard-snapshot.sh +127 -0
  119. package/scripts/security/backup.sh +2 -2
  120. package/scripts/security/check-disclosure-key-expiry.sh +110 -0
  121. package/scripts/security/dns-doh.sh +4 -4
  122. package/scripts/security/encryption-check.sh +4 -4
  123. package/scripts/security/enforce-policies.sh +2 -2
  124. package/scripts/security/firewall.sh +4 -4
  125. package/scripts/security/lock-configs.sh +11 -2
  126. package/scripts/security/lock-screen.sh +4 -4
  127. package/scripts/security/manage-secrets.sh +2 -2
  128. package/scripts/security/ssh-cert.sh +2 -2
  129. package/scripts/security/telemetry-kill.sh +4 -4
  130. package/scripts/security/usb-safety.sh +4 -4
  131. package/scripts/theme/extract-heic-frames.sh +114 -0
  132. package/scripts/theme/rebuild-themes.sh +8 -1
  133. package/scripts/theme/switch.sh +13 -6
  134. package/scripts/theme/wallpaper-sync.sh +297 -93
  135. package/scripts/tuning/linux.sh +2 -2
  136. package/scripts/tuning/macos.sh +2 -2
  137. package/scripts/version-sync.sh +58 -7
  138. package/dot_config/.module-manifest.json +0 -69
  139. package/dot_config/ai/identity.md +0 -23
  140. package/dot_config/ai/patterns/architect.md +0 -16
  141. package/dot_config/ai/patterns/hardener.md +0 -15
  142. package/dot_config/ai/patterns/refactor.md +0 -15
  143. package/dot_config/aider/aider.conf.yml +0 -32
  144. package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
  145. package/dot_config/ansible/ansible.cfg +0 -11
  146. package/dot_config/atuin/config.toml.tmpl +0 -47
  147. package/dot_config/bat/config +0 -23
  148. package/dot_config/brave-flags.conf.tmpl +0 -7
  149. package/dot_config/btop/btop.conf +0 -16
  150. package/dot_config/btop/themes/tokyonight.theme +0 -34
  151. package/dot_config/bun/bunfig.toml.tmpl +0 -33
  152. package/dot_config/claude/mcp_servers.json +0 -20
  153. package/dot_config/containers/containers.conf +0 -14
  154. package/dot_config/curl/dot_curlrc +0 -18
  155. package/dot_config/dlv/config.yml +0 -39
  156. package/dot_config/docker/config.json +0 -15
  157. package/dot_config/dotfiles/agent-card.json +0 -29
  158. package/dot_config/dotfiles/agent-profiles.json +0 -92
  159. package/dot_config/dotfiles/boot/README.md +0 -13
  160. package/dot_config/dotfiles/grub/README.md +0 -13
  161. package/dot_config/dotfiles/lock/README.md +0 -13
  162. package/dot_config/dotfiles/mcp-lock.json +0 -33
  163. package/dot_config/dotfiles/mcp-policy.json +0 -52
  164. package/dot_config/dotfiles/mcp-registry.json +0 -47
  165. package/dot_config/dotfiles/model-registry.json +0 -20
  166. package/dot_config/dotfiles/policy-bundles.json +0 -38
  167. package/dot_config/dotfiles/prompt-registry.json +0 -16
  168. package/dot_config/dotfiles/versions.env +0 -18
  169. package/dot_config/duf/duf.conf +0 -6
  170. package/dot_config/duti/defaults.duti +0 -5
  171. package/dot_config/emoji/emoji.txt +0 -34
  172. package/dot_config/environment.d/50-ssh-agent.conf +0 -2
  173. package/dot_config/environment.d/90-wayland.conf +0 -19
  174. package/dot_config/fastfetch/config.jsonc +0 -28
  175. package/dot_config/firefox/user.js.tmpl +0 -58
  176. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
  177. package/dot_config/fish/completions/dot.fish.tmpl +0 -115
  178. package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
  179. package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
  180. package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
  181. package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
  182. package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
  183. package/dot_config/fish/config.fish.tmpl +0 -44
  184. package/dot_config/fish/fish_plugins +0 -1
  185. package/dot_config/fish/functions/_.fish +0 -3
  186. package/dot_config/fish/functions/_cached_eval.fish +0 -131
  187. package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
  188. package/dot_config/fish/functions/als.fish +0 -46
  189. package/dot_config/fish/functions/bg-upgrade.fish +0 -7
  190. package/dot_config/fish/functions/c.fish +0 -3
  191. package/dot_config/fish/functions/cat.fish +0 -9
  192. package/dot_config/fish/functions/d.fish +0 -7
  193. package/dot_config/fish/functions/dot.fish +0 -34
  194. package/dot_config/fish/functions/h.fish +0 -3
  195. package/dot_config/fish/functions/l.fish +0 -7
  196. package/dot_config/fish/functions/la.fish +0 -7
  197. package/dot_config/fish/functions/ll.fish +0 -7
  198. package/dot_config/fish/functions/log_error.fish +0 -13
  199. package/dot_config/fish/functions/log_info.fish +0 -13
  200. package/dot_config/fish/functions/lr.fish +0 -7
  201. package/dot_config/fish/functions/lra.fish +0 -7
  202. package/dot_config/fish/functions/ls.fish +0 -7
  203. package/dot_config/fish/functions/lt.fish +0 -7
  204. package/dot_config/fish/functions/lta.fish +0 -7
  205. package/dot_config/fish/functions/notify-run.fish +0 -11
  206. package/dot_config/fish/functions/q.fish +0 -3
  207. package/dot_config/fish/functions/silent-run.fish +0 -7
  208. package/dot_config/fish/functions/yy.fish +0 -8
  209. package/dot_config/flatpak/flatpak.list +0 -4
  210. package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
  211. package/dot_config/foot/foot.ini.tmpl +0 -33
  212. package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
  213. package/dot_config/fzf/fzf.zsh +0 -48
  214. package/dot_config/gem/gemrc +0 -9
  215. package/dot_config/gh/config.yml +0 -12
  216. package/dot_config/ghostty/config.tmpl +0 -165
  217. package/dot_config/git/allowed_signers.tmpl +0 -18
  218. package/dot_config/git/attributes +0 -12
  219. package/dot_config/git/commit-template +0 -10
  220. package/dot_config/git/hooks/executable_commit-msg +0 -146
  221. package/dot_config/git/ignore +0 -27
  222. package/dot_config/gnupg/gpg-agent.conf +0 -11
  223. package/dot_config/go/golangci.yml +0 -118
  224. package/dot_config/go/gopls.json +0 -30
  225. package/dot_config/goose/config.yaml +0 -29
  226. package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
  227. package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
  228. package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
  229. package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
  230. package/dot_config/htop/htoprc +0 -20
  231. package/dot_config/inputrc +0 -2
  232. package/dot_config/ipython/profile_default/ipython_config.py +0 -19
  233. package/dot_config/just/justfile +0 -122
  234. package/dot_config/k9s/config.yaml +0 -65
  235. package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
  236. package/dot_config/kanshi/config.tmpl +0 -22
  237. package/dot_config/karabiner/karabiner.json +0 -14
  238. package/dot_config/kitty/kitty.conf.tmpl +0 -53
  239. package/dot_config/lazydocker/config.yml +0 -186
  240. package/dot_config/lazygit/config.yml +0 -35
  241. package/dot_config/mako/config +0 -47
  242. package/dot_config/mas/masapps.txt +0 -5
  243. package/dot_config/micro/settings.json +0 -3
  244. package/dot_config/mimeapps.list +0 -77
  245. package/dot_config/minikube/config.json +0 -13
  246. package/dot_config/mise/config.toml +0 -99
  247. package/dot_config/mongosh/mongoshrc.js +0 -68
  248. package/dot_config/mpv/input.conf +0 -47
  249. package/dot_config/mpv/mpv.conf +0 -47
  250. package/dot_config/mycli/myclirc +0 -67
  251. package/dot_config/nano/nanorc +0 -28
  252. package/dot_config/ncdu/config +0 -12
  253. package/dot_config/niri/config.kdl.tmpl +0 -327
  254. package/dot_config/nushell/aliases.nu +0 -18
  255. package/dot_config/nushell/cached_eval.nu +0 -80
  256. package/dot_config/nushell/completions.nu.tmpl +0 -52
  257. package/dot_config/nushell/config.nu.tmpl +0 -86
  258. package/dot_config/nushell/env.nu.tmpl +0 -102
  259. package/dot_config/nushell/functions.nu.tmpl +0 -17
  260. package/dot_config/nvim/init.lua +0 -18
  261. package/dot_config/nvim/lazy-lock.json +0 -58
  262. package/dot_config/nvim/lua/config/autocmds.lua +0 -107
  263. package/dot_config/nvim/lua/config/keymaps.lua +0 -92
  264. package/dot_config/nvim/lua/config/lazy.lua +0 -44
  265. package/dot_config/nvim/lua/config/options.lua +0 -49
  266. package/dot_config/nvim/lua/plugins/ai.lua +0 -75
  267. package/dot_config/nvim/lua/plugins/coding.lua +0 -216
  268. package/dot_config/nvim/lua/plugins/completion.lua +0 -60
  269. package/dot_config/nvim/lua/plugins/dap.lua +0 -412
  270. package/dot_config/nvim/lua/plugins/editor.lua +0 -55
  271. package/dot_config/nvim/lua/plugins/git.lua +0 -10
  272. package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
  273. package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
  274. package/dot_config/nvim/lua/plugins/rust.lua +0 -34
  275. package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
  276. package/dot_config/nvim/lua/plugins/ui.lua +0 -509
  277. package/dot_config/paru/paru.conf +0 -10
  278. package/dot_config/pip/pip.conf.tmpl +0 -32
  279. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
  280. package/dot_config/pueue/pueue.yml +0 -34
  281. package/dot_config/pypoetry/config.toml +0 -6
  282. package/dot_config/pyrightconfig.json +0 -5
  283. package/dot_config/raycast/README.md +0 -13
  284. package/dot_config/redis/redisclirc +0 -41
  285. package/dot_config/ripgrep/ripgreprc +0 -21
  286. package/dot_config/shell/00-core-paths.sh.tmpl +0 -134
  287. package/dot_config/shell/05-core-safety.sh +0 -48
  288. package/dot_config/shell/10-secrets.sh +0 -41
  289. package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
  290. package/dot_config/shell/40-ls-colors.sh +0 -49
  291. package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
  292. package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
  293. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
  294. package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
  295. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
  296. package/dot_config/shell/Brewfile +0 -207
  297. package/dot_config/shell/Brewfile.cask +0 -92
  298. package/dot_config/shell/Brewfile.cli +0 -127
  299. package/dot_config/shell/README.md +0 -284
  300. package/dot_config/shell/als_data.txt.tmpl +0 -65
  301. package/dot_config/shell/custom/auto_ls.zsh +0 -20
  302. package/dot_config/shell/custom/context_suggest.zsh +0 -68
  303. package/dot_config/shell/custom/error_analysis.zsh +0 -45
  304. package/dot_config/sops/dot_sops.yaml +0 -23
  305. package/dot_config/starship.toml.tmpl +0 -202
  306. package/dot_config/swaylock/config +0 -43
  307. package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
  308. package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
  309. package/dot_config/systemd/user/pueued.service +0 -12
  310. package/dot_config/systemd/user/ssh-agent.service +0 -12
  311. package/dot_config/task/Taskfile.yml +0 -86
  312. package/dot_config/tflint/tflint.hcl +0 -9
  313. package/dot_config/tmux/tmux.conf.tmpl +0 -223
  314. package/dot_config/topgrade.toml.tmpl +0 -54
  315. package/dot_config/user-dirs.dirs +0 -10
  316. package/dot_config/vscode/extensions.txt +0 -11
  317. package/dot_config/vscode/settings.json.tmpl +0 -82
  318. package/dot_config/waybar/config.jsonc.tmpl +0 -90
  319. package/dot_config/waybar/style.css.tmpl +0 -211
  320. package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
  321. package/dot_config/wget/wgetrc +0 -12
  322. package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
  323. package/dot_config/yarn/yarnrc.yml +0 -36
  324. package/dot_config/yazi/keymap.toml +0 -67
  325. package/dot_config/yazi/theme.toml +0 -102
  326. package/dot_config/yazi/yazi.toml +0 -40
  327. package/dot_config/zathura/zathurarc +0 -52
  328. package/dot_config/zellij/config.kdl.tmpl +0 -79
  329. package/dot_config/zsh/dot_zprofile +0 -7
  330. package/dot_config/zsh/dot_zshenv +0 -5
  331. package/dot_config/zsh/dot_zshrc.tmpl +0 -635
  332. package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
  333. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
  334. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
  335. package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
  336. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
  337. package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
  338. package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
  339. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
  340. package/dot_local/bin/executable_ai-update +0 -195
  341. package/dot_local/bin/executable_ai_core +0 -152
  342. package/dot_local/bin/executable_antigravity +0 -11
  343. package/dot_local/bin/executable_b64 +0 -84
  344. package/dot_local/bin/executable_bm +0 -79
  345. package/dot_local/bin/executable_cb +0 -39
  346. package/dot_local/bin/executable_dot +0 -596
  347. package/dot_local/bin/executable_dot-ai +0 -36
  348. package/dot_local/bin/executable_dot-bootstrap +0 -77
  349. package/dot_local/bin/executable_dot-launch-or-focus +0 -52
  350. package/dot_local/bin/executable_dot-load-benchmark +0 -31
  351. package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
  352. package/dot_local/bin/executable_dot-theme-sync +0 -952
  353. package/dot_local/bin/executable_dot_completion +0 -57
  354. package/dot_local/bin/executable_dtags +0 -28
  355. package/dot_local/bin/executable_epoch +0 -67
  356. package/dot_local/bin/executable_extract +0 -41
  357. package/dot_local/bin/executable_gbd +0 -52
  358. package/dot_local/bin/executable_gd +0 -42
  359. package/dot_local/bin/executable_git-ai-commit +0 -175
  360. package/dot_local/bin/executable_git-ai-diff +0 -169
  361. package/dot_local/bin/executable_gl +0 -101
  362. package/dot_local/bin/executable_hash +0 -161
  363. package/dot_local/bin/executable_hashsum +0 -160
  364. package/dot_local/bin/executable_hex +0 -115
  365. package/dot_local/bin/executable_jsonv +0 -78
  366. package/dot_local/bin/executable_jwt +0 -94
  367. package/dot_local/bin/executable_kill-port +0 -75
  368. package/dot_local/bin/executable_lorem +0 -118
  369. package/dot_local/bin/executable_mkscript +0 -35
  370. package/dot_local/bin/executable_monitor +0 -56
  371. package/dot_local/bin/executable_myip +0 -51
  372. package/dot_local/bin/executable_notify +0 -24
  373. package/dot_local/bin/executable_open +0 -38
  374. package/dot_local/bin/executable_pw +0 -27
  375. package/dot_local/bin/executable_rec-start +0 -46
  376. package/dot_local/bin/executable_rec-stop +0 -35
  377. package/dot_local/bin/executable_regex +0 -132
  378. package/dot_local/bin/executable_start-niri +0 -8
  379. package/dot_local/bin/executable_tmux-sessionizer +0 -314
  380. package/dot_local/bin/executable_tour +0 -177
  381. package/dot_local/bin/executable_up +0 -23
  382. package/dot_local/bin/executable_update +0 -142
  383. package/dot_local/bin/executable_uuid +0 -87
  384. package/dot_local/bin/executable_win +0 -32
  385. package/dot_local/bin/executable_yamlv +0 -57
  386. package/dot_local/share/bash-completion/completions/dot +0 -72
  387. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  388. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  389. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  390. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  391. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  392. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  393. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  394. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  395. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  396. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  397. package/dot_local/share/man/man1/dot.1 +0 -149
  398. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
  399. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
  400. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
  401. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
  402. package/dot_local/share/zsh/completions/.keep +0 -0
  403. package/dot_local/share/zsh/completions/_dot +0 -283
  404. package/scripts/ci/check-dangerous-chmod.sh +0 -19
  405. package/scripts/ci/check-deps-dev.sh +0 -236
  406. package/scripts/ci/check-insecure-tls.sh +0 -61
  407. package/scripts/ci/check-regression-traceability.sh +0 -67
  408. package/scripts/ci/install-chezmoi-verified.sh +0 -64
  409. package/scripts/ci/run-coverage.sh +0 -362
  410. package/scripts/ci/validate-chezmoidata.sh +0 -25
  411. package/scripts/ci/validate-ci-config.sh +0 -224
  412. package/scripts/docs/build-manual.sh +0 -883
  413. package/scripts/docs/check-manual.sh +0 -213
  414. package/scripts/dot/lib/bento.sh +0 -50
  415. package/scripts/dot/lib/log.sh +0 -200
  416. package/scripts/dot/lib/platform.sh +0 -99
  417. package/scripts/dot/lib/ui.sh +0 -518
  418. package/scripts/dot/lib/utils.sh +0 -377
  419. package/scripts/maintenance/check-updates.sh +0 -131
  420. package/scripts/release/package-policy-bundles.sh +0 -125
@@ -0,0 +1,123 @@
1
+ # `scripts/` — Framework Code
2
+
3
+ Everything in this directory is **framework code**. Nothing here
4
+ deploys to `~/`; chezmoi ignores the whole tree (see
5
+ `.chezmoiignore`). Scripts are invoked by the `dot` CLI, by CI
6
+ workflows, by `chezmoi apply` hooks, or by hand.
7
+
8
+ ## Subtree map
9
+
10
+ Per the v0.2.503 reorg (RFC `docs/operations/RFC_v0_2_503_reorganization.md`),
11
+ **repo-only ops** (CI, release, maintenance, docs-generation) have
12
+ moved to the top-level `tools/` tree. `scripts/` retains the
13
+ **runtime-invoked** scripts that the `dot` CLI dispatches to plus a
14
+ few specialised subtrees.
15
+
16
+ ### `scripts/` (CLI dispatch + specialised subtrees)
17
+
18
+ | Path | Purpose | Touched by |
19
+ |---|---|---|
20
+ | `scripts/dot/commands/` | Per-subcommand handlers for the `dot` CLI. Sources `lib/dot/*.sh` (moved out of this tree in v0.2.503 Phase 1). | Dispatched by `bin/dot` |
21
+ | `scripts/dot/powershell/` | Native PowerShell module (`Dot.psm1`) exporting `Get-DotVersion` / `Invoke-DotHelp` / `Test-DotAgentsSync`. | `bin/dot.ps1` |
22
+ | `scripts/dot/data/` | Per-command static data (registry seeds, palette tables). | `scripts/dot/commands/*` |
23
+ | `scripts/lib/` | Cross-cutting library helpers reused across multiple scripts. Example: `secrets_provider.sh` (keychain / pass / age dispatch). | `scripts/dot/commands/*`, ops scripts |
24
+ | `scripts/diagnostics/` | `doctor.sh` and its helpers — long-form environment health check. | `dot doctor` |
25
+ | `scripts/security/` | Security-domain ops: `check-disclosure-key-expiry.sh`, `lock-configs.sh`, etc. | `dot security`, CI |
26
+ | `scripts/secrets/` | Secret-bucket utilities (rotation, audit). | `dot secrets` subcommands |
27
+ | `scripts/theme/` | Wallpaper-to-palette extraction logic. | `dot theme rebuild` |
28
+ | `scripts/tools/` | Tool-helpers shipped via `dot tools` (e.g. `cmatrix.sh`, `emoji-picker.sh`, `figlet-banner.sh`, `log-rotate.sh`). Runtime-invoked. | `dot tools`, `dot env` |
29
+ | `scripts/tuning/` | Opt-in OS tuning scripts (`macos.sh`, `linux.sh`). | `dot tune`, manual invocation |
30
+ | `scripts/ops/` | Repo-wide ops: `rollback.sh`, etc. | `dot rollback`, maintenance |
31
+ | `scripts/fonts/` | Nerd Font install helpers. | `dot fonts` |
32
+ | `scripts/git-hooks/` | Git hooks not managed by chezmoi (kept here for portable install). | `install/provision/*` |
33
+ | `scripts/qa/` | Quality-assurance helpers (PowerShell contract tests, version-consistency checks, scorecard snapshot, etc). | `.github/workflows/pr-signature.yml`, `powershell-contract.yml`, doc-drift |
34
+ | `scripts/demo/` | Demonstration helpers (recordings, screenshots). | Manual |
35
+ | `scripts/version-sync.sh` | Bulk version-string propagator (`scripts/qa/check-version-consistency.sh` is the verifier). | Release flow |
36
+ | `scripts/uninstall.sh` | Reverse-of-`install.sh` — user-invoked. | Manual |
37
+
38
+ ### `tools/` (repo-only ops, not distributable)
39
+
40
+ | Path | Purpose | Touched by |
41
+ |---|---|---|
42
+ | `tools/ci/` | CI-only helpers: `dot-cli-startup-bench.sh`, `install-chezmoi-verified.sh`, `windows-smoke-test.ps1`, `run-coverage.sh`, etc. | `.github/workflows/*` |
43
+ | `tools/release/` | Release-time tasks. | Release workflow |
44
+ | `tools/maintenance/` | Recurring upkeep: `check-updates.sh`, etc. | Cron, manual |
45
+ | `tools/docs/` | Documentation-generation helpers (manual builds, screenshot CI, `generate-command-index.sh`). | `manual-publish.yml`, `dot manual`, doc-drift |
46
+
47
+ ## `scripts/dot/` breakdown
48
+
49
+ The `dot` CLI is implemented as `bin/dot`
50
+ (dispatcher) + `scripts/dot/commands/<cmd>.sh` (per-command
51
+ handlers) + `lib/dot/*.sh` (shared helpers — moved out of
52
+ `scripts/dot/lib/` in v0.2.503 Phase 1 per the
53
+ [reorganisation RFC](../docs/operations/RFC_v0_2_503_reorganization.md)).
54
+
55
+ | Path | Purpose |
56
+ |---|---|
57
+ | `scripts/dot/commands/` | One file per `dot <cmd>` subcommand. Each defines a `cmd_<name>()` function the dispatcher calls. Sources the library via `$SCRIPT_DIR/../../../lib/dot/<X>.sh`. |
58
+ | `scripts/dot/powershell/` | Native PowerShell module — see top-level table. |
59
+ | **`lib/dot/utils.sh`** | Common helpers (resolve_source_dir, validate_name, die, run_script, etc.). |
60
+ | **`lib/dot/ui.sh`** | Single source of truth for CLI output (ui_ok/warn/err/info, ui_header, ui_table_*, ui_spinner_*, ui_confirm, ...). |
61
+ | **`lib/dot/platform.sh`** | OS / shell / WSL detection, path translation. |
62
+ | **`lib/dot/log.sh`** | Structured logging (JSONL audit log when `DOTFILES_AUDIT_LOG=1`). |
63
+ | **`lib/dot/bento.sh`** | The "bento box" layout primitive used by `dot health` and friends. |
64
+
65
+ ## Adding a new subcommand
66
+
67
+ 1. Create `scripts/dot/commands/<name>.sh`:
68
+
69
+ ```bash
70
+ #!/usr/bin/env bash
71
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
72
+ set -euo pipefail
73
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
74
+ # shellcheck source=../lib/utils.sh
75
+ source "$SCRIPT_DIR/../lib/utils.sh"
76
+
77
+ dot_ui_command_banner "<Title>" "${1:-}"
78
+
79
+ cmd_<name>() {
80
+ # ...
81
+ }
82
+
83
+ cmd_<name>_help() {
84
+ cat <<-EOF
85
+ Usage: dot <name> [args]
86
+ # ...
87
+ EOF
88
+ }
89
+ ```
90
+
91
+ 2. Add a dispatch arm in `bin/dot`:
92
+
93
+ ```bash
94
+ <name>) load_commands "<name>"; cmd_<name> "$@" ;;
95
+ ```
96
+
97
+ 3. Document it in `docs/manual/03-reference/01-dot-cli.md` and add
98
+ to `docs/manual/command-index.md`.
99
+
100
+ 4. Add a help-table entry in `bin/dot`'s
101
+ help renderer.
102
+
103
+ 5. Add a unit test under `tests/unit/<domain>/test_<name>.sh`
104
+ (run with `./tests/framework/test_runner.sh`).
105
+
106
+ ## Conventions
107
+
108
+ - **Shell style**: 2-space indent, `set -euo pipefail`, shellcheck-clean
109
+ with the project's flags (`--severity=error -e SC1091 -e SC2030 -e SC2031`).
110
+ - **Formatting**: `shfmt -i 2 -ci`.
111
+ - **Output**: NEVER `printf` raw ANSI. Source `scripts/dot/lib/ui.sh`
112
+ and use `ui_ok`, `ui_table_*`, etc.
113
+ - **Exit codes**: 1 = bad usage, 2 = no provider / dependency missing,
114
+ 3 = empty result / not found, ≥4 = provider-specific. Document
115
+ per-command in the help text.
116
+ - **Validation**: Always `validate_name "$arg" "tool name"` before
117
+ passing user input to `mise`, `gh`, `ssh`, etc.
118
+
119
+ ## See also
120
+
121
+ - `../docs/STRUCTURE.md` — full repository map.
122
+ - `docs/manual/03-reference/01-dot-cli.md` — every `dot <cmd>` documented.
123
+ - `scripts/dot/lib/ui.sh` — the UI primitive library (always source this for output).
@@ -1,96 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # Copyright header validator (zero-tolerance policy).
4
- #
5
- # Scans source files for a copyright header in the first 10 lines. Patterns
6
- # are deliberately narrow to avoid false positives on C-style `(c)` comments
7
- # or the word "token" appearing in running text.
8
- #
9
- # Usage:
10
- # check-copyright-headers.sh [--extensions=sh,lua,nix,...] [--excludes=REGEX]
11
- #
12
- # Exit codes:
13
- # 0 all files have a valid header
14
- # 1 one or more files are missing a header
15
- # 2 invalid invocation
16
-
3
+ # Compat shim: the canonical script moved to tools/ci/ in v0.2.503.
4
+ # Pinned reusable workflows on master still reference the old path;
5
+ # this delegates so they keep working until the next pin bump.
17
6
  set -euo pipefail
18
-
19
- EXTENSIONS_DEFAULT="sh,lua,nix,py,js,ts,go,rs,java,cpp,c,h,hpp"
20
- EXCLUDES_DEFAULT='(^|/)(node_modules|\.git|vendor|target|build)/|\.tmpl$|(^|/)\.chezmoitemplates/'
21
-
22
- EXTENSIONS="$EXTENSIONS_DEFAULT"
23
- EXCLUDES="$EXCLUDES_DEFAULT"
24
-
25
- for arg in "$@"; do
26
- case "$arg" in
27
- --extensions=*) EXTENSIONS="${arg#*=}" ;;
28
- --excludes=*) EXCLUDES="${arg#*=}" ;;
29
- -h | --help)
30
- sed -n '2,14p' "$0" | sed 's/^# \{0,1\}//'
31
- exit 0
32
- ;;
33
- *)
34
- echo "Unknown argument: $arg" >&2
35
- exit 2
36
- ;;
37
- esac
38
- done
39
-
40
- # Narrow patterns — each must be specific enough that running prose cannot match.
41
- # Deliberately DROPPED: bare "(c) " (false-positives in C comments),
42
- # bare "All rights reserved" (often appears in vendored prose).
43
- # Matched by `grep -F`, so these are literal strings.
44
- PATTERNS=(
45
- "Copyright (c)"
46
- "Copyright ©"
47
- "SPDX-License-Identifier:"
48
- "© "
49
- )
50
-
51
- # Build a ripgrep glob like `{*.sh,*.lua,*.nix}` from the comma list.
52
- IFS=',' read -r -a exts <<<"$EXTENSIONS"
53
- glob="{"
54
- for i in "${!exts[@]}"; do
55
- [[ $i -gt 0 ]] && glob+=","
56
- glob+="*.${exts[$i]}"
57
- done
58
- glob+="}"
59
-
60
- mapfile -t all_files < <(rg --files -g "$glob" 2>/dev/null || true)
61
-
62
- if [[ "${#all_files[@]}" -eq 0 ]]; then
63
- echo "::notice::No files matched extensions: $EXTENSIONS"
64
- exit 0
65
- fi
66
-
67
- missing=()
68
- for file in "${all_files[@]}"; do
69
- if [[ "$file" =~ $EXCLUDES ]]; then
70
- continue
71
- fi
72
-
73
- found=false
74
- # Read the first 10 lines once; search each pattern against that buffer.
75
- head_buf="$(head -n 10 "$file" 2>/dev/null || true)"
76
- for pattern in "${PATTERNS[@]}"; do
77
- if grep -qF -- "$pattern" <<<"$head_buf"; then
78
- found=true
79
- break
80
- fi
81
- done
82
-
83
- $found || missing+=("$file")
84
- done
85
-
86
- if [[ "${#missing[@]}" -gt 0 ]]; then
87
- echo "::error::Copyright header validation failed — ${#missing[@]} file(s) missing header"
88
- echo "Files missing a recognised copyright header:"
89
- printf ' - %s\n' "${missing[@]}"
90
- echo
91
- echo "Add ONE of the following to the first 10 lines:"
92
- printf ' - %s\n' "${PATTERNS[@]}"
93
- exit 1
94
- fi
95
-
96
- echo "::notice::All ${#all_files[@]} file(s) have a valid copyright header"
7
+ exec bash "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/tools/ci/check-copyright-headers.sh" "$@"
@@ -1,106 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # =============================================================================
4
- # check-shell-preamble.sh Enforce `set -euo pipefail` (bash) / `set -eu` (sh)
5
- # on every executable shell script in the repo.
6
- #
7
- # Skip-rules:
8
- # * Sourced libraries that declare themselves as such via a "Sourced by ..."
9
- # header comment in the first 15 lines.
10
- # * Explicit opt-out via `# preamble:skip` marker in the first 15 lines
11
- # (used by completion files, init fragments, and other library code that
12
- # is loaded into the caller's shell context).
13
- # * Files under tests/ (the test runner sets shell options for its children).
14
- #
15
- # Invocation:
16
- # * pre-commit local hook (files passed as args)
17
- # * standalone: ./scripts/ci/check-shell-preamble.sh # full repo
18
- # ./scripts/ci/check-shell-preamble.sh file.sh # explicit
19
- # =============================================================================
20
-
3
+ # Compat shim: the canonical script moved to tools/ci/ in v0.2.503.
4
+ # Pinned reusable workflows on master still reference the old path;
5
+ # this delegates so they keep working until the next pin bump.
21
6
  set -euo pipefail
22
-
23
- check_one() {
24
- local f="$1"
25
-
26
- [[ -f "$f" ]] || return 0
27
-
28
- local shebang
29
- shebang="$(head -1 "$f" 2>/dev/null || true)"
30
-
31
- # Only check files with a bash or sh shebang.
32
- case "$shebang" in
33
- *bash*) ;;
34
- *sh) ;;
35
- *) return 0 ;;
36
- esac
37
-
38
- # Skip files declaring themselves as sourced libraries or opting out.
39
- if head -15 "$f" | grep -Eq '^# *(Sourced by |preamble:skip|shellcheck source-only)'; then
40
- return 0
41
- fi
42
-
43
- # Skip the test suite — tests are sourced by tests/framework/test_runner.sh
44
- # which manages shell options for its children.
45
- case "$f" in
46
- tests/*) return 0 ;;
47
- # Bulk-sourced fragments. These directories contain hundreds of
48
- # alias / function / PATH snippets that are sourced into the
49
- # caller's shell context — adding `set -e` locally would corrupt
50
- # the caller. Path-skipped en masse rather than annotated per-file
51
- # (would be 300+ marker comments).
52
- .chezmoitemplates/aliases/*) return 0 ;;
53
- .chezmoitemplates/functions/*) return 0 ;;
54
- .chezmoitemplates/paths/*) return 0 ;;
55
- # dot_config/shell/* and scripts/dot/lib/* are also sourced but
56
- # have explicit `# Sourced by` headers as of #854 (defense in
57
- # depth — the lint also accepts them on header alone).
58
- dot_local/bin/executable_dot_completion) return 0 ;; # zsh completion, sourced into shell
59
- esac
60
-
61
- # Required preamble lives within the first 50 lines (after optional docstring).
62
- local preamble_re
63
- case "$shebang" in
64
- *bash*)
65
- preamble_re='^[[:space:]]*set[[:space:]]+-([eu]+o[[:space:]]+pipefail|euo[[:space:]]+pipefail|eu[[:space:]]*$)'
66
- ;;
67
- *sh)
68
- preamble_re='^[[:space:]]*set[[:space:]]+-eu[o]?'
69
- ;;
70
- esac
71
-
72
- if ! head -50 "$f" | grep -Eq "$preamble_re"; then
73
- echo "MISSING preamble: $f"
74
- return 1
75
- fi
76
- }
77
-
78
- fail=0
79
- if [[ $# -gt 0 ]]; then
80
- for f in "$@"; do
81
- check_one "$f" || fail=1
82
- done
83
- else
84
- # Full-repo scan
85
- while IFS= read -r f; do
86
- check_one "$f" || fail=1
87
- done < <(git ls-files | grep -E '\.sh$|^dot_local/bin/executable_|^scripts/.+\.sh$')
88
- fi
89
-
90
- if [[ $fail -ne 0 ]]; then
91
- cat >&2 <<'MSG'
92
-
93
- Some shell scripts are missing the safety preamble.
94
- * bash → `set -euo pipefail`
95
- * sh → `set -eu`
96
-
97
- If the file is a sourced library, add this header to its first 15 lines:
98
- # Sourced by <parent>.sh; inherits set -euo pipefail
99
-
100
- If the file is a shell init fragment / completion that must NOT enforce its own
101
- options on the caller, add this marker instead:
102
- # preamble:skip
103
-
104
- MSG
105
- exit 1
106
- fi
7
+ exec bash "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/tools/ci/check-shell-preamble.sh" "$@"
@@ -1,57 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # Guard against full-history gitleaks scans on manual runs.
4
- # This ensures workflow checkout remains shallow near gitleaks steps.
5
-
3
+ # Compat shim: the canonical script moved to tools/ci/ in v0.2.503.
4
+ # Pinned reusable workflows on master still reference the old path;
5
+ # this delegates so they keep working until the next pin bump.
6
6
  set -euo pipefail
7
-
8
- check_workflow() {
9
- local workflow="$1"
10
- local failed=0
11
- local line_no
12
-
13
- while IFS=: read -r line_no _; do
14
- local start end context
15
- start=$((line_no - 16))
16
- end=$((line_no + 2))
17
- if [[ "$start" -lt 1 ]]; then
18
- start=1
19
- fi
20
-
21
- context="$(sed -n "${start},${end}p" "$workflow")"
22
-
23
- if [[ "$context" != *"actions/checkout"* ]]; then
24
- echo "ERROR: $workflow:$line_no missing nearby checkout for gitleaks step."
25
- failed=1
26
- continue
27
- fi
28
-
29
- if [[ "$context" != *"fetch-depth: 1"* ]]; then
30
- echo "ERROR: $workflow:$line_no gitleaks step must use checkout fetch-depth: 1."
31
- failed=1
32
- fi
33
-
34
- if [[ "$context" == *"fetch-depth: 0"* ]]; then
35
- echo "ERROR: $workflow:$line_no gitleaks step contains forbidden fetch-depth: 0."
36
- failed=1
37
- fi
38
- done < <(grep -n "gitleaks/gitleaks-action" "$workflow" || true)
39
-
40
- return "$failed"
41
- }
42
-
43
- main() {
44
- local failed=0
45
-
46
- check_workflow ".github/workflows/ci.yml" || failed=1
47
- check_workflow ".github/workflows/security-enhanced.yml" || failed=1
48
-
49
- if [[ "$failed" -ne 0 ]]; then
50
- echo "Gitleaks checkout guard failed."
51
- exit 1
52
- fi
53
-
54
- echo "Gitleaks checkout guard passed."
55
- }
56
-
57
- main "$@"
7
+ exec bash "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/tools/ci/guard-gitleaks-checkout.sh" "$@"
@@ -7,8 +7,8 @@ set -euo pipefail
7
7
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
8
  REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
9
9
 
10
- # shellcheck source=../dot/lib/ui.sh
11
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
10
+ # shellcheck source=../../lib/dot/ui.sh
11
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
12
12
 
13
13
  JSON_MODE=0
14
14
  STRICT_MODE=0
@@ -35,8 +35,8 @@ command -v jq >/dev/null 2>&1 || {
35
35
 
36
36
  a2a_card="$REPO_ROOT/.well-known/agent-card.json"
37
37
  legacy_doc="$REPO_ROOT/.well-known/agent.json"
38
- internal_card="$REPO_ROOT/dot_config/dotfiles/agent-card.json"
39
- agent_profiles="$REPO_ROOT/dot_config/dotfiles/agent-profiles.json"
38
+ internal_card="$REPO_ROOT/defaults/dot_config/dotfiles/agent-card.json"
39
+ agent_profiles="$REPO_ROOT/defaults/dot_config/dotfiles/agent-profiles.json"
40
40
  status="healthy"
41
41
  issues=()
42
42
 
@@ -110,7 +110,7 @@ if [[ -f "$deprecations_file" ]]; then
110
110
  alias_found=1
111
111
  fi
112
112
  function_found=0
113
- if rg -q --glob '*.sh' --glob '*.aliases.sh' --glob '*.tmpl' "^[[:space:]]*(function[[:space:]]+)?${alias_name}[[:space:]]*\\(\\)" "$SCRIPT_DIR/../../.chezmoitemplates/aliases" "$SCRIPT_DIR/../../scripts/dot"; then
113
+ if rg -q --glob '*.sh' --glob '*.aliases.sh' --glob '*.tmpl' "^[[:space:]]*(function[[:space:]]+)?${alias_name}[[:space:]]*\\(\\)" "$SCRIPT_DIR/../../defaults/.chezmoitemplates/aliases" "$SCRIPT_DIR/../../scripts/dot"; then
114
114
  function_found=1
115
115
  fi
116
116
  if [[ $alias_found -eq 1 || $function_found -eq 1 ]]; then
@@ -3,9 +3,9 @@
3
3
  set -euo pipefail
4
4
 
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- # shellcheck source=../dot/lib/utils.sh
6
+ # shellcheck source=../../lib/dot/utils.sh
7
7
  # shellcheck disable=SC1091
8
- source "$SCRIPT_DIR/../dot/lib/utils.sh"
8
+ source "$SCRIPT_DIR/../../lib/dot/utils.sh"
9
9
 
10
10
  src_dir="$(require_source_dir)"
11
11
  manifest="$src_dir/scripts/diagnostics/aliases-manifest.sh"
@@ -44,12 +44,12 @@ _cleanup_files=()
44
44
  trap 'rm -f "${_cleanup_files[@]}"' EXIT
45
45
 
46
46
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
47
- # shellcheck source=../dot/lib/ui.sh
47
+ # shellcheck source=../../lib/dot/ui.sh
48
48
  # shellcheck disable=SC1091
49
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
50
- # shellcheck source=../dot/lib/log.sh
49
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
50
+ # shellcheck source=../../lib/dot/log.sh
51
51
  # shellcheck disable=SC1091
52
- source "$SCRIPT_DIR/../dot/lib/log.sh"
52
+ source "$SCRIPT_DIR/../../lib/dot/log.sh"
53
53
  export DOT_COMMAND="benchmark"
54
54
 
55
55
  BENCHMARK_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/dotfiles/benchmarks"
@@ -6,9 +6,9 @@
6
6
  set -euo pipefail
7
7
 
8
8
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- # shellcheck source=../dot/lib/ui.sh
9
+ # shellcheck source=../../lib/dot/ui.sh
10
10
  # shellcheck disable=SC1091
11
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
11
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
12
12
 
13
13
  ui_init
14
14
 
@@ -8,9 +8,9 @@ trap 'rm -f "${_cleanup_files[@]}"' EXIT
8
8
 
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
11
- # shellcheck source=../dot/lib/ui.sh
11
+ # shellcheck source=../../lib/dot/ui.sh
12
12
  # shellcheck disable=SC1091
13
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
13
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
14
14
  ui_init
15
15
 
16
16
  passthrough=()
@@ -19,15 +19,15 @@
19
19
  set -euo pipefail
20
20
 
21
21
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
22
- # shellcheck source=../dot/lib/ui.sh
22
+ # shellcheck source=../../lib/dot/ui.sh
23
23
  # shellcheck disable=SC1091
24
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
25
- # shellcheck source=../dot/lib/platform.sh
24
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
25
+ # shellcheck source=../../lib/dot/platform.sh
26
26
  # shellcheck disable=SC1091
27
- source "$SCRIPT_DIR/../dot/lib/platform.sh"
28
- # shellcheck source=../dot/lib/log.sh
27
+ source "$SCRIPT_DIR/../../lib/dot/platform.sh"
28
+ # shellcheck source=../../lib/dot/log.sh
29
29
  # shellcheck disable=SC1091
30
- source "$SCRIPT_DIR/../dot/lib/log.sh"
30
+ source "$SCRIPT_DIR/../../lib/dot/log.sh"
31
31
  export DOT_COMMAND="doctor"
32
32
 
33
33
  ui_init
@@ -548,9 +548,30 @@ fi
548
548
  # 2. Slow-init tools that are present but NOT wrapped in _cached_eval.
549
549
  # Each of these runs uncached on every shell start; common offenders eat
550
550
  # 100-500ms apiece on a populated dev machine.
551
+ #
552
+ # Only flag tools that actually emit shell init via `<tool> init <shell>`
553
+ # (or equivalent) and would benefit from caching that output. Plain CLIs
554
+ # like gh/cargo/pnpm/yarn don't have init eval; their completions are
555
+ # cached separately under $ZSH_COMPLETIONS_DIR.
551
556
  unwrapped=""
552
- for tool in nvm fnm pyenv rbenv jenv asdf sdkman conda kubectl helm gh cargo pnpm yarn thefuck broot mcfly; do
557
+ for tool in nvm fnm pyenv rbenv jenv asdf sdkman conda kubectl helm thefuck broot mcfly direnv; do
553
558
  command -v "$tool" >/dev/null 2>&1 || continue
559
+ # If the tool is installed but no shell config sources or evals its
560
+ # init (no `$tool env`, `$tool init`, `$tool.sh`, lazy-load stub), it
561
+ # isn't adding startup cost — skip the warning.
562
+ init_referenced=0
563
+ if grep -rIlqE "\\b${tool}([[:space:]]+(env|init|hook)|\\.sh|_lazy_load_${tool}|_dot_lazy[[:space:]]+${tool})" \
564
+ "$HOME/.config/zsh" "$HOME/.config/fish" "$HOME/.config/shell" 2>/dev/null; then
565
+ init_referenced=1
566
+ fi
567
+ ((init_referenced == 0)) && continue
568
+ # Tools we lazy-load via shell stubs don't need init-eval cache files.
569
+ case "$tool" in
570
+ fnm | nvm | sdkman)
571
+ grep -rIlqE "_lazy_load_${tool}|_dot_lazy[[:space:]]+${tool}" \
572
+ "$HOME/.config/zsh" "$HOME/.config/fish" 2>/dev/null && continue
573
+ ;;
574
+ esac
554
575
  found=0
555
576
  for shell_dir in zsh bash fish; do
556
577
  case "$shell_dir" in
@@ -585,27 +606,36 @@ if command -v zsh >/dev/null 2>&1; then
585
606
  fi
586
607
  fi
587
608
 
588
- # 4. PATH length. Each entry is searched on every command resolution;
589
- # >40 entries is noticeably slow on cold-cache filesystems.
609
+ # 4. PATH length. Each entry is searched on every command resolution.
610
+ # A mise-managed 2026 dev machine routinely adds 60-90 entries (one per
611
+ # installed tool version + per-shim path), so the warn/fail thresholds
612
+ # reflect that baseline rather than a lean default (~40).
590
613
  path_count=$(printf '%s' "${PATH:-}" | tr ':' '\n' | grep -c . || true)
591
- if [[ "$path_count" -le 40 ]]; then
614
+ if [[ "$path_count" -le 75 ]]; then
592
615
  _ok "PATH length" "$path_count entries"
593
- elif [[ "$path_count" -le 80 ]]; then
616
+ elif [[ "$path_count" -le 120 ]]; then
594
617
  _warn "PATH length" "$path_count entries — consider pruning"
595
618
  else
596
619
  _fail "PATH length" "$path_count entries — likely slowing every command"
597
620
  fi
598
621
 
599
622
  # 5. Shell coverage. Surface installed shells that the project's caching
600
- # infrastructure (zsh/bash/fish) doesn't currently maintain caches for.
623
+ # infrastructure doesn't currently maintain caches for. zsh/bash/fish/nu
624
+ # all have a `_cached_eval` analogue; pwsh does not.
601
625
  shells_unmanaged=""
602
626
  for sh in nu pwsh; do
603
- command -v "$sh" >/dev/null 2>&1 && shells_unmanaged="${shells_unmanaged:+$shells_unmanaged, }$sh"
627
+ command -v "$sh" >/dev/null 2>&1 || continue
628
+ case "$sh" in
629
+ nu)
630
+ [[ -f "$HOME/.config/nushell/cached_eval.nu" ]] && continue
631
+ ;;
632
+ esac
633
+ shells_unmanaged="${shells_unmanaged:+$shells_unmanaged, }$sh"
604
634
  done
605
635
  if [[ -z "$shells_unmanaged" ]]; then
606
- _ok "shell coverage" "all installed shells (zsh/bash/fish) are managed"
636
+ _ok "shell coverage" "all installed shells have _cached_eval support"
607
637
  else
608
- _warn "shell coverage" "$shells_unmanaged installed — startup not measured by dot perf"
638
+ _warn "shell coverage" "$shells_unmanaged installed — no _cached_eval helper"
609
639
  fi
610
640
 
611
641
  # 6. Zsh hook count. Heavy precmd/preexec functions compound per-prompt.
@@ -30,9 +30,9 @@
30
30
  set -euo pipefail
31
31
 
32
32
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
- # shellcheck source=../dot/lib/ui.sh
33
+ # shellcheck source=../../lib/dot/ui.sh
34
34
  # shellcheck disable=SC1091
35
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
35
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
36
36
 
37
37
  JSON_MODE=0
38
38
  SHOW_DIFF="${DOTFILES_DRIFT_SHOW_DIFF:-0}"
@@ -6,12 +6,12 @@
6
6
  set -euo pipefail
7
7
 
8
8
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- # shellcheck source=../dot/lib/ui.sh
9
+ # shellcheck source=../../lib/dot/ui.sh
10
10
  # shellcheck disable=SC1091
11
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
12
- # shellcheck source=../dot/lib/log.sh
11
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
12
+ # shellcheck source=../../lib/dot/log.sh
13
13
  # shellcheck disable=SC1091
14
- source "$SCRIPT_DIR/../dot/lib/log.sh"
14
+ source "$SCRIPT_DIR/../../lib/dot/log.sh"
15
15
 
16
16
  # Portable has_command (self-contained; no dependency on utils.sh)
17
17
  has_command() { command -v "$1" >/dev/null 2>&1; }
@@ -3,9 +3,9 @@
3
3
  set -euo pipefail
4
4
 
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- # shellcheck source=../dot/lib/ui.sh
6
+ # shellcheck source=../../lib/dot/ui.sh
7
7
  # shellcheck disable=SC1091
8
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
8
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
9
9
 
10
10
  histfile="${HISTFILE:-$HOME/.zsh_history}"
11
11
  db="${DOTFILES_HISTORY_DB:-$HOME/.local/share/dotfiles/history.sqlite}"