@sebastienrousseau/dotfiles 0.2.481 → 0.2.500

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/CHANGELOG.md +122 -32
  2. package/LICENSE +1 -1
  3. package/README.md +211 -242
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +2 -2
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +58 -249
  9. package/docs/adr/ADR-004-cli-architecture.md +2 -2
  10. package/docs/adr/ADR-006-shell-selection.md +2 -2
  11. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  12. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  13. package/docs/adr/README.md +2 -3
  14. package/docs/architecture/ARCHITECTURE.md +113 -0
  15. package/docs/architecture/INTEROP.md +36 -0
  16. package/docs/architecture/REPO_LAYOUT.md +237 -0
  17. package/docs/architecture/WALKTHROUGH.md +82 -0
  18. package/docs/architecture/fleet-deployment.md +73 -0
  19. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  20. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  21. package/docs/{PLAN.md → archive/PLAN.md} +1 -1
  22. package/docs/guides/INSTALL.md +140 -0
  23. package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
  24. package/docs/guides/THEMING.md +222 -0
  25. package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
  26. package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
  27. package/docs/index.md +39 -0
  28. package/docs/interop/A2A.md +32 -0
  29. package/docs/manual/00-introduction.md +85 -0
  30. package/docs/manual/01-concepts/01-architecture.md +134 -0
  31. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  32. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  33. package/docs/manual/01-concepts/04-fleet.md +142 -0
  34. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  35. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  36. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  37. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  38. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  39. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  40. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  41. package/docs/manual/03-reference/02-config-files.md +259 -0
  42. package/docs/manual/03-reference/03-environment.md +120 -0
  43. package/docs/manual/03-reference/04-templates.md +184 -0
  44. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  45. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  46. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  47. package/docs/manual/04-cookbook/03-faq.md +167 -0
  48. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  49. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  50. package/docs/manual/05-appendices/C-glossary.md +36 -0
  51. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  52. package/docs/manual/05-appendices/E-license.md +34 -0
  53. package/docs/manual/_toc.yml +58 -0
  54. package/docs/manual/command-index.md +58 -0
  55. package/docs/manual/concept-index.md +164 -0
  56. package/docs/operations/ATTESTATION.md +39 -0
  57. package/docs/operations/MAINTENANCE.md +59 -0
  58. package/docs/operations/MIGRATION.md +101 -0
  59. package/docs/operations/OPERATIONS.md +164 -0
  60. package/docs/operations/RELIABILITY.md +116 -0
  61. package/docs/{ROADMAP.md → operations/ROADMAP.md} +11 -11
  62. package/docs/operations/TESTING.md +195 -0
  63. package/docs/operations/TRACEABILITY.md +31 -0
  64. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  65. package/docs/operations/VERSION_SYNC.md +344 -0
  66. package/docs/{ALIASES.md → reference/ALIASES.md} +2 -6
  67. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  68. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  69. package/docs/reference/FEATURES.md +62 -0
  70. package/docs/reference/FONTS.md +108 -0
  71. package/docs/reference/PROFILES.md +65 -0
  72. package/docs/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
  73. package/docs/reference/SCRIPTS.md +67 -0
  74. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  75. package/docs/reference/THEMES.md +113 -0
  76. package/docs/reference/TOOLS.md +105 -0
  77. package/docs/reference/UTILS.md +151 -0
  78. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  79. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  80. package/docs/security/COMPLIANCE.md +453 -0
  81. package/docs/security/ENCRYPTION.md +52 -0
  82. package/docs/security/FMEA.md +155 -0
  83. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  84. package/docs/security/KEYS.md +45 -0
  85. package/docs/security/MCP_POLICY.md +69 -0
  86. package/docs/security/POLICY_RELEASES.md +33 -0
  87. package/docs/security/README.md +24 -0
  88. package/docs/security/SECRETS.md +146 -0
  89. package/docs/security/SECURITY.md +41 -0
  90. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  91. package/docs/security/SOUP_REGISTER.md +32 -0
  92. package/docs/security/THREAT_MODEL.md +120 -0
  93. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  94. package/docs/themes/README.md +3 -17
  95. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  96. package/docs/themes/hero-shot.svg +78 -0
  97. package/dot_config/.module-manifest.json +69 -0
  98. package/dot_config/ai/identity.md +20 -0
  99. package/dot_config/ai/patterns/architect.md +14 -0
  100. package/dot_config/ai/patterns/hardener.md +13 -0
  101. package/dot_config/ai/patterns/refactor.md +13 -0
  102. package/dot_config/aider/aider.conf.yml +1 -1
  103. package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
  104. package/dot_config/atuin/config.toml +18 -1
  105. package/dot_config/bat/config +16 -1
  106. package/dot_config/claude/mcp_servers.json +3 -32
  107. package/dot_config/dotfiles/agent-card.json +29 -0
  108. package/dot_config/dotfiles/agent-profiles.json +92 -0
  109. package/dot_config/dotfiles/boot/README.md +1 -1
  110. package/dot_config/dotfiles/grub/README.md +1 -1
  111. package/dot_config/dotfiles/lock/README.md +1 -1
  112. package/dot_config/dotfiles/mcp-lock.json +33 -0
  113. package/dot_config/dotfiles/mcp-policy.json +52 -0
  114. package/dot_config/dotfiles/mcp-registry.json +47 -0
  115. package/dot_config/dotfiles/model-registry.json +20 -0
  116. package/dot_config/dotfiles/policy-bundles.json +38 -0
  117. package/dot_config/dotfiles/prompt-registry.json +16 -0
  118. package/dot_config/dotfiles/versions.env +18 -0
  119. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  120. package/dot_config/environment.d/90-wayland.conf +19 -0
  121. package/dot_config/firefox/user.js.tmpl +58 -0
  122. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  123. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  124. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  125. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  126. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  127. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  128. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  129. package/dot_config/fish/config.fish.tmpl +44 -0
  130. package/dot_config/fish/fish_plugins +1 -0
  131. package/dot_config/fish/functions/_.fish +3 -0
  132. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  133. package/dot_config/fish/functions/als.fish +46 -0
  134. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  135. package/dot_config/fish/functions/c.fish +3 -0
  136. package/dot_config/fish/functions/cat.fish +9 -0
  137. package/dot_config/fish/functions/d.fish +7 -0
  138. package/dot_config/fish/functions/dot.fish +34 -0
  139. package/dot_config/fish/functions/h.fish +3 -0
  140. package/dot_config/fish/functions/l.fish +7 -0
  141. package/dot_config/fish/functions/la.fish +7 -0
  142. package/dot_config/fish/functions/ll.fish +7 -0
  143. package/dot_config/fish/functions/log_error.fish +13 -0
  144. package/dot_config/fish/functions/log_info.fish +13 -0
  145. package/dot_config/fish/functions/lr.fish +7 -0
  146. package/dot_config/fish/functions/lra.fish +7 -0
  147. package/dot_config/fish/functions/ls.fish +7 -0
  148. package/dot_config/fish/functions/lt.fish +7 -0
  149. package/dot_config/fish/functions/lta.fish +7 -0
  150. package/dot_config/fish/functions/notify-run.fish +11 -0
  151. package/dot_config/fish/functions/q.fish +3 -0
  152. package/dot_config/fish/functions/silent-run.fish +7 -0
  153. package/dot_config/fish/functions/yy.fish +8 -0
  154. package/dot_config/fontconfig/fonts.conf.tmpl +13 -0
  155. package/dot_config/foot/foot.ini.tmpl +33 -0
  156. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  157. package/dot_config/fzf/fzf.zsh +48 -0
  158. package/dot_config/ghostty/config.tmpl +69 -565
  159. package/dot_config/git/allowed_signers.tmpl +18 -0
  160. package/dot_config/git/commit-template +10 -0
  161. package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
  162. package/dot_config/goose/config.yaml +2 -2
  163. package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
  164. package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
  165. package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
  166. package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
  167. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  168. package/dot_config/just/justfile +18 -0
  169. package/dot_config/kanshi/config.tmpl +22 -0
  170. package/dot_config/kitty/kitty.conf.tmpl +44 -508
  171. package/dot_config/lazygit/config.yml +18 -6
  172. package/dot_config/mako/config +47 -0
  173. package/dot_config/micro/settings.json +3 -0
  174. package/dot_config/mimeapps.list +77 -0
  175. package/dot_config/mise/config.toml +63 -5
  176. package/dot_config/mongosh/mongoshrc.js +1 -0
  177. package/dot_config/mpv/input.conf +47 -0
  178. package/dot_config/mpv/mpv.conf +47 -0
  179. package/dot_config/niri/config.kdl.tmpl +327 -0
  180. package/dot_config/nushell/aliases.nu +18 -0
  181. package/dot_config/nushell/completions.nu.tmpl +52 -0
  182. package/dot_config/nushell/config.nu.tmpl +86 -0
  183. package/dot_config/nushell/env.nu.tmpl +94 -0
  184. package/dot_config/nushell/functions.nu.tmpl +17 -0
  185. package/dot_config/nvim/init.lua +14 -0
  186. package/dot_config/nvim/lazy-lock.json +45 -14
  187. package/dot_config/nvim/lua/config/autocmds.lua +45 -1
  188. package/dot_config/nvim/lua/config/keymaps.lua +13 -8
  189. package/dot_config/nvim/lua/config/lazy.lua +22 -12
  190. package/dot_config/nvim/lua/config/options.lua +1 -0
  191. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  192. package/dot_config/nvim/lua/plugins/coding.lua +11 -29
  193. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  194. package/dot_config/nvim/lua/plugins/dap.lua +215 -4
  195. package/dot_config/nvim/lua/plugins/editor.lua +6 -10
  196. package/dot_config/nvim/lua/plugins/git.lua +1 -0
  197. package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
  198. package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
  199. package/dot_config/nvim/lua/plugins/rust.lua +1 -0
  200. package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
  201. package/dot_config/nvim/lua/plugins/ui.lua +23 -51
  202. package/dot_config/paru/paru.conf +10 -0
  203. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  204. package/dot_config/pueue/pueue.yml +34 -0
  205. package/dot_config/raycast/README.md +1 -1
  206. package/dot_config/ripgrep/ripgreprc +21 -0
  207. package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
  208. package/dot_config/shell/05-core-safety.sh +47 -0
  209. package/dot_config/shell/10-secrets.sh +40 -0
  210. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  211. package/dot_config/shell/40-ls-colors.sh +48 -0
  212. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  213. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  214. package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
  215. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
  216. package/dot_config/shell/Brewfile.cli +8 -0
  217. package/dot_config/shell/README.md +9 -9
  218. package/dot_config/shell/als_data.txt.tmpl +65 -0
  219. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  220. package/dot_config/shell/custom/context_suggest.zsh +50 -50
  221. package/dot_config/shell/custom/error_analysis.zsh +29 -29
  222. package/dot_config/starship.toml.tmpl +85 -7
  223. package/dot_config/swaylock/config +43 -0
  224. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  225. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  226. package/dot_config/systemd/user/pueued.service +12 -0
  227. package/dot_config/systemd/user/ssh-agent.service +12 -0
  228. package/dot_config/tmux/tmux.conf.tmpl +80 -38
  229. package/dot_config/topgrade.toml.tmpl +54 -0
  230. package/dot_config/user-dirs.dirs +9 -0
  231. package/dot_config/vscode/settings.json.tmpl +9 -50
  232. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  233. package/dot_config/waybar/style.css.tmpl +211 -0
  234. package/dot_config/wezterm/wezterm.lua.tmpl +31 -203
  235. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  236. package/dot_config/yazi/keymap.toml +67 -0
  237. package/dot_config/yazi/theme.toml +102 -0
  238. package/dot_config/zathura/zathurarc +52 -0
  239. package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
  240. package/dot_config/zsh/dot_zprofile +1 -7
  241. package/dot_config/zsh/dot_zshenv +2 -3
  242. package/dot_config/zsh/dot_zshrc.tmpl +368 -69
  243. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  244. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
  245. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
  246. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  247. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
  248. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  249. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  250. package/dot_local/bin/executable_ai-update +195 -0
  251. package/dot_local/bin/executable_ai_core +113 -91
  252. package/dot_local/bin/executable_antigravity +11 -0
  253. package/dot_local/bin/executable_b64 +61 -36
  254. package/dot_local/bin/executable_bm +77 -0
  255. package/dot_local/bin/executable_cb +39 -0
  256. package/dot_local/bin/executable_dot +543 -132
  257. package/dot_local/bin/executable_dot-ai +36 -0
  258. package/dot_local/bin/executable_dot-bootstrap +77 -0
  259. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  260. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  261. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  262. package/dot_local/bin/executable_dot-theme-sync +952 -0
  263. package/dot_local/bin/executable_dot_completion +2 -0
  264. package/dot_local/bin/executable_dtags +28 -0
  265. package/dot_local/bin/executable_epoch +43 -38
  266. package/dot_local/bin/executable_extract +32 -99
  267. package/dot_local/bin/executable_gbd +52 -0
  268. package/dot_local/bin/executable_gd +42 -0
  269. package/dot_local/bin/executable_git-ai-commit +35 -20
  270. package/dot_local/bin/executable_git-ai-diff +33 -18
  271. package/dot_local/bin/executable_gl +101 -0
  272. package/dot_local/bin/executable_hash +56 -18
  273. package/dot_local/bin/executable_hashsum +160 -0
  274. package/dot_local/bin/executable_hex +44 -8
  275. package/dot_local/bin/executable_jsonv +34 -10
  276. package/dot_local/bin/executable_jwt +22 -6
  277. package/dot_local/bin/executable_kill-port +18 -2
  278. package/dot_local/bin/executable_lorem +21 -6
  279. package/dot_local/bin/executable_mkscript +35 -0
  280. package/dot_local/bin/executable_monitor +56 -0
  281. package/dot_local/bin/{executable_ip → executable_myip} +16 -2
  282. package/dot_local/bin/executable_notify +22 -0
  283. package/dot_local/bin/executable_open +36 -0
  284. package/dot_local/bin/executable_pw +27 -0
  285. package/dot_local/bin/executable_rec-start +46 -0
  286. package/dot_local/bin/executable_rec-stop +35 -0
  287. package/dot_local/bin/executable_regex +49 -13
  288. package/dot_local/bin/executable_start-niri +8 -0
  289. package/dot_local/bin/executable_tmux-sessionizer +276 -149
  290. package/dot_local/bin/executable_tour +112 -74
  291. package/dot_local/bin/executable_up +21 -0
  292. package/dot_local/bin/executable_update +45 -11
  293. package/dot_local/bin/executable_uuid +37 -7
  294. package/dot_local/bin/executable_win +32 -0
  295. package/dot_local/bin/executable_yamlv +25 -7
  296. package/dot_local/share/bash-completion/completions/dot +62 -44
  297. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  298. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  299. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  300. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  301. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  302. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  303. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  304. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  305. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  306. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  307. package/dot_local/share/man/man1/dot.1 +149 -0
  308. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  309. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  310. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  311. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  312. package/dot_local/share/zsh/completions/_dot +283 -0
  313. package/install.sh +297 -210
  314. package/package.json +17 -5
  315. package/scripts/ci/check-copyright-headers.sh +96 -0
  316. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  317. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  318. package/scripts/ci/validate-ci-config.sh +41 -39
  319. package/scripts/demo/record.sh +3 -2
  320. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  321. package/scripts/diagnostics/alias-governance.sh +137 -0
  322. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  323. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  324. package/scripts/diagnostics/benchmark.sh +209 -29
  325. package/scripts/diagnostics/conflicts.sh +72 -0
  326. package/scripts/diagnostics/doctor-unified.sh +38 -0
  327. package/scripts/diagnostics/doctor.sh +491 -65
  328. package/scripts/diagnostics/drift-dashboard.sh +17 -6
  329. package/scripts/diagnostics/health.sh +351 -110
  330. package/scripts/diagnostics/history-analysis.sh +12 -4
  331. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  332. package/scripts/diagnostics/perf.sh +225 -0
  333. package/scripts/diagnostics/scorecard.sh +118 -0
  334. package/scripts/diagnostics/secret-governance.sh +58 -0
  335. package/scripts/diagnostics/security-score.sh +139 -93
  336. package/scripts/diagnostics/smoke-test.sh +87 -0
  337. package/scripts/diagnostics/snapshot.sh +89 -0
  338. package/scripts/diagnostics/verify.sh +107 -0
  339. package/scripts/diagnostics/verify_state.sh +2 -2
  340. package/scripts/diagnostics/version-locks.sh +79 -0
  341. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  342. package/scripts/docs/build-manual.sh +883 -0
  343. package/scripts/docs/check-manual.sh +213 -0
  344. package/scripts/dot/commands/agent.sh +465 -0
  345. package/scripts/dot/commands/ai.sh +416 -0
  346. package/scripts/dot/commands/aliases.sh +250 -0
  347. package/scripts/dot/commands/appearance.sh +21 -4
  348. package/scripts/dot/commands/core.sh +59 -4
  349. package/scripts/dot/commands/diagnostics.sh +132 -3
  350. package/scripts/dot/commands/fleet.sh +399 -0
  351. package/scripts/dot/commands/lint.sh +177 -0
  352. package/scripts/dot/commands/manual.sh +168 -0
  353. package/scripts/dot/commands/meta.sh +148 -17
  354. package/scripts/dot/commands/patterns.sh +54 -0
  355. package/scripts/dot/commands/restore.sh +57 -35
  356. package/scripts/dot/commands/secrets.sh +151 -9
  357. package/scripts/dot/commands/security.sh +3 -0
  358. package/scripts/dot/commands/tools.sh +268 -27
  359. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  360. package/scripts/dot/lib/bento.sh +49 -0
  361. package/scripts/dot/lib/log.sh +194 -0
  362. package/scripts/dot/lib/platform.sh +98 -0
  363. package/scripts/dot/lib/ui.sh +507 -0
  364. package/scripts/dot/lib/utils.sh +318 -18
  365. package/scripts/fonts/install-nerd-fonts.sh +19 -10
  366. package/scripts/fonts/patch-fonts.sh +1 -0
  367. package/scripts/git-hooks/install.sh +11 -0
  368. package/scripts/git-hooks/pre-commit +12 -0
  369. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  370. package/scripts/git-hooks/pre-push +29 -0
  371. package/scripts/git-hooks/prepare-commit-msg +29 -0
  372. package/scripts/lib/secrets_provider.sh +158 -0
  373. package/scripts/maintenance/check-updates.sh +131 -0
  374. package/scripts/ops/ai-setup.sh +55 -0
  375. package/scripts/ops/bundle.sh +77 -0
  376. package/scripts/ops/chaos.sh +49 -0
  377. package/scripts/ops/chezmoi-apply.sh +245 -17
  378. package/scripts/ops/chezmoi-diff.sh +1 -0
  379. package/scripts/ops/chezmoi-remove.sh +2 -0
  380. package/scripts/ops/chezmoi-update.sh +34 -2
  381. package/scripts/ops/heal-chezmoi.sh +51 -0
  382. package/scripts/ops/heal-system.sh +128 -0
  383. package/scripts/ops/heal-tools.sh +340 -0
  384. package/scripts/ops/heal.sh +98 -342
  385. package/scripts/ops/post-apply-repair.sh +106 -0
  386. package/scripts/ops/prewarm.sh +127 -0
  387. package/scripts/ops/release.sh +252 -0
  388. package/scripts/ops/rollback.sh +86 -28
  389. package/scripts/ops/setup.sh +137 -0
  390. package/scripts/ops/teleport.sh +2 -1
  391. package/scripts/qa/coverage-baseline.sh +60 -0
  392. package/scripts/qa/docs-coverage.sh +111 -0
  393. package/scripts/qa/reliability-audit.sh +138 -0
  394. package/scripts/qa/traceability-coverage.sh +116 -0
  395. package/scripts/qa/validate-examples.sh +26 -0
  396. package/scripts/qa/wsl-contract.sh +11 -0
  397. package/scripts/release/package-policy-bundles.sh +125 -0
  398. package/scripts/secrets/age-init.sh +1 -0
  399. package/scripts/secrets/create-secrets-file.sh +1 -0
  400. package/scripts/secrets/encrypt-ssh-key.sh +1 -0
  401. package/scripts/security/backup.sh +44 -4
  402. package/scripts/security/dns-doh.sh +36 -14
  403. package/scripts/security/encryption-check.sh +27 -12
  404. package/scripts/security/enforce-policies.sh +11 -16
  405. package/scripts/security/firewall.sh +76 -20
  406. package/scripts/security/lock-configs.sh +2 -2
  407. package/scripts/security/lock-screen.sh +40 -18
  408. package/scripts/security/manage-secrets.sh +42 -29
  409. package/scripts/security/ssh-cert.sh +203 -0
  410. package/scripts/security/telemetry-kill.sh +40 -18
  411. package/scripts/security/usb-safety.sh +37 -15
  412. package/scripts/theme/apply-gnome-theme.sh +87 -56
  413. package/scripts/theme/extract-theme.py +677 -0
  414. package/scripts/theme/install-boot-logo.sh +1 -0
  415. package/scripts/theme/install-catppuccin-themes.sh +57 -33
  416. package/scripts/theme/install-cursors.sh +1 -0
  417. package/scripts/theme/install-file-icons.sh +1 -0
  418. package/scripts/theme/install-grub-theme.sh +11 -1
  419. package/scripts/theme/install-lock-icon.sh +1 -0
  420. package/scripts/theme/merge-wallpaper.sh +141 -0
  421. package/scripts/theme/rebuild-themes.sh +309 -0
  422. package/scripts/theme/switch.sh +308 -137
  423. package/scripts/theme/wallpaper-rotate.sh +66 -12
  424. package/scripts/theme/wallpaper-sync.sh +386 -31
  425. package/scripts/tools/cmatrix.sh +1 -0
  426. package/scripts/tools/detect-collisions.py +1 -1
  427. package/scripts/tools/emoji-picker.sh +4 -1
  428. package/scripts/tools/figlet-banner.sh +1 -0
  429. package/scripts/tools/log-rotate.sh +2 -1
  430. package/scripts/tools/lolcat-wrap.sh +1 -0
  431. package/scripts/tools/pipes.sh +1 -0
  432. package/scripts/tuning/linux.sh +23 -13
  433. package/scripts/tuning/macos.sh +13 -4
  434. package/scripts/uninstall.sh +85 -0
  435. package/scripts/version-sync.sh +487 -0
  436. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  437. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  438. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  439. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  440. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  441. package/templates/projects/go/README.md +1 -1
  442. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  443. package/templates/projects/go/go.sum +0 -0
  444. package/templates/projects/molecule/README.md +1 -1
  445. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  446. package/templates/projects/node/README.md +1 -1
  447. package/templates/projects/node/package-lock.json +12 -0
  448. package/templates/projects/node/src/index.js +1 -0
  449. package/templates/projects/packer/README.md +1 -1
  450. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  451. package/templates/projects/python/README.md +1 -1
  452. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  453. package/templates/projects/python/tests/test_basic.py +1 -0
  454. package/docs/ARCHITECTURE.md +0 -229
  455. package/docs/COMPLIANCE.md +0 -47
  456. package/docs/FEATURES.md +0 -166
  457. package/docs/FONTS.md +0 -147
  458. package/docs/INSTALL.md +0 -119
  459. package/docs/KEYS.md +0 -40
  460. package/docs/OPERATIONS.md +0 -130
  461. package/docs/PR_DESCRIPTION.md +0 -149
  462. package/docs/SECRETS.md +0 -76
  463. package/docs/SECURITY.md +0 -30
  464. package/docs/SECURITY_CHECKLIST.md +0 -25
  465. package/docs/TASK.md +0 -99
  466. package/docs/TESTING.md +0 -190
  467. package/docs/TOOLS.md +0 -146
  468. package/docs/UTILS.md +0 -105
  469. package/docs/WALKTHROUGH.md +0 -165
  470. package/dot_config/clippy.toml +0 -55
  471. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  472. package/dot_config/firefox/user.js +0 -8
  473. package/dot_config/git/config.tmpl +0 -77
  474. package/dot_config/go/aliases.sh +0 -61
  475. package/dot_config/go/env.sh +0 -24
  476. package/dot_config/ice/README.md +0 -13
  477. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  478. package/dot_config/lsd/config.yaml +0 -19
  479. package/dot_config/nvim/snippets/all.lua +0 -9
  480. package/dot_config/nvim/snippets/python.lua +0 -16
  481. package/dot_config/shell/00-container-detect.sh +0 -53
  482. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  483. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  484. package/dot_config/shell/90-theme-switch.sh +0 -70
  485. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  486. package/dot_config/waybar/style.css +0 -8
  487. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  488. package/dot_local/bin/executable_zig-install +0 -89
  489. package/dot_local/bin/voice_ops +0 -7
  490. package/scripts/ops/health-check.sh +0 -380
  491. package/scripts/tests/README.md +0 -241
  492. package/scripts/tests/benchmark.sh +0 -91
  493. package/scripts/tests/framework/assertions.sh +0 -283
  494. package/scripts/tests/framework/mocks.sh +0 -201
  495. package/scripts/tests/framework/test_runner.sh +0 -189
  496. package/scripts/tests/integration/test_install.sh +0 -237
  497. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  498. package/scripts/tests/performance/regression_check.sh +0 -73
  499. package/scripts/tests/performance/stress_test.sh +0 -65
  500. package/scripts/tests/test-aliases.sh +0 -25
  501. package/scripts/tests/test-docker.sh +0 -48
  502. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  503. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  504. package/scripts/tests/unit/test_backup.sh +0 -227
  505. package/scripts/tests/unit/test_case_functions.sh +0 -238
  506. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  507. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  508. package/scripts/tests/unit/test_encode64.sh +0 -67
  509. package/scripts/tests/unit/test_environment.sh +0 -78
  510. package/scripts/tests/unit/test_extract.sh +0 -163
  511. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  512. package/scripts/tests/unit/test_genpass.sh +0 -298
  513. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  514. package/scripts/tests/unit/test_installers.sh +0 -172
  515. package/scripts/tests/unit/test_keygen.sh +0 -68
  516. package/scripts/tests/unit/test_logging.sh +0 -96
  517. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  518. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  519. package/scripts/tests/unit/test_prependpath.sh +0 -66
  520. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  521. package/scripts/tests/unit/test_rd.sh +0 -230
  522. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  523. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  524. package/scripts/tests/unit/test_template_validation.sh +0 -238
  525. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  526. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  527. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  528. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  529. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  530. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  531. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  532. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  533. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  534. package/scripts/tests/unit/test_zipf.sh +0 -76
  535. /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
  536. /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
  537. /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
  538. /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
  539. /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
  540. /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
  541. /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
  542. /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
  543. /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
  544. /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
  545. /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
  546. /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Uninstall dotfiles and clean up all artifacts.
