@sebastienrousseau/dotfiles 0.2.502 → 0.2.504

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 (412) hide show
  1. package/CHANGELOG.md +109 -9
  2. package/LICENSE +21 -1283
  3. package/README.md +6 -4
  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/02-config-files.md +2 -2
  20. package/docs/manual/_toc.yml +1 -1
  21. package/docs/manual/command-index.md +72 -59
  22. package/docs/operations/CI_COMPOSITES.md +2 -2
  23. package/docs/operations/COMPLETIONS.md +2 -2
  24. package/docs/operations/COVERAGE.md +5 -5
  25. package/docs/operations/HARD_AUDIT_2026.md +11 -11
  26. package/docs/operations/MAINTENANCE.md +3 -3
  27. package/docs/operations/MANIFEST.md +127 -0
  28. package/docs/operations/RELEASE_PIPELINE.md +130 -0
  29. package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
  30. package/docs/operations/ROADMAP_2026.md +6 -6
  31. package/docs/operations/ROADMAP_V0_2_503.md +134 -0
  32. package/docs/operations/TESTING.md +17 -0
  33. package/docs/operations/TRACEABILITY.md +6 -3
  34. package/docs/operations/VERSION_SYNC.md +4 -4
  35. package/docs/reference/POWERSHELL_PARITY.md +8 -7
  36. package/docs/schema/dot-env-v1.json +110 -0
  37. package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
  38. package/docs/security/CI_PINNING.md +17 -9
  39. package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
  40. package/docs/security/FUZZING.md +114 -0
  41. package/docs/security/INSTALL_VERIFICATION.md +2 -2
  42. package/docs/security/POLICY_RELEASES.md +2 -2
  43. package/docs/security/SCORECARD.md +58 -3
  44. package/docs/security/SHELL_EXEMPTIONS.md +4 -4
  45. package/docs/security/VERIFY_RELEASE.md +201 -0
  46. package/install.sh +118 -5
  47. package/package.json +1 -1
  48. package/scripts/README.md +123 -0
  49. package/scripts/ci/check-copyright-headers.sh +4 -93
  50. package/scripts/ci/check-shell-preamble.sh +4 -103
  51. package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
  52. package/scripts/diagnostics/a2a-conformance.sh +4 -4
  53. package/scripts/diagnostics/alias-governance.sh +1 -1
  54. package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
  55. package/scripts/diagnostics/benchmark.sh +5 -5
  56. package/scripts/diagnostics/conflicts.sh +2 -2
  57. package/scripts/diagnostics/doctor-unified.sh +3 -3
  58. package/scripts/diagnostics/doctor.sh +10 -10
  59. package/scripts/diagnostics/drift-dashboard.sh +2 -2
  60. package/scripts/diagnostics/health.sh +4 -4
  61. package/scripts/diagnostics/history-analysis.sh +2 -2
  62. package/scripts/diagnostics/mcp-doctor.sh +10 -7
  63. package/scripts/diagnostics/perf.sh +5 -5
  64. package/scripts/diagnostics/scorecard.sh +4 -4
  65. package/scripts/diagnostics/security-score.sh +25 -6
  66. package/scripts/diagnostics/smoke-test.sh +2 -2
  67. package/scripts/diagnostics/snapshot.sh +2 -2
  68. package/scripts/diagnostics/verify.sh +4 -4
  69. package/scripts/diagnostics/version-locks.sh +13 -3
  70. package/scripts/diagnostics/workstation-attestation.sh +14 -14
  71. package/scripts/dot/commands/agent.sh +8 -0
  72. package/scripts/dot/commands/agents.sh +14 -4
  73. package/scripts/dot/commands/ai.sh +156 -37
  74. package/scripts/dot/commands/appearance.sh +2 -2
  75. package/scripts/dot/commands/core.sh +2 -2
  76. package/scripts/dot/commands/diagnostics.sh +5 -5
  77. package/scripts/dot/commands/env-emit.sh +202 -0
  78. package/scripts/dot/commands/fleet.sh +22 -16
  79. package/scripts/dot/commands/init.sh +4 -4
  80. package/scripts/dot/commands/lint.sh +9 -4
  81. package/scripts/dot/commands/manual.sh +3 -3
  82. package/scripts/dot/commands/meta.sh +12 -6
  83. package/scripts/dot/commands/patterns.sh +2 -2
  84. package/scripts/dot/commands/registry.sh +4 -4
  85. package/scripts/dot/commands/restore.sh +4 -4
  86. package/scripts/dot/commands/secrets.sh +4 -3
  87. package/scripts/dot/commands/security.sh +2 -2
  88. package/scripts/dot/commands/tools.sh +13 -3
  89. package/scripts/dot/powershell/Dot.psm1 +199 -0
  90. package/scripts/fonts/install-nerd-fonts.sh +2 -2
  91. package/scripts/git-hooks/pre-commit-audit.sh +3 -3
  92. package/scripts/git-hooks/pre-push +13 -0
  93. package/scripts/ops/ai-setup.sh +1 -1
  94. package/scripts/ops/bundle.sh +3 -3
  95. package/scripts/ops/chaos.sh +2 -2
  96. package/scripts/ops/chezmoi-apply.sh +12 -6
  97. package/scripts/ops/heal.sh +4 -4
  98. package/scripts/ops/post-apply-repair.sh +2 -2
  99. package/scripts/ops/prewarm.sh +2 -2
  100. package/scripts/ops/release.sh +4 -4
  101. package/scripts/ops/rollback.sh +4 -4
  102. package/scripts/ops/setup.sh +2 -2
  103. package/scripts/qa/check-version-consistency.sh +123 -0
  104. package/scripts/qa/coverage-baseline.sh +1 -1
  105. package/scripts/qa/docs-coverage.sh +2 -2
  106. package/scripts/qa/powershell-contract.ps1 +1 -1
  107. package/scripts/qa/scorecard-snapshot.sh +127 -0
  108. package/scripts/security/backup.sh +2 -2
  109. package/scripts/security/dns-doh.sh +4 -4
  110. package/scripts/security/encryption-check.sh +4 -4
  111. package/scripts/security/enforce-policies.sh +2 -2
  112. package/scripts/security/firewall.sh +4 -4
  113. package/scripts/security/lock-screen.sh +4 -4
  114. package/scripts/security/manage-secrets.sh +2 -2
  115. package/scripts/security/ssh-cert.sh +2 -2
  116. package/scripts/security/telemetry-kill.sh +4 -4
  117. package/scripts/security/usb-safety.sh +4 -4
  118. package/scripts/theme/extract-heic-frames.sh +114 -0
  119. package/scripts/theme/rebuild-themes.sh +31 -2
  120. package/scripts/theme/switch.sh +13 -6
  121. package/scripts/theme/wallpaper-sync.sh +297 -93
  122. package/scripts/tuning/linux.sh +2 -2
  123. package/scripts/tuning/macos.sh +2 -2
  124. package/scripts/version-sync.sh +74 -10
  125. package/dot_config/.module-manifest.json +0 -69
  126. package/dot_config/ai/identity.md +0 -23
  127. package/dot_config/ai/patterns/architect.md +0 -16
  128. package/dot_config/ai/patterns/hardener.md +0 -15
  129. package/dot_config/ai/patterns/refactor.md +0 -15
  130. package/dot_config/aider/aider.conf.yml +0 -32
  131. package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
  132. package/dot_config/ansible/ansible.cfg +0 -11
  133. package/dot_config/atuin/config.toml.tmpl +0 -47
  134. package/dot_config/bat/config +0 -23
  135. package/dot_config/brave-flags.conf.tmpl +0 -7
  136. package/dot_config/btop/btop.conf +0 -16
  137. package/dot_config/btop/themes/tokyonight.theme +0 -34
  138. package/dot_config/bun/bunfig.toml.tmpl +0 -33
  139. package/dot_config/claude/mcp_servers.json +0 -20
  140. package/dot_config/containers/containers.conf +0 -14
  141. package/dot_config/curl/dot_curlrc +0 -18
  142. package/dot_config/dlv/config.yml +0 -39
  143. package/dot_config/docker/config.json +0 -15
  144. package/dot_config/dotfiles/agent-card.json +0 -29
  145. package/dot_config/dotfiles/agent-profiles.json +0 -92
  146. package/dot_config/dotfiles/boot/README.md +0 -13
  147. package/dot_config/dotfiles/grub/README.md +0 -13
  148. package/dot_config/dotfiles/lock/README.md +0 -13
  149. package/dot_config/dotfiles/mcp-lock.json +0 -33
  150. package/dot_config/dotfiles/mcp-policy.json +0 -52
  151. package/dot_config/dotfiles/mcp-registry.json +0 -47
  152. package/dot_config/dotfiles/model-registry.json +0 -20
  153. package/dot_config/dotfiles/policy-bundles.json +0 -38
  154. package/dot_config/dotfiles/prompt-registry.json +0 -16
  155. package/dot_config/dotfiles/versions.env +0 -18
  156. package/dot_config/duf/duf.conf +0 -6
  157. package/dot_config/duti/defaults.duti +0 -5
  158. package/dot_config/emoji/emoji.txt +0 -34
  159. package/dot_config/environment.d/50-ssh-agent.conf +0 -2
  160. package/dot_config/environment.d/90-wayland.conf +0 -19
  161. package/dot_config/fastfetch/config.jsonc +0 -28
  162. package/dot_config/firefox/user.js.tmpl +0 -58
  163. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
  164. package/dot_config/fish/completions/dot.fish.tmpl +0 -115
  165. package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
  166. package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
  167. package/dot_config/fish/conf.d/direnv.fish +0 -4
  168. package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
  169. package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
  170. package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
  171. package/dot_config/fish/conf.d/mise-activate.fish +0 -5
  172. package/dot_config/fish/config.fish.tmpl +0 -44
  173. package/dot_config/fish/fish_plugins +0 -1
  174. package/dot_config/fish/functions/_.fish +0 -3
  175. package/dot_config/fish/functions/_cached_eval.fish +0 -131
  176. package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
  177. package/dot_config/fish/functions/als.fish +0 -46
  178. package/dot_config/fish/functions/bg-upgrade.fish +0 -7
  179. package/dot_config/fish/functions/c.fish +0 -3
  180. package/dot_config/fish/functions/cat.fish +0 -9
  181. package/dot_config/fish/functions/d.fish +0 -7
  182. package/dot_config/fish/functions/dot.fish +0 -34
  183. package/dot_config/fish/functions/h.fish +0 -3
  184. package/dot_config/fish/functions/l.fish +0 -7
  185. package/dot_config/fish/functions/la.fish +0 -7
  186. package/dot_config/fish/functions/ll.fish +0 -7
  187. package/dot_config/fish/functions/log_error.fish +0 -13
  188. package/dot_config/fish/functions/log_info.fish +0 -13
  189. package/dot_config/fish/functions/lr.fish +0 -7
  190. package/dot_config/fish/functions/lra.fish +0 -7
  191. package/dot_config/fish/functions/ls.fish +0 -7
  192. package/dot_config/fish/functions/lt.fish +0 -7
  193. package/dot_config/fish/functions/lta.fish +0 -7
  194. package/dot_config/fish/functions/notify-run.fish +0 -11
  195. package/dot_config/fish/functions/q.fish +0 -3
  196. package/dot_config/fish/functions/silent-run.fish +0 -7
  197. package/dot_config/fish/functions/yy.fish +0 -8
  198. package/dot_config/flatpak/flatpak.list +0 -4
  199. package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
  200. package/dot_config/foot/foot.ini.tmpl +0 -33
  201. package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
  202. package/dot_config/fzf/fzf.zsh +0 -48
  203. package/dot_config/gem/gemrc +0 -9
  204. package/dot_config/gh/config.yml +0 -12
  205. package/dot_config/ghostty/config.tmpl +0 -165
  206. package/dot_config/git/allowed_signers.tmpl +0 -18
  207. package/dot_config/git/attributes +0 -12
  208. package/dot_config/git/commit-template +0 -10
  209. package/dot_config/git/hooks/executable_commit-msg +0 -146
  210. package/dot_config/git/ignore +0 -27
  211. package/dot_config/gnupg/gpg-agent.conf +0 -11
  212. package/dot_config/go/golangci.yml +0 -118
  213. package/dot_config/go/gopls.json +0 -30
  214. package/dot_config/goose/config.yaml +0 -29
  215. package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
  216. package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
  217. package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
  218. package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
  219. package/dot_config/htop/htoprc +0 -20
  220. package/dot_config/inputrc +0 -2
  221. package/dot_config/ipython/profile_default/ipython_config.py +0 -19
  222. package/dot_config/just/justfile +0 -122
  223. package/dot_config/k9s/config.yaml +0 -65
  224. package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
  225. package/dot_config/kanshi/config.tmpl +0 -22
  226. package/dot_config/karabiner/karabiner.json +0 -14
  227. package/dot_config/kitty/kitty.conf.tmpl +0 -53
  228. package/dot_config/lazydocker/config.yml +0 -186
  229. package/dot_config/lazygit/config.yml +0 -35
  230. package/dot_config/mako/config +0 -47
  231. package/dot_config/mas/masapps.txt +0 -5
  232. package/dot_config/micro/settings.json +0 -3
  233. package/dot_config/mimeapps.list +0 -77
  234. package/dot_config/minikube/config.json +0 -13
  235. package/dot_config/mise/config.toml +0 -99
  236. package/dot_config/mongosh/mongoshrc.js +0 -68
  237. package/dot_config/mpv/input.conf +0 -47
  238. package/dot_config/mpv/mpv.conf +0 -47
  239. package/dot_config/mycli/myclirc +0 -67
  240. package/dot_config/nano/nanorc +0 -28
  241. package/dot_config/ncdu/config +0 -12
  242. package/dot_config/niri/config.kdl.tmpl +0 -327
  243. package/dot_config/nushell/aliases.nu +0 -18
  244. package/dot_config/nushell/cached_eval.nu +0 -80
  245. package/dot_config/nushell/completions.nu.tmpl +0 -52
  246. package/dot_config/nushell/config.nu.tmpl +0 -86
  247. package/dot_config/nushell/env.nu.tmpl +0 -102
  248. package/dot_config/nushell/functions.nu.tmpl +0 -17
  249. package/dot_config/nvim/init.lua +0 -18
  250. package/dot_config/nvim/lazy-lock.json +0 -58
  251. package/dot_config/nvim/lua/config/autocmds.lua +0 -107
  252. package/dot_config/nvim/lua/config/keymaps.lua +0 -92
  253. package/dot_config/nvim/lua/config/lazy.lua +0 -44
  254. package/dot_config/nvim/lua/config/options.lua +0 -49
  255. package/dot_config/nvim/lua/plugins/ai.lua +0 -75
  256. package/dot_config/nvim/lua/plugins/coding.lua +0 -216
  257. package/dot_config/nvim/lua/plugins/completion.lua +0 -60
  258. package/dot_config/nvim/lua/plugins/dap.lua +0 -412
  259. package/dot_config/nvim/lua/plugins/editor.lua +0 -55
  260. package/dot_config/nvim/lua/plugins/git.lua +0 -10
  261. package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
  262. package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
  263. package/dot_config/nvim/lua/plugins/rust.lua +0 -34
  264. package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
  265. package/dot_config/nvim/lua/plugins/ui.lua +0 -509
  266. package/dot_config/paru/paru.conf +0 -10
  267. package/dot_config/pip/pip.conf.tmpl +0 -32
  268. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
  269. package/dot_config/pueue/pueue.yml +0 -34
  270. package/dot_config/pypoetry/config.toml +0 -6
  271. package/dot_config/pyrightconfig.json +0 -5
  272. package/dot_config/raycast/README.md +0 -13
  273. package/dot_config/redis/redisclirc +0 -41
  274. package/dot_config/ripgrep/ripgreprc +0 -21
  275. package/dot_config/shell/00-core-paths.sh.tmpl +0 -141
  276. package/dot_config/shell/05-core-safety.sh +0 -48
  277. package/dot_config/shell/10-secrets.sh +0 -41
  278. package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
  279. package/dot_config/shell/40-ls-colors.sh +0 -49
  280. package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
  281. package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
  282. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
  283. package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
  284. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
  285. package/dot_config/shell/Brewfile +0 -207
  286. package/dot_config/shell/Brewfile.cask +0 -92
  287. package/dot_config/shell/Brewfile.cli +0 -127
  288. package/dot_config/shell/README.md +0 -284
  289. package/dot_config/shell/als_data.txt.tmpl +0 -65
  290. package/dot_config/shell/custom/auto_ls.zsh +0 -20
  291. package/dot_config/shell/custom/context_suggest.zsh +0 -68
  292. package/dot_config/shell/custom/error_analysis.zsh +0 -45
  293. package/dot_config/sops/dot_sops.yaml +0 -23
  294. package/dot_config/starship.toml.tmpl +0 -202
  295. package/dot_config/swaylock/config +0 -43
  296. package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
  297. package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
  298. package/dot_config/systemd/user/pueued.service +0 -12
  299. package/dot_config/systemd/user/ssh-agent.service +0 -12
  300. package/dot_config/task/Taskfile.yml +0 -86
  301. package/dot_config/tflint/tflint.hcl +0 -9
  302. package/dot_config/tmux/tmux.conf.tmpl +0 -223
  303. package/dot_config/topgrade.toml.tmpl +0 -54
  304. package/dot_config/user-dirs.dirs +0 -10
  305. package/dot_config/vscode/extensions.txt +0 -11
  306. package/dot_config/vscode/settings.json.tmpl +0 -82
  307. package/dot_config/waybar/config.jsonc.tmpl +0 -90
  308. package/dot_config/waybar/style.css.tmpl +0 -211
  309. package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
  310. package/dot_config/wget/wgetrc +0 -12
  311. package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
  312. package/dot_config/yarn/yarnrc.yml +0 -36
  313. package/dot_config/yazi/keymap.toml +0 -67
  314. package/dot_config/yazi/theme.toml +0 -102
  315. package/dot_config/yazi/yazi.toml +0 -40
  316. package/dot_config/zathura/zathurarc +0 -52
  317. package/dot_config/zellij/config.kdl.tmpl +0 -79
  318. package/dot_config/zsh/dot_zprofile +0 -7
  319. package/dot_config/zsh/dot_zshenv +0 -5
  320. package/dot_config/zsh/dot_zshrc.tmpl +0 -688
  321. package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
  322. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
  323. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
  324. package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
  325. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
  326. package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
  327. package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
  328. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
  329. package/dot_local/bin/executable_ai-update +0 -195
  330. package/dot_local/bin/executable_ai_core +0 -152
  331. package/dot_local/bin/executable_antigravity +0 -11
  332. package/dot_local/bin/executable_b64 +0 -84
  333. package/dot_local/bin/executable_bm +0 -79
  334. package/dot_local/bin/executable_cb +0 -39
  335. package/dot_local/bin/executable_dot +0 -636
  336. package/dot_local/bin/executable_dot-ai +0 -36
  337. package/dot_local/bin/executable_dot-bootstrap +0 -76
  338. package/dot_local/bin/executable_dot-launch-or-focus +0 -52
  339. package/dot_local/bin/executable_dot-load-benchmark +0 -31
  340. package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
  341. package/dot_local/bin/executable_dot-theme-sync +0 -952
  342. package/dot_local/bin/executable_dot_completion +0 -57
  343. package/dot_local/bin/executable_dtags +0 -28
  344. package/dot_local/bin/executable_epoch +0 -67
  345. package/dot_local/bin/executable_extract +0 -41
  346. package/dot_local/bin/executable_gbd +0 -52
  347. package/dot_local/bin/executable_gd +0 -42
  348. package/dot_local/bin/executable_git-ai-commit +0 -175
  349. package/dot_local/bin/executable_git-ai-diff +0 -169
  350. package/dot_local/bin/executable_gl +0 -101
  351. package/dot_local/bin/executable_hash +0 -161
  352. package/dot_local/bin/executable_hashsum +0 -160
  353. package/dot_local/bin/executable_hex +0 -115
  354. package/dot_local/bin/executable_jsonv +0 -78
  355. package/dot_local/bin/executable_jwt +0 -94
  356. package/dot_local/bin/executable_kill-port +0 -75
  357. package/dot_local/bin/executable_lorem +0 -118
  358. package/dot_local/bin/executable_mkscript +0 -35
  359. package/dot_local/bin/executable_monitor +0 -56
  360. package/dot_local/bin/executable_myip +0 -51
  361. package/dot_local/bin/executable_notify +0 -24
  362. package/dot_local/bin/executable_open +0 -38
  363. package/dot_local/bin/executable_pw +0 -27
  364. package/dot_local/bin/executable_rec-start +0 -46
  365. package/dot_local/bin/executable_rec-stop +0 -35
  366. package/dot_local/bin/executable_regex +0 -132
  367. package/dot_local/bin/executable_start-niri +0 -8
  368. package/dot_local/bin/executable_tmux-sessionizer +0 -314
  369. package/dot_local/bin/executable_tour +0 -177
  370. package/dot_local/bin/executable_up +0 -23
  371. package/dot_local/bin/executable_update +0 -142
  372. package/dot_local/bin/executable_uuid +0 -87
  373. package/dot_local/bin/executable_win +0 -32
  374. package/dot_local/bin/executable_yamlv +0 -57
  375. package/dot_local/share/bash-completion/completions/dot +0 -72
  376. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  382. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  383. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  384. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  385. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  386. package/dot_local/share/man/man1/dot.1 +0 -149
  387. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
  388. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
  389. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
  390. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
  391. package/dot_local/share/zsh/completions/.keep +0 -0
  392. package/dot_local/share/zsh/completions/_dot +0 -287
  393. package/scripts/ci/check-dangerous-chmod.sh +0 -19
  394. package/scripts/ci/check-deps-dev.sh +0 -236
  395. package/scripts/ci/check-insecure-tls.sh +0 -61
  396. package/scripts/ci/check-regression-traceability.sh +0 -67
  397. package/scripts/ci/dot-cli-startup-bench.sh +0 -126
  398. package/scripts/ci/install-chezmoi-verified.sh +0 -67
  399. package/scripts/ci/lint-reusable-pins.sh +0 -78
  400. package/scripts/ci/run-coverage.sh +0 -451
  401. package/scripts/ci/validate-chezmoidata.sh +0 -25
  402. package/scripts/ci/validate-ci-config.sh +0 -224
  403. package/scripts/ci/windows-smoke-test.ps1 +0 -136
  404. package/scripts/docs/build-manual.sh +0 -883
  405. package/scripts/docs/check-manual.sh +0 -213
  406. package/scripts/dot/lib/bento.sh +0 -50
  407. package/scripts/dot/lib/log.sh +0 -200
  408. package/scripts/dot/lib/platform.sh +0 -112
  409. package/scripts/dot/lib/ui.sh +0 -650
  410. package/scripts/dot/lib/utils.sh +0 -377
  411. package/scripts/maintenance/check-updates.sh +0 -131
  412. package/scripts/release/package-policy-bundles.sh +0 -125
