@sebastienrousseau/dotfiles 0.2.481 → 0.2.500

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/CHANGELOG.md +122 -32
  2. package/LICENSE +1 -1
  3. package/README.md +211 -242
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +2 -2
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +58 -249
  9. package/docs/adr/ADR-004-cli-architecture.md +2 -2
  10. package/docs/adr/ADR-006-shell-selection.md +2 -2
  11. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  12. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  13. package/docs/adr/README.md +2 -3
  14. package/docs/architecture/ARCHITECTURE.md +113 -0
  15. package/docs/architecture/INTEROP.md +36 -0
  16. package/docs/architecture/REPO_LAYOUT.md +237 -0
  17. package/docs/architecture/WALKTHROUGH.md +82 -0
  18. package/docs/architecture/fleet-deployment.md +73 -0
  19. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  20. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  21. package/docs/{PLAN.md → archive/PLAN.md} +1 -1
  22. package/docs/guides/INSTALL.md +140 -0
  23. package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
  24. package/docs/guides/THEMING.md +222 -0
  25. package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
  26. package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
  27. package/docs/index.md +39 -0
  28. package/docs/interop/A2A.md +32 -0
  29. package/docs/manual/00-introduction.md +85 -0
  30. package/docs/manual/01-concepts/01-architecture.md +134 -0
  31. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  32. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  33. package/docs/manual/01-concepts/04-fleet.md +142 -0
  34. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  35. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  36. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  37. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  38. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  39. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  40. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  41. package/docs/manual/03-reference/02-config-files.md +259 -0
  42. package/docs/manual/03-reference/03-environment.md +120 -0
  43. package/docs/manual/03-reference/04-templates.md +184 -0
  44. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  45. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  46. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  47. package/docs/manual/04-cookbook/03-faq.md +167 -0
  48. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  49. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  50. package/docs/manual/05-appendices/C-glossary.md +36 -0
  51. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  52. package/docs/manual/05-appendices/E-license.md +34 -0
  53. package/docs/manual/_toc.yml +58 -0
  54. package/docs/manual/command-index.md +58 -0
  55. package/docs/manual/concept-index.md +164 -0
  56. package/docs/operations/ATTESTATION.md +39 -0
  57. package/docs/operations/MAINTENANCE.md +59 -0
  58. package/docs/operations/MIGRATION.md +101 -0
  59. package/docs/operations/OPERATIONS.md +164 -0
  60. package/docs/operations/RELIABILITY.md +116 -0
  61. package/docs/{ROADMAP.md → operations/ROADMAP.md} +11 -11
  62. package/docs/operations/TESTING.md +195 -0
  63. package/docs/operations/TRACEABILITY.md +31 -0
  64. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  65. package/docs/operations/VERSION_SYNC.md +344 -0
  66. package/docs/{ALIASES.md → reference/ALIASES.md} +2 -6
  67. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  68. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  69. package/docs/reference/FEATURES.md +62 -0
  70. package/docs/reference/FONTS.md +108 -0
  71. package/docs/reference/PROFILES.md +65 -0
  72. package/docs/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
  73. package/docs/reference/SCRIPTS.md +67 -0
  74. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  75. package/docs/reference/THEMES.md +113 -0
  76. package/docs/reference/TOOLS.md +105 -0
  77. package/docs/reference/UTILS.md +151 -0
  78. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  79. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  80. package/docs/security/COMPLIANCE.md +453 -0
  81. package/docs/security/ENCRYPTION.md +52 -0
  82. package/docs/security/FMEA.md +155 -0
  83. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  84. package/docs/security/KEYS.md +45 -0
  85. package/docs/security/MCP_POLICY.md +69 -0
  86. package/docs/security/POLICY_RELEASES.md +33 -0
  87. package/docs/security/README.md +24 -0
  88. package/docs/security/SECRETS.md +146 -0
  89. package/docs/security/SECURITY.md +41 -0
  90. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  91. package/docs/security/SOUP_REGISTER.md +32 -0
  92. package/docs/security/THREAT_MODEL.md +120 -0
  93. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  94. package/docs/themes/README.md +3 -17
  95. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  96. package/docs/themes/hero-shot.svg +78 -0
  97. package/dot_config/.module-manifest.json +69 -0
  98. package/dot_config/ai/identity.md +20 -0
  99. package/dot_config/ai/patterns/architect.md +14 -0
  100. package/dot_config/ai/patterns/hardener.md +13 -0
  101. package/dot_config/ai/patterns/refactor.md +13 -0
  102. package/dot_config/aider/aider.conf.yml +1 -1
  103. package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
  104. package/dot_config/atuin/config.toml +18 -1
  105. package/dot_config/bat/config +16 -1
  106. package/dot_config/claude/mcp_servers.json +3 -32
  107. package/dot_config/dotfiles/agent-card.json +29 -0
  108. package/dot_config/dotfiles/agent-profiles.json +92 -0
  109. package/dot_config/dotfiles/boot/README.md +1 -1
  110. package/dot_config/dotfiles/grub/README.md +1 -1
  111. package/dot_config/dotfiles/lock/README.md +1 -1
  112. package/dot_config/dotfiles/mcp-lock.json +33 -0
  113. package/dot_config/dotfiles/mcp-policy.json +52 -0
  114. package/dot_config/dotfiles/mcp-registry.json +47 -0
  115. package/dot_config/dotfiles/model-registry.json +20 -0
  116. package/dot_config/dotfiles/policy-bundles.json +38 -0
  117. package/dot_config/dotfiles/prompt-registry.json +16 -0
  118. package/dot_config/dotfiles/versions.env +18 -0
  119. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  120. package/dot_config/environment.d/90-wayland.conf +19 -0
  121. package/dot_config/firefox/user.js.tmpl +58 -0
  122. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  123. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  124. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  125. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  126. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  127. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  128. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  129. package/dot_config/fish/config.fish.tmpl +44 -0
  130. package/dot_config/fish/fish_plugins +1 -0
  131. package/dot_config/fish/functions/_.fish +3 -0
  132. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  133. package/dot_config/fish/functions/als.fish +46 -0
  134. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  135. package/dot_config/fish/functions/c.fish +3 -0
  136. package/dot_config/fish/functions/cat.fish +9 -0
  137. package/dot_config/fish/functions/d.fish +7 -0
  138. package/dot_config/fish/functions/dot.fish +34 -0
  139. package/dot_config/fish/functions/h.fish +3 -0
  140. package/dot_config/fish/functions/l.fish +7 -0
  141. package/dot_config/fish/functions/la.fish +7 -0
  142. package/dot_config/fish/functions/ll.fish +7 -0
  143. package/dot_config/fish/functions/log_error.fish +13 -0
  144. package/dot_config/fish/functions/log_info.fish +13 -0
  145. package/dot_config/fish/functions/lr.fish +7 -0
  146. package/dot_config/fish/functions/lra.fish +7 -0
  147. package/dot_config/fish/functions/ls.fish +7 -0
  148. package/dot_config/fish/functions/lt.fish +7 -0
  149. package/dot_config/fish/functions/lta.fish +7 -0
  150. package/dot_config/fish/functions/notify-run.fish +11 -0
  151. package/dot_config/fish/functions/q.fish +3 -0
  152. package/dot_config/fish/functions/silent-run.fish +7 -0
  153. package/dot_config/fish/functions/yy.fish +8 -0
  154. package/dot_config/fontconfig/fonts.conf.tmpl +13 -0
  155. package/dot_config/foot/foot.ini.tmpl +33 -0
  156. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  157. package/dot_config/fzf/fzf.zsh +48 -0
  158. package/dot_config/ghostty/config.tmpl +69 -565
  159. package/dot_config/git/allowed_signers.tmpl +18 -0
  160. package/dot_config/git/commit-template +10 -0
  161. package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
  162. package/dot_config/goose/config.yaml +2 -2
  163. package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
  164. package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
  165. package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
  166. package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
  167. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  168. package/dot_config/just/justfile +18 -0
  169. package/dot_config/kanshi/config.tmpl +22 -0
  170. package/dot_config/kitty/kitty.conf.tmpl +44 -508
  171. package/dot_config/lazygit/config.yml +18 -6
  172. package/dot_config/mako/config +47 -0
  173. package/dot_config/micro/settings.json +3 -0
  174. package/dot_config/mimeapps.list +77 -0
  175. package/dot_config/mise/config.toml +63 -5
  176. package/dot_config/mongosh/mongoshrc.js +1 -0
  177. package/dot_config/mpv/input.conf +47 -0
  178. package/dot_config/mpv/mpv.conf +47 -0
  179. package/dot_config/niri/config.kdl.tmpl +327 -0
  180. package/dot_config/nushell/aliases.nu +18 -0
  181. package/dot_config/nushell/completions.nu.tmpl +52 -0
  182. package/dot_config/nushell/config.nu.tmpl +86 -0
  183. package/dot_config/nushell/env.nu.tmpl +94 -0
  184. package/dot_config/nushell/functions.nu.tmpl +17 -0
  185. package/dot_config/nvim/init.lua +14 -0
  186. package/dot_config/nvim/lazy-lock.json +45 -14
  187. package/dot_config/nvim/lua/config/autocmds.lua +45 -1
  188. package/dot_config/nvim/lua/config/keymaps.lua +13 -8
  189. package/dot_config/nvim/lua/config/lazy.lua +22 -12
  190. package/dot_config/nvim/lua/config/options.lua +1 -0
  191. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  192. package/dot_config/nvim/lua/plugins/coding.lua +11 -29
  193. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  194. package/dot_config/nvim/lua/plugins/dap.lua +215 -4
  195. package/dot_config/nvim/lua/plugins/editor.lua +6 -10
  196. package/dot_config/nvim/lua/plugins/git.lua +1 -0
  197. package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
  198. package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
  199. package/dot_config/nvim/lua/plugins/rust.lua +1 -0
  200. package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
  201. package/dot_config/nvim/lua/plugins/ui.lua +23 -51
  202. package/dot_config/paru/paru.conf +10 -0
  203. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  204. package/dot_config/pueue/pueue.yml +34 -0
  205. package/dot_config/raycast/README.md +1 -1
  206. package/dot_config/ripgrep/ripgreprc +21 -0
  207. package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
  208. package/dot_config/shell/05-core-safety.sh +47 -0
  209. package/dot_config/shell/10-secrets.sh +40 -0
  210. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  211. package/dot_config/shell/40-ls-colors.sh +48 -0
  212. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  213. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  214. package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
  215. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
  216. package/dot_config/shell/Brewfile.cli +8 -0
  217. package/dot_config/shell/README.md +9 -9
  218. package/dot_config/shell/als_data.txt.tmpl +65 -0
  219. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  220. package/dot_config/shell/custom/context_suggest.zsh +50 -50
  221. package/dot_config/shell/custom/error_analysis.zsh +29 -29
  222. package/dot_config/starship.toml.tmpl +85 -7
  223. package/dot_config/swaylock/config +43 -0
  224. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  225. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  226. package/dot_config/systemd/user/pueued.service +12 -0
  227. package/dot_config/systemd/user/ssh-agent.service +12 -0
  228. package/dot_config/tmux/tmux.conf.tmpl +80 -38
  229. package/dot_config/topgrade.toml.tmpl +54 -0
  230. package/dot_config/user-dirs.dirs +9 -0
  231. package/dot_config/vscode/settings.json.tmpl +9 -50
  232. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  233. package/dot_config/waybar/style.css.tmpl +211 -0
  234. package/dot_config/wezterm/wezterm.lua.tmpl +31 -203
  235. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  236. package/dot_config/yazi/keymap.toml +67 -0
  237. package/dot_config/yazi/theme.toml +102 -0
  238. package/dot_config/zathura/zathurarc +52 -0
  239. package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
  240. package/dot_config/zsh/dot_zprofile +1 -7
  241. package/dot_config/zsh/dot_zshenv +2 -3
  242. package/dot_config/zsh/dot_zshrc.tmpl +368 -69
  243. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  244. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
  245. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
  246. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  247. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
  248. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  249. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  250. package/dot_local/bin/executable_ai-update +195 -0
  251. package/dot_local/bin/executable_ai_core +113 -91
  252. package/dot_local/bin/executable_antigravity +11 -0
  253. package/dot_local/bin/executable_b64 +61 -36
  254. package/dot_local/bin/executable_bm +77 -0
  255. package/dot_local/bin/executable_cb +39 -0
  256. package/dot_local/bin/executable_dot +543 -132
  257. package/dot_local/bin/executable_dot-ai +36 -0
  258. package/dot_local/bin/executable_dot-bootstrap +77 -0
  259. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  260. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  261. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  262. package/dot_local/bin/executable_dot-theme-sync +952 -0
  263. package/dot_local/bin/executable_dot_completion +2 -0
  264. package/dot_local/bin/executable_dtags +28 -0
  265. package/dot_local/bin/executable_epoch +43 -38
  266. package/dot_local/bin/executable_extract +32 -99
  267. package/dot_local/bin/executable_gbd +52 -0
  268. package/dot_local/bin/executable_gd +42 -0
  269. package/dot_local/bin/executable_git-ai-commit +35 -20
  270. package/dot_local/bin/executable_git-ai-diff +33 -18
  271. package/dot_local/bin/executable_gl +101 -0
  272. package/dot_local/bin/executable_hash +56 -18
  273. package/dot_local/bin/executable_hashsum +160 -0
  274. package/dot_local/bin/executable_hex +44 -8
  275. package/dot_local/bin/executable_jsonv +34 -10
  276. package/dot_local/bin/executable_jwt +22 -6
  277. package/dot_local/bin/executable_kill-port +18 -2
  278. package/dot_local/bin/executable_lorem +21 -6
  279. package/dot_local/bin/executable_mkscript +35 -0
  280. package/dot_local/bin/executable_monitor +56 -0
  281. package/dot_local/bin/{executable_ip → executable_myip} +16 -2
  282. package/dot_local/bin/executable_notify +22 -0
  283. package/dot_local/bin/executable_open +36 -0
  284. package/dot_local/bin/executable_pw +27 -0
  285. package/dot_local/bin/executable_rec-start +46 -0
  286. package/dot_local/bin/executable_rec-stop +35 -0
  287. package/dot_local/bin/executable_regex +49 -13
  288. package/dot_local/bin/executable_start-niri +8 -0
  289. package/dot_local/bin/executable_tmux-sessionizer +276 -149
  290. package/dot_local/bin/executable_tour +112 -74
  291. package/dot_local/bin/executable_up +21 -0
  292. package/dot_local/bin/executable_update +45 -11
  293. package/dot_local/bin/executable_uuid +37 -7
  294. package/dot_local/bin/executable_win +32 -0
  295. package/dot_local/bin/executable_yamlv +25 -7
  296. package/dot_local/share/bash-completion/completions/dot +62 -44
  297. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  298. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  299. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  300. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  301. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  302. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  303. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  304. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  305. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  306. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  307. package/dot_local/share/man/man1/dot.1 +149 -0
  308. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  309. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  310. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  311. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  312. package/dot_local/share/zsh/completions/_dot +283 -0
  313. package/install.sh +297 -210
  314. package/package.json +17 -5
  315. package/scripts/ci/check-copyright-headers.sh +96 -0
  316. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  317. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  318. package/scripts/ci/validate-ci-config.sh +41 -39
  319. package/scripts/demo/record.sh +3 -2
  320. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  321. package/scripts/diagnostics/alias-governance.sh +137 -0
  322. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  323. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  324. package/scripts/diagnostics/benchmark.sh +209 -29
  325. package/scripts/diagnostics/conflicts.sh +72 -0
  326. package/scripts/diagnostics/doctor-unified.sh +38 -0
  327. package/scripts/diagnostics/doctor.sh +491 -65
  328. package/scripts/diagnostics/drift-dashboard.sh +17 -6
  329. package/scripts/diagnostics/health.sh +351 -110
  330. package/scripts/diagnostics/history-analysis.sh +12 -4
  331. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  332. package/scripts/diagnostics/perf.sh +225 -0
  333. package/scripts/diagnostics/scorecard.sh +118 -0
  334. package/scripts/diagnostics/secret-governance.sh +58 -0
  335. package/scripts/diagnostics/security-score.sh +139 -93
  336. package/scripts/diagnostics/smoke-test.sh +87 -0
  337. package/scripts/diagnostics/snapshot.sh +89 -0
  338. package/scripts/diagnostics/verify.sh +107 -0
  339. package/scripts/diagnostics/verify_state.sh +2 -2
  340. package/scripts/diagnostics/version-locks.sh +79 -0
  341. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  342. package/scripts/docs/build-manual.sh +883 -0
  343. package/scripts/docs/check-manual.sh +213 -0
  344. package/scripts/dot/commands/agent.sh +465 -0
  345. package/scripts/dot/commands/ai.sh +416 -0
  346. package/scripts/dot/commands/aliases.sh +250 -0
  347. package/scripts/dot/commands/appearance.sh +21 -4
  348. package/scripts/dot/commands/core.sh +59 -4
  349. package/scripts/dot/commands/diagnostics.sh +132 -3
  350. package/scripts/dot/commands/fleet.sh +399 -0
  351. package/scripts/dot/commands/lint.sh +177 -0
  352. package/scripts/dot/commands/manual.sh +168 -0
  353. package/scripts/dot/commands/meta.sh +148 -17
  354. package/scripts/dot/commands/patterns.sh +54 -0
  355. package/scripts/dot/commands/restore.sh +57 -35
  356. package/scripts/dot/commands/secrets.sh +151 -9
  357. package/scripts/dot/commands/security.sh +3 -0
  358. package/scripts/dot/commands/tools.sh +268 -27
  359. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  360. package/scripts/dot/lib/bento.sh +49 -0
  361. package/scripts/dot/lib/log.sh +194 -0
  362. package/scripts/dot/lib/platform.sh +98 -0
  363. package/scripts/dot/lib/ui.sh +507 -0
  364. package/scripts/dot/lib/utils.sh +318 -18
  365. package/scripts/fonts/install-nerd-fonts.sh +19 -10
  366. package/scripts/fonts/patch-fonts.sh +1 -0
  367. package/scripts/git-hooks/install.sh +11 -0
  368. package/scripts/git-hooks/pre-commit +12 -0
  369. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  370. package/scripts/git-hooks/pre-push +29 -0
  371. package/scripts/git-hooks/prepare-commit-msg +29 -0
  372. package/scripts/lib/secrets_provider.sh +158 -0
  373. package/scripts/maintenance/check-updates.sh +131 -0
  374. package/scripts/ops/ai-setup.sh +55 -0
  375. package/scripts/ops/bundle.sh +77 -0
  376. package/scripts/ops/chaos.sh +49 -0
  377. package/scripts/ops/chezmoi-apply.sh +245 -17
  378. package/scripts/ops/chezmoi-diff.sh +1 -0
  379. package/scripts/ops/chezmoi-remove.sh +2 -0
  380. package/scripts/ops/chezmoi-update.sh +34 -2
  381. package/scripts/ops/heal-chezmoi.sh +51 -0
  382. package/scripts/ops/heal-system.sh +128 -0
  383. package/scripts/ops/heal-tools.sh +340 -0
  384. package/scripts/ops/heal.sh +98 -342
  385. package/scripts/ops/post-apply-repair.sh +106 -0
  386. package/scripts/ops/prewarm.sh +127 -0
  387. package/scripts/ops/release.sh +252 -0
  388. package/scripts/ops/rollback.sh +86 -28
  389. package/scripts/ops/setup.sh +137 -0
  390. package/scripts/ops/teleport.sh +2 -1
  391. package/scripts/qa/coverage-baseline.sh +60 -0
  392. package/scripts/qa/docs-coverage.sh +111 -0
  393. package/scripts/qa/reliability-audit.sh +138 -0
  394. package/scripts/qa/traceability-coverage.sh +116 -0
  395. package/scripts/qa/validate-examples.sh +26 -0
  396. package/scripts/qa/wsl-contract.sh +11 -0
  397. package/scripts/release/package-policy-bundles.sh +125 -0
  398. package/scripts/secrets/age-init.sh +1 -0
  399. package/scripts/secrets/create-secrets-file.sh +1 -0
  400. package/scripts/secrets/encrypt-ssh-key.sh +1 -0
  401. package/scripts/security/backup.sh +44 -4
  402. package/scripts/security/dns-doh.sh +36 -14
  403. package/scripts/security/encryption-check.sh +27 -12
  404. package/scripts/security/enforce-policies.sh +11 -16
  405. package/scripts/security/firewall.sh +76 -20
  406. package/scripts/security/lock-configs.sh +2 -2
  407. package/scripts/security/lock-screen.sh +40 -18
  408. package/scripts/security/manage-secrets.sh +42 -29
  409. package/scripts/security/ssh-cert.sh +203 -0
  410. package/scripts/security/telemetry-kill.sh +40 -18
  411. package/scripts/security/usb-safety.sh +37 -15
  412. package/scripts/theme/apply-gnome-theme.sh +87 -56
  413. package/scripts/theme/extract-theme.py +677 -0
  414. package/scripts/theme/install-boot-logo.sh +1 -0
  415. package/scripts/theme/install-catppuccin-themes.sh +57 -33
  416. package/scripts/theme/install-cursors.sh +1 -0
  417. package/scripts/theme/install-file-icons.sh +1 -0
  418. package/scripts/theme/install-grub-theme.sh +11 -1
  419. package/scripts/theme/install-lock-icon.sh +1 -0
  420. package/scripts/theme/merge-wallpaper.sh +141 -0
  421. package/scripts/theme/rebuild-themes.sh +309 -0
  422. package/scripts/theme/switch.sh +308 -137
  423. package/scripts/theme/wallpaper-rotate.sh +66 -12
  424. package/scripts/theme/wallpaper-sync.sh +386 -31
  425. package/scripts/tools/cmatrix.sh +1 -0
  426. package/scripts/tools/detect-collisions.py +1 -1
  427. package/scripts/tools/emoji-picker.sh +4 -1
  428. package/scripts/tools/figlet-banner.sh +1 -0
  429. package/scripts/tools/log-rotate.sh +2 -1
  430. package/scripts/tools/lolcat-wrap.sh +1 -0
  431. package/scripts/tools/pipes.sh +1 -0
  432. package/scripts/tuning/linux.sh +23 -13
  433. package/scripts/tuning/macos.sh +13 -4
  434. package/scripts/uninstall.sh +85 -0
  435. package/scripts/version-sync.sh +487 -0
  436. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  437. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  438. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  439. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  440. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  441. package/templates/projects/go/README.md +1 -1
  442. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  443. package/templates/projects/go/go.sum +0 -0
  444. package/templates/projects/molecule/README.md +1 -1
  445. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  446. package/templates/projects/node/README.md +1 -1
  447. package/templates/projects/node/package-lock.json +12 -0
  448. package/templates/projects/node/src/index.js +1 -0
  449. package/templates/projects/packer/README.md +1 -1
  450. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  451. package/templates/projects/python/README.md +1 -1
  452. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  453. package/templates/projects/python/tests/test_basic.py +1 -0
  454. package/docs/ARCHITECTURE.md +0 -229
  455. package/docs/COMPLIANCE.md +0 -47
  456. package/docs/FEATURES.md +0 -166
  457. package/docs/FONTS.md +0 -147
  458. package/docs/INSTALL.md +0 -119
  459. package/docs/KEYS.md +0 -40
  460. package/docs/OPERATIONS.md +0 -130
  461. package/docs/PR_DESCRIPTION.md +0 -149
  462. package/docs/SECRETS.md +0 -76
  463. package/docs/SECURITY.md +0 -30
  464. package/docs/SECURITY_CHECKLIST.md +0 -25
  465. package/docs/TASK.md +0 -99
  466. package/docs/TESTING.md +0 -190
  467. package/docs/TOOLS.md +0 -146
  468. package/docs/UTILS.md +0 -105
  469. package/docs/WALKTHROUGH.md +0 -165
  470. package/dot_config/clippy.toml +0 -55
  471. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  472. package/dot_config/firefox/user.js +0 -8
  473. package/dot_config/git/config.tmpl +0 -77
  474. package/dot_config/go/aliases.sh +0 -61
  475. package/dot_config/go/env.sh +0 -24
  476. package/dot_config/ice/README.md +0 -13
  477. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  478. package/dot_config/lsd/config.yaml +0 -19
  479. package/dot_config/nvim/snippets/all.lua +0 -9
  480. package/dot_config/nvim/snippets/python.lua +0 -16
  481. package/dot_config/shell/00-container-detect.sh +0 -53
  482. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  483. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  484. package/dot_config/shell/90-theme-switch.sh +0 -70
  485. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  486. package/dot_config/waybar/style.css +0 -8
  487. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  488. package/dot_local/bin/executable_zig-install +0 -89
  489. package/dot_local/bin/voice_ops +0 -7
  490. package/scripts/ops/health-check.sh +0 -380
  491. package/scripts/tests/README.md +0 -241
  492. package/scripts/tests/benchmark.sh +0 -91
  493. package/scripts/tests/framework/assertions.sh +0 -283
  494. package/scripts/tests/framework/mocks.sh +0 -201
  495. package/scripts/tests/framework/test_runner.sh +0 -189
  496. package/scripts/tests/integration/test_install.sh +0 -237
  497. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  498. package/scripts/tests/performance/regression_check.sh +0 -73
  499. package/scripts/tests/performance/stress_test.sh +0 -65
  500. package/scripts/tests/test-aliases.sh +0 -25
  501. package/scripts/tests/test-docker.sh +0 -48
  502. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  503. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  504. package/scripts/tests/unit/test_backup.sh +0 -227
  505. package/scripts/tests/unit/test_case_functions.sh +0 -238
  506. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  507. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  508. package/scripts/tests/unit/test_encode64.sh +0 -67
  509. package/scripts/tests/unit/test_environment.sh +0 -78
  510. package/scripts/tests/unit/test_extract.sh +0 -163
  511. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  512. package/scripts/tests/unit/test_genpass.sh +0 -298
  513. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  514. package/scripts/tests/unit/test_installers.sh +0 -172
  515. package/scripts/tests/unit/test_keygen.sh +0 -68
  516. package/scripts/tests/unit/test_logging.sh +0 -96
  517. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  518. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  519. package/scripts/tests/unit/test_prependpath.sh +0 -66
  520. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  521. package/scripts/tests/unit/test_rd.sh +0 -230
  522. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  523. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  524. package/scripts/tests/unit/test_template_validation.sh +0 -238
  525. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  526. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  527. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  528. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  529. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  530. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  531. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  532. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  533. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  534. package/scripts/tests/unit/test_zipf.sh +0 -76
  535. /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
  536. /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
  537. /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
  538. /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
  539. /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
  540. /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
  541. /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
  542. /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
  543. /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
  544. /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
  545. /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
  546. /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env zsh