4
+
5
+ set -euo pipefail
6
+
7
+ RED='\033[0;31m'
8
+ GREEN='\033[0;32m'
9
+ YELLOW='\033[1;33m'
10
+ NC='\033[0m'
11
+
12
+ log_info() { printf "${GREEN}[INFO]${NC} %s\n" "$*"; }
13
+ log_warn() { printf "${YELLOW}[WARN]${NC} %s\n" "$*"; }
14
+ log_error() { printf "${RED}[ERROR]${NC} %s\n" "$*" >&2; }
15
+
16
+ echo ""
17
+ echo "Dotfiles Uninstall"
18
+ echo "=================="
19
+ echo ""
20
+ log_warn "This will remove all managed dotfiles and related artifacts."
21
+ echo ""
22
+
23
+ if [[ "${1:-}" != "--force" ]]; then
24
+ printf "Continue? [y/N] "
25
+ read -r confirm
26
+ case "$confirm" in
27
+ y | Y | yes) ;;
28
+ *)
29
+ echo "Aborted."
30
+ exit 0
31
+ ;;
32
+ esac
33
+ fi
34
+
35
+ # 1. Revert chezmoi-managed files
36
+ if command -v chezmoi >/dev/null 2>&1; then
37
+ log_info "Reverting chezmoi-managed files..."
38
+ chezmoi purge --force 2>/dev/null || true
39
+ fi
40
+
41
+ # 2. Remove dotfiles repo
42
+ if [[ -d "$HOME/.dotfiles" ]]; then
43
+ log_info "Removing ~/.dotfiles repository..."
44
+ rm -rf "$HOME/.dotfiles"
45
+ fi
46
+
47
+ # 3. Remove chezmoi config and state
48
+ log_info "Removing chezmoi configuration..."
49
+ rm -rf "${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi"
50
+ rm -rf "${XDG_DATA_HOME:-$HOME/.local/share}/chezmoi"
51
+
52
+ # 4. Remove dotfiles artifacts
53
+ log_info "Removing dotfiles artifacts..."
54
+ rm -f "$HOME/.local/bin/dot"
55
+ rm -f "$HOME/.local/bin/dot-ai"
56
+ rm -f "$HOME/.local/bin/dot-theme-sync"
57
+ rm -f "$HOME/.local/bin/tour"
58
+ rm -f "$HOME/.local/bin/ai_core"
59
+ rm -f "$HOME/.local/bin/ai-update"
60
+ rm -f "$HOME/.local/bin/antigravity"
61
+ rm -f "$HOME/.local/bin/git-ai-commit"
62
+ rm -f "$HOME/.local/bin/git-ai-diff"
63
+
64
+ # 5. Remove shell caches
65
+ log_info "Removing shell caches..."
66
+ rm -rf "${XDG_CACHE_HOME:-$HOME/.cache}/dotfiles"
67
+ rm -rf "${XDG_CACHE_HOME:-$HOME/.cache}/zsh"
68
+ rm -rf "${XDG_CACHE_HOME:-$HOME/.cache}/bash"
69
+
70
+ # 6. Remove state and logs
71
+ log_info "Removing state and logs..."
72
+ rm -rf "${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles"
73
+ rm -f "${XDG_DATA_HOME:-$HOME/.local/share}/dotfiles.log"
74
+
75
+ # 7. Remove completions
76
+ log_info "Removing shell completions..."
77
+ rm -f "${XDG_DATA_HOME:-$HOME/.local/share}/zsh/completions/_dot"
78
+ rm -f "${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions/dot"
79
+
80
+ echo ""
81
+ log_info "Uninstall complete."
82
+ log_info "You may need to manually:"
83
+ log_info " - Remove mise tools: mise implode"
84
+ log_info " - Reset your shell: chsh -s /bin/zsh"
85
+ log_info " - Restart your terminal"
@@ -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"
@@ -4,4 +4,4 @@ Minimal Go project scaffold.
4
4
 
5
5
  ---
6
6
 
7
- Made with ❤️ by [Sebastien Rousseau](https://github.com/sebastienrousseau)
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