@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,10 +1,28 @@
1
1
  #!/usr/bin/env bash
2
- #
3
- # ai_core.sh - Central wrapper for AI operations in the Predictive Shell
4
- # Part of the "Predictive Shell" (AI v2) implementation
5
- #
2
+ ## AI Core — Central wrapper for AI operations in the Predictive Shell.
3
+ ##
4
+ ## Manages local LLM (llamafile) and fallback to GitHub Copilot CLI.
5
+ ## Handles model downloading, server management, and query routing.
6
+ ##
7
+ ## # Requirements
8
+ ## - curl: For downloading models and API requests
9
+ ## - nc (netcat): For checking server availability
10
+ ## - jq: For parsing JSON responses
11
+ ## - llamafile (optional): Local LLM server
12
+ ## - copilot (optional): GitHub Copilot CLI fallback
13
+ ##
14
+ ## # Usage
15
+ ## ai_core status # Check AI subsystem status
16
+ ## ai_core download # Download local LLM model (~4GB)
17
+ ## ai_core start # Start local LLM server
18
+ ## ai_core query "prompt" # Query the AI (auto-selects provider)
19
+ ##
20
+ ## # Platform Notes
21
+ ## - Linux/macOS: Full support
22
+ ## - WSL: Supported with llamafile or Copilot
23
+ ## - Model stored in $XDG_DATA_HOME/ai/models/
6
24
 
7
- set -e
25
+ set -euo pipefail
8
26
 
9
27
  # Configuration
10
28
  LLAMAFILE_URL="https://huggingface.co/jart/inexpensive-llm/resolve/main/llamafile-server-0.1-llava-v1.5-7b-q4"
@@ -15,116 +33,120 @@ SERVER_PORT=8080
15
33
 
16
34
  # Ensure model directory exists
17
35
  ensure_model_dir() {
18
- if [ ! -d "$MODEL_DIR" ]; then
19
- mkdir -p "$MODEL_DIR"
20
- fi
36
+ if [ ! -d "$MODEL_DIR" ]; then
37
+ mkdir -p "$MODEL_DIR"
38
+ fi
21
39
  }
22
40
 
23
41
  # Check if we have a local LLM available
24
42
  check_local_llm() {
25
- if [ -f "$MODEL_PATH" ]; then
26
- return 0
27
- else
28
- return 1
29
- fi
43
+ if [ -f "$MODEL_PATH" ]; then
44
+ return 0
45
+ else
46
+ return 1
47
+ fi
30
48
  }
31
49
 
32
50
  # Download the model (interactive only)
33
51
  download_model() {
34
- ensure_model_dir
35
- echo "Local LLM model not found at $MODEL_PATH"
36
- echo "This feature requires downloading a localized LLM (~4GB)."
37
- read -p "Do you want to download it now? (y/n) " -n 1 -r
38
- echo
39
- if [[ $REPLY =~ ^[Yy]$ ]]; then
40
- echo "Downloading llamafile..."
41
- # Note: curl -L is used to follow redirects
42
- if curl -L -o "$MODEL_PATH" "$LLAMAFILE_URL"; then
43
- chmod +x "$MODEL_PATH"
44
- echo "Download complete. Model saved to $MODEL_PATH"
45
- else
46
- echo "Download failed."
47
- return 1
48
- fi
52
+ ensure_model_dir
53
+ echo "Local LLM model not found at $MODEL_PATH"
54
+ echo "This feature requires downloading a localized LLM (~4GB)."
55
+ read -p "Do you want to download it now? (y/n) " -n 1 -r
56
+ echo
57
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
58
+ echo "Downloading llamafile..."
59
+ # Note: curl -L is used to follow redirects
60
+ if curl -L -o "$MODEL_PATH" "$LLAMAFILE_URL"; then
61
+ chmod +x "$MODEL_PATH"
62
+ echo "Download complete. Model saved to $MODEL_PATH"
49
63
  else
50
- echo "Skipping download. AI features may be limited."
51
- return 1
64
+ echo "Download failed."
65
+ return 1
52
66
  fi
67
+ else
68
+ echo "Skipping download. AI features may be limited."
69
+ return 1
70
+ fi
53
71
  }