2
+ # shellcheck shell=bash disable=SC2034
1
3
  #compdef dot
2
4
 
3
5
  # Zsh completion for the dot CLI
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## dtags — List sorted tags for a Docker Hub image.
4
+ ##
5
+ ## # Usage
6
+ ## dtags python
7
+ ## dtags node
8
+ ## dtags ubuntu
9
+
10
+ set -euo pipefail
11
+
12
+ for cmd in curl jq; do
13
+ if ! command -v "$cmd" &>/dev/null; then
14
+ echo "dtags requires $cmd" >&2
15
+ exit 1
16
+ fi
17
+ done
18
+
19
+ image="${1:-}"
20
+
21
+ if [[ -z "${image}" ]]; then
22
+ echo "Usage: dtags <image>" >&2
23
+ exit 1
24
+ fi
25
+
26
+ curl --silent \
27
+ "https://registry.hub.docker.com/v2/repositories/library/${image}/tags?page_size=1000" |
28
+ jq -r ".results[].name" | sort -V 2>/dev/null || sort -t. -k1,1n -k2,2n -k3,3n
@@ -1,61 +1,66 @@
1
1
  #!/usr/bin/env bash
2
- # Epoch time converter
3
- # Usage: epoch [timestamp] | epoch -r <date>
2
+ # shellcheck disable=SC2034
3
+ ## Epoch Converter Convert between Unix timestamps and human-readable dates.
4
+ ##
5
+ ## Bidirectional conversion between epoch timestamps and date strings.
6
+ ## Supports both seconds and milliseconds precision.
7
+ ##
8
+ ## # Requirements
9
+ ## - date: Core utility (coreutils or macOS built-in)
10
+ ##
11
+ ## # Usage
12
+ ## epoch # Show current epoch time
13
+ ## epoch -m # Show current epoch in milliseconds
14
+ ## epoch 1234567890 # Convert epoch to date
15
+ ## epoch -r "2024-01-15" # Convert date string to epoch
16
+ ##
17
+ ## # Platform Notes
18
+ ## - Linux: Uses date -d for parsing
19
+ ## - macOS: Uses date -j -f for parsing
4
20
 
