@sebastienrousseau/dotfiles 0.2.499 → 0.2.501

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 (567) hide show
  1. package/CHANGELOG.md +452 -0
  2. package/LICENSE +1283 -0
  3. package/README.md +322 -0
  4. package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
  5. package/docs/AI.md +108 -0
  6. package/docs/CNAME +1 -0
  7. package/docs/COPYRIGHT +4 -3
  8. package/docs/NAMING_CONVENTIONS.md +102 -0
  9. package/docs/README.md +82 -0
  10. package/docs/_config.yml +59 -0
  11. package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
  12. package/docs/adr/ADR-002-shell-performance.md +130 -0
  13. package/docs/adr/ADR-003-security-first.md +158 -0
  14. package/docs/adr/ADR-004-cli-architecture.md +171 -0
  15. package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
  16. package/docs/adr/ADR-006-shell-selection.md +124 -0
  17. package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
  18. package/docs/adr/ADR-008-alias-system-architecture.md +95 -0
  19. package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
  20. package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
  21. package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
  22. package/docs/adr/README.md +39 -0
  23. package/docs/architecture/ARCHITECTURE.md +117 -0
  24. package/docs/architecture/INTEROP.md +44 -0
  25. package/docs/architecture/REPO_LAYOUT.md +241 -0
  26. package/docs/architecture/WALKTHROUGH.md +86 -0
  27. package/docs/architecture/fleet-deployment.md +77 -0
  28. package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
  29. package/docs/archive/LEGACY_ROADMAP.md +160 -0
  30. package/docs/archive/MILESTONE_v0.2.493.md +47 -0
  31. package/docs/{PLAN.md → archive/PLAN.md} +50 -12
  32. package/docs/archive/REPO_AUDIT.md +31 -0
  33. package/docs/guides/INSTALL.md +144 -0
  34. package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
  35. package/docs/guides/THEMING.md +230 -0
  36. package/docs/guides/TROUBLESHOOTING.md +176 -0
  37. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
  38. package/docs/index.md +43 -0
  39. package/docs/interop/A2A.md +39 -0
  40. package/docs/interop/POWERSHELL.md +102 -0
  41. package/docs/manual/00-introduction.md +89 -0
  42. package/docs/manual/01-concepts/01-architecture.md +138 -0
  43. package/docs/manual/01-concepts/02-trust-model.md +182 -0
  44. package/docs/manual/01-concepts/03-theme-engine.md +186 -0
  45. package/docs/manual/01-concepts/04-fleet.md +148 -0
  46. package/docs/manual/01-concepts/05-self-healing.md +204 -0
  47. package/docs/manual/02-tutorials/01-first-install.md +197 -0
  48. package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
  49. package/docs/manual/02-tutorials/03-create-profile.md +244 -0
  50. package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
  51. package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
  52. package/docs/manual/03-reference/01-dot-cli.md +417 -0
  53. package/docs/manual/03-reference/02-config-files.md +265 -0
  54. package/docs/manual/03-reference/03-environment.md +124 -0
  55. package/docs/manual/03-reference/04-templates.md +190 -0
  56. package/docs/manual/03-reference/05-feature-flags.md +128 -0
  57. package/docs/manual/04-cookbook/01-recipes.md +285 -0
  58. package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
  59. package/docs/manual/04-cookbook/03-faq.md +175 -0
  60. package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
  61. package/docs/manual/05-appendices/B-security-checklist.md +84 -0
  62. package/docs/manual/05-appendices/C-glossary.md +40 -0
  63. package/docs/manual/05-appendices/D-bibliography.md +58 -0
  64. package/docs/manual/05-appendices/E-license.md +38 -0
  65. package/docs/manual/_toc.yml +58 -0
  66. package/docs/manual/command-index.md +62 -0
  67. package/docs/manual/concept-index.md +168 -0
  68. package/docs/operations/ATTESTATION.md +44 -0
  69. package/docs/operations/CI_CADENCE.md +107 -0
  70. package/docs/operations/CI_COMPOSITES.md +156 -0
  71. package/docs/operations/COMPLETIONS.md +123 -0
  72. package/docs/operations/COVERAGE.md +148 -0
  73. package/docs/operations/DRIFT.md +107 -0
  74. package/docs/operations/MAINTENANCE.md +63 -0
  75. package/docs/operations/MIGRATION.md +109 -0
  76. package/docs/operations/OPERATIONS.md +188 -0
  77. package/docs/operations/PERFORMANCE.md +133 -0
  78. package/docs/operations/RELIABILITY.md +122 -0
  79. package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
  80. package/docs/operations/TESTING.md +199 -0
  81. package/docs/operations/TRACEABILITY.md +35 -0
  82. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
  83. package/docs/operations/VERSION_SYNC.md +393 -0
  84. package/docs/reference/ALIASES.md +131 -0
  85. package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
  86. package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
  87. package/docs/reference/FEATURES.md +66 -0
  88. package/docs/reference/FONTS.md +112 -0
  89. package/docs/reference/PROFILES.md +69 -0
  90. package/docs/reference/SCREENSHOTS.md +121 -0
  91. package/docs/reference/SCRIPTS.md +71 -0
  92. package/docs/reference/SUPPORT_MATRIX.md +80 -0
  93. package/docs/reference/THEMES.md +117 -0
  94. package/docs/reference/TOOLS.md +109 -0
  95. package/docs/reference/UTILS.md +155 -0
  96. package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
  97. package/docs/security/AUDIT_BYPASS.md +103 -0
  98. package/docs/security/AUTOMATION_SECRETS.md +26 -0
  99. package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
  100. package/docs/security/COMPLIANCE.md +458 -0
  101. package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
  102. package/docs/security/ENCRYPTION.md +57 -0
  103. package/docs/security/FMEA.md +159 -0
  104. package/docs/security/HISTORY_FILTERING.md +132 -0
  105. package/docs/security/INCIDENT_RESPONSE.md +579 -0
  106. package/docs/security/INSTALL_VERIFICATION.md +122 -0
  107. package/docs/security/KEYS.md +49 -0
  108. package/docs/security/KEY_ROTATION.md +223 -0
  109. package/docs/security/MCP_POLICY.md +78 -0
  110. package/docs/security/POLICY_RELEASES.md +37 -0
  111. package/docs/security/README.md +28 -0
  112. package/docs/security/SCORECARD.md +80 -0
  113. package/docs/security/SECRETS.md +158 -0
  114. package/docs/security/SECURITY.md +45 -0
  115. package/docs/security/SECURITY_CHECKLIST.md +55 -0
  116. package/docs/security/SHELL_EXEMPTIONS.md +145 -0
  117. package/docs/security/SOUP_REGISTER.md +36 -0
  118. package/docs/security/THREAT_MODEL.md +130 -0
  119. package/docs/security/VERIFICATION_VALIDATION.md +228 -0
  120. package/docs/themes/README.md +10 -0
  121. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
  122. package/docs/themes/hero-shot.svg +78 -0
  123. package/dot_config/.module-manifest.json +69 -0
  124. package/dot_config/ai/identity.md +23 -0
  125. package/dot_config/ai/patterns/architect.md +16 -0
  126. package/dot_config/ai/patterns/hardener.md +15 -0
  127. package/dot_config/ai/patterns/refactor.md +15 -0
  128. package/dot_config/aider/aider.conf.yml +32 -0
  129. package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
  130. package/dot_config/ansible/ansible.cfg +11 -0
  131. package/dot_config/atuin/config.toml.tmpl +47 -0
  132. package/dot_config/bat/config +23 -0
  133. package/dot_config/brave-flags.conf.tmpl +7 -0
  134. package/dot_config/btop/btop.conf +16 -0
  135. package/dot_config/btop/themes/tokyonight.theme +34 -0
  136. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  137. package/dot_config/claude/mcp_servers.json +20 -0
  138. package/dot_config/containers/containers.conf +14 -0
  139. package/dot_config/curl/dot_curlrc +18 -0
  140. package/dot_config/dlv/config.yml +39 -0
  141. package/dot_config/docker/config.json +15 -0
  142. package/dot_config/dotfiles/agent-card.json +29 -0
  143. package/dot_config/dotfiles/agent-profiles.json +92 -0
  144. package/dot_config/dotfiles/boot/README.md +13 -0
  145. package/dot_config/dotfiles/grub/README.md +13 -0
  146. package/dot_config/dotfiles/lock/README.md +13 -0
  147. package/dot_config/dotfiles/mcp-lock.json +33 -0
  148. package/dot_config/dotfiles/mcp-policy.json +52 -0
  149. package/dot_config/dotfiles/mcp-registry.json +47 -0
  150. package/dot_config/dotfiles/model-registry.json +20 -0
  151. package/dot_config/dotfiles/policy-bundles.json +38 -0
  152. package/dot_config/dotfiles/prompt-registry.json +16 -0
  153. package/dot_config/dotfiles/versions.env +18 -0
  154. package/dot_config/duf/duf.conf +6 -0
  155. package/dot_config/duti/defaults.duti +5 -0
  156. package/dot_config/emoji/emoji.txt +34 -0
  157. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  158. package/dot_config/environment.d/90-wayland.conf +19 -0
  159. package/dot_config/fastfetch/config.jsonc +28 -0
  160. package/dot_config/firefox/user.js.tmpl +58 -0
  161. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  162. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  163. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  164. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  165. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  166. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  167. package/dot_config/fish/conf.d/init.fish.tmpl +172 -0
  168. package/dot_config/fish/config.fish.tmpl +44 -0
  169. package/dot_config/fish/fish_plugins +1 -0
  170. package/dot_config/fish/functions/_.fish +3 -0
  171. package/dot_config/fish/functions/_cached_eval.fish +131 -0
  172. package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
  173. package/dot_config/fish/functions/als.fish +46 -0
  174. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  175. package/dot_config/fish/functions/c.fish +3 -0
  176. package/dot_config/fish/functions/cat.fish +9 -0
  177. package/dot_config/fish/functions/d.fish +7 -0
  178. package/dot_config/fish/functions/dot.fish +34 -0
  179. package/dot_config/fish/functions/h.fish +3 -0
  180. package/dot_config/fish/functions/l.fish +7 -0
  181. package/dot_config/fish/functions/la.fish +7 -0
  182. package/dot_config/fish/functions/ll.fish +7 -0
  183. package/dot_config/fish/functions/log_error.fish +13 -0
  184. package/dot_config/fish/functions/log_info.fish +13 -0
  185. package/dot_config/fish/functions/lr.fish +7 -0
  186. package/dot_config/fish/functions/lra.fish +7 -0
  187. package/dot_config/fish/functions/ls.fish +7 -0
  188. package/dot_config/fish/functions/lt.fish +7 -0
  189. package/dot_config/fish/functions/lta.fish +7 -0
  190. package/dot_config/fish/functions/notify-run.fish +11 -0
  191. package/dot_config/fish/functions/q.fish +3 -0
  192. package/dot_config/fish/functions/silent-run.fish +7 -0
  193. package/dot_config/fish/functions/yy.fish +8 -0
  194. package/dot_config/flatpak/flatpak.list +4 -0
  195. package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
  196. package/dot_config/foot/foot.ini.tmpl +33 -0
  197. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  198. package/dot_config/fzf/fzf.zsh +48 -0
  199. package/dot_config/gem/gemrc +9 -0
  200. package/dot_config/gh/config.yml +12 -0
  201. package/dot_config/ghostty/config.tmpl +165 -0
  202. package/dot_config/git/allowed_signers.tmpl +18 -0
  203. package/dot_config/git/attributes +12 -0
  204. package/dot_config/git/commit-template +10 -0
  205. package/dot_config/git/hooks/executable_commit-msg +146 -0
  206. package/dot_config/git/ignore +27 -0
  207. package/dot_config/gnupg/gpg-agent.conf +11 -0
  208. package/dot_config/go/golangci.yml +118 -0
  209. package/dot_config/go/gopls.json +30 -0
  210. package/dot_config/goose/config.yaml +29 -0
  211. package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
  212. package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
  213. package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
  214. package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
  215. package/dot_config/htop/htoprc +20 -0
  216. package/dot_config/inputrc +2 -0
  217. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  218. package/dot_config/just/justfile +122 -0
  219. package/dot_config/k9s/config.yaml +65 -0
  220. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  221. package/dot_config/kanshi/config.tmpl +22 -0
  222. package/dot_config/karabiner/karabiner.json +14 -0
  223. package/dot_config/kitty/kitty.conf.tmpl +53 -0
  224. package/dot_config/lazydocker/config.yml +186 -0
  225. package/dot_config/lazygit/config.yml +35 -0
  226. package/dot_config/mako/config +47 -0
  227. package/dot_config/mas/masapps.txt +5 -0
  228. package/dot_config/micro/settings.json +3 -0
  229. package/dot_config/mimeapps.list +77 -0
  230. package/dot_config/minikube/config.json +13 -0
  231. package/dot_config/mise/config.toml +99 -0
  232. package/dot_config/mongosh/mongoshrc.js +68 -0
  233. package/dot_config/mpv/input.conf +47 -0
  234. package/dot_config/mpv/mpv.conf +47 -0
  235. package/dot_config/mycli/myclirc +67 -0
  236. package/dot_config/nano/nanorc +28 -0
  237. package/dot_config/ncdu/config +12 -0
  238. package/dot_config/niri/config.kdl.tmpl +327 -0
  239. package/dot_config/nushell/aliases.nu +18 -0
  240. package/dot_config/nushell/cached_eval.nu +80 -0
  241. package/dot_config/nushell/completions.nu.tmpl +52 -0
  242. package/dot_config/nushell/config.nu.tmpl +86 -0
  243. package/dot_config/nushell/env.nu.tmpl +102 -0
  244. package/dot_config/nushell/functions.nu.tmpl +17 -0
  245. package/dot_config/nvim/init.lua +18 -0
  246. package/dot_config/nvim/lazy-lock.json +58 -0
  247. package/dot_config/nvim/lua/config/autocmds.lua +107 -0
  248. package/dot_config/nvim/lua/config/keymaps.lua +92 -0
  249. package/dot_config/nvim/lua/config/lazy.lua +44 -0
  250. package/dot_config/nvim/lua/config/options.lua +49 -0
  251. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  252. package/dot_config/nvim/lua/plugins/coding.lua +216 -0
  253. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  254. package/dot_config/nvim/lua/plugins/dap.lua +412 -0
  255. package/dot_config/nvim/lua/plugins/editor.lua +55 -0
  256. package/dot_config/nvim/lua/plugins/git.lua +10 -0
  257. package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
  258. package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
  259. package/dot_config/nvim/lua/plugins/rust.lua +34 -0
  260. package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
  261. package/dot_config/nvim/lua/plugins/ui.lua +509 -0
  262. package/dot_config/paru/paru.conf +10 -0
  263. package/dot_config/pip/pip.conf.tmpl +32 -0
  264. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  265. package/dot_config/pueue/pueue.yml +34 -0
  266. package/dot_config/pypoetry/config.toml +6 -0
  267. package/dot_config/pyrightconfig.json +5 -0
  268. package/dot_config/raycast/README.md +13 -0
  269. package/dot_config/redis/redisclirc +41 -0
  270. package/dot_config/ripgrep/ripgreprc +21 -0
  271. package/dot_config/shell/00-core-paths.sh.tmpl +134 -0
  272. package/dot_config/shell/05-core-safety.sh +48 -0
  273. package/dot_config/shell/10-secrets.sh +41 -0
  274. package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
  275. package/dot_config/shell/40-ls-colors.sh +49 -0
  276. package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
  277. package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
  278. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
  279. package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
  280. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -0
  281. package/dot_config/shell/Brewfile +207 -0
  282. package/dot_config/shell/Brewfile.cask +92 -0
  283. package/dot_config/shell/Brewfile.cli +127 -0
  284. package/dot_config/shell/README.md +284 -0
  285. package/dot_config/shell/als_data.txt.tmpl +65 -0
  286. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  287. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  288. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  289. package/dot_config/sops/dot_sops.yaml +23 -0
  290. package/dot_config/starship.toml.tmpl +202 -0
  291. package/dot_config/swaylock/config +43 -0
  292. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  293. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  294. package/dot_config/systemd/user/pueued.service +12 -0
  295. package/dot_config/systemd/user/ssh-agent.service +12 -0
  296. package/dot_config/task/Taskfile.yml +86 -0
  297. package/dot_config/tflint/tflint.hcl +9 -0
  298. package/dot_config/tmux/tmux.conf.tmpl +223 -0
  299. package/dot_config/topgrade.toml.tmpl +54 -0
  300. package/dot_config/user-dirs.dirs +10 -0
  301. package/dot_config/vscode/extensions.txt +11 -0
  302. package/dot_config/vscode/settings.json.tmpl +82 -0
  303. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  304. package/dot_config/waybar/style.css.tmpl +211 -0
  305. package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
  306. package/dot_config/wget/wgetrc +12 -0
  307. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  308. package/dot_config/yarn/yarnrc.yml +36 -0
  309. package/dot_config/yazi/keymap.toml +67 -0
  310. package/dot_config/yazi/theme.toml +102 -0
  311. package/dot_config/yazi/yazi.toml +40 -0
  312. package/dot_config/zathura/zathurarc +52 -0
  313. package/dot_config/zellij/config.kdl.tmpl +79 -0
  314. package/dot_config/zsh/dot_zprofile +7 -0
  315. package/dot_config/zsh/dot_zshenv +5 -0
  316. package/dot_config/zsh/dot_zshrc.tmpl +635 -0
  317. package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -0
  318. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
  319. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  320. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  321. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +214 -0
  322. package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
  323. package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
  324. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  325. package/dot_local/bin/executable_ai-update +195 -0
  326. package/dot_local/bin/executable_ai_core +152 -0
  327. package/dot_local/bin/executable_antigravity +11 -0
  328. package/dot_local/bin/executable_b64 +84 -0
  329. package/dot_local/bin/executable_bm +79 -0
  330. package/dot_local/bin/executable_cb +39 -0
  331. package/dot_local/bin/executable_dot +596 -0
  332. package/dot_local/bin/executable_dot-ai +36 -0
  333. package/dot_local/bin/executable_dot-bootstrap +77 -0
  334. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  335. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  336. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  337. package/dot_local/bin/executable_dot-theme-sync +952 -0
  338. package/dot_local/bin/executable_dot_completion +57 -0
  339. package/dot_local/bin/executable_dtags +28 -0
  340. package/dot_local/bin/executable_epoch +67 -0
  341. package/dot_local/bin/executable_extract +41 -0
  342. package/dot_local/bin/executable_gbd +52 -0
  343. package/dot_local/bin/executable_gd +42 -0
  344. package/dot_local/bin/executable_git-ai-commit +175 -0
  345. package/dot_local/bin/executable_git-ai-diff +169 -0
  346. package/dot_local/bin/executable_gl +101 -0
  347. package/dot_local/bin/executable_hash +161 -0
  348. package/dot_local/bin/executable_hashsum +160 -0
  349. package/dot_local/bin/executable_hex +115 -0
  350. package/dot_local/bin/executable_jsonv +78 -0
  351. package/dot_local/bin/executable_jwt +94 -0
  352. package/dot_local/bin/executable_kill-port +75 -0
  353. package/dot_local/bin/executable_lorem +118 -0
  354. package/dot_local/bin/executable_mkscript +35 -0
  355. package/dot_local/bin/executable_monitor +56 -0
  356. package/dot_local/bin/executable_myip +51 -0
  357. package/dot_local/bin/executable_notify +24 -0
  358. package/dot_local/bin/executable_open +38 -0
  359. package/dot_local/bin/executable_pw +27 -0
  360. package/dot_local/bin/executable_rec-start +46 -0
  361. package/dot_local/bin/executable_rec-stop +35 -0
  362. package/dot_local/bin/executable_regex +132 -0
  363. package/dot_local/bin/executable_start-niri +8 -0
  364. package/dot_local/bin/executable_tmux-sessionizer +314 -0
  365. package/dot_local/bin/executable_tour +177 -0
  366. package/dot_local/bin/executable_up +23 -0
  367. package/dot_local/bin/executable_update +142 -0
  368. package/dot_local/bin/executable_uuid +87 -0
  369. package/dot_local/bin/executable_win +32 -0
  370. package/dot_local/bin/executable_yamlv +57 -0
  371. package/dot_local/share/bash-completion/completions/dot +72 -0
  372. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  373. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  374. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  375. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  376. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  382. package/dot_local/share/man/man1/dot.1 +149 -0
  383. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  384. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  385. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  386. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  387. package/dot_local/share/zsh/completions/.keep +0 -0
  388. package/dot_local/share/zsh/completions/_dot +283 -0
  389. package/install.sh +350 -0
  390. package/package.json +1 -1
  391. package/scripts/ci/check-copyright-headers.sh +96 -0
  392. package/scripts/ci/check-dangerous-chmod.sh +19 -0
  393. package/scripts/ci/check-deps-dev.sh +236 -0
  394. package/scripts/ci/check-insecure-tls.sh +61 -0
  395. package/scripts/ci/check-regression-traceability.sh +67 -0
  396. package/scripts/ci/check-shell-preamble.sh +106 -0
  397. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  398. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  399. package/scripts/ci/run-coverage.sh +362 -0
  400. package/scripts/ci/validate-chezmoidata.sh +25 -0
  401. package/scripts/ci/validate-ci-config.sh +224 -0
  402. package/scripts/demo/record.sh +42 -0
  403. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  404. package/scripts/diagnostics/alias-governance.sh +137 -0
  405. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  406. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  407. package/scripts/diagnostics/benchmark.sh +381 -0
  408. package/scripts/diagnostics/conflicts.sh +72 -0
  409. package/scripts/diagnostics/doctor-unified.sh +38 -0
  410. package/scripts/diagnostics/doctor.sh +709 -0
  411. package/scripts/diagnostics/drift-dashboard.sh +201 -0
  412. package/scripts/diagnostics/health.sh +614 -0
  413. package/scripts/diagnostics/history-analysis.sh +85 -0
  414. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  415. package/scripts/diagnostics/perf.sh +452 -0
  416. package/scripts/diagnostics/scorecard.sh +118 -0
  417. package/scripts/diagnostics/secret-governance.sh +58 -0
  418. package/scripts/diagnostics/security-score.sh +438 -0
  419. package/scripts/diagnostics/smoke-test.sh +87 -0
  420. package/scripts/diagnostics/snapshot.sh +89 -0
  421. package/scripts/diagnostics/verify.sh +107 -0
  422. package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
  423. package/scripts/diagnostics/version-locks.sh +79 -0
  424. package/scripts/diagnostics/workstation-attestation.sh +186 -0
  425. package/scripts/docs/build-manual.sh +883 -0
  426. package/scripts/docs/check-manual.sh +213 -0
  427. package/scripts/dot/commands/agent.sh +474 -0
  428. package/scripts/dot/commands/ai.sh +481 -0
  429. package/scripts/dot/commands/aliases.sh +250 -0
  430. package/scripts/dot/commands/appearance.sh +80 -0
  431. package/scripts/dot/commands/core.sh +185 -0
  432. package/scripts/dot/commands/diagnostics.sh +229 -0
  433. package/scripts/dot/commands/fleet.sh +399 -0
  434. package/scripts/dot/commands/lint.sh +177 -0
  435. package/scripts/dot/commands/manual.sh +168 -0
  436. package/scripts/dot/commands/meta.sh +248 -0
  437. package/scripts/dot/commands/patterns.sh +54 -0
  438. package/scripts/dot/commands/restore.sh +231 -0
  439. package/scripts/dot/commands/secrets.sh +223 -0
  440. package/scripts/dot/commands/security.sh +76 -0
  441. package/scripts/dot/commands/tools.sh +469 -0
  442. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  443. package/scripts/dot/lib/bento.sh +50 -0
  444. package/scripts/dot/lib/log.sh +200 -0
  445. package/scripts/dot/lib/platform.sh +99 -0
  446. package/scripts/dot/lib/ui.sh +518 -0
  447. package/scripts/dot/lib/utils.sh +377 -0
  448. package/scripts/fonts/install-nerd-fonts.sh +68 -0
  449. package/scripts/fonts/patch-fonts.sh +35 -0
  450. package/scripts/git-hooks/install.sh +11 -0
  451. package/scripts/git-hooks/pre-commit +12 -0
  452. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  453. package/scripts/git-hooks/pre-push +92 -0
  454. package/scripts/git-hooks/prepare-commit-msg +29 -0
  455. package/scripts/lib/secrets_provider.sh +158 -0
  456. package/scripts/maintenance/check-updates.sh +131 -0
  457. package/scripts/ops/ai-setup.sh +55 -0
  458. package/scripts/ops/bundle.sh +77 -0
  459. package/scripts/ops/chaos.sh +49 -0
  460. package/scripts/ops/chezmoi-apply.sh +270 -0
  461. package/scripts/ops/chezmoi-diff.sh +15 -0
  462. package/scripts/ops/chezmoi-remove.sh +45 -0
  463. package/scripts/ops/chezmoi-update.sh +48 -0
  464. package/scripts/ops/heal-chezmoi.sh +86 -0
  465. package/scripts/ops/heal-system.sh +128 -0
  466. package/scripts/ops/heal-tools.sh +340 -0
  467. package/scripts/ops/heal.sh +222 -0
  468. package/scripts/ops/post-apply-repair.sh +106 -0
  469. package/scripts/ops/prewarm.sh +127 -0
  470. package/scripts/ops/release.sh +252 -0
  471. package/scripts/ops/rollback.sh +589 -0
  472. package/scripts/ops/setup.sh +137 -0
  473. package/scripts/ops/teleport.sh +33 -0
  474. package/scripts/qa/coverage-baseline.sh +60 -0
  475. package/scripts/qa/docs-coverage.sh +111 -0
  476. package/scripts/qa/powershell-contract.ps1 +95 -0
  477. package/scripts/qa/reliability-audit.sh +138 -0
  478. package/scripts/qa/traceability-coverage.sh +116 -0
  479. package/scripts/qa/validate-examples.sh +26 -0
  480. package/scripts/qa/wsl-contract.sh +11 -0
  481. package/scripts/release/package-policy-bundles.sh +125 -0
  482. package/scripts/secrets/age-init.sh +70 -0
  483. package/scripts/secrets/create-secrets-file.sh +45 -0
  484. package/scripts/secrets/encrypt-ssh-key.sh +43 -0
  485. package/scripts/security/backup.sh +57 -0
  486. package/scripts/security/dns-doh.sh +51 -0
  487. package/scripts/security/encryption-check.sh +54 -0
  488. package/scripts/security/enforce-policies.sh +334 -0
  489. package/scripts/security/firewall.sh +90 -0
  490. package/scripts/security/lock-configs.sh +57 -0
  491. package/scripts/security/lock-screen.sh +55 -0
  492. package/scripts/security/manage-secrets.sh +428 -0
  493. package/scripts/security/ssh-cert.sh +203 -0
  494. package/scripts/security/telemetry-kill.sh +50 -0
  495. package/scripts/security/usb-safety.sh +51 -0
  496. package/scripts/theme/apply-gnome-theme.sh +328 -0
  497. package/scripts/theme/extract-theme.py +677 -0
  498. package/scripts/theme/install-boot-logo.sh +62 -0
  499. package/scripts/theme/install-catppuccin-themes.sh +370 -0
  500. package/scripts/theme/install-cursors.sh +25 -0
  501. package/scripts/theme/install-file-icons.sh +26 -0
  502. package/scripts/theme/install-grub-theme.sh +61 -0
  503. package/scripts/theme/install-lock-icon.sh +30 -0
  504. package/scripts/theme/merge-wallpaper.sh +145 -0
  505. package/scripts/theme/rebuild-themes.sh +309 -0
  506. package/scripts/theme/switch.sh +431 -0
  507. package/scripts/theme/wallpaper-rotate.sh +136 -0
  508. package/scripts/theme/wallpaper-sync.sh +397 -0
  509. package/scripts/tools/cmatrix.sh +21 -0
  510. package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
  511. package/scripts/tools/emoji-picker.sh +48 -0
  512. package/scripts/tools/figlet-banner.sh +18 -0
  513. package/scripts/tools/log-rotate.sh +30 -0
  514. package/scripts/tools/lolcat-wrap.sh +19 -0
  515. package/scripts/tools/pipes.sh +48 -0
  516. package/scripts/tuning/linux.sh +185 -0
  517. package/scripts/tuning/macos.sh +55 -0
  518. package/scripts/uninstall.sh +85 -0
  519. package/scripts/version-sync.sh +487 -0
  520. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  521. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  522. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  523. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  524. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  525. package/templates/projects/go/README.md +4 -0
  526. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  527. package/templates/projects/go/go.sum +0 -0
  528. package/templates/projects/molecule/README.md +7 -0
  529. package/templates/projects/molecule/converge.yml +7 -0
  530. package/templates/projects/molecule/molecule.yml +16 -0
  531. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  532. package/templates/projects/node/README.md +4 -0
  533. package/templates/projects/node/package-lock.json +12 -0
  534. package/templates/projects/node/src/index.js +1 -0
  535. package/templates/projects/packer/README.md +15 -0
  536. package/templates/projects/packer/main.pkr.hcl +15 -0
  537. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  538. package/templates/projects/python/README.md +4 -0
  539. package/templates/projects/python/pyproject.toml +15 -0
  540. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  541. package/templates/projects/python/tests/test_basic.py +1 -0
  542. package/docs/ARCHITECTURE.md +0 -62
  543. package/docs/COMPLIANCE.md +0 -47
  544. package/docs/OPERATIONS.md +0 -103
  545. package/docs/PR_DESCRIPTION.md +0 -150
  546. package/docs/ROADMAP_legacy.md +0 -556
  547. package/docs/SECURITY_CHECKLIST.md +0 -25
  548. package/docs/TASK.md +0 -99
  549. package/docs/WALKTHROUGH.md +0 -46
  550. package/scripts/backup.sh +0 -142
  551. package/scripts/banner.sh +0 -20
  552. package/scripts/benchmark.sh +0 -20
  553. package/scripts/build.sh +0 -41
  554. package/scripts/clean.sh +0 -31
  555. package/scripts/compile.sh +0 -54
  556. package/scripts/copy.sh +0 -108
  557. package/scripts/doctor.sh +0 -79
  558. package/scripts/dotfiles.sh +0 -63
  559. package/scripts/download.sh +0 -35
  560. package/scripts/help.sh +0 -57
  561. package/scripts/lock-configs.sh +0 -57
  562. package/scripts/package.sh +0 -46
  563. package/scripts/ssh.sh +0 -55
  564. package/scripts/teleport.sh +0 -23
  565. package/scripts/test-aliases.sh +0 -25
  566. package/scripts/test_smoke.sh +0 -88
  567. package/scripts/unpack.sh +0 -28