54
72
 
55
73
  # Verify status of AI subsystem
56
74
  status() {
57
- echo "--- Predictive Shell AI Core Status ---"
58
- if check_local_llm; then
59
- echo "Local LLM: Installed ($MODEL_PATH)"
60
- else
61
- echo "Local LLM: Not installed"
62
- fi
63
-
64
- # Check for other providers
65
- if command -v gh &> /dev/null && gh copilot --version &> /dev/null; then
66
- echo "GitHub Copilot CLI: Available"
67
- else
68
- echo "GitHub Copilot CLI: Not available"
69
- fi
75
+ echo "--- Predictive Shell AI Core Status ---"
76
+ if check_local_llm; then
77
+ echo "Local LLM: Installed ($MODEL_PATH)"
78
+ else
79
+ echo "Local LLM: Not installed"
80
+ fi
81
+
82
+ # Check for other providers
83
+ if command -v copilot &>/dev/null; then
84
+ echo "GitHub Copilot CLI: Available"
85
+ elif command -v gh &>/dev/null && gh copilot --version &>/dev/null; then
86
+ echo "GitHub Copilot CLI: Available"
87
+ else
88
+ echo "GitHub Copilot CLI: Not available"
89
+ fi
70
90
  }
71
91
 
72
92
  # Start the server (background)
73
93
  start_server() {
74
- if ! check_local_llm; then
75
- download_model || return 1
76
- fi
77
-
78
- echo "Starting Local LLM Server..."
79
- "$MODEL_PATH" --server --nobrowser --port "$SERVER_PORT" &
80
- echo "Server started on port $SERVER_PORT"
94
+ if ! check_local_llm; then
95
+ download_model || return 1
96
+ fi
97
+
98
+ echo "Starting Local LLM Server..."
99
+ "$MODEL_PATH" --server --nobrowser --port "$SERVER_PORT" &
100
+ echo "Server started on port $SERVER_PORT"
81
101
  }
82
102
 
83
103
  # Query the LLM
84
104
  # Usage: ai_core query "Your prompt here"
85
105
  query() {
86
- local prompt="$1"
87
-
88
- # Priority 1: Local LLM Server if running
89
- if nc -z localhost "$SERVER_PORT" 2>/dev/null; then
90
- # Simple curl based query to llamafile standard endpoint
91
- # Note: This is a simplified example payload
92
- curl -s -X POST "http://localhost:$SERVER_PORT/completion" \
93
- -H "Content-Type: application/json" \
94
- -d "{\"prompt\": \"$prompt\", \"n_predict\": 128}" | jq -r .content
95
- return
96
- fi
97
-
98
- # Priority 2: GitHub Copilot CLI
99
- if command -v gh &> /dev/null && gh copilot --version &> /dev/null; then
100
- # Use gh copilot explain/suggest
101
- # This wrapper might need adjustment based on how we want to use it
102
- # generally 'gh copilot explain' is interactive.
103
- echo "Local server not running. Using GitHub Copilot..."
104
- gh copilot explain "$prompt"
105
- return
106
- fi
107
-
108
- echo "No AI provider available. Run 'ai_core start' or install GitHub Copilot CLI."
109
- }
106
+ local prompt="$1"
110
107
 