5
21
  set -euo pipefail
6
22
 
7
- usage() {
8
- echo "Usage: epoch [OPTIONS] [VALUE]"
9
- echo ""
10
- echo "Options:"
11
- echo " -r, --reverse Convert date string to epoch"
12
- echo " -m, --millis Use milliseconds precision"
13
- echo " -h, --help Show this help"
14
- echo ""
15
- echo "Examples:"
16
- echo " epoch # Current epoch time"
17
- echo " epoch 1234567890 # Convert epoch to date"
18
- echo " epoch -r '2024-01-01' # Convert date to epoch"
19
- echo " epoch -m # Current epoch in milliseconds"
20
- }
23
+ # --- UI Theme ---
24
+ PURPLE='\033[38;5;141m'
25
+ CYAN='\033[38;5;86m'
26
+ GRAY='\033[38;5;244m'
27
+ NC='\033[0m'
21
28
 
22
29
  REVERSE=false
23
30
  MILLIS=false
24
31
 
25
32
  while [[ $# -gt 0 ]]; do
26
33
  case "$1" in
27
- -r|--reverse) REVERSE=true; shift ;;
28
- -m|--millis) MILLIS=true; shift ;;
29
- -h|--help) usage; exit 0 ;;
30
- -*) echo "Unknown option: $1"; usage; exit 1 ;;
34
+ -r | --reverse)
35
+ REVERSE=true
36
+ shift
37
+ ;;
38
+ -m | --millis)
39
+ MILLIS=true
40
+ shift
41
+ ;;
42
+ -h | --help)
43
+ printf '%b\n' "${PURPLE}epoch${NC} ${GRAY}convert to/from unix time${NC}"
44
+ echo "Usage: epoch [options] [value]"
45
+ echo " -r, --reverse Convert date string to epoch"
46
+ echo " -m, --millis Use milliseconds"
47
+ exit 0
48
+ ;;
31
49
  *) break ;;
