@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,75 +0,0 @@
1
- #!/usr/bin/env bash
2
- ## Kill Port — Terminate processes listening on a specified port.
3
- ##
4
- ## Finds and kills processes bound to a given port number.
5
- ## Supports both graceful (SIGTERM) and forced (SIGKILL) termination.
6
- ##
7
- ## # Requirements
8
- ## - lsof, ss, or netstat: For finding processes
9
- ## - kill: For process termination
10
- ## - ps: For process information display
11
- ##
12
- ## # Usage
13
- ## kill-port 3000 # Kill process on port 3000
14
- ## kill-port 8080 --force # Force kill (SIGKILL)
15
- ## kill-port 443 # May require sudo for privileged ports
16
- ##
17
- ## # Platform Notes
18
- ## - Linux: Uses lsof or ss
19
- ## - macOS: Uses lsof
20
-
21
- set -euo pipefail
22
-
23
- if [[ $# -lt 1 ]]; then
24
- echo "Usage: kill-port <port> [--force]"
25
- echo "Example: kill-port 3000"
26
- exit 1
27
- fi
28
-
29
- PORT="$1"
30
- FORCE=false
31
- [[ "${2:-}" == "--force" || "${2:-}" == "-f" ]] && FORCE=true
32
-
33
- # Validate port number
34
- if ! [[ "$PORT" =~ ^[0-9]+$ ]] || [[ "$PORT" -lt 1 ]] || [[ "$PORT" -gt 65535 ]]; then
35
- echo "Error: Invalid port number: $PORT"
36
- exit 1
37
- fi
38
-
39
- # Find process using the port
40
- find_pid() {
41
- if command -v lsof >/dev/null 2>&1; then
42
- lsof -ti ":$PORT" 2>/dev/null
43
- elif command -v ss >/dev/null 2>&1; then
44
- ss -tlnp "sport = :$PORT" 2>/dev/null | awk 'NR>1 {match($0, /pid=([0-9]+)/, a); print a[1]}'
45
- elif command -v netstat >/dev/null 2>&1; then
46
- netstat -tlnp 2>/dev/null | awk -v port=":$PORT" '$4 ~ port {split($7, a, "/"); print a[1]}'
47
- else
48
- echo "Error: No supported tool found (lsof, ss, or netstat required)"
49
- exit 1
50
- fi
51
- }
52
-
53
- PIDS=$(find_pid)
54
-
55
- if [[ -z "$PIDS" ]]; then
56
- echo "No process found on port $PORT"
57
- exit 0
58
- fi
59
-
60
- echo "Found process(es) on port $PORT:"
61
- for pid in $PIDS; do
62
- ps -p "$pid" -o pid,comm,args --no-headers 2>/dev/null || echo " PID: $pid"
63
- done
64
-
65
- if $FORCE; then
66
- SIGNAL="-9"
67
- echo "Force killing..."
68
- else
69
- SIGNAL="-15"
70
- echo "Sending SIGTERM..."
71
- fi
72
-
73
- for pid in $PIDS; do
74
- kill $SIGNAL "$pid" 2>/dev/null && echo "Killed PID $pid" || echo "Failed to kill PID $pid"
75
- done
@@ -1,118 +0,0 @@
1
- #!/usr/bin/env bash
2
- ## Lorem Ipsum Generator — Generate placeholder text.
3
- ##
4
- ## Generates lorem ipsum text in words, sentences, or paragraphs.
5
- ## Useful for testing layouts and content rendering.
6
- ##
7
- ## # Requirements
8
- ## - bash 4+: For array operations
9
- ##
10
- ## # Usage
11
- ## lorem # 1 paragraph
12
- ## lorem p 3 # 3 paragraphs
13
- ## lorem words 10 # 10 words
14
- ## lorem sentences 5 # 5 sentences
15
- ## lorem w 50 # 50 words (short form)
16
- ##
17
- ## # Platform Notes
18
- ## - All platforms: Pure bash implementation
19
-
20
- set -euo pipefail
21
-
22
- # Lorem ipsum word pool
23
- WORDS=(
24
- "lorem" "ipsum" "dolor" "sit" "amet" "consectetur" "adipiscing" "elit"
25
- "sed" "do" "eiusmod" "tempor" "incididunt" "ut" "labore" "et" "dolore"
26
- "magna" "aliqua" "enim" "ad" "minim" "veniam" "quis" "nostrud"
27
- "exercitation" "ullamco" "laboris" "nisi" "aliquip" "ex" "ea" "commodo"
28
- "consequat" "duis" "aute" "irure" "in" "reprehenderit" "voluptate"
29
- "velit" "esse" "cillum" "fugiat" "nulla" "pariatur" "excepteur" "sint"
30
- "occaecat" "cupidatat" "non" "proident" "sunt" "culpa" "qui" "officia"
31
- "deserunt" "mollit" "anim" "id" "est" "laborum" "perspiciatis" "unde"
32
- "omnis" "iste" "natus" "error" "voluptatem" "accusantium" "doloremque"
33
- "laudantium" "totam" "rem" "aperiam" "eaque" "ipsa" "quae" "ab" "illo"
34
- "inventore" "veritatis" "quasi" "architecto" "beatae" "vitae" "dicta"
35
- "explicabo" "nemo" "ipsam" "quia" "voluptas" "aspernatur" "aut" "odit"
36
- "fugit" "consequuntur" "magni" "dolores" "eos" "ratione" "sequi"
37
- "nesciunt" "neque" "porro" "quisquam" "dolorem" "adipisci" "numquam"
38
- "eius" "modi" "tempora" "incidunt" "magnam" "quaerat"
39
- )
40
-
41
- random_word() {
42
- echo "${WORDS[$RANDOM % ${#WORDS[@]}]}"
43
- }
44
-
45
- generate_sentence() {
46
- local word_count=$((RANDOM % 10 + 5))
47
- local sentence=""
48
- for ((i = 0; i < word_count; i++)); do
49
- if [[ $i -eq 0 ]]; then
50
- word=$(random_word)
51
- sentence="${word^}"
52
- else
53
- sentence="$sentence $(random_word)"
54
- fi
55
- done
56
- echo "$sentence."
57
- }
58
-
59
- generate_paragraph() {
60
- local sentence_count=$((RANDOM % 4 + 3))
61
- local paragraph=""
62
- for ((i = 0; i < sentence_count; i++)); do
63
- if [[ $i -eq 0 ]]; then
64
- paragraph=$(generate_sentence)
65
- else
66
- paragraph="$paragraph $(generate_sentence)"
67
- fi
68
- done
69
- echo "$paragraph"
70
- }
71
-
72
- # Parse arguments
73
- TYPE="${1:-paragraphs}"
74
- COUNT="${2:-1}"
75
-
76
- case "$TYPE" in
77
- w | word | words)
78
- for ((i = 0; i < COUNT; i++)); do
79
- if [[ $i -eq 0 ]]; then
80
- word=$(random_word)
81
- echo -n "${word^}"
82
- else
83
- echo -n " $(random_word)"
84
- fi
85
- done
86
- echo
87
- ;;
88
- s | sentence | sentences)
89
- for ((i = 0; i < COUNT; i++)); do
90
- generate_sentence
91
- done
92
- ;;
93
- p | paragraph | paragraphs)
94
- for ((i = 0; i < COUNT; i++)); do
95
- generate_paragraph
96
- [[ $i -lt $((COUNT - 1)) ]] && echo
97
- done
98
- ;;
99
- -h | --help)
100
- echo "Usage: lorem [type] [count]"
101
- echo ""
102
- echo "Types:"
103
- echo " words, w Generate words"
104
- echo " sentences, s Generate sentences"
105
- echo " paragraphs, p Generate paragraphs (default)"
106
- echo ""
107
- echo "Examples:"
108
- echo " lorem # 1 paragraph"
109
- echo " lorem p 3 # 3 paragraphs"
110
- echo " lorem words 10 # 10 words"
111
- echo " lorem sentences 5 # 5 sentences"
112
- ;;
113
- *)
114
- echo "Unknown type: $TYPE"
115
- echo "Use: words, sentences, or paragraphs"
116
- exit 1
117
- ;;
118
- esac
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- ## mkscript — Create a ready-to-go shell script.
4
- ##
5
- ## # Usage
6
- ## mkscript hello
7
- ## mkscript /tmp/myscript
8
-
9
- set -euo pipefail
10
-
11
- file="${1:-}"
12
-
13
- if [[ -z "${file}" ]]; then
14
- echo "Usage: mkscript <path>" >&2
15
- exit 1
16
- fi
17
-
18
- if [[ -f "${file}" ]]; then
19
- echo "${file} already exists, aborting." >&2
20
- exit 1
21
- fi
22
-
23
- mkdir -p "$(dirname "${file}")"
24
-
25
- cat >"${file}" <<'EOF'
26
- #!/usr/bin/env bash
27
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
28
-
29
- set -euo pipefail
30
-
31
- echo "hello world"
32
- EOF
33
-
34
- chmod +x "${file}"
35
- echo "Created ${file}"
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- ## monitor — GPU-aware system monitoring in tmux.
4
- ##
5
- ## Opens btop alongside an auto-detected GPU monitor in a tmux split.
6
- ## Cross-platform: Linux (nvtop/amdgpu_top/nvidia-smi/intel_gpu_top),
7
- ## macOS (powermetrics via sudo), WSL (nvidia-smi if available).
8
- ##
9
- ## # Usage
10
- ## monitor # Opens btop + GPU monitor
11
-
12
- set -euo pipefail
13
-
14
- if ! command -v tmux &>/dev/null; then
15
- echo "monitor requires tmux" >&2
16
- # Fallback: just run btop directly
17
- exec btop
18
- fi
19
-
20
- if ! command -v btop &>/dev/null; then
21
- echo "monitor requires btop" >&2
22
- exit 1
23
- fi
24
-
25
- # Auto-detect GPU monitoring tool (platform-aware)
26
- case "$(uname -s)" in
27
- Darwin)
28
- if command -v powermetrics &>/dev/null; then
29
- gpu_command=(sudo powermetrics --samplers gpu_power -i 2000)
30
- else
31
- gpu_command=(bash -c "printf 'macOS GPU metrics require powermetrics (built-in).\nRun: sudo powermetrics --samplers gpu_power\n'; read -rp 'Press Enter to close...'")
32
- fi
33
- ;;
34
- Linux)
35
- if command -v nvtop &>/dev/null; then
36
- gpu_command=(nvtop)
37
- elif command -v amdgpu_top &>/dev/null; then
38
- gpu_command=(amdgpu_top --dark)
39
- elif command -v nvidia-smi &>/dev/null; then
40
- gpu_command=(nvidia-smi)
41
- elif command -v intel_gpu_top &>/dev/null; then
42
- gpu_command=(sudo intel_gpu_top)
43
- else
44
- gpu_command=(bash -c "printf 'No GPU monitoring tools found.\n\nInstall: nvtop, amdgpu_top, nvidia-smi, or intel_gpu_top.\n'; read -rp 'Press Enter to close...'")
45
- fi
46
- ;;
47
- *)
48
- gpu_command=(bash -c "printf 'GPU monitoring not supported on this platform.\n'; read -rp 'Press Enter to close...'")
49
- ;;
50
- esac
51
-
52
- # If inside tmux, open as new window; otherwise create a new session
53
- tmux_command=(new-session -s)
54
- [[ -n "${TMUX:-}" ]] && tmux_command=(new-window -n)
55
-
56
- tmux "${tmux_command[@]}" "monitor" "btop" \; split-window "${gpu_command[@]}"
@@ -1,51 +0,0 @@
1
- #!/usr/bin/env bash
2
- ## My IP — Display public and local IP addresses.
3
- ##
4
- ## Queries external services for public IP and inspects
5
- ## network interfaces for local IP address.
6
- ##
7
- ## # Requirements
8
- ## - curl: For external IP lookup
9
- ## - ip or ifconfig: For local IP detection
10
- ##
11
- ## # Usage
12
- ## myip # Show both IPs
13
- ## myip --json # JSON output format
14
- ##
15
- ## # Platform Notes
16
- ## - Linux: Uses ip route or ifconfig
17
- ## - macOS: Uses ifconfig
18
-
19
- set -euo pipefail
20
-
21
- JSON_OUTPUT=false
22
- [[ "${1:-}" == "--json" ]] && JSON_OUTPUT=true
23
-
24
- # Get public IP
25
- get_public_ip() {
26
- curl -s --max-time 5 https://api.ipify.org 2>/dev/null ||
27
- curl -s --max-time 5 https://ifconfig.me 2>/dev/null ||
28
- curl -s --max-time 5 https://icanhazip.com 2>/dev/null ||
29
- echo "unavailable"
30
- }
31
-
32
- # Get local IP
33
- get_local_ip() {
34
- if command -v ip >/dev/null 2>&1; then
35
- ip route get 1 2>/dev/null | awk '{print $7; exit}'
36
- elif command -v ifconfig >/dev/null 2>&1; then
37
- ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -1
38
- else
39
- hostname -I 2>/dev/null | awk '{print $1}' || echo "unavailable"
40
- fi
41
- }
42
-
43
- PUBLIC_IP=$(get_public_ip)
44
- LOCAL_IP=$(get_local_ip)
45
-
46
- if $JSON_OUTPUT; then
47
- echo "{\"public\": \"$PUBLIC_IP\", \"local\": \"$LOCAL_IP\"}"
48
- else
49
- echo "Public IP: $PUBLIC_IP"
50
- echo "Local IP: $LOCAL_IP"
51
- fi
@@ -1,24 +0,0 @@
1
- #!/bin/sh
2
- # Universal desktop notification (notify)
3
- # Supports macOS (osascript), Linux (notify-send), and WSL (powershell)
4
-
5
- set -eu
6
-
7
- title="${1:-Notification}"
8
- message="${2:-}"
9
-
10
- case "$(uname -s)" in
11
- Darwin)
12
- osascript -e "display notification \"$message\" with title \"$title\""
13
- ;;
14
- Linux)
15
- if grep -qi microsoft /proc/version 2>/dev/null; then
16
- # WSL: Use PowerShell to show a toast notification
17
- powershell.exe -Command "[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('$message', '$title')"
18
- elif command -v notify-send >/dev/null 2>&1; then
19
- notify-send "$title" "$message"
20
- else
21
- echo "$title: $message"
22
- fi
23
- ;;
24
- esac
@@ -1,38 +0,0 @@
1
- #!/bin/sh
2
- # Universal file opener (open)
3
- # Maps to open (macOS), xdg-open (Linux), and explorer.exe (WSL)
4
-
5
- set -eu
6
-
7
- target="${1:-.}"
8
-
9
- # Helper for rich feedback if TTY is present
10
- log_info() {
11
- if [ -t 1 ] && command -v gum >/dev/null 2>&1; then
12
- gum style --foreground 39 "󰀶 Opening: $1"
13
- else
14
- echo "open: $1"
15
- fi
16
- }
17
-
18
- log_info "$target"
19
-
20
- case "$(uname -s)" in
21
- Darwin)
22
- # Use /usr/bin/open explicitly — otherwise this wrapper would recurse
23
- # into itself via PATH lookup.
24
- /usr/bin/open "$target"
25
- ;;
26
- Linux)
27
- if grep -qi microsoft /proc/version 2>/dev/null; then
28
- # WSL: Translate path and open with explorer.exe
29
- win_path=$(wslpath -w "$target" 2>/dev/null || echo "$target")
30
- explorer.exe "$win_path"
31
- elif command -v xdg-open >/dev/null 2>&1; then
32
- xdg-open "$target"
33
- else
34
- echo "Error: No opener found (xdg-open not installed)" >&2
35
- exit 1
36
- fi
37
- ;;
38
- esac
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- ## pw — Generate a secure password and copy to clipboard.
4
- ##
5
- ## # Usage
6
- ## pw # 48-char password (default)
7
- ## pw 64 # Custom length
8
-
9
- set -euo pipefail
10
-
11
- length="${1:-48}"
12
-
13
- # R5: validate input is a positive integer
14
- if [[ ! "$length" =~ ^[0-9]+$ ]] || [[ "$length" -lt 1 ]] || [[ "$length" -gt 1024 ]]; then
15
- echo "Usage: pw [length] (1-1024, default 48)" >&2
16
- exit 1
17
- fi
18
-
19
- if command -v pwgen &>/dev/null; then
20
- pwgen -sync "${length}" -1 | cb
21
- elif command -v openssl &>/dev/null; then
22
- openssl rand -base64 "$((length * 3 / 4 + 1))" | head -c "$length" | cb
23
- else
24
- echo "Requires pwgen or openssl" >&2
25
- exit 1
26
- fi
27
- echo "Password (${length} chars) copied to clipboard."
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- ## rec-start — Disable shell history for screencasts/recordings.
4
- ##
5
- ## Backs up and removes the history file to prevent secrets leaking.
6
- ## Run rec-stop to restore.
7
- ##
8
- ## # Usage
9
- ## rec-start
10
-
11
- set -euo pipefail
12
-
13
- # Detect history files across shells (bounded: max 3 candidates)
14
- histfiles=()
15
- [[ -n "${HISTFILE:-}" && -f "${HISTFILE}" ]] && histfiles+=("${HISTFILE}")
16
- [[ -f "${HOME}/.local/share/fish/fish_history" ]] && histfiles+=("${HOME}/.local/share/fish/fish_history")
17
- [[ -f "${HOME}/.bash_history" && "${HISTFILE:-}" != "${HOME}/.bash_history" ]] && histfiles+=("${HOME}/.bash_history")
18
-
19
- if [[ ${#histfiles[@]} -eq 0 ]]; then
20
- echo "No history files found, nothing to do."
21
- exit 0
22
- fi
23
-
24
- backed=0
25
- for histfile in "${histfiles[@]}"; do
26
- if [[ -f "${histfile}.bak" ]]; then
27
- echo " Already backed up: ${histfile}"
28
- continue
29
- fi
30
- # Atomic: mv is a single rename syscall (no cp+rm race)
31
- if mv "${histfile}" "${histfile}.bak"; then
32
- echo " Backed up: ${histfile}"
33
- backed=$((backed + 1))
34
- else
35
- echo " Failed to back up: ${histfile}" >&2
36
- fi
37
- done
38
-
39
- if [[ $backed -eq 0 ]]; then
40
- echo "History already disabled. Run rec-stop first."
41
- exit 1
42
- fi
43
-
44
- echo ""
45
- echo "Recording mode ON ($backed files backed up)"
46
- echo " Run rec-stop to restore."
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- ## rec-stop — Restore shell history after recording.
4
- ##
5
- ## # Usage
6
- ## rec-stop
7
-
8
- set -euo pipefail
9
-
10
- # Restore all backed-up history files (bounded: max 3 candidates)
11
- candidates=(
12
- "${HISTFILE:-${HOME}/.bash_history}"
13
- "${HOME}/.local/share/fish/fish_history"
14
- "${HOME}/.bash_history"
15
- )
16
-
17
- restored=0
18
- for histfile in "${candidates[@]}"; do
19
- if [[ -f "${histfile}.bak" ]]; then
20
- if mv "${histfile}.bak" "${histfile}"; then
21
- echo " Restored: ${histfile}"
22
- restored=$((restored + 1))
23
- else
24
- echo " Failed to restore: ${histfile}" >&2
25
- fi
26
- fi
27
- done
28
-
29
- if [[ $restored -eq 0 ]]; then
30
- echo "No backups found, nothing to restore."
31
- exit 0
32
- fi
33
-
34
- echo ""
35
- echo "Recording mode OFF ($restored files restored)"
@@ -1,132 +0,0 @@
1
- #!/usr/bin/env bash
2
- ## Regex Tester — Test regular expressions against strings or files.
3
- ##
4
- ## Interactive regex testing with match highlighting.
5
- ## Supports case-insensitive and global matching modes.
6
- ##
7
- ## # Requirements
8
- ## - grep: Extended regex support (GNU or BSD)
9
- ##
10
- ## # Usage
11
- ## regex '[0-9]+' 'abc123def' # Test pattern
12
- ## regex -g '[a-z]+' 'hello world' # Find all matches
13
- ## regex -f '^#' config.txt # Test against file
14
- ## regex -i 'error' log.txt # Case insensitive
15
- ##
16
- ## # Platform Notes
17
- ## - All platforms: Uses grep -E (extended regex)
18
-
19
- set -euo pipefail
20
-
21
- usage() {
22
- echo "Usage: regex [OPTIONS] <pattern> [string|file]"
23
- echo ""
24
- echo "Options:"
25
- echo " -f, --file Test against file contents"
26
- echo " -g, --global Find all matches"
27
- echo " -i, --ignore Case insensitive"
28
- echo " -m, --multiline Multiline mode"
29
- echo " -c, --color Colorize matches"
30
- echo " -h, --help Show this help"
31
- echo ""
32
- echo "Examples:"
33
- echo " regex '[0-9]+' 'abc123def' # Test pattern"
34
- echo " regex -g '[a-z]+' 'hello world' # Find all"
35
- echo " regex -f '^#' config.txt # Test file"
36
- }
37
-
38
- FILE_MODE=false
39
- GLOBAL=false
40
- IGNORE_CASE=""
41
- COLOR=true
42
-
43
- while [[ $# -gt 0 ]]; do
44
- case "$1" in
45
- -f | --file)
46
- FILE_MODE=true
47
- shift
48
- ;;
49
- -g | --global)
50
- GLOBAL=true
51
- shift
52
- ;;
53
- -i | --ignore)
54
- IGNORE_CASE="-i"
55
- shift
56
- ;;
57
- -c | --color)
58
- COLOR=true
59
- shift
60
- ;;
61
- --no-color)
62
- COLOR=false
63
- shift
64
- ;;
65
- -h | --help)
66
- usage
67
- exit 0
68
- ;;
69
- -*)
70
- echo "Unknown option: $1"
71
- usage
72
- exit 1
73
- ;;
74
- *) break ;;
75
- esac
76
- done
77
-
78
- if [[ $# -lt 1 ]]; then
79
- usage
80
- exit 1
81
- fi
82
-
83
- PATTERN="$1"
84
- shift
85
-
86
- # Get input
87
- if $FILE_MODE; then
88
- if [[ $# -lt 1 ]] || [[ ! -f "$1" ]]; then
89
- echo "Error: File required for -f mode"
90
- exit 1
91
- fi
92
- INPUT=$(cat "$1")
93
- elif [[ $# -gt 0 ]]; then
94
- INPUT="$*"
95
- else
96
- INPUT=$(cat)
97
- fi
98
-
99
- # Color settings
100
- if $COLOR; then
101
- GREP_COLOR="--color=always"
102
- else
103
- GREP_COLOR="--color=never"
104
- fi
105
-
106
- # Test and show matches
107
- echo "Pattern: $PATTERN"
108
- echo "---"
109
-
110
- if $GLOBAL; then
111
- # Find all matches
112
- if echo "$INPUT" | grep -oE $IGNORE_CASE "$PATTERN" $GREP_COLOR; then
113
- echo "---"
114
- MATCH_COUNT=$(echo "$INPUT" | grep -oE $IGNORE_CASE "$PATTERN" | wc -l)
115
- echo "Found $MATCH_COUNT match(es)"
116
- else
117
- echo "No matches found"
118
- exit 1
119
- fi
120
- else
121
- # Test if pattern matches
122
- if echo "$INPUT" | grep -qE $IGNORE_CASE "$PATTERN"; then
123
- echo "$INPUT" | grep -E $IGNORE_CASE "$PATTERN" $GREP_COLOR
124
- echo "---"
125
- echo "Pattern matches"
126
- else
127
- echo "$INPUT"
128
- echo "---"
129
- echo "Pattern does not match"
130
- exit 1
131
- fi
132
- fi
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- export XDG_CURRENT_DESKTOP=niri
5
- export XDG_SESSION_DESKTOP=niri
6
- export NIXOS_OZONE_WL=1
7
-
8
- exec niri