108
+ # Priority 1: Local LLM Server if running
109
+ if nc -z localhost "$SERVER_PORT" 2>/dev/null; then
110
+ # Simple curl based query to llamafile standard endpoint
111
+ # Note: This is a simplified example payload
112
+ curl -s -X POST "http://localhost:$SERVER_PORT/completion" \
113
+ -H "Content-Type: application/json" \
114
+ -d "{\"prompt\": \"$prompt\", \"n_predict\": 128}" | jq -r .content
115
+ return
116
+ fi
117
+
118
+ # Priority 2: GitHub Copilot CLI
119
+ if command -v copilot &>/dev/null; then
120
+ echo "Local server not running. Using GitHub Copilot..."
121
+ copilot -p "$prompt"
122
+ return
123
+ fi
124
+
125
+ if command -v gh &>/dev/null && gh copilot --version &>/dev/null; then
126
+ echo "Local server not running. Using GitHub Copilot..."
127
+ gh copilot explain "$prompt"
128
+ return
129
+ fi
130
+
131
+ echo "No AI provider available. Run 'ai_core start' or install GitHub Copilot CLI."
132
+ }
111
133
 
112
134
  case "$1" in
113
- status)
114
- status
115
- ;;
116
- download)
117
- download_model
118
- ;;
119
- start)
120
- start_server
121
- ;;
122
- query)
123
- shift
124
- query "$@"
125
- ;;
126
- *)
127
- echo "Usage: $0 {status|download|start|query}"
128
- exit 1
129
- ;;
135
+ status)
136
+ status
137
+ ;;
138
+ download)
139
+ download_model
140
+ ;;
141
+ start)
142
+ start_server
143
+ ;;
144
+ query)
145
+ shift
146
+ query "$@"
147
+ ;;
148
+ *)
149
+ echo "Usage: $0 {status|download|start|query}"
150
+ exit 1
151
+ ;;
130
152
  esac
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # Wrapper for Antigravity extension updates under Topgrade.
3
+ # Clears Node/Electron env that can inject custom loaders and crash updater.
4
+ set -euo pipefail
5
+
6
+ unset NODE_OPTIONS
7
+ unset ELECTRON_RUN_AS_NODE
8
+ unset ELECTRON_NO_ATTACH_CONSOLE
9
+ unset ELECTRON_ENABLE_LOGGING
10
+
11
+ exec /usr/bin/antigravity "$@"
@@ -1,59 +1,84 @@
1
1
  #!/usr/bin/env bash
2
- # Base64 encoder/decoder
3
- # Usage: b64 [encode|decode] <string> | b64 [encode|decode] < file
2
+ # shellcheck disable=SC2034
3
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
4
+ # Base64 Transcoder with URL-safe support.
5
+ # Part of Dotfiles v0.2.495
4
6
 
5
7
  set -euo pipefail
6
8
 
7
- usage() {
8
- echo "Usage: b64 [OPTIONS] [STRING]"
9
- echo ""
9
+ # ANSI Colors
10
+ PURPLE='\033[38;5;135m'
11
+ GRAY='\033[38;5;243m'
12
+ RED='\033[38;5;196m'
13
+ NC='\033[0m'
14
+ BOLD='\033[1m'
15
+
16
+ # Check if TTY for interactive components (though b64 is mostly non-interactive)
17
+ IS_TTY=0
18
+ if [ -t 1 ]; then IS_TTY=1; fi
19
+
20
+ show_help() {
21
+ if [ "$IS_TTY" -eq 1 ]; then
22
+ printf '%b\n' "${BOLD}${PURPLE}󰇧 Base64 Transcoder${NC} ${GRAY}━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
23
+ else
24
+ echo "Base64 Transcoder"
25
+ fi
26
+
27
+ echo "Usage: b64 [options] [string]"
10
28
  echo "Options:"
11
29
  echo " -e, --encode Encode to base64 (default)"
12
30
  echo " -d, --decode Decode from base64"
13
- echo " -u, --url Use URL-safe base64"
31
+ echo " -u, --url URL-safe mode"
14
32
  echo " -h, --help Show this help"
15
- echo ""
16
- echo "Examples:"
17
- echo " b64 'hello world' # Encode string"
18
- echo " b64 -d 'aGVsbG8gd29ybGQ=' # Decode string"
19
- echo " cat file.bin | b64 # Encode file"
20
- echo " b64 -d < encoded.txt # Decode file"
33
+ exit 0
21
34
  }
22
35
 
23
36
  MODE="encode"
24
- URL_SAFE=false
37
+ URL_SAFE=0
38
+ INPUT=""
25
39
 
26
- while [[ $# -gt 0 ]]; do
40
+ while [ $# -gt 0 ]; do
27
41
  case "$1" in
28
- -e|--encode|encode) MODE="encode"; shift ;;
29
- -d|--decode|decode) MODE="decode"; shift ;;
30
- -u|--url) URL_SAFE=true; shift ;;
31
- -h|--help) usage; exit 0 ;;
32
- -*) echo "Unknown option: $1"; usage; exit 1 ;;
33
- *) break ;;
42
+ -e | --encode)
43
+ MODE="encode"
44
+ shift
45
+ ;;
46
+ -d | --decode)
47
+ MODE="decode"
48
+ shift
49
+ ;;
50
+ -u | --url)
51
+ URL_SAFE=1
52
+ shift
53
+ ;;
54
+ -h | --help) show_help ;;
55
+ *)
56
+ INPUT="$1"
57
+ shift
58
+ ;;
34
59
  esac