@@ -0,0 +1,487 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Version Synchronization Script
4
+ # Synchronizes version numbers across all markdown files with package.json
5
+ # Used by CI/CD and available for local testing
6
+
7
+ set -euo pipefail
8
+
9
+ _cleanup_files=()
10
+ trap 'rm -f "${_cleanup_files[@]}"' EXIT
11
+
12
+ # Configuration
13
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
14
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
15
+ VERSION_PATTERN='[0-9]+\.[0-9]+\.[0-9]+'
16
+ SED_VERSION_PATTERN='[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*'
17
+ BACKUP_DIR="$PROJECT_ROOT/.version-sync-backup"
18
+ EXCLUDE_FILES=(
19
+ "CHANGELOG.md"
20
+ "docs/security/COMPLIANCE.md"
21
+ "docs/reference/FONTS.md"
22
+ "docs/archive/LEGACY_ROADMAP.md"
23
+ "docs/archive/PLAN.md"
24
+ )
25
+
26
+ # shellcheck source=dot/lib/ui.sh
27
+ # shellcheck disable=SC1091
28
+ source "$SCRIPT_DIR/dot/lib/ui.sh"
29
+ ui_init
30
+
31
+ # Functions — delegate to shared ui.sh (redirect to stderr for script output)
32
+ log_info() { ui_info "$@" >&2; }
33
+ log_success() { ui_ok "$@" >&2; }
34
+ log_warning() { ui_warn "$@" >&2; }
35
+ log_error() { ui_err "$@" >&2; }
36
+
37
+ show_help() {
38
+ cat <<EOF
39
+ Version Synchronization Script
40
+
41
+ USAGE:
42
+ $0 [OPTIONS] [VERSION]
43
+
44
+ OPTIONS:
45
+ -h, --help Show this help message
46
+ -d, --dry-run Show what would be changed without making changes
47
+ -v, --verify Verify version consistency without updating
48
+ -b, --backup Create backup before changes (default: true)
49
+ --no-backup Skip creating backup
50
+ -f, --force Force sync even if no changes detected
51
+
52
+ ARGUMENTS:
53
+ VERSION Target version to sync to (defaults to package.json version)
54
+
55
+ EXAMPLES:
56
+ $0 # Sync to current package.json version
57
+ $0 1.2.3 # Sync all files to version 1.2.3
58
+ $0 --dry-run # Preview changes without applying
59
+ $0 --verify # Check current version consistency
60
+
61
+ DESCRIPTION:
62
+ This script synchronizes version numbers across all markdown files in the
63
+ repository with the version specified in package.json. It updates various
64
+ version reference patterns including badges, documentation headers, and
65
+ feature version stamps.
66
+
67
+ EOF
68
+ }
69
+
70
+ is_excluded_file() {
71
+ local file="$1"
72
+ local excluded
73
+ for excluded in "${EXCLUDE_FILES[@]}"; do
74
+ if [[ "$file" == "$excluded" ]]; then
75
+ return 0
76
+ fi
77
+ done
78
+ return 1
79
+ }
80
+
81
+ get_package_version() {
82
+ local package_file="$PROJECT_ROOT/package.json"
83
+ if [[ ! -f "$package_file" ]]; then
84
+ log_error "package.json not found at $package_file"
85
+ exit 1
86
+ fi
87
+
88
+ local version
89
+ version=$(jq -r '.version' "$package_file" 2>/dev/null)
90
+ if [[ "$version" == "null" || -z "$version" ]]; then
91
+ log_error "Could not extract version from package.json"
92
+ exit 1
93
+ fi
94
+
95
+ echo "$version"
96
+ }
97
+
98
+ validate_version() {
99
+ local version="$1"
100
+ if [[ ! $version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
101
+ log_error "Invalid version format: $version (expected: x.y.z)"
102
+ exit 1
103
+ fi
104
+ }
105
+
106
+ find_version_files() {
107
+ local temp_file
108
+ temp_file=$(umask 077 && mktemp)
109
+
110
+ log_info "Scanning for markdown files with version references..."
111
+
112
+ # Find all markdown files with version patterns
113
+ cd "$PROJECT_ROOT"
114
+ rg -l "v?$VERSION_PATTERN" --type md >"$temp_file" 2>/dev/null || true
115
+
116
+ # Add known files that should be checked even if they don't have versions yet
117
+ echo "README.md" >>"$temp_file"
118
+ echo "docs/reference/FEATURES.md" >>"$temp_file"
119
+ echo "docs/COPYRIGHT" >>"$temp_file"
120
+
121
+ # Remove duplicates and filter existing files
122
+ sort -u "$temp_file" | while IFS= read -r file; do
123
+ if [[ -f "$file" ]]; then
124
+ if is_excluded_file "$file"; then
125
+ continue
126
+ fi
127
+ echo "$file"
128
+ fi
129
+ done
130
+
131
+ rm -f "$temp_file"
132
+ }
133
+
134
+ sed_in_place() {
135
+ local file="$1"
136
+ shift
137
+
138
+ if sed --version >/dev/null 2>&1; then
139
+ sed -E -i "$@" "$file"
140
+ else
141
+ sed -E -i '' "$@" "$file"
142
+ fi
143
+ }
144
+
145
+ create_backup() {
146
+ local files=("$@")
147
+
148
+ if [[ ${#files[@]} -eq 0 ]]; then
149
+ log_warning "No files to backup"
150
+ return
151
+ fi
152
+
153
+ log_info "Creating backup in $BACKUP_DIR"
154
+ rm -rf "$BACKUP_DIR"
155
+ mkdir -p "$BACKUP_DIR"
156
+
157
+ local backup_count=0
158
+ for file in "${files[@]}"; do
159
+ if [[ -f "$file" ]]; then
160
+ local backup_name
161
+ backup_name="$(basename "$file").$(date +%Y%m%d_%H%M%S).backup"
162
+ cp "$file" "$BACKUP_DIR/$backup_name"
163
+ backup_count=$((backup_count + 1))
164
+ fi
165
+ done
166
+
167
+ log_success "Backed up $backup_count files"
168
+ }
169
+
170
+ update_version_references() {
171
+ local target_version="$1"
172
+ local dry_run="$2"
173
+ local files=("${@:3}")
174
+
175
+ local changes_made=0
176
+ local files_processed=0
177
+
178
+ for file in "${files[@]}"; do
179
+ if [[ ! -f "$file" ]]; then
180
+ log_warning "File not found: $file"
181
+ continue
182
+ fi
183
+
184
+ # Skip milestone and other historical files
185
+ if [[ "$(basename "$file")" == MILESTONE_* ]]; then
186
+ log_info "Skipping historical file: $file"
187
+ continue
188
+ fi
189
+
190
+ # Create temporary file for changes
191
+ local temp_file
192
+ temp_file=$(umask 077 && mktemp)
193
+ cp "$file" "$temp_file"
194
+
195
+ # Update various version reference patterns
196
+ case "$(basename "$file")" in
197
+ "README.md")
198
+ # Update badge and release link versions.
199
+ sed_in_place "$temp_file" \
200
+ -e "s|Version-v$SED_VERSION_PATTERN|Version-v$target_version|g" \
201
+ -e "s|/releases/tag/v$SED_VERSION_PATTERN|/releases/tag/v$target_version|g" \
202
+ -e "s|/dotfiles/v$SED_VERSION_PATTERN/|/dotfiles/v$target_version/|g"
203
+ ;;
204
+ *)
205
+ # Update explicit markdown version labels, backticks, and parentheses.
206
+ # Skip lines containing MILESTONE.
207
+ sed_in_place "$temp_file" \
208
+ -e "/MILESTONE/!s|(\*\*Version\*\*:[[:space:]]*)v?$SED_VERSION_PATTERN|\\1v$target_version|g" \
209
+ -e "/MILESTONE/!s|(\*\*Dotfiles Version\*\*:[[:space:]]*)v?$SED_VERSION_PATTERN|\\1v$target_version|g" \
210
+ -e "/MILESTONE/!s|(Version:[[:space:]]*)v?$SED_VERSION_PATTERN|\\1v$target_version|g" \
211
+ -e "/MILESTONE/!s|(Dotfiles Version:[[:space:]]*)v?$SED_VERSION_PATTERN|\\1v$target_version|g" \
212
+ -e "/MILESTONE/!s|Version[[:space:]]*\`v?$SED_VERSION_PATTERN\`|Version \`$target_version\`|g" \
213
+ -e "/MILESTONE/!s|\(v$SED_VERSION_PATTERN\)|\(v$target_version\)|g" \
214
+ -e "/MILESTONE/!s|/v$SED_VERSION_PATTERN/|/v$target_version/|g" \
215
+ -e "/MILESTONE/!s|\bv$SED_VERSION_PATTERN\b|v$target_version|g" \
216
+ -e "/MILESTONE/!s|dotfiles:v?$SED_VERSION_PATTERN|dotfiles:$target_version|g" \
217
+ -e "/MILESTONE/!s|notes — v$SED_VERSION_PATTERN|notes — v$target_version|g"
218
+ ;;
219
+ esac
220
+
221
+ # Check if file was changed
222
+ if ! cmp -s "$file" "$temp_file"; then
223
+ if [[ "$dry_run" == "true" ]]; then
224
+ log_info "Would update: $file"
225
+ # Show diff preview
226
+ diff -u "$file" "$temp_file" | head -20 >&2 || true
227
+ else
228
+ # Use cat to preserve permissions and ownership
229
+ cat "$temp_file" >"$file"
230
+ log_success "Updated: $file"
231
+ fi
232
+ changes_made=$((changes_made + 1))
233
+ else
234
+ log_info "No changes needed: $file"
235
+ rm -f "$temp_file"
236
+ fi
237
+ done
238
+
239
+ if [[ "$dry_run" == "true" ]]; then
240
+ log_info "Dry run complete - $changes_made files would be updated out of $files_processed processed"
241
+ else
242
+ log_success "Updated $changes_made files out of $files_processed processed"
243
+ fi
244
+
245
+ echo "$changes_made"
246
+ }
247
+
248
+ verify_version_consistency() {
249
+ local expected_version="$1"
250
+ local files=("${@:2}")
251
+
252
+ log_info "Verifying version consistency (expected: v$expected_version)"
253
+
254
+ local inconsistencies=0
255
+ local total_checked=0
256
+
257
+ for file in "${files[@]}"; do
258
+ if [[ ! -f "$file" ]]; then
259
+ continue
260
+ fi
261
+
262
+ if [[ "$(basename "$file")" == MILESTONE_* ]]; then
263
+ log_info "Skipping historical file: $file"
264
+ continue
265
+ fi
266
+
267
+ total_checked=$((total_checked + 1))
268
+
269
+ # Extract only dotfiles-targeted version references (ignore unrelated tool versions).
270
+ local versions_in_file=()
271
+ while IFS= read -r match; do
272
+ while IFS= read -r version; do
273
+ versions_in_file+=("$version")
274
+ done < <(printf "%s\n" "$match" | rg -o "v?$VERSION_PATTERN" || true)
275
+ done < <(
276
+ rg -v "MILESTONE" "$file" 2>/dev/null | rg -o \
277
+ -e "Version-v$VERSION_PATTERN" \
278
+ -e "/releases/tag/v$VERSION_PATTERN" \
279
+ -e "/dotfiles/v$VERSION_PATTERN/" \
280
+ -e "\\*\\*Version\\*\\*:[[:space:]]*v?$VERSION_PATTERN" \
281
+ -e "\\*\\*Dotfiles Version\\*\\*:[[:space:]]*v?$VERSION_PATTERN" \
282
+ -e "(^|[[:space:]])Version:[[:space:]]*v?$VERSION_PATTERN" \
283
+ -e "(^|[[:space:]])Dotfiles Version:[[:space:]]*v?$VERSION_PATTERN" \
284
+ -e "Version[[:space:]]*\`v?$VERSION_PATTERN\`" \
285
+ -e "\\(v$VERSION_PATTERN\\)" \
286
+ -e "/v$VERSION_PATTERN/" \
287
+ -e "v$VERSION_PATTERN\\b" \
288
+ -e "dotfiles:v?$VERSION_PATTERN" \
289
+ -e "notes — v$VERSION_PATTERN" || true
290
+ )
291
+
292
+ if [[ ${#versions_in_file[@]} -eq 0 ]]; then
293
+ continue
294
+ fi
295
+
296
+ for version in "${versions_in_file[@]}"; do
297
+ # Remove 'v' prefix if present for comparison
298
+ local clean_version="${version#v}"
299
+ if [[ "$clean_version" != "$expected_version" ]]; then
300
+ log_error "Inconsistent version in $file: $version (expected: v$expected_version)"
301
+ inconsistencies=$((inconsistencies + 1))
302
+ fi
303
+ done
304
+ done
305
+
306
+ if [[ $inconsistencies -eq 0 ]]; then
307
+ log_success "All version references are consistent: v$expected_version (checked $total_checked files)"
308
+ return 0
309
+ else
310
+ log_error "Found $inconsistencies inconsistent version references"
311
+ return 1
312
+ fi
313
+ }
314
+
315
+ main() {
316
+ local target_version=""
317
+ local dry_run="false"
318
+ local verify_only="false"
319
+ local create_backup_flag="true"
320
+ local force_sync="false"
321
+
322
+ # Parse arguments
323
+ while [[ $# -gt 0 ]]; do
324
+ case $1 in
325
+ -h | --help)
326
+ show_help
327
+ exit 0
328
+ ;;
329
+ -d | --dry-run)
330
+ dry_run="true"
331
+ shift
332
+ ;;
333
+ -v | --verify)
334
+ verify_only="true"
335
+ shift
336
+ ;;
337
+ -b | --backup)
338
+ create_backup_flag="true"
339
+ shift
340
+ ;;
341
+ --no-backup)
342
+ create_backup_flag="false"
343
+ shift
344
+ ;;
345
+ -f | --force)
346
+ force_sync="true"
347
+ shift
348
+ ;;
349
+ -*)
350
+ log_error "Unknown option: $1"
351
+ show_help
352
+ exit 1
353
+ ;;
354
+ *)
355
+ target_version="$1"
356
+ shift
357
+ ;;
358
+ esac
359
+ done
360
+
361
+ # Change to project root
362
+ cd "$PROJECT_ROOT"
363
+
364
+ # Determine target version
365
+ if [[ -z "$target_version" ]]; then
366
+ target_version=$(get_package_version)
367
+ log_info "Using package.json version: $target_version"
368
+ else
369
+ validate_version "$target_version"
370
+ log_info "Using specified version: $target_version"
371
+ fi
372
+
373
+ # Find files with version references
374
+ local version_files
375
+ readarray -t version_files < <(find_version_files)
376
+
377
+ if [[ ${#version_files[@]} -eq 0 ]]; then
378
+ log_warning "No files with version references found"
379
+ exit 0
380
+ fi
381
+
382
+ log_info "Found ${#version_files[@]} files with version references"
383
+
384
+ # Verify mode - just check consistency
385
+ if [[ "$verify_only" == "true" ]]; then
386
+ if verify_version_consistency "$target_version" "${version_files[@]}"; then
387
+ exit 0
388
+ else
389
+ exit 1
390
+ fi
391
+ fi
392
+
393
+ # Create backup if requested and not dry run
394
+ if [[ "$create_backup_flag" == "true" && "$dry_run" == "false" ]]; then
395
+ create_backup "${version_files[@]}"
396
+ fi
397
+
398
+ # Sync chezmoidata.toml (single source of truth for template files)
399
+ local chezmoidata="$PROJECT_ROOT/.chezmoidata.toml"
400
+ if [[ -f "$chezmoidata" ]]; then
401
+ if [[ "$dry_run" == "true" ]]; then
402
+ log_info "Would update .chezmoidata.toml: dotfiles_version = \"$target_version\""
403
+ else
404
+ sed_in_place "$chezmoidata" \
405
+ "s|^dotfiles_version = \"$SED_VERSION_PATTERN\"|dotfiles_version = \"$target_version\"|"
406
+ log_success "Updated .chezmoidata.toml"
407
+ fi
408
+ fi
409
+
410
+ # Sync non-template script files that embed the version
411
+ local script_files=(
412
+ "dot_local/bin/executable_dot"
413
+ "dot_local/bin/executable_tour"
414
+ "install.sh"
415
+ )
416
+ for script_file in "${script_files[@]}"; do
417
+ local full_path="$PROJECT_ROOT/$script_file"
418
+ if [[ -f "$full_path" ]]; then
419
+ local temp_file
420
+ temp_file=$(umask 077 && mktemp)
421
+ cp "$full_path" "$temp_file"
422
+ sed_in_place "$temp_file" "s|v$SED_VERSION_PATTERN|v$target_version|g"
423
+ sed_in_place "$temp_file" "s|\"$SED_VERSION_PATTERN\"|\"$target_version\"|g"
424
+ if ! cmp -s "$full_path" "$temp_file"; then
425
+ if [[ "$dry_run" == "true" ]]; then
426
+ log_info "Would update: $script_file"
427
+ else
428
+ # Use cat to preserve permissions and ownership
429
+ cat "$temp_file" >"$full_path"
430
+ log_success "Updated: $script_file"
431
+ fi
432
+ else
433
+ rm -f "$temp_file"
434
+ fi
435
+ fi
436
+ done
437
+
438
+ # Update version references
439
+ local changes_made
440
+ changes_made="$(update_version_references "$target_version" "$dry_run" "${version_files[@]}")"
441
+ if [[ "$changes_made" =~ ^[0-9]+$ ]]; then
442
+
443
+ if [[ $changes_made -gt 0 || "$force_sync" == "true" ]]; then
444
+ if [[ "$dry_run" == "false" ]]; then
445
+ # Verify the changes
446
+ if verify_version_consistency "$target_version" "${version_files[@]}"; then
447
+ log_success "Version synchronization completed successfully"
448
+
449
+ # Show summary
450
+ cat <<EOF
451
+
452
+ ═══════════════════════════════════════
453
+ Version Sync Summary
454
+ ═══════════════════════════════════════
455
+ Target Version: v$target_version
456
+ Files Updated: $changes_made
457
+ Backup Created: $create_backup_flag
458
+ Verification: ✅ Passed
459
+
460
+ EOF
461
+ else
462
+ log_error "Version synchronization failed verification"
463
+ exit 1
464
+ fi
465
+ fi
466
+ else
467
+ log_info "No changes needed - all versions are already synchronized"
468
+ fi
469
+ else
470
+ log_error "Version synchronization failed"
471
+ exit 1
472
+ fi
473
+ }
474
+
475
+ # Ensure we have required tools
476
+ if ! command -v jq &>/dev/null; then
477
+ log_warning "jq is not installed — skipping version sync"
478
+ exit 0
479
+ fi
480
+
481
+ if ! command -v rg &>/dev/null; then
482
+ log_warning "ripgrep (rg) is not installed — skipping version sync"
483
+ exit 0
484
+ fi
485
+
486
+ # Run main function
487
+ main "$@"
@@ -0,0 +1,21 @@
1
+ profile = "desktop"
2
+ host_id = "geekom-a9"
3
+ host_class = "linux-desktop"
4
+
5
+ [features]
6
+ gui = true
7
+ linux_desktop = true
8
+ niri = true
9
+ waybar = true
10
+ fuzzel = true
11
+ mako = true
12
+ foot = true
13
+ kanshi = true
14
+ touch = false
15
+ t2 = false
16
+ surface = false
17
+
18
+ [monitors]
19
+ internal = false
20
+ scale = 1.0
21
+ rotation = "normal"
@@ -0,0 +1,16 @@
1
+ profile = "laptop"
2
+ host_id = "mac-m1"
3
+ host_class = "macos"
4
+
5
+ [features]
6
+ gui = true
7
+ linux_desktop = false
8
+ niri = false
9
+ waybar = false
10
+ fuzzel = false
11
+ mako = false
12
+ foot = false
13
+ kanshi = false
14
+ touch = false
15
+ t2 = false
16
+ surface = false
@@ -0,0 +1,21 @@
1
+ profile = "laptop"
2
+ host_id = "mac-t2-linux"
3
+ host_class = "linux-t2"
4
+
5
+ [features]
6
+ gui = true
7
+ linux_desktop = true
8
+ niri = true
9
+ waybar = true
10
+ fuzzel = true
11
+ mako = true
12
+ foot = true
13
+ kanshi = true
14
+ touch = false
15
+ t2 = true
16
+ surface = false
17
+
18
+ [monitors]
19
+ internal = true
20
+ scale = 1.25
21
+ rotation = "normal"
@@ -0,0 +1,21 @@
1
+ profile = "laptop"
2
+ host_id = "surface-pro-7p"
3
+ host_class = "linux-tablet"
4
+
5
+ [features]
6
+ gui = true
7
+ linux_desktop = true
8
+ niri = true
9
+ waybar = true
10
+ fuzzel = true
11
+ mako = true
12
+ foot = true
13
+ kanshi = true
14
+ touch = true
15
+ t2 = false
16
+ surface = true
17
+
18
+ [monitors]
19
+ internal = true
20
+ scale = 1.5
21
+ rotation = "normal"
@@ -0,0 +1,31 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-go@v5
15
+ with:
16
+ go-version: '1.22'
17
+ - run: go mod download
18
+ - run: go build ./...
19
+ - run: go test ./...
20
+
21
+ security:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - uses: actions/setup-go@v5
26
+ with:
27
+ go-version: '1.22'
28
+ - name: Run govulncheck
29
+ run: |
30
+ go install golang.org/x/vuln/cmd/govulncheck@latest
31
+ govulncheck ./... || echo "No vulnerabilities"
@@ -1,3 +1,7 @@
1
1
  # __PROJECT_NAME__
2
2
 
3
3
  Minimal Go project scaffold.
4
+
5
+ ---
6
+
7
+ Made with ❤️ by [Sebastien Rousseau](https://sebastienrousseau.com)
@@ -1,3 +1,4 @@
1
+ // Copyright (c) 2015-2026 Dotfiles. All rights reserved.
1
2
  package main
2
3
 
3
4
  import "fmt"
File without changes
@@ -0,0 +1,7 @@
1
+ # __PROJECT_NAME__
2
+
3
+ Molecule scenario scaffold.
4
+
5
+ ---
6
+
7
+ Made with ❤️ by [Sebastien Rousseau](https://sebastienrousseau.com)
@@ -0,0 +1,7 @@
1
+ ---
2
+ - name: Converge
3
+ hosts: all
4
+ tasks:
5
+ - name: Print a message
6
+ ansible.builtin.debug:
7
+ msg: "Molecule scenario: __PROJECT_NAME__"
@@ -0,0 +1,16 @@
1
+ ---
2
+ driver:
3
+ name: docker
4
+
5
+ platforms:
6
+ - name: instance
7
+ image: "geerlingguy/docker-ubuntu2204-ansible:latest"
8
+ privileged: true
9
+
10
+ provisioner:
11
+ name: ansible
12
+ playbooks:
13
+ converge: converge.yml
14
+
15
+ verifier:
16
+ name: ansible
@@ -0,0 +1,30 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-node@v4
15
+ with:
16
+ node-version: '20'
17
+ cache: 'npm'
18
+ - run: npm ci
19
+ - run: npm test
20
+
21
+ security:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - uses: actions/setup-node@v4
26
+ with:
27
+ node-version: '20'
28
+ cache: 'npm'
29
+ - run: npm ci
30
+ - run: npm audit --audit-level=high
@@ -1,3 +1,7 @@
1
1
  # __PROJECT_NAME__
2
2
 
3
3
  Minimal Node project scaffold.
4
+
5
+ ---
6
+
7
+ Made with ❤️ by [Sebastien Rousseau](https://sebastienrousseau.com)