32
50
  esac
33
51
  done
34
52
 
35
53
  if $REVERSE; then
36
- # Convert date to epoch
37
- DATE_STR="${1:-}"
38
- if [[ -z "$DATE_STR" ]]; then
39
- echo "Error: Date string required for reverse conversion"
40
- exit 1
41
- fi
42
- if $MILLIS; then
43
- date -d "$DATE_STR" +%s%3N 2>/dev/null || date -j -f "%Y-%m-%d" "$DATE_STR" +%s000 2>/dev/null
44
- else
45
- date -d "$DATE_STR" +%s 2>/dev/null || date -j -f "%Y-%m-%d" "$DATE_STR" +%s 2>/dev/null
46
- fi
54
+ STR="${1:-}"
55
+ [[ -z "$STR" ]] && exit 1
56
+ date -d "$STR" +%s 2>/dev/null || date -j -f "%Y-%m-%d" "$STR" +%s 2>/dev/null
47
57
  elif [[ $# -gt 0 ]]; then
48
- # Convert epoch to date
49
58
  EPOCH="$1"
50
- # Handle milliseconds
51
- if [[ ${#EPOCH} -gt 10 ]]; then
52
- EPOCH=$((EPOCH / 1000))
53
- fi
59
+ [[ ${#EPOCH} -gt 10 ]] && EPOCH=$((EPOCH / 1000))
54
60
  date -d "@$EPOCH" 2>/dev/null || date -r "$EPOCH" 2>/dev/null
55
61
  else
56
- # Current time
57
62
  if $MILLIS; then
58
- date +%s%3N 2>/dev/null || echo "$(date +%s)000"
63
+ date +%s%3N
59
64
  else
60
65
  date +%s
61
66
  fi
@@ -1,108 +1,41 @@
1
- #!/usr/bin/env bash
2
- # Universal archive extraction
3
- # Usage: extract <file> [destination]
1
+ #!/bin/sh
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Universal archive extractor with UI (gum) and self-healing (nix) fallback.
4
4
 
5
- set -euo pipefail
5
+ set -eu
6
6
 
7
- if [[ $# -lt 1 ]]; then
8
- echo "Usage: extract <file> [destination]"
9
- echo "Supported formats: tar, tar.gz, tar.bz2, tar.xz, tar.zst, gz, bz2, xz, zst, zip, rar, 7z, deb, rpm"
7
+ # R5: validate input
8
+ if [ -z "${1:-}" ]; then
9
+ echo "Usage: extract <archive>" >&2
10
10
  exit 1
11
11
  fi
12
12
 
13
- FILE="$1"
14
- DEST="${2:-.}"
15
-
16
- if [[ ! -f "$FILE" ]]; then
17
- echo "Error: File not found: $FILE"
18
- exit 1
19
- fi
20
-
21
- # Create destination if needed
22
- mkdir -p "$DEST"
23
-
24
- echo "Extracting: $FILE"
25
-
26
- case "$FILE" in
27
- *.tar.bz2|*.tbz2)
28
- tar xjf "$FILE" -C "$DEST"
29
- ;;
30
- *.tar.gz|*.tgz)
31
- tar xzf "$FILE" -C "$DEST"
32
- ;;
33
- *.tar.xz|*.txz)
34
- tar xJf "$FILE" -C "$DEST"
35
- ;;
36
- *.tar.zst|*.tzst)
37
- tar --zstd -xf "$FILE" -C "$DEST"
38
- ;;
39
- *.tar)
40
- tar xf "$FILE" -C "$DEST"
41
- ;;
42
- *.bz2)
43
- bunzip2 -k "$FILE"
44
- ;;
45
- *.gz)
46
- gunzip -k "$FILE"
47
- ;;
48
- *.xz)
49
- unxz -k "$FILE"
50
- ;;
51
- *.zst)
52
- unzstd -k "$FILE"
53
- ;;
54
- *.zip|*.jar|*.war|*.ear)
55
- unzip -q "$FILE" -d "$DEST"
56
- ;;
57
- *.rar)
58
- if command -v unrar >/dev/null 2>&1; then
59
- unrar x "$FILE" "$DEST/"
60
- elif command -v 7z >/dev/null 2>&1; then
61
- 7z x "$FILE" -o"$DEST"
62
- else
63
- echo "Error: unrar or 7z required for .rar files"
64
- exit 1
65
- fi
66
- ;;
67
- *.7z)
68
- if command -v 7z >/dev/null 2>&1; then
69
- 7z x "$FILE" -o"$DEST"
70
- else
71
- echo "Error: 7z required for .7z files"
72
- exit 1
73
- fi
74
- ;;
75
- *.deb)
76
- if command -v dpkg-deb >/dev/null 2>&1; then
77
- dpkg-deb -x "$FILE" "$DEST"
78
- elif command -v ar >/dev/null 2>&1; then
79
- cd "$DEST" && ar x "$FILE"
80
- else
81
- echo "Error: dpkg-deb or ar required for .deb files"
82
- exit 1
83
- fi
84
- ;;
85
- *.rpm)
86
- if command -v rpm2cpio >/dev/null 2>&1; then
87
- cd "$DEST" && rpm2cpio "$FILE" | cpio -idmv
88
- else
89
- echo "Error: rpm2cpio required for .rpm files"
90
- exit 1
91
- fi
92
- ;;
93
- *.Z)
94
- uncompress "$FILE"
95
- ;;
96
- *.lzma)
97
- unlzma -k "$FILE"
98
- ;;
99
- *.lz4)
100
- lz4 -d "$FILE"
101
- ;;
13
+ # If tool is missing, use Nix to run it.
14
+ run_if_not_found() {
15
+ local cmd="$1"
16
+ local pkg="$2"
17
+ shift 2
18
+ if command -v "$cmd" >/dev/null 2>&1; then
19
+ "$cmd" "$@"
20
+ elif command -v nix >/dev/null 2>&1; then
21
+ echo " Tool '$cmd' missing. Using Nix fallback..." >&2
22
+ nix shell "nixpkgs#$pkg" -c "$cmd" "$@"
23
+ else
24
+ echo "Error: Tool '$cmd' not found and Nix not available." >&2
25
+ exit 1
26
+ fi
27
+ }
28
+
29
+ case "$1" in
30
+ *.tar.bz2) run_if_not_found tar gnutar xvjf "$1" ;;
31
+ *.tar.gz) run_if_not_found tar gnutar xvzf "$1" ;;
32
+ *.zip) run_if_not_found unzip unzip "$1" ;;
33
+ *.rar) run_if_not_found unrar unrar x "$1" ;;
34
+ *.7z) run_if_not_found 7z p7zip a "$1" ;;
35
+ *.tar.xz) run_if_not_found tar gnutar xvf "$1" ;;
36
+ *.tar.zst) run_if_not_found tar gnutar xvf "$1" ;;
102
37
  *)
