@sebastienrousseau/dotfiles 0.2.502 → 0.2.503

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/CHANGELOG.md +83 -9
  2. package/LICENSE +21 -1283
  3. package/README.md +5 -3
  4. package/docs/CONFIG_STRATEGY.md +124 -0
  5. package/docs/COPYRIGHT +1 -1
  6. package/docs/GOVERNANCE.md +98 -0
  7. package/docs/MAINTAINERS.md +41 -0
  8. package/docs/OPENCODE.md +127 -0
  9. package/docs/README.md +2 -0
  10. package/docs/STRUCTURE.md +102 -0
  11. package/docs/adr/ADR-011-nushell-tier3-keep.md +2 -2
  12. package/docs/architecture/AI_COST_OPTIMIZATION.md +143 -0
  13. package/docs/architecture/REPO_LAYOUT.md +8 -8
  14. package/docs/archive/MILESTONE_v0.2.493.md +1 -1
  15. package/docs/index.md +2 -2
  16. package/docs/interop/POWERSHELL.md +1 -1
  17. package/docs/manual/00-introduction.md +1 -1
  18. package/docs/manual/01-concepts/02-trust-model.md +1 -1
  19. package/docs/manual/03-reference/02-config-files.md +2 -2
  20. package/docs/manual/_toc.yml +1 -1
  21. package/docs/manual/command-index.md +72 -59
  22. package/docs/operations/CI_COMPOSITES.md +2 -2
  23. package/docs/operations/COMPLETIONS.md +2 -2
  24. package/docs/operations/COVERAGE.md +5 -5
  25. package/docs/operations/HARD_AUDIT_2026.md +11 -11
  26. package/docs/operations/MAINTENANCE.md +3 -3
  27. package/docs/operations/MANIFEST.md +127 -0
  28. package/docs/operations/RELEASE_PIPELINE.md +130 -0
  29. package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
  30. package/docs/operations/ROADMAP_2026.md +6 -6
  31. package/docs/operations/ROADMAP_V0_2_503.md +134 -0
  32. package/docs/operations/TESTING.md +17 -0
  33. package/docs/operations/TRACEABILITY.md +6 -3
  34. package/docs/operations/VERSION_SYNC.md +4 -4
  35. package/docs/reference/POWERSHELL_PARITY.md +8 -7
  36. package/docs/schema/dot-env-v1.json +110 -0
  37. package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
  38. package/docs/security/CI_PINNING.md +17 -9
  39. package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
  40. package/docs/security/FUZZING.md +114 -0
  41. package/docs/security/INSTALL_VERIFICATION.md +2 -2
  42. package/docs/security/POLICY_RELEASES.md +2 -2
  43. package/docs/security/SCORECARD.md +58 -3
  44. package/docs/security/SHELL_EXEMPTIONS.md +4 -4
  45. package/docs/security/VERIFY_RELEASE.md +201 -0
  46. package/install.sh +27 -5
  47. package/package.json +1 -1
  48. package/scripts/README.md +123 -0
  49. package/scripts/ci/check-copyright-headers.sh +4 -93
  50. package/scripts/ci/check-shell-preamble.sh +4 -103
  51. package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
  52. package/scripts/diagnostics/a2a-conformance.sh +4 -4
  53. package/scripts/diagnostics/alias-governance.sh +1 -1
  54. package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
  55. package/scripts/diagnostics/benchmark.sh +4 -4
  56. package/scripts/diagnostics/conflicts.sh +2 -2
  57. package/scripts/diagnostics/doctor-unified.sh +2 -2
  58. package/scripts/diagnostics/doctor.sh +10 -10
  59. package/scripts/diagnostics/drift-dashboard.sh +2 -2
  60. package/scripts/diagnostics/health.sh +4 -4
  61. package/scripts/diagnostics/history-analysis.sh +2 -2
  62. package/scripts/diagnostics/mcp-doctor.sh +10 -7
  63. package/scripts/diagnostics/perf.sh +4 -4
  64. package/scripts/diagnostics/scorecard.sh +4 -4
  65. package/scripts/diagnostics/security-score.sh +2 -2
  66. package/scripts/diagnostics/smoke-test.sh +2 -2
  67. package/scripts/diagnostics/snapshot.sh +2 -2
  68. package/scripts/diagnostics/verify.sh +4 -4
  69. package/scripts/diagnostics/version-locks.sh +2 -2
  70. package/scripts/diagnostics/workstation-attestation.sh +14 -14
  71. package/scripts/dot/commands/agent.sh +8 -0
  72. package/scripts/dot/commands/agents.sh +14 -4
  73. package/scripts/dot/commands/ai.sh +144 -25
  74. package/scripts/dot/commands/appearance.sh +2 -2
  75. package/scripts/dot/commands/core.sh +2 -2
  76. package/scripts/dot/commands/diagnostics.sh +5 -5
  77. package/scripts/dot/commands/env-emit.sh +202 -0
  78. package/scripts/dot/commands/fleet.sh +12 -11
  79. package/scripts/dot/commands/init.sh +4 -4
  80. package/scripts/dot/commands/lint.sh +9 -4
  81. package/scripts/dot/commands/manual.sh +3 -3
  82. package/scripts/dot/commands/meta.sh +12 -6
  83. package/scripts/dot/commands/patterns.sh +2 -2
  84. package/scripts/dot/commands/registry.sh +4 -4
  85. package/scripts/dot/commands/restore.sh +4 -4
  86. package/scripts/dot/commands/secrets.sh +4 -3
  87. package/scripts/dot/commands/security.sh +2 -2
  88. package/scripts/dot/commands/tools.sh +13 -3
  89. package/scripts/dot/powershell/Dot.psm1 +199 -0
  90. package/scripts/fonts/install-nerd-fonts.sh +2 -2
  91. package/scripts/git-hooks/pre-commit-audit.sh +2 -2
  92. package/scripts/git-hooks/pre-push +13 -0
  93. package/scripts/ops/ai-setup.sh +1 -1
  94. package/scripts/ops/bundle.sh +2 -2
  95. package/scripts/ops/chaos.sh +2 -2
  96. package/scripts/ops/chezmoi-apply.sh +4 -4
  97. package/scripts/ops/heal.sh +4 -4
  98. package/scripts/ops/post-apply-repair.sh +2 -2
  99. package/scripts/ops/prewarm.sh +2 -2
  100. package/scripts/ops/release.sh +4 -4
  101. package/scripts/ops/rollback.sh +4 -4
  102. package/scripts/ops/setup.sh +2 -2
  103. package/scripts/qa/check-version-consistency.sh +123 -0
  104. package/scripts/qa/coverage-baseline.sh +1 -1
  105. package/scripts/qa/docs-coverage.sh +2 -2
  106. package/scripts/qa/powershell-contract.ps1 +1 -1
  107. package/scripts/qa/scorecard-snapshot.sh +127 -0
  108. package/scripts/security/backup.sh +2 -2
  109. package/scripts/security/dns-doh.sh +4 -4
  110. package/scripts/security/encryption-check.sh +4 -4
  111. package/scripts/security/enforce-policies.sh +2 -2
  112. package/scripts/security/firewall.sh +4 -4
  113. package/scripts/security/lock-screen.sh +4 -4
  114. package/scripts/security/manage-secrets.sh +2 -2
  115. package/scripts/security/ssh-cert.sh +2 -2
  116. package/scripts/security/telemetry-kill.sh +4 -4
  117. package/scripts/security/usb-safety.sh +4 -4
  118. package/scripts/theme/extract-heic-frames.sh +114 -0
  119. package/scripts/theme/rebuild-themes.sh +8 -1
  120. package/scripts/theme/switch.sh +13 -6
  121. package/scripts/theme/wallpaper-sync.sh +297 -93
  122. package/scripts/tuning/linux.sh +2 -2
  123. package/scripts/tuning/macos.sh +2 -2
  124. package/scripts/version-sync.sh +55 -7
  125. package/dot_config/.module-manifest.json +0 -69
  126. package/dot_config/ai/identity.md +0 -23
  127. package/dot_config/ai/patterns/architect.md +0 -16
  128. package/dot_config/ai/patterns/hardener.md +0 -15
  129. package/dot_config/ai/patterns/refactor.md +0 -15
  130. package/dot_config/aider/aider.conf.yml +0 -32
  131. package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
  132. package/dot_config/ansible/ansible.cfg +0 -11
  133. package/dot_config/atuin/config.toml.tmpl +0 -47
  134. package/dot_config/bat/config +0 -23
  135. package/dot_config/brave-flags.conf.tmpl +0 -7
  136. package/dot_config/btop/btop.conf +0 -16
  137. package/dot_config/btop/themes/tokyonight.theme +0 -34
  138. package/dot_config/bun/bunfig.toml.tmpl +0 -33
  139. package/dot_config/claude/mcp_servers.json +0 -20
  140. package/dot_config/containers/containers.conf +0 -14
  141. package/dot_config/curl/dot_curlrc +0 -18
  142. package/dot_config/dlv/config.yml +0 -39
  143. package/dot_config/docker/config.json +0 -15
  144. package/dot_config/dotfiles/agent-card.json +0 -29
  145. package/dot_config/dotfiles/agent-profiles.json +0 -92
  146. package/dot_config/dotfiles/boot/README.md +0 -13
  147. package/dot_config/dotfiles/grub/README.md +0 -13
  148. package/dot_config/dotfiles/lock/README.md +0 -13
  149. package/dot_config/dotfiles/mcp-lock.json +0 -33
  150. package/dot_config/dotfiles/mcp-policy.json +0 -52
  151. package/dot_config/dotfiles/mcp-registry.json +0 -47
  152. package/dot_config/dotfiles/model-registry.json +0 -20
  153. package/dot_config/dotfiles/policy-bundles.json +0 -38
  154. package/dot_config/dotfiles/prompt-registry.json +0 -16
  155. package/dot_config/dotfiles/versions.env +0 -18
  156. package/dot_config/duf/duf.conf +0 -6
  157. package/dot_config/duti/defaults.duti +0 -5
  158. package/dot_config/emoji/emoji.txt +0 -34
  159. package/dot_config/environment.d/50-ssh-agent.conf +0 -2
  160. package/dot_config/environment.d/90-wayland.conf +0 -19
  161. package/dot_config/fastfetch/config.jsonc +0 -28
  162. package/dot_config/firefox/user.js.tmpl +0 -58
  163. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
  164. package/dot_config/fish/completions/dot.fish.tmpl +0 -115
  165. package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
  166. package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
  167. package/dot_config/fish/conf.d/direnv.fish +0 -4
  168. package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
  169. package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
  170. package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
  171. package/dot_config/fish/conf.d/mise-activate.fish +0 -5
  172. package/dot_config/fish/config.fish.tmpl +0 -44
  173. package/dot_config/fish/fish_plugins +0 -1
  174. package/dot_config/fish/functions/_.fish +0 -3
  175. package/dot_config/fish/functions/_cached_eval.fish +0 -131
  176. package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
  177. package/dot_config/fish/functions/als.fish +0 -46
  178. package/dot_config/fish/functions/bg-upgrade.fish +0 -7
  179. package/dot_config/fish/functions/c.fish +0 -3
  180. package/dot_config/fish/functions/cat.fish +0 -9
  181. package/dot_config/fish/functions/d.fish +0 -7
  182. package/dot_config/fish/functions/dot.fish +0 -34
  183. package/dot_config/fish/functions/h.fish +0 -3
  184. package/dot_config/fish/functions/l.fish +0 -7
  185. package/dot_config/fish/functions/la.fish +0 -7
  186. package/dot_config/fish/functions/ll.fish +0 -7
  187. package/dot_config/fish/functions/log_error.fish +0 -13
  188. package/dot_config/fish/functions/log_info.fish +0 -13
  189. package/dot_config/fish/functions/lr.fish +0 -7
  190. package/dot_config/fish/functions/lra.fish +0 -7
  191. package/dot_config/fish/functions/ls.fish +0 -7
  192. package/dot_config/fish/functions/lt.fish +0 -7
  193. package/dot_config/fish/functions/lta.fish +0 -7
  194. package/dot_config/fish/functions/notify-run.fish +0 -11
  195. package/dot_config/fish/functions/q.fish +0 -3
  196. package/dot_config/fish/functions/silent-run.fish +0 -7
  197. package/dot_config/fish/functions/yy.fish +0 -8
  198. package/dot_config/flatpak/flatpak.list +0 -4
  199. package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
  200. package/dot_config/foot/foot.ini.tmpl +0 -33
  201. package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
  202. package/dot_config/fzf/fzf.zsh +0 -48
  203. package/dot_config/gem/gemrc +0 -9
  204. package/dot_config/gh/config.yml +0 -12
  205. package/dot_config/ghostty/config.tmpl +0 -165
  206. package/dot_config/git/allowed_signers.tmpl +0 -18
  207. package/dot_config/git/attributes +0 -12
  208. package/dot_config/git/commit-template +0 -10
  209. package/dot_config/git/hooks/executable_commit-msg +0 -146
  210. package/dot_config/git/ignore +0 -27
  211. package/dot_config/gnupg/gpg-agent.conf +0 -11
  212. package/dot_config/go/golangci.yml +0 -118
  213. package/dot_config/go/gopls.json +0 -30
  214. package/dot_config/goose/config.yaml +0 -29
  215. package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
  216. package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
  217. package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
  218. package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
  219. package/dot_config/htop/htoprc +0 -20
  220. package/dot_config/inputrc +0 -2
  221. package/dot_config/ipython/profile_default/ipython_config.py +0 -19
  222. package/dot_config/just/justfile +0 -122
  223. package/dot_config/k9s/config.yaml +0 -65
  224. package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
  225. package/dot_config/kanshi/config.tmpl +0 -22
  226. package/dot_config/karabiner/karabiner.json +0 -14
  227. package/dot_config/kitty/kitty.conf.tmpl +0 -53
  228. package/dot_config/lazydocker/config.yml +0 -186
  229. package/dot_config/lazygit/config.yml +0 -35
  230. package/dot_config/mako/config +0 -47
  231. package/dot_config/mas/masapps.txt +0 -5
  232. package/dot_config/micro/settings.json +0 -3
  233. package/dot_config/mimeapps.list +0 -77
  234. package/dot_config/minikube/config.json +0 -13
  235. package/dot_config/mise/config.toml +0 -99
  236. package/dot_config/mongosh/mongoshrc.js +0 -68
  237. package/dot_config/mpv/input.conf +0 -47
  238. package/dot_config/mpv/mpv.conf +0 -47
  239. package/dot_config/mycli/myclirc +0 -67
  240. package/dot_config/nano/nanorc +0 -28
  241. package/dot_config/ncdu/config +0 -12
  242. package/dot_config/niri/config.kdl.tmpl +0 -327
  243. package/dot_config/nushell/aliases.nu +0 -18
  244. package/dot_config/nushell/cached_eval.nu +0 -80
  245. package/dot_config/nushell/completions.nu.tmpl +0 -52
  246. package/dot_config/nushell/config.nu.tmpl +0 -86
  247. package/dot_config/nushell/env.nu.tmpl +0 -102
  248. package/dot_config/nushell/functions.nu.tmpl +0 -17
  249. package/dot_config/nvim/init.lua +0 -18
  250. package/dot_config/nvim/lazy-lock.json +0 -58
  251. package/dot_config/nvim/lua/config/autocmds.lua +0 -107
  252. package/dot_config/nvim/lua/config/keymaps.lua +0 -92
  253. package/dot_config/nvim/lua/config/lazy.lua +0 -44
  254. package/dot_config/nvim/lua/config/options.lua +0 -49
  255. package/dot_config/nvim/lua/plugins/ai.lua +0 -75
  256. package/dot_config/nvim/lua/plugins/coding.lua +0 -216
  257. package/dot_config/nvim/lua/plugins/completion.lua +0 -60
  258. package/dot_config/nvim/lua/plugins/dap.lua +0 -412
  259. package/dot_config/nvim/lua/plugins/editor.lua +0 -55
  260. package/dot_config/nvim/lua/plugins/git.lua +0 -10
  261. package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
  262. package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
  263. package/dot_config/nvim/lua/plugins/rust.lua +0 -34
  264. package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
  265. package/dot_config/nvim/lua/plugins/ui.lua +0 -509
  266. package/dot_config/paru/paru.conf +0 -10
  267. package/dot_config/pip/pip.conf.tmpl +0 -32
  268. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
  269. package/dot_config/pueue/pueue.yml +0 -34
  270. package/dot_config/pypoetry/config.toml +0 -6
  271. package/dot_config/pyrightconfig.json +0 -5
  272. package/dot_config/raycast/README.md +0 -13
  273. package/dot_config/redis/redisclirc +0 -41
  274. package/dot_config/ripgrep/ripgreprc +0 -21
  275. package/dot_config/shell/00-core-paths.sh.tmpl +0 -141
  276. package/dot_config/shell/05-core-safety.sh +0 -48
  277. package/dot_config/shell/10-secrets.sh +0 -41
  278. package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
  279. package/dot_config/shell/40-ls-colors.sh +0 -49
  280. package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
  281. package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
  282. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
  283. package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
  284. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
  285. package/dot_config/shell/Brewfile +0 -207
  286. package/dot_config/shell/Brewfile.cask +0 -92
  287. package/dot_config/shell/Brewfile.cli +0 -127
  288. package/dot_config/shell/README.md +0 -284
  289. package/dot_config/shell/als_data.txt.tmpl +0 -65
  290. package/dot_config/shell/custom/auto_ls.zsh +0 -20
  291. package/dot_config/shell/custom/context_suggest.zsh +0 -68
  292. package/dot_config/shell/custom/error_analysis.zsh +0 -45
  293. package/dot_config/sops/dot_sops.yaml +0 -23
  294. package/dot_config/starship.toml.tmpl +0 -202
  295. package/dot_config/swaylock/config +0 -43
  296. package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
  297. package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
  298. package/dot_config/systemd/user/pueued.service +0 -12
  299. package/dot_config/systemd/user/ssh-agent.service +0 -12
  300. package/dot_config/task/Taskfile.yml +0 -86
  301. package/dot_config/tflint/tflint.hcl +0 -9
  302. package/dot_config/tmux/tmux.conf.tmpl +0 -223
  303. package/dot_config/topgrade.toml.tmpl +0 -54
  304. package/dot_config/user-dirs.dirs +0 -10
  305. package/dot_config/vscode/extensions.txt +0 -11
  306. package/dot_config/vscode/settings.json.tmpl +0 -82
  307. package/dot_config/waybar/config.jsonc.tmpl +0 -90
  308. package/dot_config/waybar/style.css.tmpl +0 -211
  309. package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
  310. package/dot_config/wget/wgetrc +0 -12
  311. package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
  312. package/dot_config/yarn/yarnrc.yml +0 -36
  313. package/dot_config/yazi/keymap.toml +0 -67
  314. package/dot_config/yazi/theme.toml +0 -102
  315. package/dot_config/yazi/yazi.toml +0 -40
  316. package/dot_config/zathura/zathurarc +0 -52
  317. package/dot_config/zellij/config.kdl.tmpl +0 -79
  318. package/dot_config/zsh/dot_zprofile +0 -7
  319. package/dot_config/zsh/dot_zshenv +0 -5
  320. package/dot_config/zsh/dot_zshrc.tmpl +0 -688
  321. package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
  322. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
  323. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
  324. package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
  325. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
  326. package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
  327. package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
  328. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
  329. package/dot_local/bin/executable_ai-update +0 -195
  330. package/dot_local/bin/executable_ai_core +0 -152
  331. package/dot_local/bin/executable_antigravity +0 -11
  332. package/dot_local/bin/executable_b64 +0 -84
  333. package/dot_local/bin/executable_bm +0 -79
  334. package/dot_local/bin/executable_cb +0 -39
  335. package/dot_local/bin/executable_dot +0 -636
  336. package/dot_local/bin/executable_dot-ai +0 -36
  337. package/dot_local/bin/executable_dot-bootstrap +0 -76
  338. package/dot_local/bin/executable_dot-launch-or-focus +0 -52
  339. package/dot_local/bin/executable_dot-load-benchmark +0 -31
  340. package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
  341. package/dot_local/bin/executable_dot-theme-sync +0 -952
  342. package/dot_local/bin/executable_dot_completion +0 -57
  343. package/dot_local/bin/executable_dtags +0 -28
  344. package/dot_local/bin/executable_epoch +0 -67
  345. package/dot_local/bin/executable_extract +0 -41
  346. package/dot_local/bin/executable_gbd +0 -52
  347. package/dot_local/bin/executable_gd +0 -42
  348. package/dot_local/bin/executable_git-ai-commit +0 -175
  349. package/dot_local/bin/executable_git-ai-diff +0 -169
  350. package/dot_local/bin/executable_gl +0 -101
  351. package/dot_local/bin/executable_hash +0 -161
  352. package/dot_local/bin/executable_hashsum +0 -160
  353. package/dot_local/bin/executable_hex +0 -115
  354. package/dot_local/bin/executable_jsonv +0 -78
  355. package/dot_local/bin/executable_jwt +0 -94
  356. package/dot_local/bin/executable_kill-port +0 -75
  357. package/dot_local/bin/executable_lorem +0 -118
  358. package/dot_local/bin/executable_mkscript +0 -35
  359. package/dot_local/bin/executable_monitor +0 -56
  360. package/dot_local/bin/executable_myip +0 -51
  361. package/dot_local/bin/executable_notify +0 -24
  362. package/dot_local/bin/executable_open +0 -38
  363. package/dot_local/bin/executable_pw +0 -27
  364. package/dot_local/bin/executable_rec-start +0 -46
  365. package/dot_local/bin/executable_rec-stop +0 -35
  366. package/dot_local/bin/executable_regex +0 -132
  367. package/dot_local/bin/executable_start-niri +0 -8
  368. package/dot_local/bin/executable_tmux-sessionizer +0 -314
  369. package/dot_local/bin/executable_tour +0 -177
  370. package/dot_local/bin/executable_up +0 -23
  371. package/dot_local/bin/executable_update +0 -142
  372. package/dot_local/bin/executable_uuid +0 -87
  373. package/dot_local/bin/executable_win +0 -32
  374. package/dot_local/bin/executable_yamlv +0 -57
  375. package/dot_local/share/bash-completion/completions/dot +0 -72
  376. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  382. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  383. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  384. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  385. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  386. package/dot_local/share/man/man1/dot.1 +0 -149
  387. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
  388. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
  389. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
  390. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
  391. package/dot_local/share/zsh/completions/.keep +0 -0
  392. package/dot_local/share/zsh/completions/_dot +0 -287
  393. package/scripts/ci/check-dangerous-chmod.sh +0 -19
  394. package/scripts/ci/check-deps-dev.sh +0 -236
  395. package/scripts/ci/check-insecure-tls.sh +0 -61
  396. package/scripts/ci/check-regression-traceability.sh +0 -67
  397. package/scripts/ci/dot-cli-startup-bench.sh +0 -126
  398. package/scripts/ci/install-chezmoi-verified.sh +0 -67
  399. package/scripts/ci/lint-reusable-pins.sh +0 -78
  400. package/scripts/ci/run-coverage.sh +0 -451
  401. package/scripts/ci/validate-chezmoidata.sh +0 -25
  402. package/scripts/ci/validate-ci-config.sh +0 -224
  403. package/scripts/ci/windows-smoke-test.ps1 +0 -136
  404. package/scripts/docs/build-manual.sh +0 -883
  405. package/scripts/docs/check-manual.sh +0 -213
  406. package/scripts/dot/lib/bento.sh +0 -50
  407. package/scripts/dot/lib/log.sh +0 -200
  408. package/scripts/dot/lib/platform.sh +0 -112
  409. package/scripts/dot/lib/ui.sh +0 -650
  410. package/scripts/dot/lib/utils.sh +0 -377
  411. package/scripts/maintenance/check-updates.sh +0 -131
  412. package/scripts/release/package-policy-bundles.sh +0 -125