35
60
  done
36
61
 
37
- # Get input
38
- if [[ $# -gt 0 ]]; then
39
- INPUT="$*"
40
- else
41
- INPUT=$(cat)
62
+ if [ -z "$INPUT" ]; then
63
+ if [ ! -t 0 ]; then
64
+ INPUT=$(cat -)
65
+ else
66
+ show_help
67
+ fi
42
68
  fi
43
69
 
44
- if [[ "$MODE" == "encode" ]]; then
45
- if $URL_SAFE; then
46
- echo -n "$INPUT" | base64 | tr '+/' '-_' | tr -d '='
70
+ if [ "$MODE" = "encode" ]; then
71
+ if [ "$URL_SAFE" -eq 1 ]; then
72
+ printf "%s" "$INPUT" | base64 | tr '+/' '-_' | tr -d '='
47
73
  else
48
- echo -n "$INPUT" | base64
74
+ printf "%s" "$INPUT" | base64
49
75
  fi
50
76
  else
51
- if $URL_SAFE; then
52
- # Add padding back
53
- INPUT=$(echo "$INPUT" | tr '-_' '+/')
54
- MOD=$((${#INPUT} % 4))
55
- if [[ $MOD -eq 2 ]]; then INPUT="${INPUT}=="; fi
56
- if [[ $MOD -eq 3 ]]; then INPUT="${INPUT}="; fi
77
+ # Add padding if needed for URL-safe decode
78
+ if [ "$URL_SAFE" -eq 1 ]; then
79
+ INPUT=$(printf "%s" "$INPUT" | tr '-_' '+/')
80
+ while [ $((${#INPUT} % 4)) -ne 0 ]; do INPUT="${INPUT}="; done
57
81
  fi
58
- echo "$INPUT" | base64 -d 2>/dev/null || base64 -D <<< "$INPUT"
82
+ printf "%s" "$INPUT" | base64 -d
59
83
  fi
84
+ echo ""
@@ -0,0 +1,77 @@
1
+ #!/bin/sh
2
+ # Universal directory bookmarking with history support
3
+ # Works across Bash, Zsh, and Fish
4
+
5
+ # Cross-platform sed in-place (BSD vs GNU)
6
+ _sed_i() {
7
+ if sed --version >/dev/null 2>&1; then
8
+ sed -i "$@" # GNU
9
+ else
10
+ sed -i '' "$@" # BSD (macOS)
11
+ fi
12
+ }
13
+
14
+ BOOKMARKS_FILE="$HOME/.config/shell/bookmarks"
15
+ mkdir -p "$(dirname "$BOOKMARKS_FILE")"
16
+ touch "$BOOKMARKS_FILE"
17
+
18
+ if [ -z "$1" ]; then
19
+ echo "Usage: bm <add|goto|list|remove|update> [name]"
20
+ exit 1
21
+ fi
22
+
23
+ action=$1
24
+ name=$2
25
+
26
+ case "$action" in
27
+ add)
28
+ if [ -z "$name" ]; then
29
+ echo "Usage: bm add <name>"
30
+ exit 1
31
+ fi
32
+ echo "$name $(pwd)" >>"$BOOKMARKS_FILE"
33
+ echo "Bookmark '$name' added for $(pwd)"
34
+ ;;
35
+ goto)
36
+ if [ -z "$name" ]; then
37
+ echo "Usage: bm goto <name>"
38
+ exit 1
39
+ fi
40
+ target=$(grep "^$name " "$BOOKMARKS_FILE" | cut -d' ' -f2-)
41
+ if [ -n "$target" ] && [ -d "$target" ]; then
42
+ # We output the target path, the shell alias/function must handle the cd
43
+ echo "$target"
44
+ else
45
+ echo "Bookmark '$name' not found or invalid directory" >&2
46
+ exit 1
47
+ fi
48
+ ;;
49
+ list)
50
+ if [ -t 1 ] && command -v gum >/dev/null 2>&1; then
51
+ cat "$BOOKMARKS_FILE" | gum table --columns Name,Path
52
+ else
53
+ cat "$BOOKMARKS_FILE"
54
+ fi
55
+ ;;
56
+ remove)
57
+ if [ -z "$name" ]; then
58
+ echo "Usage: bm remove <name>"
59
+ exit 1
60
+ fi
61
+ _sed_i "/^$name /d" "$BOOKMARKS_FILE"
62
+ echo "Bookmark '$name' removed"
63
+ ;;
64
+ update)
65
+ if [ -z "$name" ]; then
66
+ echo "Usage: bm update <name>"
67
+ exit 1
68
+ fi
69
+ _sed_i "/^$name /d" "$BOOKMARKS_FILE"
70
+ echo "$name $(pwd)" >>"$BOOKMARKS_FILE"
71
+ echo "Bookmark '$name' updated to $(pwd)"
72
+ ;;
73
+ *)
74
+ echo "Unknown action: $action"
75
+ exit 1
76
+ ;;
77
+ esac
@@ -0,0 +1,39 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Universal clipboard integration (cb)
4
+ # Supports macOS (pbcopy), Linux (xclip/wl-copy), and WSL (clip.exe)
5
+
6
+ set -eu
7
+
8
+ # Helper for rich feedback if TTY is present
9
+ log_info() {
10
+ if [ -t 1 ] && command -v gum >/dev/null 2>&1; then
11
+ gum style --foreground 212 "󱉊 $1"
12
+ else
13
+ echo "cb: $1"
14
+ fi
15
+ }
16
+
17
+ case "$(uname -s)" in
18
+ Darwin)
19
+ if [ -t 0 ]; then
20
+ pbpaste
21
+ else
22
+ pbcopy && log_info "Copied to macOS clipboard"
23
+ fi
24
+ ;;
25
+ Linux)
26
+ if grep -qi microsoft /proc/version 2>/dev/null; then
27
+ # WSL
28
+ if [ -t 0 ]; then
29
+ powershell.exe -command "Get-Clipboard" | tr -d '\r'
30
+ else
31
+ clip.exe && log_info "Copied to Windows clipboard (WSL)"
32
+ fi
33
+ elif [ -n "$WAYLAND_DISPLAY" ]; then
34
+ if [ -t 0 ]; then wl-paste; else wl-copy && log_info "Copied to Wayland clipboard"; fi
35
+ else
36
+ if [ -t 0 ]; then xclip -selection clipboard -o; else xclip -selection clipboard && log_info "Copied to X11 clipboard"; fi
37
+ fi
38
+ ;;
39
+ esac