103
- echo "Error: Unknown archive format: $FILE"
38
+ echo "'$1' cannot be extracted via extract" >&2
104
39
  exit 1
105
40
  ;;
106
41
  esac
107
-
108
- echo "Extracted to: $DEST"
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## gbd — Bulk delete local branches except main/master.
4
+ ##
5
+ ## # Usage
6
+ ## gbd # Delete all except main/master
7
+ ## gbd --dry-run # Show what would be deleted
8
+ ## gbd "(main|master|develop)" # Custom whitelist pattern
9
+ ## gbd "(main|dev)" --dry-run # Custom whitelist + dry run
10
+
11
+ set -euo pipefail
12
+
13
+ if ! command -v git &>/dev/null; then
14
+ echo "gbd requires git" >&2
15
+ exit 1
16
+ fi
17
+
18
+ # R5: validate git repository
19
+ if ! git rev-parse --is-inside-work-tree &>/dev/null; then
20
+ echo "gbd: not a git repository" >&2
21
+ exit 1
22
+ fi
23
+
24
+ default_whitelist="(main|master)"
25
+ skip_branches="${1:-"${default_whitelist}"}"
26
+ dry_run="${2:-}"
27
+
28
+ # Handle --dry-run as first arg
29
+ if [[ "${skip_branches}" == "--dry-run" ]]; then
30
+ skip_branches="${default_whitelist}"
31
+ dry_run="--dry-run"
32
+ fi
33
+
34
+ # R5: validate regex pattern before use
35
+ if ! echo "" | grep -wEv "${skip_branches}" &>/dev/null; then
36
+ echo "Invalid whitelist pattern: ${skip_branches}" >&2
37
+ exit 1
38
+ fi
39
+
40
+ branches="$(git branch | grep -wEv "${skip_branches}" | grep -wv "$(git branch --show-current)" || true)"
41
+
42
+ if [[ -z "${branches}" ]]; then
43
+ echo "No branches to delete."
44
+ exit 0
45
+ fi
46
+
47
+ if [[ -n "${dry_run}" ]]; then
48
+ echo "Would delete:"
49
+ echo "${branches}" | sed 's/^/ /'
50
+ else
51
+ echo "${branches}" | xargs git branch -D
52
+ fi
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## gd — Interactive git diff browser with fzf + delta.
4
+ ##
5
+ ## # Usage
6
+ ## gd # Browse unstaged diffs
7
+ ## gd --staged # Browse staged diffs
8
+ ## gd --side # Side-by-side delta mode
9
+ ## gd [git diff flags] # Pass any git diff flags through
10
+
11
+ set -euo pipefail
12
+
13
+ for cmd in fzf delta git; do
14
+ if ! command -v "$cmd" &>/dev/null; then
15
+ echo "gd requires $cmd" >&2
16
+ exit 1
17
+ fi
18
+ done
19
+
20
+ # R5: validate git repository
21
+ if ! git rev-parse --is-inside-work-tree &>/dev/null; then
22
+ echo "gd: not a git repository" >&2
23
+ exit 1
24
+ fi
25
+
26
+ GIT_ARGS=()
27
+
28
+ for arg in "$@"; do
29
+ if [[ "${arg}" == "--side" ]]; then
30
+ export DELTA_FEATURES="${DELTA_FEATURES:-} side-by-side"
31
+ else
32
+ GIT_ARGS+=("${arg}")
33
+ fi
34
+ done
35
+
36
+ GIT_ARGS+=("--color=always")
37
+
38
+ # shellcheck disable=SC2086,SC2068
39
+ git diff ${GIT_ARGS[@]:-} --name-only |
40
+ fzf \
41
+ --preview "git diff ${GIT_ARGS[*]:-} -- {-1} | delta --width=\${FZF_PREVIEW_COLUMNS}" \
42
+ --preview-window="right,75%" || true
@@ -1,10 +1,25 @@
1
1
  #!/usr/bin/env bash