@@ -1,451 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # =============================================================================
4
- # run-coverage.sh — Bash code-coverage runner using pure xtrace
5
- # instrumentation. Emits lcov.info at $COVERAGE_OUT.
6
- #
7
- # Why pure xtrace (not kcov):
8
- # kcov v43 on Ubuntu 24.04 + bash 5.2 won't emit bash-script
9
- # coverage in either mode: without bash-dbgsym it captures nothing,
10
- # and with bash-dbgsym it captures bash's *C-binary* internals
11
- # (ctype.h, stdio.h) instead of the .sh file lines we care about.
12
- # We bypass kcov entirely by using bash's own xtrace mechanism:
13
- #
14
- # PS4='+:${LINENO}:${BASH_SOURCE}:' # encode line + file in trace
15
- # BASH_ENV=/setup-that-runs-set-x # turn on xtrace in every
16
- # # non-interactive bash, so
17
- # # children inherit tracing
18
- # bash test.sh 2>traces/test.trace # capture lines per test
19
- #
20
- # Then we parse all traces with regex and write lcov.info. This is
21
- # the same mechanism bashcov uses, minus the Ruby runtime.
22
- #
23
- # Linux + macOS both work (macOS bash 3.2 supports BASH_XTRACEFD as
24
- # well — verified locally on bash 5.3 via Homebrew). The pre-commit
25
- # hook in this repo can invoke this on any platform.
26
- #
27
- # Closes the runner half of #856 / Slice 1 of #883.
28
- # =============================================================================
29
-
30
- set -uo pipefail
31
-
32
- REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
33
- TESTS_DIR="${TESTS_DIR:-$REPO_ROOT/tests}"
34
- COVERAGE_DIR="${COVERAGE_DIR:-$REPO_ROOT/coverage}"
35
- COVERAGE_OUT="${COVERAGE_OUT:-$COVERAGE_DIR/lcov.info}"
36
- MIN_COVERAGE_PCT="${MIN_COVERAGE_PCT:-0}" # initial floor; tighten per slice
37
- COV_INCLUDE_DIRS="${COV_INCLUDE_DIRS:-$REPO_ROOT/scripts:$REPO_ROOT/dot_local/bin:$REPO_ROOT/.chezmoitemplates/functions}"
38
- JOBS="${JOBS:-$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)}"
39
- COV_TEST_TIMEOUT="${COV_TEST_TIMEOUT:-60}"
40
-
41
- mkdir -p "$COVERAGE_DIR"
42
- trace_dir="$COVERAGE_DIR/traces"
43
- rm -rf "$trace_dir"
44
- mkdir -p "$trace_dir"
45
-
46
- # -----------------------------------------------------------------------------
47
- # BASH_ENV setup file: enables xtrace in every non-interactive bash that
48
- # inherits it. Child processes spawned via `bash $SCRIPT` get their own
49
- # tracing turned on automatically.
50
- # -----------------------------------------------------------------------------
51
- bash_env="$COVERAGE_DIR/_cov_bashenv.sh"
52
- cat >"$bash_env" <<'SETUP'
53
- # coverage runtime — enable xtrace, define PS4 with file+line markers.
54
- # `${BASH_SOURCE:-}` (not `${BASH_SOURCE}`) prevents PS4 evaluation
55
- # from failing under `set -u`: at the top level of a `bash -c`
56
- # script, BASH_SOURCE[0] is unbound; an unguarded expansion under
57
- # `set -u` aborts the shell, taking out any test that sources a
58
- # `set -euo pipefail` library file.
59
- set -x
60
- PS4='+@COV@:${LINENO}:${BASH_SOURCE:-}:@ '
61
- SETUP
62
-
63
- # Sanity-probe: run one trivial script through the pipeline so a
64
- # subsequent failure of the real sweep can be diagnosed quickly.
65
- probe_target="$COVERAGE_DIR/_probe_target.sh"
66
- cat >"$probe_target" <<'PROBE'
67
- #!/usr/bin/env bash
68
- set -uo pipefail
69
- echo "probe-line-a"
70
- x=1; y=2
71
- echo "probe-sum=$((x + y))"
72
- PROBE
73
- chmod +x "$probe_target"
74
-
75
- PS4='+@COV@:${LINENO}:${BASH_SOURCE}:@ ' \
76
- BASH_ENV="$bash_env" \
77
- bash "$probe_target" 2>"$trace_dir/_probe.trace" >/dev/null || true
78
- probe_lines=$(grep -cE "^\+@COV@:[0-9]+:.*${probe_target}:@" "$trace_dir/_probe.trace" 2>/dev/null || echo 0)
79
- echo "probe: ${probe_lines} traced lines from ${probe_target}" >&2
80
- if [[ "$probe_lines" -eq 0 ]]; then
81
- echo "::error::xtrace probe captured no lines — coverage mechanism broken" >&2
82
- exit 2
83
- fi
84
-
85
- # -----------------------------------------------------------------------------
86
- # Collect test files (mirror tests/framework/test_runner.sh discovery).
87
- # -----------------------------------------------------------------------------
88
- mapfile -t test_files < <(find "$TESTS_DIR/unit" -name 'test_*.sh' -type f | sort)
89
-
90
- if [[ "${#test_files[@]}" -eq 0 ]]; then
91
- echo "::error::no unit test files discovered under $TESTS_DIR/unit" >&2
92
- exit 1
93
- fi
94
-
95
- echo "Tracing ${#test_files[@]} test files (parallel × $JOBS, timeout ${COV_TEST_TIMEOUT}s/test)..." >&2
96
-
97
- # -----------------------------------------------------------------------------
98
- # Worker function — runs one test under xtrace, captures stderr.
99
- # -----------------------------------------------------------------------------
100
- # shellcheck disable=SC2329 # called indirectly via xargs subshell
101
- run_one() {
102
- local f="$1"
103
- local trace
104
- trace="$COV_TRACE_DIR/$(basename "$f" .sh).trace"
105
- PS4='+@COV@:${LINENO}:${BASH_SOURCE}:@ ' \
106
- BASH_ENV="$COV_BASH_ENV" \
107
- timeout --kill-after=5 "$COV_TEST_TIMEOUT" \
108
- bash "$f" 2>"$trace" >/dev/null || true
109
- }
110
-
111
- export COV_TRACE_DIR="$trace_dir"
112
- export COV_BASH_ENV="$bash_env"
113
- export COV_TEST_TIMEOUT
114
- export -f run_one
115
-
116
- start_ts=$(date +%s)
117
- printf '%s\n' "${test_files[@]}" |
118
- xargs -I{} -n1 -P"$JOBS" bash -c 'run_one "$@"' _ {} ||
119
- true
120
- elapsed=$(($(date +%s) - start_ts))
121
- echo "trace phase done in ${elapsed}s" >&2
122
-
123
- # -----------------------------------------------------------------------------
124
- # Aggregate trace files → lcov.info.
125
- # -----------------------------------------------------------------------------
126
- python3 - "$COVERAGE_OUT" "$trace_dir" "$REPO_ROOT" "$COV_INCLUDE_DIRS" <<'PY'
127
- """Aggregate bash xtrace output into lcov.info."""
128
- import os
129
- import re
130
- import sys
131
- from collections import defaultdict
132
- from pathlib import Path
133
-
134
- out_path, trace_dir, repo_root, include_dirs_spec = sys.argv[1:5]
135
- include_dirs = [Path(p).resolve() for p in include_dirs_spec.split(":") if p]
136
- trace_dir = Path(trace_dir)
137
- repo_root = Path(repo_root).resolve()
138
-
139
- # -----------------------------------------------------------------------------
140
- # Skip-list — paths (relative to repo_root) that the xtrace mechanism
141
- # cannot measure meaningfully in our sandbox. Listed once at the
142
- # aggregator level so individual scripts don't need to be peppered with
143
- # LCOV_EXCL_START/STOP markers. Categories:
144
- # 1. Interactive / animation scripts (matrix, pipes, banner, cmatrix,
145
- # stopwatch, rainbow, ql) — require a TTY + user input; the
146
- # function body never returns to xtrace within a test budget.
147
- # 2. Self-reference — run-coverage.sh is the runner itself; the
148
- # runner traces other scripts but not itself.
149
- # 3. CI-only entry points that mutate real environments (pre-push,
150
- # release, install, bump, lint, check-deps-dev, validate-ci-config,
151
- # reliability-audit, coverage-baseline, lint-reusable-pins).
152
- # 4. Top-level system-mutation scripts that need real OS state
153
- # (rebuild-themes scans wallpapers; apply-gnome-theme drives
154
- # gsettings; wallpaper-sync pulls from a remote; build-manual
155
- # shells out to pandoc; chaos.sh and record.sh produce side
156
- # effects we can't fake under bash xtrace).
157
- # Files here are entirely removed from the lcov denominator (no SF:
158
- # entry emitted). The covered code in the *rest* of the repo is the
159
- # meaningful denominator.
160
- # -----------------------------------------------------------------------------
161
- SKIP_PATHS = {
162
- # Interactive / animation — require a TTY + user input.
163
- ".chezmoitemplates/functions/interactive/matrix.sh",
164
- ".chezmoitemplates/functions/interactive/cmatrix.sh",
165
- ".chezmoitemplates/functions/interactive/stopwatch.sh",
166
- ".chezmoitemplates/functions/interactive/banner.sh",
167
- ".chezmoitemplates/functions/interactive/rainbow.sh",
168
- ".chezmoitemplates/functions/interactive/pipes.sh",
169
- ".chezmoitemplates/functions/misc/pipes.sh",
170
- ".chezmoitemplates/functions/misc/view-source.sh",
171
- ".chezmoitemplates/functions/misc/caffeine.sh", # daemon controller, real /tmp/lock
172
- ".chezmoitemplates/functions/nav/ql.sh",
173
- "scripts/tools/pipes.sh",
174
- "scripts/tools/cmatrix.sh",
175
- "scripts/demo/record.sh",
176
- "dot_local/bin/executable_tmux-sessionizer",
177
- "dot_local/bin/executable_myip",
178
- "dot_local/bin/executable_tour", # requires TTY + gum
179
- # Self-reference + CI gates
180
- "scripts/ci/run-coverage.sh",
181
- "scripts/ci/check-deps-dev.sh",
182
- "scripts/ci/lint-reusable-pins.sh",
183
- "scripts/ci/validate-chezmoidata.sh",
184
- "scripts/ci/validate-ci-config.sh",
185
- "scripts/ci/check-dangerous-chmod.sh",
186
- "scripts/git-hooks/pre-push",
187
- "scripts/qa/reliability-audit.sh",
188
- "scripts/qa/coverage-baseline.sh",
189
- "scripts/dot/commands/lint.sh",
190
- # System mutation — drives real OS state we can't fake under xtrace.
191
- "scripts/theme/rebuild-themes.sh",
192
- "scripts/theme/apply-gnome-theme.sh",
193
- "scripts/theme/wallpaper-sync.sh",
194
- "scripts/theme/install-catppuccin-themes.sh",
195
- "scripts/ops/chaos.sh",
196
- "scripts/ops/release.sh",
197
- "scripts/ops/heal-tools.sh",
198
- "scripts/ops/chezmoi-apply.sh",
199
- "scripts/docs/build-manual.sh",
200
- "scripts/security/manage-secrets.sh",
201
- "scripts/security/enforce-policies.sh",
202
- "scripts/security/ssh-cert.sh",
203
- "scripts/security/firewall.sh",
204
- "scripts/lib/secrets_provider.sh", # keychain/gpg/age bindings
205
- "scripts/ops/setup.sh", # post-install bootstrap
206
- "scripts/theme/wallpaper-rotate.sh", # cron-driven wallpaper change
207
- "scripts/git-hooks/pre-commit-audit.sh", # full hook flow needs real index
208
- "dot_local/bin/executable_dot-theme-sync", # signals live apps
209
- "dot_local/bin/executable_dot-bootstrap",
210
- "dot_local/bin/executable_update",
211
- "dot_local/bin/executable_ai_core",
212
- "dot_local/bin/executable_ai-update",
213
- }
214
-
215
- def is_skipped(abs_path: Path) -> bool:
216
- try:
217
- rel = abs_path.resolve().relative_to(repo_root).as_posix()
218
- except ValueError:
219
- return False
220
- return rel in SKIP_PATHS
221
-
222
- # Pattern: +@COV@:<lineno>:<source>:@
223
- hit_re = re.compile(r"^\+@COV@:(\d+):([^:]+):@")
224
-
225
- # files[abs_path][line] = total hits
226
- files = defaultdict(lambda: defaultdict(int))
227
-
228
- def in_includes(path: Path) -> bool:
229
- try:
230
- rp = path.resolve()
231
- except (OSError, RuntimeError):
232
- return False
233
- for inc in include_dirs:
234
- try:
235
- rp.relative_to(inc)
236
- return True
237
- except ValueError:
238
- continue
239
- return False
240
-
241
- # Parse every trace file. Each trace can be MBs; iterate line by line.
242
- for trace_path in sorted(trace_dir.glob("*.trace")):
243
- try:
244
- with open(trace_path, "r", errors="replace") as f:
245
- for line in f:
246
- m = hit_re.match(line)
247
- if not m:
248
- continue
249
- lineno = int(m.group(1))
250
- src = m.group(2).strip()
251
- if not src or src == "main":
252
- continue
253
- src_path = Path(src)
254
- if not src_path.is_absolute():
255
- src_path = (repo_root / src_path)
256
- # Always resolve so `..`-style paths from inside
257
- # `commands/foo.sh` sourcing `../lib/log.sh` collapse
258
- # to the same canonical SF: key as a direct hit on
259
- # `lib/log.sh`. Without this we get three SF: blocks
260
- # for one file and the denominator inflates.
261
- try:
262
- src_path = src_path.resolve()
263
- except (OSError, RuntimeError):
264
- pass
265
- if not in_includes(src_path):
266
- continue
267
- if is_skipped(src_path):
268
- continue
269
- files[str(src_path)][lineno] += 1
270
- except OSError as e:
271
- print(f"warn: read error {trace_path}: {e}", file=sys.stderr)
272
-
273
- # Sweep through include-dirs and add executable lines for files we never
274
- # touched, so lcov coverage % reflects total source surface, not just
275
- # touched files.
276
- ws_re = re.compile(r"^\s*$")
277
- comment_re = re.compile(r"^\s*#")
278
- shebang_re = re.compile(r"^\s*#!")
279
-
280
- def executable_lines(path: Path):
281
- """Lines that bash xtrace can plausibly emit.
282
-
283
- Excludes:
284
- - blanks / shebangs / comments (already)
285
- - structural-only keywords (`fi`, `done`, `else`, `esac`, `then`,
286
- `do`, `in`, bare `{`/`}` braces) — these are syntax, not
287
- commands; xtrace never traces them
288
- - heredoc body lines (between `<<EOF` and `EOF`) — content, not
289
- executed
290
- - `case` pattern labels (`foo)`) — the matched body executes,
291
- not the pattern itself
292
-
293
- This matches what `bash -x` actually produces a `+`-prefixed
294
- line for, so the denominator reflects measurable lines.
295
-
296
- Honor LCOV_EXCL_LINE / LCOV_EXCL_START / LCOV_EXCL_STOP markers
297
- so authors can exempt genuinely unreachable lines (platform-
298
- gated branches, root-only paths, dead-code stubs).
299
- """
300
- import re as _re
301
- structural = _re.compile(
302
- r"^\s*("
303
- r"fi|done|else|elif|esac|then|do|in|"
304
- r"\}|\{|"
305
- r"\)\s*;?;?\s*$|" # bare `)` (case pattern close)
306
- r";;\s*$" # `;;` case-clause terminator
307
- r")\s*(#.*)?$"
308
- )
309
- case_pattern = _re.compile(r"^\s*[a-zA-Z0-9_\*\?\[\|/\-\.+]+\)\s*(#.*)?$")
310
- heredoc_open = _re.compile(r"<<-?\s*[\"\']?([A-Za-z_][A-Za-z0-9_]*)[\"\']?")
311
- excl_line = _re.compile(r"#\s*LCOV_EXCL_LINE")
312
- excl_start = _re.compile(r"#\s*LCOV_EXCL_START")
313
- excl_stop = _re.compile(r"#\s*LCOV_EXCL_STOP")
314
- # Scripts that explicitly turn off xtrace can't be measured by
315
- # this mechanism — the bash runtime simply stops emitting trace
316
- # records. Treat everything after `set +x` / `set +o xtrace`
317
- # as excluded so it doesn't sink the denominator.
318
- xtrace_off = _re.compile(r"^\s*set\s+(\+x|\+o\s+xtrace)\b")
319
-
320
- try:
321
- with open(path, "r", errors="replace") as f:
322
- text = f.read().splitlines()
323
- except OSError:
324
- return []
325
-
326
- out = []
327
- in_heredoc = None # the terminator we're waiting for
328
- excluding = False
329
- xtrace_disabled = False
330
- for i, line in enumerate(text, 1):
331
- # LCOV_EXCL handling
332
- if excl_start.search(line):
333
- excluding = True
334
- continue
335
- if excl_stop.search(line):
336
- excluding = False
337
- continue
338
- if excluding:
339
- continue
340
- if excl_line.search(line):
341
- continue
342
-
343
- # Once a script disables xtrace, no further lines can be
344
- # measured by this mechanism — drop them from the denominator.
345
- if xtrace_disabled:
346
- continue
347
- if xtrace_off.match(line):
348
- xtrace_disabled = True
349
- continue
350
-
351
- # Heredoc body — track and skip
352
- if in_heredoc is not None:
353
- if line.strip() == in_heredoc:
354
- in_heredoc = None
355
- continue
356
- hd = heredoc_open.search(line)
357
- if hd and not comment_re.match(line):
358
- in_heredoc = hd.group(1)
359
-
360
- if not line or ws_re.match(line):
361
- continue
362
- if shebang_re.match(line):
363
- continue
364
- if comment_re.match(line):
365
- continue
366
- if structural.match(line):
367
- continue
368
- if case_pattern.match(line):
369
- continue
370
- out.append(i)
371
- return out
372
-
373
- for inc in include_dirs:
374
- if not inc.exists():
375
- continue
376
- for path in inc.rglob("*.sh"):
377
- if is_skipped(path):
378
- continue
379
- ap = str(path.resolve())
380
- existing = files[ap] # creates the entry on touch
381
- for ln in executable_lines(path):
382
- if ln not in existing:
383
- existing[ln] = 0
384
- for path in inc.rglob("*"):
385
- # also include shebanged shell scripts without .sh
386
- if path.is_file() and not path.suffix and path.stat().st_size > 0:
387
- if is_skipped(path):
388
- continue
389
- try:
390
- with open(path, "r", errors="replace") as f:
391
- first = f.readline()
392
- except OSError:
393
- continue
394
- if first.startswith("#!") and ("bash" in first or "sh" in first):
395
- ap = str(path.resolve())
396
- existing = files[ap]
397
- for ln in executable_lines(path):
398
- if ln not in existing:
399
- existing[ln] = 0
400
-
401
- # Emit lcov.info
402
- with open(out_path, "w") as out:
403
- for filename in sorted(files):
404
- out.write(f"SF:{filename}\n")
405
- for ln in sorted(files[filename]):
406
- out.write(f"DA:{ln},{files[filename][ln]}\n")
407
- out.write("end_of_record\n")
408
-
409
- # Summary
410
- total_files = len(files)
411
- total_lines = sum(len(lines) for lines in files.values())
412
- covered = sum(1 for lines in files.values() for h in lines.values() if h > 0)
413
- pct = (covered * 100.0 / total_lines) if total_lines else 0.0
414
- print(f"Aggregated: {total_files} files, {covered}/{total_lines} lines = {pct:.2f}%",
415
- file=sys.stderr)
416
- PY
417
-
418
- if [[ ! -s "$COVERAGE_OUT" ]]; then
419
- echo "::error::failed to produce lcov.info — aggregator wrote empty file." >&2
420
- exit 1
421
- fi
422
-
423
- # -----------------------------------------------------------------------------
424
- # Threshold check.
425
- # -----------------------------------------------------------------------------
426
- summary=$(
427
- python3 - "$COVERAGE_OUT" <<'PY'
428
- import sys
429
- total = covered = 0
430
- with open(sys.argv[1]) as f:
431
- for line in f:
432
- if line.startswith("DA:"):
433
- _, rest = line.split(":", 1)
434
- _, hits = rest.strip().split(",")
435
- total += 1
436
- if int(hits) > 0:
437
- covered += 1
438
- pct = (covered * 100.0 / total) if total else 0.0
439
- print(f"{covered} {total} {pct:.2f}")
440
- PY
441
- )
442
- read -r covered total pct <<<"$summary"
443
- echo "Coverage: ${covered}/${total} lines = ${pct}% (output: $COVERAGE_OUT)"
444
-
445
- below=$(awk -v p="$pct" -v t="$MIN_COVERAGE_PCT" 'BEGIN{print (p+0 < t+0) ? "1" : "0"}')
446
- if [[ "$below" == "1" ]]; then
447
- echo "::error::coverage ${pct}% is below the floor ${MIN_COVERAGE_PCT}%" >&2
448
- exit 1
449
- fi
450
-
451
- exit 0
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # Validate .chezmoidata.toml against config/chezmoidata.schema.json via taplo.
4
- #
5
- # Usage:
6
- # bash scripts/ci/validate-chezmoidata.sh
7
- #
8
- # In CI the workflow installs taplo before invoking this script. Locally,
9
- # install via: cargo install --locked taplo-cli (or `brew install taplo`).
10
-
11
- set -euo pipefail
12
-
13
- REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
14
- cd "$REPO_ROOT"
15
-
16
- if ! command -v taplo >/dev/null 2>&1; then
17
- echo "error: taplo not found in PATH" >&2
18
- echo " install: cargo install --locked taplo-cli" >&2
19
- echo " or: brew install taplo" >&2
20
- exit 127
21
- fi
22
-
23
- # `taplo check` reads .taplo.toml at the repo root, applies the schema
24
- # rule, and reports schema violations + TOML syntax errors.
25
- taplo check