@@ -1,101 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- ## gl — Interactive git log browser with fzf + delta.
4
- ##
5
- ## Searches both commit messages AND code changes (OR'd).
6
- ## Smart case: case-sensitive if query has uppercase.
7
- ##
8
- ## # Usage
9
- ## gl # Browse full log
10
- ## gl --side # Side-by-side delta mode
11
- ## gl [git log flags] # Pass any git log flags through
12
- ##
13
- ## # Keybindings
14
- ## Enter Show commit diff (paged)
15
- ## Ctrl+O Open commit in browser (GitHub/GitLab/Bitbucket)
16
- ## Ctrl+Y Copy commit hash to clipboard
17
-
18
- set -euo pipefail
19
-
20
- for cmd in fzf delta git; do
21
- if ! command -v "$cmd" &>/dev/null; then
22
- echo "gl requires $cmd" >&2
23
- exit 1
24
- fi
25
- done
26
-
27
- # R5: validate git repository
28
- if ! git rev-parse --is-inside-work-tree &>/dev/null; then
29
- echo "gl: not a git repository" >&2
30
- exit 1
31
- fi
32
-
33
- # Open a commit URL in the default browser.
34
- open_commit_url() {
35
- local commit="${1}"
36
- [[ -z "${commit}" ]] && return
37
-
38
- local branch remote remote_url normalized_url
39
- branch="$(git branch --show-current 2>/dev/null || echo "main")"
40
- remote="$(git config --get "branch.${branch}.remote" 2>/dev/null || echo "origin")"
41
- remote_url="$(git remote get-url "${remote}" 2>/dev/null || true)"
42
- [[ -z "${remote_url}" ]] && return
43
-
44
- # Normalize SSH/HTTPS/git@ URLs to https://
45
- normalized_url="$(sed -E \
46
- 's|^(git@|https?://|ssh://git@)([:/]+)?||; s|\.git/?$||; s|:|/|; s|^|https://|; s|/+|/|g; s|https:/|https://|; s|/$||' \
47
- <<<"${remote_url}")"
48
-
49
- local commit_path
50
- case "${normalized_url}" in
51
- *gitlab*) commit_path="-/commit/${commit}" ;;
52
- *bitbucket*) commit_path="commits/${commit}" ;;
53
- *) commit_path="commit/${commit}" ;;
54
- esac
55
-
56
- open "${normalized_url}/${commit_path}" 2>/dev/null || xdg-open "${normalized_url}/${commit_path}" 2>/dev/null || true
57
- }
58
- export -f open_commit_url
59
-
60
- GIT_ARGS=()
61
-
62
- for arg in "$@"; do
63
- if [[ "${arg}" == "--side" ]]; then
64
- export DELTA_FEATURES="${DELTA_FEATURES:-} side-by-side"
65
- else
66
- GIT_ARGS+=("${arg}")
67
- fi
68
- done
69
-
70
- GIT_ARGS+=("--color=always" "--date=short")
71
-
72
- # %at is a hidden timestamp for sorting. COLOR changes per result type.
73
- FORMAT="%at %C(magenta)%h %C(green)%ad %C(COLOR)> %C(reset)%s"
74
- FORMAT_MESSAGE="${FORMAT//COLOR/blue}"
75
- FORMAT_CODE="${FORMAT//COLOR/yellow}"
76
-
77
- STRIP_TIMESTAMP="cut -d ' ' -f 2-"
78
-
79
- # shellcheck disable=SC2124
80
- GIT_LOG_DEFAULT="git log --pretty='${FORMAT_MESSAGE}' ${GIT_ARGS[*]} | ${STRIP_TIMESTAMP}"
81
-
82
- fzf \
83
- --border --border-label " [ Enter: Show | Ctrl+O: Browser | Ctrl+Y: Copy hash ] " \
84
- --disabled --no-sort --query "" \
85
- --bind "start:reload(${GIT_LOG_DEFAULT})" \
86
- --bind "change:reload:sleep 0.15
87
- query={q};
88
- if [ -z \"\${query}\" ]; then
89
- ${GIT_LOG_DEFAULT}
90
- else
91
- [[ \"\${query}\" =~ [A-Z] ]] && case= || case=\"--regexp-ignore-case\"
92
- (git log \${case} --pretty='${FORMAT_CODE}' ${GIT_ARGS[*]} -G \"\${query}\"
93
- git log \${case} --pretty='${FORMAT_MESSAGE}' ${GIT_ARGS[*]} --grep \"\${query}\") |
94
- sort --numeric-sort --reverse --unique --key 1,1 |
95
- ${STRIP_TIMESTAMP}
96
- fi" \
97
- --bind "enter:execute(git show {1} -- | delta --paging always)" \
98
- --bind "ctrl-o:execute-silent(bash -c 'source ${0}; open_commit_url {1}')" \
99
- --bind "ctrl-y:execute-silent(printf '%s' {1} | cb)" \
100
- --preview "git show {1} -- | delta --width=\${FZF_PREVIEW_COLUMNS}" \
101
- --preview-window="right:70%" || true
@@ -1,161 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Hash calculator (MD5, SHA1, SHA256, SHA512)
3
- # Usage: hash [algorithm] <string|file>
4
-
5
- set -euo pipefail
6
-
7
- usage() {
8
- echo "Usage: hash [OPTIONS] [INPUT]"
9
- echo ""
10
- echo "Algorithms:"
11
- echo " -m, --md5 MD5 hash"
12
- echo " -1, --sha1 SHA-1 hash"
13
- echo " -2, --sha256 SHA-256 hash (default)"
14
- echo " -5, --sha512 SHA-512 hash"
15
- echo " -a, --all Show all hashes"
16
- echo ""
17
- echo "Options:"
18
- echo " -f, --file Hash file contents"
19
- echo " -c, --check Verify hash (input: hash to verify)"
20
- echo " -h, --help Show this help"
21
- echo ""
22
- echo "Examples:"
23
- echo " hash 'hello' # SHA256 of string"
24
- echo " hash -m 'hello' # MD5 of string"
25
- echo " hash -f myfile.txt # SHA256 of file"
26
- echo " hash -a 'hello' # All hashes"
27
- echo " hash -c abc123 'hello' # Verify hash"
28
- }
29
-
30
- ALGO="sha256"
31
- FILE_MODE=false
32
- CHECK_MODE=false
33
- ALL_MODE=false
34
-
35
- while [[ $# -gt 0 ]]; do
36
- case "$1" in
37
- -m | --md5)
38
- ALGO="md5"
39
- shift
40
- ;;
41
- -1 | --sha1)
42
- ALGO="sha1"
43
- shift
44
- ;;
45
- -2 | --sha256)
46
- ALGO="sha256"
47
- shift
48
- ;;
49
- -5 | --sha512)
50
- ALGO="sha512"
51
- shift
52
- ;;
53
- -a | --all)
54
- ALL_MODE=true
55
- shift
56
- ;;
57
- -f | --file)
58
- FILE_MODE=true
59
- shift
60
- ;;
61
- -c | --check)
62
- CHECK_MODE=true
63
- EXPECTED="$2"
64
- shift 2
65
- ;;
66
- -h | --help)
67
- usage
68
- exit 0
69
- ;;
70
- -*)
71
- echo "Unknown option: $1"
72
- usage
73
- exit 1
74
- ;;
75
- *) break ;;
76
- esac
77
- done
78
-
79
- # Get hash command based on algorithm
80
- get_hash_cmd() {
81
- local algo="$1"
82
- case "$algo" in
83
- md5)
84
- if command -v md5sum >/dev/null 2>&1; then
85
- echo "md5sum"
86
- elif command -v md5 >/dev/null 2>&1; then
87
- echo "md5 -q"
88
- else echo "openssl md5 -r"; fi
89
- ;;
90
- sha1)
91
- if command -v sha1sum >/dev/null 2>&1; then
92
- echo "sha1sum"
93
- elif command -v shasum >/dev/null 2>&1; then
94
- echo "shasum -a 1"
95
- else echo "openssl sha1 -r"; fi
96
- ;;
97
- sha256)
98
- if command -v sha256sum >/dev/null 2>&1; then
99
- echo "sha256sum"
100
- elif command -v shasum >/dev/null 2>&1; then
101
- echo "shasum -a 256"
102
- else echo "openssl sha256 -r"; fi
103
- ;;
104
- sha512)
105
- if command -v sha512sum >/dev/null 2>&1; then
106
- echo "sha512sum"
107
- elif command -v shasum >/dev/null 2>&1; then
108
- echo "shasum -a 512"
109
- else echo "openssl sha512 -r"; fi
110
- ;;
111
- esac
112
- }
113
-
114
- compute_hash() {
115
- local algo="$1"
116
- local input="$2"
117
- local cmd
118
- cmd=$(get_hash_cmd "$algo")
119
-
120
- if $FILE_MODE; then
121
- $cmd "$input" | awk '{print $1}'
122
- else
123
- echo -n "$input" | $cmd | awk '{print $1}'
124
- fi
125
- }
126
-
127
- # Get input
128
- if [[ $# -gt 0 ]]; then
129
- INPUT="$1"
130
- else
131
- read -r INPUT
132
- fi
133
-
134
- # Validate file mode
135
- if $FILE_MODE && [[ ! -f "$INPUT" ]]; then
136
- echo "Error: File not found: $INPUT"
137
- exit 1
138
- fi
139
-
140
- if $ALL_MODE; then
141
- echo "MD5: $(compute_hash md5 "$INPUT")"
142
- echo "SHA1: $(compute_hash sha1 "$INPUT")"
143
- echo "SHA256: $(compute_hash sha256 "$INPUT")"
144
- echo "SHA512: $(compute_hash sha512 "$INPUT")"
145
- elif $CHECK_MODE; then
146
- COMPUTED=$(compute_hash "$ALGO" "$INPUT")
147
- EXPECTED_LOWER=$(echo "$EXPECTED" | tr '[:upper:]' '[:lower:]')
148
- COMPUTED_LOWER=$(echo "$COMPUTED" | tr '[:upper:]' '[:lower:]')
149
-
150
- if [[ "$EXPECTED_LOWER" == "$COMPUTED_LOWER" ]]; then
151
- echo "✓ Hash matches"
152
- exit 0
153
- else
154
- echo "✗ Hash mismatch"
155
- echo " Expected: $EXPECTED"
156
- echo " Got: $COMPUTED"
157
- exit 1
158
- fi
159
- else
160
- compute_hash "$ALGO" "$INPUT"
161
- fi
@@ -1,160 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2034
3
- ## Hash Calculator — Compute cryptographic hashes of strings or files.
4
- ##
5
- ## Supports MD5, SHA1, SHA256, and SHA512 algorithms.
6
- ## Can verify hashes and show all algorithms at once.
7
- ##
8
- ## # Requirements
9
- ## - md5sum/sha*sum (Linux) or shasum/md5 (macOS)
10
- ##
11
- ## # Usage
12
- ## hashsum "string" # SHA256 of string (default)
13
- ## hashsum -f file.txt # SHA256 of file
14
- ## hashsum -a "string" # All algorithms
15
- ## hashsum -c HASH "string" # Verify hash matches
16
- ## hashsum -1 "string" # SHA1 hash
17
- ## hashsum -5 "string" # SHA512 hash
18
- ##
19
- ## # Platform Notes
20
- ## - Linux: Uses md5sum, sha*sum
21
- ## - macOS: Uses md5 -q, shasum -a
22
-
23
- set -euo pipefail
24
-
25
- # --- UI Theme ---
26
- CYAN='\033[38;5;86m'
27
- GREEN='\033[38;5;84m'
28
- RED='\033[38;5;203m'
29
- GRAY='\033[38;5;244m'
30
- NC='\033[0m'
31
-
32
- usage() {
33
- echo "Usage: hashsum [options] [input]"
34
- echo " -m, --md5 MD5"
35
- echo " -1, --sha1 SHA1"
36
- echo " -2, --sha256 SHA256 (default)"
37
- echo " -5, --sha512 SHA512"
38
- echo " -a, --all Show all hashes"
39
- echo " -f, --file Hash a file"
40
- echo " -c, --check Verify hash (expects: -c <hash> <input>)"
41
- echo " -h, --help Show help"
42
- echo ""
43
- echo "Note: This tool was renamed from 'hash' to avoid shell builtin collisions."
44
- }
45
-
46
- get_cmd() {
47
- case "$1" in
48
- md5)
49
- command -v md5sum >/dev/null && echo "md5sum" || echo "md5 -q"
50
- ;;
51
- sha1)
52
- command -v sha1sum >/dev/null && echo "sha1sum" || echo "shasum -a 1"
53
- ;;
54
- sha256)
55
- command -v sha256sum >/dev/null && echo "sha256sum" || echo "shasum -a 256"
56
- ;;
57
- sha512)
58
- command -v sha512sum >/dev/null && echo "sha512sum" || echo "shasum -a 512"
59
- ;;
60
- *)
61
- echo "openssl $1 -r"
62
- ;;
63
- esac
64
- }
65
-
66
- ALGO="sha256"
67
- FILE_MODE=false
68
- CHECK_MODE=false
69
- ALL_MODE=false
70
- EXPECTED=""
71
-
72
- while [[ $# -gt 0 ]]; do
73
- case "$1" in
74
- -m | --md5)
75
- ALGO="md5"
76
- shift
77
- ;;
78
- -1 | --sha1)
79
- ALGO="sha1"
80
- shift
81
- ;;
82
- -2 | --sha256)
83
- ALGO="sha256"
84
- shift
85
- ;;
86
- -5 | --sha512)
87
- ALGO="sha512"
88
- shift
89
- ;;
90
- -a | --all)
91
- ALL_MODE=true
92
- shift
93
- ;;
94
- -f | --file)
95
- FILE_MODE=true
96
- shift
97
- ;;
98
- -c | --check)
99
- CHECK_MODE=true
100
- EXPECTED="$2"
101
- shift 2
102
- ;;
103
- -h | --help)
104
- usage
105
- exit 0
106
- ;;
107
- -*)
108
- echo "Unknown option: $1"
109
- usage
110
- exit 1
111
- ;;
112
- *) break ;;
113
- esac
114
- done
115
-
116
- compute() {
117
- local cmd
118
- cmd=$(get_cmd "$1")
119
- if $FILE_MODE; then
120
- $cmd "$2" | awk '{print $1}'
121
- else
122
- echo -n "$2" | $cmd | awk '{print $1}'
123
- fi
124
- }
125
-
126
- if [[ $# -gt 0 ]]; then
127
- INPUT="$1"
128
- else
129
- read -r INPUT
130
- fi
131
-
132
- if $FILE_MODE && [[ ! -f "$INPUT" ]]; then
133
- echo "File not found: $INPUT"
134
- exit 1
135
- fi
136
-
137
- if $ALL_MODE; then
138
- for a in md5 sha1 sha256 sha512; do
139
- printf "${CYAN}%-8s${NC} %s\n" "$a:" "$(compute "$a" "$INPUT")"
140
- done
141
- exit 0
142
- fi
143
-
144
- if $CHECK_MODE; then
145
- COMPUTED=$(compute "$ALGO" "$INPUT")
146
- EXPECTED_LOWER=$(echo "$EXPECTED" | tr '[:upper:]' '[:lower:]')
147
- COMPUTED_LOWER=$(echo "$COMPUTED" | tr '[:upper:]' '[:lower:]')
148
-
149
- if [[ "$EXPECTED_LOWER" == "$COMPUTED_LOWER" ]]; then
150
- printf '%b\n' "${GREEN}Hash matches${NC}"
151
- exit 0
152
- else
153
- printf '%b\n' "${RED}Hash mismatch${NC}"
154
- echo " Expected: $EXPECTED"
155
- echo " Got: $COMPUTED"
156
- exit 1
157
- fi
158
- fi
159
-
160
- compute "$ALGO" "$INPUT"
@@ -1,115 +0,0 @@
1
- #!/usr/bin/env bash
2
- ## Hex Viewer — View files in hexadecimal or convert strings to/from hex.
3
- ##
4
- ## Multi-mode hex utility supporting file viewing, string encoding,
5
- ## and hex decoding. Colorized output available with bat.
6
- ##
7
- ## # Requirements
8
- ## - xxd: Primary hex converter (vim package)
9
- ## - hexdump or od: Fallback converters
10
- ## - bat (optional): For colorized output
11
- ##
12
- ## # Usage
13
- ## hex file.bin # View file in hex
14
- ## hex -e "hello" # String to hex
15
- ## hex -d "68656c6c6f" # Hex to string
16
- ## cat file | hex # View stdin in hex
17
- ## hex -c -n 32 file.bin # Colorized, 32 bytes per line
18
- ##
19
- ## # Platform Notes
20
- ## - All platforms: Requires xxd, hexdump, or od
21
-
22
- set -euo pipefail
23
-
24
- usage() {
25
- echo "Usage: hex [OPTIONS] [INPUT]"
26
- echo ""
27
- echo "Options:"
28
- echo " -e, --encode Convert string to hex"
29
- echo " -d, --decode Convert hex to string"
30
- echo " -c, --color Colorize output"
31
- echo " -n, --length N Bytes per line (default: 16)"
32
- echo " -h, --help Show this help"
33
- echo ""
34
- echo "Examples:"
35
- echo " hex file.bin # View file in hex"
36
- echo " hex -e 'hello' # String to hex"
37
- echo " hex -d '68656c6c6f' # Hex to string"
38
- echo " cat file | hex # View stdin in hex"
39
- }
40
-
41
- MODE="view"
42
- COLOR=false
43
- BYTES_PER_LINE=16
44
-
45
- while [[ $# -gt 0 ]]; do
46
- case "$1" in
47
- -e | --encode)
48
- MODE="encode"
49
- shift
50
- ;;
51
- -d | --decode)
52
- MODE="decode"
53
- shift
54
- ;;
55
- -c | --color)
56
- COLOR=true
57
- shift
58
- ;;
59
- -n | --length)
60
- BYTES_PER_LINE="$2"
61
- shift 2
62
- ;;
63
- -h | --help)
64
- usage
65
- exit 0
66
- ;;
67
- -*)
68
- echo "Unknown option: $1"
69
- usage
70
- exit 1
71
- ;;
72
- *) break ;;
73
- esac
74
- done
75
-
76
- case "$MODE" in
77
- encode)
78
- INPUT="${1:-}"
79
- [[ -z "$INPUT" ]] && read -r INPUT
80
- echo -n "$INPUT" | xxd -p | tr -d '\n'
81
- echo
82
- ;;
83
-
84
- decode)
85
- INPUT="${1:-}"
86
- [[ -z "$INPUT" ]] && read -r INPUT
87
- # Remove spaces and newlines
88
- INPUT=$(echo "$INPUT" | tr -d ' \n')
89
- echo "$INPUT" | xxd -r -p
90
- echo
91
- ;;
92
-
93
- view)
94
- if [[ $# -gt 0 ]] && [[ -f "$1" ]]; then
95
- INPUT_FILE="$1"
96
- else
97
- INPUT_FILE="-"
98
- fi
99
-
100
- if command -v xxd >/dev/null 2>&1; then
101
- if $COLOR && command -v bat >/dev/null 2>&1; then
102
- xxd -c "$BYTES_PER_LINE" "$INPUT_FILE" | bat --language=xxd --style=plain
103
- else
104
- xxd -c "$BYTES_PER_LINE" "$INPUT_FILE"
105
- fi
106
- elif command -v hexdump >/dev/null 2>&1; then
107
- hexdump -C "$INPUT_FILE"
108
- elif command -v od >/dev/null 2>&1; then
109
- od -A x -t x1z -v "$INPUT_FILE"
110
- else
111
- echo "Error: xxd, hexdump, or od required"
112
- exit 1
113
- fi
114
- ;;
115
- esac
@@ -1,78 +0,0 @@
1
- #!/usr/bin/env bash
2
- ## JSON Validator — Validate and optionally format JSON data.
3
- ##
4
- ## Validates JSON syntax and reports success or failure.
5
- ## Supports formatting output and quiet mode for scripts.
6
- ##
7
- ## # Requirements
8
- ## - jq: Primary JSON processor (recommended)
9
- ## - python3: Fallback JSON validator
10
- ##
11
- ## # Usage
12
- ## jsonv file.json # Validate JSON file
13
- ## jsonv < file.json # Validate from stdin
14
- ## jsonv -f file.json # Validate and format
15
- ## jsonv -q file.json # Quiet mode (exit code only)
16
- ##
17
- ## # Platform Notes
18
- ## - All platforms: Requires jq or python3
19
-
20
- set -euo pipefail
21
-
22
- FORMAT=false
23
- QUIET=false
24
-
25
- while [[ $# -gt 0 ]]; do
26
- case "$1" in
27
- -f | --format)
28
- FORMAT=true
29
- shift
30
- ;;
31
- -q | --quiet)
32
- QUIET=true
33
- shift
34
- ;;
35
- -*)
36
- echo "Unknown option: $1"
37
- exit 1
38
- ;;
39
- *) break ;;
40
- esac
41
- done
42
-
43
- validate_json() {
44
- local input="$1"
45
- if command -v jq >/dev/null 2>&1; then
46
- if $FORMAT; then
47
- jq '.' <<<"$input"
48
- else
49
- jq -e '.' <<<"$input" >/dev/null 2>&1
50
- fi
51
- elif command -v python3 >/dev/null 2>&1; then
52
- if $FORMAT; then
53
- python3 -m json.tool <<<"$input"
54
- else
55
- python3 -c "import json; json.loads('''$input''')" 2>/dev/null
56
- fi
57
- else
58
- echo "Error: jq or python3 required"
59
- exit 1
60
- fi
61
- }
62
-
63
- # Read input
64
- if [[ $# -gt 0 ]] && [[ -f "$1" ]]; then
65
- INPUT=$(cat "$1")
66
- SOURCE="$1"
67
- else
68
- INPUT=$(cat)
69
- SOURCE="stdin"
70
- fi
71
-
72
- if validate_json "$INPUT"; then
73
- $QUIET || echo "Valid JSON ($SOURCE)"
74
- exit 0
75
- else
76
- echo "Invalid JSON ($SOURCE)"
77
- exit 1
78
- fi
@@ -1,94 +0,0 @@
1
- #!/usr/bin/env bash
2
- ## JWT Decoder — Decode and inspect JWT tokens.
3
- ##
4
- ## Decodes JWT header and payload, checks expiration status,
5
- ## and displays token metadata. Does not verify signatures.
6
- ##
7
- ## # Requirements
8
- ## - base64: Core utility for decoding
9
- ## - jq (optional): For JSON formatting
10
- ## - python3 (optional): Fallback JSON formatter
11
- ##
12
- ## # Usage
13
- ## jwt "eyJhbG..." # Decode JWT token
14
- ## jwt < token.txt # Decode from stdin
15
- ## echo "Bearer xxx" | jwt # Handles Bearer prefix
16
- ##
17
- ## # Platform Notes
18
- ## - macOS: Uses base64 -D for decode
19
- ## - Linux: Uses base64 -d for decode
20
-
21
- set -euo pipefail
22
-
23
- decode_base64url() {
24
- local input="$1"
25
- # Add padding
26
- local mod=$((${#input} % 4))
27
- if [[ $mod -eq 2 ]]; then input="${input}=="; fi
28
- if [[ $mod -eq 3 ]]; then input="${input}="; fi
29
- # Convert URL-safe to standard base64
30
- echo "$input" | tr '-_' '+/' | base64 -d 2>/dev/null || base64 -D <<<"$(echo "$input" | tr '-_' '+/')"
31
- }
32
-
33
- format_json() {
34
- if command -v jq >/dev/null 2>&1; then
35
- jq '.' 2>/dev/null || cat
36
- elif command -v python3 >/dev/null 2>&1; then
37
- python3 -m json.tool 2>/dev/null || cat
38
- else
39
- cat
40
- fi
41
- }
42
-
43
- # Get token
44
- if [[ $# -gt 0 ]]; then
45
- TOKEN="$1"
46
- else
47
- read -r TOKEN
48
- fi
49
-
50
- # Remove 'Bearer ' prefix if present
51
- TOKEN="${TOKEN#Bearer }"
52
- TOKEN="${TOKEN#bearer }"
53
-
54
- # Split into parts
55
- IFS='.' read -ra PARTS <<<"$TOKEN"
56
-
57
- if [[ ${#PARTS[@]} -lt 2 ]]; then
58
- echo "Error: Invalid JWT format"
59
- exit 1
60
- fi
61
-
62
- echo "=== Header ==="
63
- decode_base64url "${PARTS[0]}" | format_json
64
- echo ""
65
-
66
- echo "=== Payload ==="
67
- PAYLOAD=$(decode_base64url "${PARTS[1]}")
68
- echo "$PAYLOAD" | format_json
69
- echo ""
70
-
71
- # Check expiration
72
- if command -v jq >/dev/null 2>&1; then
73
- EXP=$(echo "$PAYLOAD" | jq -r '.exp // empty' 2>/dev/null)
74
- IAT=$(echo "$PAYLOAD" | jq -r '.iat // empty' 2>/dev/null)
75
-
76
- if [[ -n "$EXP" ]]; then
77
- NOW=$(date +%s)
78
- EXP_DATE=$(date -d "@$EXP" 2>/dev/null || date -r "$EXP" 2>/dev/null)
79
- if [[ $EXP -lt $NOW ]]; then
80
- echo "Token EXPIRED at: $EXP_DATE"
81
- else
82
- echo "Token expires at: $EXP_DATE"
83
- fi
84
- fi
85
-
86
- if [[ -n "$IAT" ]]; then
87
- IAT_DATE=$(date -d "@$IAT" 2>/dev/null || date -r "$IAT" 2>/dev/null)
88
- echo " Issued at: $IAT_DATE"
89
- fi
90
- fi
91
-
92
- echo ""
93
- echo "=== Signature ==="
94
- echo "(${#PARTS[2]} characters, verification requires secret key)"