2
- # git-ai-commit - Generate commit messages using AI
3
- # Managed by chezmoi - https://github.com/sebastienrousseau/dotfiles
4
- #
5
- # Usage: git ai-commit [--provider <provider>] [--edit]
6
- # --provider: claude, gemini, sgpt, ollama (auto-detected if not specified)
7
- # --edit: Open editor to modify the generated message before committing
2
+ ## Git AI Commit — Generate commit messages using AI.
3
+ ##
4
+ ## Analyzes staged changes and generates conventional commit messages
5
+ ## using various AI providers. Supports interactive editing.
6
+ ##
7
+ ## # Requirements
8
+ ## - git: Version control
9
+ ## - One of: claude, gemini, sgpt, aider, ollama
10
+ ##
11
+ ## # Usage
12
+ ## git ai-commit # Auto-detect provider
13
+ ## git ai-commit --provider claude # Use Claude
14
+ ## git ai-commit --edit # Edit before committing
15
+ ## git ai-commit -p ollama -e # Ollama with edit
16
+ ##
17
+ ## # Configuration
18
+ ## Set GIT_AI_PROVIDER to set default provider
19
+ ## Set OLLAMA_MODEL for custom Ollama model (default: llama3.2)
20
+ ##
21
+ ## # Platform Notes
22
+ ## - All platforms: Requires git and an AI CLI tool
8
23
 
