@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.
- package/CHANGELOG.md +83 -9
- package/LICENSE +21 -1283
- package/README.md +5 -3
- package/docs/CONFIG_STRATEGY.md +124 -0
- package/docs/COPYRIGHT +1 -1
- package/docs/GOVERNANCE.md +98 -0
- package/docs/MAINTAINERS.md +41 -0
- package/docs/OPENCODE.md +127 -0
- package/docs/README.md +2 -0
- package/docs/STRUCTURE.md +102 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +2 -2
- package/docs/architecture/AI_COST_OPTIMIZATION.md +143 -0
- package/docs/architecture/REPO_LAYOUT.md +8 -8
- package/docs/archive/MILESTONE_v0.2.493.md +1 -1
- package/docs/index.md +2 -2
- package/docs/interop/POWERSHELL.md +1 -1
- package/docs/manual/00-introduction.md +1 -1
- package/docs/manual/01-concepts/02-trust-model.md +1 -1
- package/docs/manual/03-reference/02-config-files.md +2 -2
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +72 -59
- package/docs/operations/CI_COMPOSITES.md +2 -2
- package/docs/operations/COMPLETIONS.md +2 -2
- package/docs/operations/COVERAGE.md +5 -5
- package/docs/operations/HARD_AUDIT_2026.md +11 -11
- package/docs/operations/MAINTENANCE.md +3 -3
- package/docs/operations/MANIFEST.md +127 -0
- package/docs/operations/RELEASE_PIPELINE.md +130 -0
- package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
- package/docs/operations/ROADMAP_2026.md +6 -6
- package/docs/operations/ROADMAP_V0_2_503.md +134 -0
- package/docs/operations/TESTING.md +17 -0
- package/docs/operations/TRACEABILITY.md +6 -3
- package/docs/operations/VERSION_SYNC.md +4 -4
- package/docs/reference/POWERSHELL_PARITY.md +8 -7
- package/docs/schema/dot-env-v1.json +110 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
- package/docs/security/CI_PINNING.md +17 -9
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
- package/docs/security/FUZZING.md +114 -0
- package/docs/security/INSTALL_VERIFICATION.md +2 -2
- package/docs/security/POLICY_RELEASES.md +2 -2
- package/docs/security/SCORECARD.md +58 -3
- package/docs/security/SHELL_EXEMPTIONS.md +4 -4
- package/docs/security/VERIFY_RELEASE.md +201 -0
- package/install.sh +27 -5
- package/package.json +1 -1
- package/scripts/README.md +123 -0
- package/scripts/ci/check-copyright-headers.sh +4 -93
- package/scripts/ci/check-shell-preamble.sh +4 -103
- package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
- package/scripts/diagnostics/a2a-conformance.sh +4 -4
- package/scripts/diagnostics/alias-governance.sh +1 -1
- package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
- package/scripts/diagnostics/benchmark.sh +4 -4
- package/scripts/diagnostics/conflicts.sh +2 -2
- package/scripts/diagnostics/doctor-unified.sh +2 -2
- package/scripts/diagnostics/doctor.sh +10 -10
- package/scripts/diagnostics/drift-dashboard.sh +2 -2
- package/scripts/diagnostics/health.sh +4 -4
- package/scripts/diagnostics/history-analysis.sh +2 -2
- package/scripts/diagnostics/mcp-doctor.sh +10 -7
- package/scripts/diagnostics/perf.sh +4 -4
- package/scripts/diagnostics/scorecard.sh +4 -4
- package/scripts/diagnostics/security-score.sh +2 -2
- package/scripts/diagnostics/smoke-test.sh +2 -2
- package/scripts/diagnostics/snapshot.sh +2 -2
- package/scripts/diagnostics/verify.sh +4 -4
- package/scripts/diagnostics/version-locks.sh +2 -2
- package/scripts/diagnostics/workstation-attestation.sh +14 -14
- package/scripts/dot/commands/agent.sh +8 -0
- package/scripts/dot/commands/agents.sh +14 -4
- package/scripts/dot/commands/ai.sh +144 -25
- package/scripts/dot/commands/appearance.sh +2 -2
- package/scripts/dot/commands/core.sh +2 -2
- package/scripts/dot/commands/diagnostics.sh +5 -5
- package/scripts/dot/commands/env-emit.sh +202 -0
- package/scripts/dot/commands/fleet.sh +12 -11
- package/scripts/dot/commands/init.sh +4 -4
- package/scripts/dot/commands/lint.sh +9 -4
- package/scripts/dot/commands/manual.sh +3 -3
- package/scripts/dot/commands/meta.sh +12 -6
- package/scripts/dot/commands/patterns.sh +2 -2
- package/scripts/dot/commands/registry.sh +4 -4
- package/scripts/dot/commands/restore.sh +4 -4
- package/scripts/dot/commands/secrets.sh +4 -3
- package/scripts/dot/commands/security.sh +2 -2
- package/scripts/dot/commands/tools.sh +13 -3
- package/scripts/dot/powershell/Dot.psm1 +199 -0
- package/scripts/fonts/install-nerd-fonts.sh +2 -2
- package/scripts/git-hooks/pre-commit-audit.sh +2 -2
- package/scripts/git-hooks/pre-push +13 -0
- package/scripts/ops/ai-setup.sh +1 -1
- package/scripts/ops/bundle.sh +2 -2
- package/scripts/ops/chaos.sh +2 -2
- package/scripts/ops/chezmoi-apply.sh +4 -4
- package/scripts/ops/heal.sh +4 -4
- package/scripts/ops/post-apply-repair.sh +2 -2
- package/scripts/ops/prewarm.sh +2 -2
- package/scripts/ops/release.sh +4 -4
- package/scripts/ops/rollback.sh +4 -4
- package/scripts/ops/setup.sh +2 -2
- package/scripts/qa/check-version-consistency.sh +123 -0
- package/scripts/qa/coverage-baseline.sh +1 -1
- package/scripts/qa/docs-coverage.sh +2 -2
- package/scripts/qa/powershell-contract.ps1 +1 -1
- package/scripts/qa/scorecard-snapshot.sh +127 -0
- package/scripts/security/backup.sh +2 -2
- package/scripts/security/dns-doh.sh +4 -4
- package/scripts/security/encryption-check.sh +4 -4
- package/scripts/security/enforce-policies.sh +2 -2
- package/scripts/security/firewall.sh +4 -4
- package/scripts/security/lock-screen.sh +4 -4
- package/scripts/security/manage-secrets.sh +2 -2
- package/scripts/security/ssh-cert.sh +2 -2
- package/scripts/security/telemetry-kill.sh +4 -4
- package/scripts/security/usb-safety.sh +4 -4
- package/scripts/theme/extract-heic-frames.sh +114 -0
- package/scripts/theme/rebuild-themes.sh +8 -1
- package/scripts/theme/switch.sh +13 -6
- package/scripts/theme/wallpaper-sync.sh +297 -93
- package/scripts/tuning/linux.sh +2 -2
- package/scripts/tuning/macos.sh +2 -2
- package/scripts/version-sync.sh +55 -7
- package/dot_config/.module-manifest.json +0 -69
- package/dot_config/ai/identity.md +0 -23
- package/dot_config/ai/patterns/architect.md +0 -16
- package/dot_config/ai/patterns/hardener.md +0 -15
- package/dot_config/ai/patterns/refactor.md +0 -15
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
- package/dot_config/ansible/ansible.cfg +0 -11
- package/dot_config/atuin/config.toml.tmpl +0 -47
- package/dot_config/bat/config +0 -23
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -20
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json +0 -15
- package/dot_config/dotfiles/agent-card.json +0 -29
- package/dot_config/dotfiles/agent-profiles.json +0 -92
- package/dot_config/dotfiles/boot/README.md +0 -13
- package/dot_config/dotfiles/grub/README.md +0 -13
- package/dot_config/dotfiles/lock/README.md +0 -13
- package/dot_config/dotfiles/mcp-lock.json +0 -33
- package/dot_config/dotfiles/mcp-policy.json +0 -52
- package/dot_config/dotfiles/mcp-registry.json +0 -47
- package/dot_config/dotfiles/model-registry.json +0 -20
- package/dot_config/dotfiles/policy-bundles.json +0 -38
- package/dot_config/dotfiles/prompt-registry.json +0 -16
- package/dot_config/dotfiles/versions.env +0 -18
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/environment.d/50-ssh-agent.conf +0 -2
- package/dot_config/environment.d/90-wayland.conf +0 -19
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js.tmpl +0 -58
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
- package/dot_config/fish/completions/dot.fish.tmpl +0 -115
- package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
- package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
- package/dot_config/fish/conf.d/direnv.fish +0 -4
- package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
- package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
- package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
- package/dot_config/fish/conf.d/mise-activate.fish +0 -5
- package/dot_config/fish/config.fish.tmpl +0 -44
- package/dot_config/fish/fish_plugins +0 -1
- package/dot_config/fish/functions/_.fish +0 -3
- package/dot_config/fish/functions/_cached_eval.fish +0 -131
- package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
- package/dot_config/fish/functions/als.fish +0 -46
- package/dot_config/fish/functions/bg-upgrade.fish +0 -7
- package/dot_config/fish/functions/c.fish +0 -3
- package/dot_config/fish/functions/cat.fish +0 -9
- package/dot_config/fish/functions/d.fish +0 -7
- package/dot_config/fish/functions/dot.fish +0 -34
- package/dot_config/fish/functions/h.fish +0 -3
- package/dot_config/fish/functions/l.fish +0 -7
- package/dot_config/fish/functions/la.fish +0 -7
- package/dot_config/fish/functions/ll.fish +0 -7
- package/dot_config/fish/functions/log_error.fish +0 -13
- package/dot_config/fish/functions/log_info.fish +0 -13
- package/dot_config/fish/functions/lr.fish +0 -7
- package/dot_config/fish/functions/lra.fish +0 -7
- package/dot_config/fish/functions/ls.fish +0 -7
- package/dot_config/fish/functions/lt.fish +0 -7
- package/dot_config/fish/functions/lta.fish +0 -7
- package/dot_config/fish/functions/notify-run.fish +0 -11
- package/dot_config/fish/functions/q.fish +0 -3
- package/dot_config/fish/functions/silent-run.fish +0 -7
- package/dot_config/fish/functions/yy.fish +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
- package/dot_config/foot/foot.ini.tmpl +0 -33
- package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
- package/dot_config/fzf/fzf.zsh +0 -48
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -165
- package/dot_config/git/allowed_signers.tmpl +0 -18
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/commit-template +0 -10
- package/dot_config/git/hooks/executable_commit-msg +0 -146
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf +0 -11
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py +0 -19
- package/dot_config/just/justfile +0 -122
- package/dot_config/k9s/config.yaml +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/kanshi/config.tmpl +0 -22
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -53
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -35
- package/dot_config/mako/config +0 -47
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/micro/settings.json +0 -3
- package/dot_config/mimeapps.list +0 -77
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -99
- package/dot_config/mongosh/mongoshrc.js +0 -68
- package/dot_config/mpv/input.conf +0 -47
- package/dot_config/mpv/mpv.conf +0 -47
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/niri/config.kdl.tmpl +0 -327
- package/dot_config/nushell/aliases.nu +0 -18
- package/dot_config/nushell/cached_eval.nu +0 -80
- package/dot_config/nushell/completions.nu.tmpl +0 -52
- package/dot_config/nushell/config.nu.tmpl +0 -86
- package/dot_config/nushell/env.nu.tmpl +0 -102
- package/dot_config/nushell/functions.nu.tmpl +0 -17
- package/dot_config/nvim/init.lua +0 -18
- package/dot_config/nvim/lazy-lock.json +0 -58
- package/dot_config/nvim/lua/config/autocmds.lua +0 -107
- package/dot_config/nvim/lua/config/keymaps.lua +0 -92
- package/dot_config/nvim/lua/config/lazy.lua +0 -44
- package/dot_config/nvim/lua/config/options.lua +0 -49
- package/dot_config/nvim/lua/plugins/ai.lua +0 -75
- package/dot_config/nvim/lua/plugins/coding.lua +0 -216
- package/dot_config/nvim/lua/plugins/completion.lua +0 -60
- package/dot_config/nvim/lua/plugins/dap.lua +0 -412
- package/dot_config/nvim/lua/plugins/editor.lua +0 -55
- package/dot_config/nvim/lua/plugins/git.lua +0 -10
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
- package/dot_config/nvim/lua/plugins/rust.lua +0 -34
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
- package/dot_config/nvim/lua/plugins/ui.lua +0 -509
- package/dot_config/paru/paru.conf +0 -10
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
- package/dot_config/pueue/pueue.yml +0 -34
- package/dot_config/pypoetry/config.toml +0 -6
- package/dot_config/pyrightconfig.json +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/ripgrep/ripgreprc +0 -21
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -141
- package/dot_config/shell/05-core-safety.sh +0 -48
- package/dot_config/shell/10-secrets.sh +0 -41
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
- package/dot_config/shell/40-ls-colors.sh +0 -49
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
- package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -127
- package/dot_config/shell/README.md +0 -284
- package/dot_config/shell/als_data.txt.tmpl +0 -65
- package/dot_config/shell/custom/auto_ls.zsh +0 -20
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -202
- package/dot_config/swaylock/config +0 -43
- package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
- package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
- package/dot_config/systemd/user/pueued.service +0 -12
- package/dot_config/systemd/user/ssh-agent.service +0 -12
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -223
- package/dot_config/topgrade.toml.tmpl +0 -54
- package/dot_config/user-dirs.dirs +0 -10
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -82
- package/dot_config/waybar/config.jsonc.tmpl +0 -90
- package/dot_config/waybar/style.css.tmpl +0 -211
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
- package/dot_config/yarn/yarnrc.yml +0 -36
- package/dot_config/yazi/keymap.toml +0 -67
- package/dot_config/yazi/theme.toml +0 -102
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zathura/zathurarc +0 -52
- package/dot_config/zellij/config.kdl.tmpl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -7
- package/dot_config/zsh/dot_zshenv +0 -5
- package/dot_config/zsh/dot_zshrc.tmpl +0 -688
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
- package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
- package/dot_local/bin/executable_ai-update +0 -195
- package/dot_local/bin/executable_ai_core +0 -152
- package/dot_local/bin/executable_antigravity +0 -11
- package/dot_local/bin/executable_b64 +0 -84
- package/dot_local/bin/executable_bm +0 -79
- package/dot_local/bin/executable_cb +0 -39
- package/dot_local/bin/executable_dot +0 -636
- package/dot_local/bin/executable_dot-ai +0 -36
- package/dot_local/bin/executable_dot-bootstrap +0 -76
- package/dot_local/bin/executable_dot-launch-or-focus +0 -52
- package/dot_local/bin/executable_dot-load-benchmark +0 -31
- package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
- package/dot_local/bin/executable_dot-theme-sync +0 -952
- package/dot_local/bin/executable_dot_completion +0 -57
- package/dot_local/bin/executable_dtags +0 -28
- package/dot_local/bin/executable_epoch +0 -67
- package/dot_local/bin/executable_extract +0 -41
- package/dot_local/bin/executable_gbd +0 -52
- package/dot_local/bin/executable_gd +0 -42
- package/dot_local/bin/executable_git-ai-commit +0 -175
- package/dot_local/bin/executable_git-ai-diff +0 -169
- package/dot_local/bin/executable_gl +0 -101
- package/dot_local/bin/executable_hash +0 -161
- package/dot_local/bin/executable_hashsum +0 -160
- package/dot_local/bin/executable_hex +0 -115
- package/dot_local/bin/executable_jsonv +0 -78
- package/dot_local/bin/executable_jwt +0 -94
- package/dot_local/bin/executable_kill-port +0 -75
- package/dot_local/bin/executable_lorem +0 -118
- package/dot_local/bin/executable_mkscript +0 -35
- package/dot_local/bin/executable_monitor +0 -56
- package/dot_local/bin/executable_myip +0 -51
- package/dot_local/bin/executable_notify +0 -24
- package/dot_local/bin/executable_open +0 -38
- package/dot_local/bin/executable_pw +0 -27
- package/dot_local/bin/executable_rec-start +0 -46
- package/dot_local/bin/executable_rec-stop +0 -35
- package/dot_local/bin/executable_regex +0 -132
- package/dot_local/bin/executable_start-niri +0 -8
- package/dot_local/bin/executable_tmux-sessionizer +0 -314
- package/dot_local/bin/executable_tour +0 -177
- package/dot_local/bin/executable_up +0 -23
- package/dot_local/bin/executable_update +0 -142
- package/dot_local/bin/executable_uuid +0 -87
- package/dot_local/bin/executable_win +0 -32
- package/dot_local/bin/executable_yamlv +0 -57
- package/dot_local/share/bash-completion/completions/dot +0 -72
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +0 -149
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +0 -287
- package/scripts/ci/check-dangerous-chmod.sh +0 -19
- package/scripts/ci/check-deps-dev.sh +0 -236
- package/scripts/ci/check-insecure-tls.sh +0 -61
- package/scripts/ci/check-regression-traceability.sh +0 -67
- package/scripts/ci/dot-cli-startup-bench.sh +0 -126
- package/scripts/ci/install-chezmoi-verified.sh +0 -67
- package/scripts/ci/lint-reusable-pins.sh +0 -78
- package/scripts/ci/run-coverage.sh +0 -451
- package/scripts/ci/validate-chezmoidata.sh +0 -25
- package/scripts/ci/validate-ci-config.sh +0 -224
- package/scripts/ci/windows-smoke-test.ps1 +0 -136
- package/scripts/docs/build-manual.sh +0 -883
- package/scripts/docs/check-manual.sh +0 -213
- package/scripts/dot/lib/bento.sh +0 -50
- package/scripts/dot/lib/log.sh +0 -200
- package/scripts/dot/lib/platform.sh +0 -112
- package/scripts/dot/lib/ui.sh +0 -650
- package/scripts/dot/lib/utils.sh +0 -377
- package/scripts/maintenance/check-updates.sh +0 -131
- 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
|