9
24
  set -euo pipefail
10
25
 
@@ -21,15 +36,15 @@ PROVIDER=""
21
36
  # Parse arguments
22
37
  while [[ $# -gt 0 ]]; do
23
38
  case $1 in
24
- --provider|-p)
39
+ --provider | -p)
25
40
  PROVIDER="$2"
26
41
  shift 2
27
42
  ;;
28
- --edit|-e)
43
+ --edit | -e)
29
44
  EDIT_MODE=true
30
45
  shift
31
46
  ;;
32
- --help|-h)
47
+ --help | -h)
33
48
  echo "Usage: git ai-commit [--provider <provider>] [--edit]"
34
49
  echo ""
35
50
  echo "Options:"
@@ -41,7 +56,7 @@ while [[ $# -gt 0 ]]; do
41
56
  exit 0
42
57
  ;;
43
58
  *)
44
- echo -e "${RED}Unknown option: $1${NC}"
59
+ printf '%b\n' "${RED}Unknown option: $1${NC}"
45
60
  exit 1
46
61
  ;;
47
62
  esac
@@ -69,7 +84,7 @@ detect_provider() {
69
84
  PROVIDER="${PROVIDER:-$(detect_provider)}"
70
85
 
71
86
  if [[ -z "$PROVIDER" ]]; then
72
- echo -e "${RED}Error: No AI provider found. Install claude, gemini, sgpt, aider, or ollama.${NC}"
87
+ printf '%b\n' "${RED}Error: No AI provider found. Install claude, gemini, sgpt, aider, or ollama.${NC}"
73
88
  exit 1
74
89
  fi
75
90
 
@@ -78,11 +93,11 @@ if ! git diff --cached --quiet; then
78
93
  DIFF=$(git diff --cached --stat)
79
94
  DIFF_CONTENT=$(git diff --cached)
80
95
  else
81
- echo -e "${YELLOW}No staged changes. Stage changes with 'git add' first.${NC}"
96
+ printf '%b\n' "${YELLOW}No staged changes. Stage changes with 'git add' first.${NC}"
82
97
  exit 1
83
98
  fi
84
99
 
85
- echo -e "${BLUE}Generating commit message using ${PROVIDER}...${NC}"
100
+ printf '%b\n' "${BLUE}Generating commit message using ${PROVIDER}...${NC}"
86
101
 
87
102
  # Prompt for commit message generation
88
103
  PROMPT="Generate a concise, conventional commit message for the following git diff.
@@ -121,7 +136,7 @@ case "$PROVIDER" in
121
136
  MESSAGE=$(echo "$PROMPT" | ollama run "$MODEL" 2>/dev/null || echo "")
122
137
  ;;
123
138
  *)
124
- echo -e "${RED}Unknown provider: $PROVIDER${NC}"
139
+ printf '%b\n' "${RED}Unknown provider: $PROVIDER${NC}"
125
140
  exit 1
126
141
  ;;
127
142
  esac
@@ -130,19 +145,19 @@ esac
130
145
  MESSAGE=$(echo "$MESSAGE" | sed 's/^```[a-z]*//g' | sed 's/```$//g' | sed '/^$/d' | head -20)
131
146
 
132
147
  if [[ -z "$MESSAGE" ]]; then
133
- echo -e "${RED}Failed to generate commit message.${NC}"
148
+ printf '%b\n' "${RED}Failed to generate commit message.${NC}"
134
149
  exit 1
135
150
  fi
136
151
 
137
- echo -e "${GREEN}Generated commit message:${NC}"
152
+ printf '%b\n' "${GREEN}Generated commit message:${NC}"
138
153
  echo "---"
139
154
  echo "$MESSAGE"
140
155
  echo "---"
141
156
 
142
157
  if [[ "$EDIT_MODE" == "true" ]]; then
143
158
  # Create temp file for editing
144
- TMPFILE=$(mktemp)
145
- echo "$MESSAGE" > "$TMPFILE"
159
+ TMPFILE=$(umask 077 && mktemp)
160
+ echo "$MESSAGE" >"$TMPFILE"
146
161
  ${EDITOR:-vim} "$TMPFILE"
147
162
  MESSAGE=$(cat "$TMPFILE")
148
163
  rm -f "$TMPFILE"
@@ -154,7 +169,7 @@ read -p "Commit with this message? [Y/n] " -n 1 -r
154
169
  echo
155
170
  if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
156
171
  git commit -m "$MESSAGE"
157
- echo -e "${GREEN}Committed successfully!${NC}"
172
+ printf '%b\n' "${GREEN}Committed successfully!${NC}"
158
173
  else
159
- echo -e "${YELLOW}Commit cancelled.${NC}"
174
+ printf '%b\n' "${YELLOW}Commit cancelled.${NC}"
160
175
  fi
@@ -1,10 +1,25 @@
1
1
  #!/usr/bin/env bash
2
- # git-ai-diff - AI-powered diff analysis and review
3
- # Managed by chezmoi - https://github.com/sebastienrousseau/dotfiles
4
- #
5
- # Usage: git ai-diff [<commit>] [--provider <provider>]
6
- # <commit>: Compare against this commit (default: HEAD)
7
- # --provider: claude, gemini, sgpt, ollama (auto-detected if not specified)
2
+ ## Git AI Diff — AI-powered diff analysis and code review.
3
+ ##
4
+ ## Analyzes git diffs using AI to provide summaries, identify issues,
5
+ ## and suggest improvements. Supports multiple AI providers.
6
+ ##
7
+ ## # Requirements
8
+ ## - git: Version control
9
+ ## - One of: claude, gemini, sgpt, aider, ollama
10
+ ##
11
+ ## # Usage
12
+ ## git ai-diff # Review working changes vs HEAD
13
+ ## git ai-diff HEAD~3 # Compare against 3 commits ago
14
+ ## git ai-diff --staged # Review staged changes only
15
+ ## git ai-diff --provider claude # Use specific provider
16
+ ##
17
+ ## # Configuration
18
+ ## Set GIT_AI_PROVIDER to set default provider
19
+ ## Set OLLAMA_MODEL for custom Ollama model (default: llama3.2)
20
+ ##
21
+ ## # Platform Notes
22
+ ## - All platforms: Requires git and an AI CLI tool
8
23
 
9
24
  set -euo pipefail
10
25
 
@@ -23,15 +38,15 @@ STAGED_ONLY=false
23
38
  # Parse arguments
24
39
  while [[ $# -gt 0 ]]; do
25
40
  case $1 in
26
- --provider|-p)
41
+ --provider | -p)
27
42
  PROVIDER="$2"
28
43
  shift 2
29
44
  ;;
30
- --staged|-s)
45
+ --staged | -s)
31
46
  STAGED_ONLY=true
32
47
  shift
33
48
  ;;
34
- --help|-h)
49
+ --help | -h)
35
50
  echo "Usage: git ai-diff [<commit>] [--provider <provider>] [--staged]"
36
51
  echo ""
37
52
  echo "Options:"
@@ -44,7 +59,7 @@ while [[ $# -gt 0 ]]; do
44
59
  exit 0
45
60
  ;;
46
61
  -*)
47
- echo -e "${RED}Unknown option: $1${NC}"
62
+ printf '%b\n' "${RED}Unknown option: $1${NC}"
48
63
  exit 1
49
64
  ;;
50
65
  *)
@@ -76,7 +91,7 @@ detect_provider() {
76
91
  PROVIDER="${PROVIDER:-$(detect_provider)}"
77
92
 
78
93
  if [[ -z "$PROVIDER" ]]; then
79
- echo -e "${RED}Error: No AI provider found. Install claude, gemini, sgpt, aider, or ollama.${NC}"
94
+ printf '%b\n' "${RED}Error: No AI provider found. Install claude, gemini, sgpt, aider, or ollama.${NC}"
80
95
  exit 1
81
96
  fi
82
97
 
@@ -92,13 +107,13 @@ else
92
107
  fi
93
108
 
94
109
  if [[ -z "$DIFF" ]]; then
95
- echo -e "${YELLOW}No changes to review.${NC}"
110
+ printf '%b\n' "${YELLOW}No changes to review.${NC}"
96
111
  exit 0
97
112
  fi
98
113
 
99
- echo -e "${BLUE}Analyzing ${CONTEXT} using ${PROVIDER}...${NC}"
114
+ printf '%b\n' "${BLUE}Analyzing ${CONTEXT} using ${PROVIDER}...${NC}"
100
115
  echo ""
101
- echo -e "${CYAN}Changed files:${NC}"
116
+ printf '%b\n' "${CYAN}Changed files:${NC}"
102
117
  echo "$DIFF_STAT"
103
118
  echo ""
104
119
 
@@ -137,18 +152,18 @@ case "$PROVIDER" in
137
152
  ANALYSIS=$(echo "$PROMPT" | ollama run "$MODEL" 2>/dev/null || echo "")
138
153
  ;;
139
154
  *)
140
- echo -e "${RED}Unknown provider: $PROVIDER${NC}"
155
+ printf '%b\n' "${RED}Unknown provider: $PROVIDER${NC}"
141
156
  exit 1
142
157
  ;;
143
158
  esac
144
159
 
145
160
  if [[ -z "$ANALYSIS" ]]; then
146
- echo -e "${RED}Failed to analyze diff.${NC}"
161
+ printf '%b\n' "${RED}Failed to analyze diff.${NC}"
147
162
  exit 1
148
163
  fi
149
164
 
150
- echo -e "${GREEN}=== AI Code Review ===${NC}"
165
+ printf '%b\n' "${GREEN}=== AI Code Review ===${NC}"
151
166
  echo ""
152
167
  echo "$ANALYSIS"
153
168
  echo ""
154
- echo -e "${GREEN}=== End Review ===${NC}"
169
+ printf '%b\n' "${GREEN}=== End Review ===${NC}"