@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,57 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env zsh
|
|
2
|
-
# shellcheck shell=bash disable=SC2034
|
|
3
|
-
#compdef dot
|
|
4
|
-
|
|
5
|
-
# Zsh completion for the dot CLI
|
|
6
|
-
# Source this file or place in a directory in $fpath
|
|
7
|
-
|
|
8
|
-
_dot() {
|
|
9
|
-
local -a commands
|
|
10
|
-
commands=(
|
|
11
|
-
'apply:Apply dotfiles (chezmoi apply)'
|
|
12
|
-
'sync:Apply dotfiles (alias of apply)'
|
|
13
|
-
'update:Pull latest changes and apply'
|
|
14
|
-
'add:Add a file to chezmoi source'
|
|
15
|
-
'diff:Show chezmoi diff with exclusions'
|
|
16
|
-
'status:Show configuration drift'
|
|
17
|
-
'remove:Safely remove a managed file'
|
|
18
|
-
'cd:Print source directory path'
|
|
19
|
-
'drift:Drift dashboard (detailed chezmoi status)'
|
|
20
|
-
'history:Shell history analysis'
|
|
21
|
-
'doctor:Check system health and configuration'
|
|
22
|
-
'heal:Auto-repair common dotfiles issues'
|
|
23
|
-
'health:Run comprehensive health check'
|
|
24
|
-
'rollback:Rollback dotfiles to a previous state'
|
|
25
|
-
'keys:Show keybindings catalog'
|
|
26
|
-
'tools:Show or install nix packages'
|
|
27
|
-
'sandbox:Launch a safe sandbox preview'
|
|
28
|
-
'benchmark:Run shell startup benchmark'
|
|
29
|
-
'tune:Apply OS tuning (opt-in)'
|
|
30
|
-
'secrets:Edit encrypted secrets (age)'
|
|
31
|
-
'secrets-init:Initialize age key for secrets'
|
|
32
|
-
'secrets-create:Create an encrypted secrets file'
|
|
33
|
-
'ssh-key:Encrypt an SSH key locally with age'
|
|
34
|
-
'firewall:Apply firewall hardening (opt-in)'
|
|
35
|
-
'telemetry:Disable OS telemetry (opt-in)'
|
|
36
|
-
'dns-doh:Enable DNS-over-HTTPS (opt-in)'
|
|
37
|
-
'encrypt-check:Check disk encryption status'
|
|
38
|
-
'backup:Create a compressed backup of your home'
|
|
39
|
-
'lock-screen:Enforce lock screen idle settings'
|
|
40
|
-
'usb-safety:Disable automount for removable media'
|
|
41
|
-
'fonts:Install Nerd Fonts'
|
|
42
|
-
'wallpaper:Apply a wallpaper from your library'
|
|
43
|
-
'theme:Switch terminal theme (dark/light)'
|
|
44
|
-
'packages:List installed packages and package managers'
|
|
45
|
-
'upgrade:Update flake, plugins, and dotfiles'
|
|
46
|
-
'edit:Open chezmoi source in editor'
|
|
47
|
-
'docs:Show repo README'
|
|
48
|
-
'new:Create a new project from a template'
|
|
49
|
-
'log-rotate:Rotate ~/.local/share/dotfiles.log'
|
|
50
|
-
'learn:Start the interactive tour'
|
|
51
|
-
'--version:Show version information'
|
|
52
|
-
'help:Show this help message'
|
|
53
|
-
)
|
|
54
|
-
_describe 'command' commands
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
_dot "$@"
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
## dtags — List sorted tags for a Docker Hub image.
|
|
4
|
-
##
|
|
5
|
-
## # Usage
|
|
6
|
-
## dtags python
|
|
7
|
-
## dtags node
|
|
8
|
-
## dtags ubuntu
|
|
9
|
-
|
|
10
|
-
set -euo pipefail
|
|
11
|
-
|
|
12
|
-
for cmd in curl jq; do
|
|
13
|
-
if ! command -v "$cmd" &>/dev/null; then
|
|
14
|
-
echo "dtags requires $cmd" >&2
|
|
15
|
-
exit 1
|
|
16
|
-
fi
|
|
17
|
-
done
|
|
18
|
-
|
|
19
|
-
image="${1:-}"
|
|
20
|
-
|
|
21
|
-
if [[ -z "${image}" ]]; then
|
|
22
|
-
echo "Usage: dtags <image>" >&2
|
|
23
|
-
exit 1
|
|
24
|
-
fi
|
|
25
|
-
|
|
26
|
-
curl --silent \
|
|
27
|
-
"https://registry.hub.docker.com/v2/repositories/library/${image}/tags?page_size=1000" |
|
|
28
|
-
jq -r ".results[].name" | sort -V 2>/dev/null || sort -t. -k1,1n -k2,2n -k3,3n
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC2034
|
|
3
|
-
## Epoch Converter — Convert between Unix timestamps and human-readable dates.
|
|
4
|
-
##
|
|
5
|
-
## Bidirectional conversion between epoch timestamps and date strings.
|
|
6
|
-
## Supports both seconds and milliseconds precision.
|
|
7
|
-
##
|
|
8
|
-
## # Requirements
|
|
9
|
-
## - date: Core utility (coreutils or macOS built-in)
|
|
10
|
-
##
|
|
11
|
-
## # Usage
|
|
12
|
-
## epoch # Show current epoch time
|
|
13
|
-
## epoch -m # Show current epoch in milliseconds
|
|
14
|
-
## epoch 1234567890 # Convert epoch to date
|
|
15
|
-
## epoch -r "2024-01-15" # Convert date string to epoch
|
|
16
|
-
##
|
|
17
|
-
## # Platform Notes
|
|
18
|
-
## - Linux: Uses date -d for parsing
|
|
19
|
-
## - macOS: Uses date -j -f for parsing
|
|
20
|
-
|
|
21
|
-
set -euo pipefail
|
|
22
|
-
|
|
23
|
-
# --- UI Theme ---
|
|
24
|
-
PURPLE='\033[38;5;141m'
|
|
25
|
-
CYAN='\033[38;5;86m'
|
|
26
|
-
GRAY='\033[38;5;244m'
|
|
27
|
-
NC='\033[0m'
|
|
28
|
-
|
|
29
|
-
REVERSE=false
|
|
30
|
-
MILLIS=false
|
|
31
|
-
|
|
32
|
-
while [[ $# -gt 0 ]]; do
|
|
33
|
-
case "$1" in
|
|
34
|
-
-r | --reverse)
|
|
35
|
-
REVERSE=true
|
|
36
|
-
shift
|
|
37
|
-
;;
|
|
38
|
-
-m | --millis)
|
|
39
|
-
MILLIS=true
|
|
40
|
-
shift
|
|
41
|
-
;;
|
|
42
|
-
-h | --help)
|
|
43
|
-
printf '%b\n' "${PURPLE}epoch${NC} ${GRAY}convert to/from unix time${NC}"
|
|
44
|
-
echo "Usage: epoch [options] [value]"
|
|
45
|
-
echo " -r, --reverse Convert date string to epoch"
|
|
46
|
-
echo " -m, --millis Use milliseconds"
|
|
47
|
-
exit 0
|
|
48
|
-
;;
|
|
49
|
-
*) break ;;
|
|
50
|
-
esac
|
|
51
|
-
done
|
|
52
|
-
|
|
53
|
-
if $REVERSE; then
|
|
54
|
-
STR="${1:-}"
|
|
55
|
-
[[ -z "$STR" ]] && exit 1
|
|
56
|
-
date -d "$STR" +%s 2>/dev/null || date -j -f "%Y-%m-%d" "$STR" +%s 2>/dev/null
|
|
57
|
-
elif [[ $# -gt 0 ]]; then
|
|
58
|
-
EPOCH="$1"
|
|
59
|
-
[[ ${#EPOCH} -gt 10 ]] && EPOCH=$((EPOCH / 1000))
|
|
60
|
-
date -d "@$EPOCH" 2>/dev/null || date -r "$EPOCH" 2>/dev/null
|
|
61
|
-
else
|
|
62
|
-
if $MILLIS; then
|
|
63
|
-
date +%s%3N
|
|
64
|
-
else
|
|
65
|
-
date +%s
|
|
66
|
-
fi
|
|
67
|
-
fi
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
# Universal archive extractor with UI (gum) and self-healing (nix) fallback.
|
|
4
|
-
|
|
5
|
-
set -eu
|
|
6
|
-
|
|
7
|
-
# R5: validate input
|
|
8
|
-
if [ -z "${1:-}" ]; then
|
|
9
|
-
echo "Usage: extract <archive>" >&2
|
|
10
|
-
exit 1
|
|
11
|
-
fi
|
|
12
|
-
|
|
13
|
-
# If tool is missing, use Nix to run it.
|
|
14
|
-
run_if_not_found() {
|
|
15
|
-
local cmd="$1"
|
|
16
|
-
local pkg="$2"
|
|
17
|
-
shift 2
|
|
18
|
-
if command -v "$cmd" >/dev/null 2>&1; then
|
|
19
|
-
"$cmd" "$@"
|
|
20
|
-
elif command -v nix >/dev/null 2>&1; then
|
|
21
|
-
echo " Tool '$cmd' missing. Using Nix fallback..." >&2
|
|
22
|
-
nix shell "nixpkgs#$pkg" -c "$cmd" "$@"
|
|
23
|
-
else
|
|
24
|
-
echo "Error: Tool '$cmd' not found and Nix not available." >&2
|
|
25
|
-
exit 1
|
|
26
|
-
fi
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
case "$1" in
|
|
30
|
-
*.tar.bz2) run_if_not_found tar gnutar xvjf "$1" ;;
|
|
31
|
-
*.tar.gz) run_if_not_found tar gnutar xvzf "$1" ;;
|
|
32
|
-
*.zip) run_if_not_found unzip unzip "$1" ;;
|
|
33
|
-
*.rar) run_if_not_found unrar unrar x "$1" ;;
|
|
34
|
-
*.7z) run_if_not_found 7z p7zip a "$1" ;;
|
|
35
|
-
*.tar.xz) run_if_not_found tar gnutar xvf "$1" ;;
|
|
36
|
-
*.tar.zst) run_if_not_found tar gnutar xvf "$1" ;;
|
|
37
|
-
*)
|
|
38
|
-
echo "'$1' cannot be extracted via extract" >&2
|
|
39
|
-
exit 1
|
|
40
|
-
;;
|
|
41
|
-
esac
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
## gbd — Bulk delete local branches except main/master.
|
|
4
|
-
##
|
|
5
|
-
## # Usage
|
|
6
|
-
## gbd # Delete all except main/master
|
|
7
|
-
## gbd --dry-run # Show what would be deleted
|
|
8
|
-
## gbd "(main|master|develop)" # Custom whitelist pattern
|
|
9
|
-
## gbd "(main|dev)" --dry-run # Custom whitelist + dry run
|
|
10
|
-
|
|
11
|
-
set -euo pipefail
|
|
12
|
-
|
|
13
|
-
if ! command -v git &>/dev/null; then
|
|
14
|
-
echo "gbd requires git" >&2
|
|
15
|
-
exit 1
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
# R5: validate git repository
|
|
19
|
-
if ! git rev-parse --is-inside-work-tree &>/dev/null; then
|
|
20
|
-
echo "gbd: not a git repository" >&2
|
|
21
|
-
exit 1
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
default_whitelist="(main|master)"
|
|
25
|
-
skip_branches="${1:-"${default_whitelist}"}"
|
|
26
|
-
dry_run="${2:-}"
|
|
27
|
-
|
|
28
|
-
# Handle --dry-run as first arg
|
|
29
|
-
if [[ "${skip_branches}" == "--dry-run" ]]; then
|
|
30
|
-
skip_branches="${default_whitelist}"
|
|
31
|
-
dry_run="--dry-run"
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
|
-
# R5: validate regex pattern before use
|
|
35
|
-
if ! echo "" | grep -wEv "${skip_branches}" &>/dev/null; then
|
|
36
|
-
echo "Invalid whitelist pattern: ${skip_branches}" >&2
|
|
37
|
-
exit 1
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
branches="$(git branch | grep -wEv "${skip_branches}" | grep -wv "$(git branch --show-current)" || true)"
|
|
41
|
-
|
|
42
|
-
if [[ -z "${branches}" ]]; then
|
|
43
|
-
echo "No branches to delete."
|
|
44
|
-
exit 0
|
|
45
|
-
fi
|
|
46
|
-
|
|
47
|
-
if [[ -n "${dry_run}" ]]; then
|
|
48
|
-
echo "Would delete:"
|
|
49
|
-
echo "${branches}" | sed 's/^/ /'
|
|
50
|
-
else
|
|
51
|
-
echo "${branches}" | xargs git branch -D
|
|
52
|
-
fi
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
## gd — Interactive git diff browser with fzf + delta.
|
|
4
|
-
##
|
|
5
|
-
## # Usage
|
|
6
|
-
## gd # Browse unstaged diffs
|
|
7
|
-
## gd --staged # Browse staged diffs
|
|
8
|
-
## gd --side # Side-by-side delta mode
|
|
9
|
-
## gd [git diff flags] # Pass any git diff flags through
|
|
10
|
-
|
|
11
|
-
set -euo pipefail
|
|
12
|
-
|
|
13
|
-
for cmd in fzf delta git; do
|
|
14
|
-
if ! command -v "$cmd" &>/dev/null; then
|
|
15
|
-
echo "gd requires $cmd" >&2
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
done
|
|
19
|
-
|
|
20
|
-
# R5: validate git repository
|
|
21
|
-
if ! git rev-parse --is-inside-work-tree &>/dev/null; then
|
|
22
|
-
echo "gd: not a git repository" >&2
|
|
23
|
-
exit 1
|
|
24
|
-
fi
|
|
25
|
-
|
|
26
|
-
GIT_ARGS=()
|
|
27
|
-
|
|
28
|
-
for arg in "$@"; do
|
|
29
|
-
if [[ "${arg}" == "--side" ]]; then
|
|
30
|
-
export DELTA_FEATURES="${DELTA_FEATURES:-} side-by-side"
|
|
31
|
-
else
|
|
32
|
-
GIT_ARGS+=("${arg}")
|
|
33
|
-
fi
|
|
34
|
-
done
|
|
35
|
-
|
|
36
|
-
GIT_ARGS+=("--color=always")
|
|
37
|
-
|
|
38
|
-
# shellcheck disable=SC2086,SC2068
|
|
39
|
-
git diff ${GIT_ARGS[@]:-} --name-only |
|
|
40
|
-
fzf \
|
|
41
|
-
--preview "git diff ${GIT_ARGS[*]:-} -- {-1} | delta --width=\${FZF_PREVIEW_COLUMNS}" \
|
|
42
|
-
--preview-window="right,75%" || true
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
## Git AI Commit — Generate commit messages using AI.
|
|
3
|
-
##
|
|
4
|
-
## Analyzes staged changes and generates conventional commit messages
|
|
5
|
-
## using various AI providers. Supports interactive editing.
|
|
6
|
-
##
|
|
7
|
-
## # Requirements
|
|
8
|
-
## - git: Version control
|
|
9
|
-
## - One of: claude, gemini, sgpt, aider, ollama
|
|
10
|
-
##
|
|
11
|
-
## # Usage
|
|
12
|
-
## git ai-commit # Auto-detect provider
|
|
13
|
-
## git ai-commit --provider claude # Use Claude
|
|
14
|
-
## git ai-commit --edit # Edit before committing
|
|
15
|
-
## git ai-commit -p ollama -e # Ollama with edit
|
|
16
|
-
##
|
|
17
|
-
## # Configuration
|
|
18
|
-
## Set GIT_AI_PROVIDER to set default provider
|
|
19
|
-
## Set OLLAMA_MODEL for custom Ollama model (default: llama3.2)
|
|
20
|
-
##
|
|
21
|
-
## # Platform Notes
|
|
22
|
-
## - All platforms: Requires git and an AI CLI tool
|
|
23
|
-
|
|
24
|
-
set -euo pipefail
|
|
25
|
-
|
|
26
|
-
# Colors
|
|
27
|
-
RED='\033[0;31m'
|
|
28
|
-
GREEN='\033[0;32m'
|
|
29
|
-
YELLOW='\033[1;33m'
|
|
30
|
-
BLUE='\033[0;34m'
|
|
31
|
-
NC='\033[0m'
|
|
32
|
-
|
|
33
|
-
EDIT_MODE=false
|
|
34
|
-
PROVIDER=""
|
|
35
|
-
|
|
36
|
-
# Parse arguments
|
|
37
|
-
while [[ $# -gt 0 ]]; do
|
|
38
|
-
case $1 in
|
|
39
|
-
--provider | -p)
|
|
40
|
-
PROVIDER="$2"
|
|
41
|
-
shift 2
|
|
42
|
-
;;
|
|
43
|
-
--edit | -e)
|
|
44
|
-
EDIT_MODE=true
|
|
45
|
-
shift
|
|
46
|
-
;;
|
|
47
|
-
--help | -h)
|
|
48
|
-
echo "Usage: git ai-commit [--provider <provider>] [--edit]"
|
|
49
|
-
echo ""
|
|
50
|
-
echo "Options:"
|
|
51
|
-
echo " --provider, -p AI provider: claude, gemini, sgpt, ollama, aider"
|
|
52
|
-
echo " --edit, -e Open editor to modify generated message"
|
|
53
|
-
echo ""
|
|
54
|
-
echo "Environment:"
|
|
55
|
-
echo " GIT_AI_PROVIDER Default AI provider"
|
|
56
|
-
exit 0
|
|
57
|
-
;;
|
|
58
|
-
*)
|
|
59
|
-
printf '%b\n' "${RED}Unknown option: $1${NC}"
|
|
60
|
-
exit 1
|
|
61
|
-
;;
|
|
62
|
-
esac
|
|
63
|
-
done
|
|
64
|
-
|
|
65
|
-
# Auto-detect provider if not specified
|
|
66
|
-
detect_provider() {
|
|
67
|
-
if [[ -n "${GIT_AI_PROVIDER:-}" ]]; then
|
|
68
|
-
echo "$GIT_AI_PROVIDER"
|
|
69
|
-
elif command -v claude >/dev/null 2>&1; then
|
|
70
|
-
echo "claude"
|
|
71
|
-
elif command -v aider >/dev/null 2>&1; then
|
|
72
|
-
echo "aider"
|
|
73
|
-
elif command -v gemini >/dev/null 2>&1; then
|
|
74
|
-
echo "gemini"
|
|
75
|
-
elif command -v sgpt >/dev/null 2>&1; then
|
|
76
|
-
echo "sgpt"
|
|
77
|
-
elif command -v ollama >/dev/null 2>&1; then
|
|
78
|
-
echo "ollama"
|
|
79
|
-
else
|
|
80
|
-
echo ""
|
|
81
|
-
fi
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
PROVIDER="${PROVIDER:-$(detect_provider)}"
|
|
85
|
-
|
|
86
|
-
if [[ -z "$PROVIDER" ]]; then
|
|
87
|
-
printf '%b\n' "${RED}Error: No AI provider found. Install claude, gemini, sgpt, aider, or ollama.${NC}"
|
|
88
|
-
exit 1
|
|
89
|
-
fi
|
|
90
|
-
|
|
91
|
-
# Check if there are staged changes
|
|
92
|
-
if ! git diff --cached --quiet; then
|
|
93
|
-
DIFF=$(git diff --cached --stat)
|
|
94
|
-
DIFF_CONTENT=$(git diff --cached)
|
|
95
|
-
else
|
|
96
|
-
printf '%b\n' "${YELLOW}No staged changes. Stage changes with 'git add' first.${NC}"
|
|
97
|
-
exit 1
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
printf '%b\n' "${BLUE}Generating commit message using ${PROVIDER}...${NC}"
|
|
101
|
-
|
|
102
|
-
# Prompt for commit message generation
|
|
103
|
-
PROMPT="Generate a concise, conventional commit message for the following git diff.
|
|
104
|
-
|
|
105
|
-
Rules:
|
|
106
|
-
1. Use conventional commits format: type(scope): description
|
|
107
|
-
2. Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore
|
|
108
|
-
3. Keep the first line under 72 characters
|
|
109
|
-
4. Add a blank line and bullet points for details if needed
|
|
110
|
-
5. Focus on WHAT changed and WHY, not HOW
|
|
111
|
-
|
|
112
|
-
Diff summary:
|
|
113
|
-
$DIFF
|
|
114
|
-
|
|
115
|
-
Diff content:
|
|
116
|
-
$DIFF_CONTENT
|
|
117
|
-
|
|
118
|
-
Return ONLY the commit message, no explanations or markdown formatting."
|
|
119
|
-
|
|
120
|
-
# Generate message based on provider
|
|
121
|
-
case "$PROVIDER" in
|
|
122
|
-
claude)
|
|
123
|
-
MESSAGE=$(echo "$PROMPT" | claude --print 2>/dev/null || echo "")
|
|
124
|
-
;;
|
|
125
|
-
aider)
|
|
126
|
-
MESSAGE=$(echo "$PROMPT" | aider --message "$PROMPT" --no-git --yes 2>/dev/null | tail -20 || echo "")
|
|
127
|
-
;;
|
|
128
|
-
gemini)
|
|
129
|
-
MESSAGE=$(echo "$PROMPT" | gemini 2>/dev/null || echo "")
|
|
130
|
-
;;
|
|
131
|
-
sgpt)
|
|
132
|
-
MESSAGE=$(sgpt "$PROMPT" 2>/dev/null || echo "")
|
|
133
|
-
;;
|
|
134
|
-
ollama)
|
|
135
|
-
MODEL="${OLLAMA_MODEL:-llama3.2}"
|
|
136
|
-
MESSAGE=$(echo "$PROMPT" | ollama run "$MODEL" 2>/dev/null || echo "")
|
|
137
|
-
;;
|
|
138
|
-
*)
|
|
139
|
-
printf '%b\n' "${RED}Unknown provider: $PROVIDER${NC}"
|
|
140
|
-
exit 1
|
|
141
|
-
;;
|
|
142
|
-
esac
|
|
143
|
-
|
|
144
|
-
# Clean up the message
|
|
145
|
-
MESSAGE=$(echo "$MESSAGE" | sed 's/^```[a-z]*//g' | sed 's/```$//g' | sed '/^$/d' | head -20)
|
|
146
|
-
|
|
147
|
-
if [[ -z "$MESSAGE" ]]; then
|
|
148
|
-
printf '%b\n' "${RED}Failed to generate commit message.${NC}"
|
|
149
|
-
exit 1
|
|
150
|
-
fi
|
|
151
|
-
|
|
152
|
-
printf '%b\n' "${GREEN}Generated commit message:${NC}"
|
|
153
|
-
echo "---"
|
|
154
|
-
echo "$MESSAGE"
|
|
155
|
-
echo "---"
|
|
156
|
-
|
|
157
|
-
if [[ "$EDIT_MODE" == "true" ]]; then
|
|
158
|
-
# Create temp file for editing
|
|
159
|
-
TMPFILE=$(umask 077 && mktemp)
|
|
160
|
-
echo "$MESSAGE" >"$TMPFILE"
|
|
161
|
-
${EDITOR:-vim} "$TMPFILE"
|
|
162
|
-
MESSAGE=$(cat "$TMPFILE")
|
|
163
|
-
rm -f "$TMPFILE"
|
|
164
|
-
fi
|
|
165
|
-
|
|
166
|
-
# Confirm and commit
|
|
167
|
-
echo ""
|
|
168
|
-
read -p "Commit with this message? [Y/n] " -n 1 -r
|
|
169
|
-
echo
|
|
170
|
-
if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
|
|
171
|
-
git commit -m "$MESSAGE"
|
|
172
|
-
printf '%b\n' "${GREEN}Committed successfully!${NC}"
|
|
173
|
-
else
|
|
174
|
-
printf '%b\n' "${YELLOW}Commit cancelled.${NC}"
|
|
175
|
-
fi
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
## Git AI Diff — AI-powered diff analysis and code review.
|
|
3
|
-
##
|
|
4
|
-
## Analyzes git diffs using AI to provide summaries, identify issues,
|
|
5
|
-
## and suggest improvements. Supports multiple AI providers.
|
|
6
|
-
##
|
|
7
|
-
## # Requirements
|
|
8
|
-
## - git: Version control
|
|
9
|
-
## - One of: claude, gemini, sgpt, aider, ollama
|
|
10
|
-
##
|
|
11
|
-
## # Usage
|
|
12
|
-
## git ai-diff # Review working changes vs HEAD
|
|
13
|
-
## git ai-diff HEAD~3 # Compare against 3 commits ago
|
|
14
|
-
## git ai-diff --staged # Review staged changes only
|
|
15
|
-
## git ai-diff --provider claude # Use specific provider
|
|
16
|
-
##
|
|
17
|
-
## # Configuration
|
|
18
|
-
## Set GIT_AI_PROVIDER to set default provider
|
|
19
|
-
## Set OLLAMA_MODEL for custom Ollama model (default: llama3.2)
|
|
20
|
-
##
|
|
21
|
-
## # Platform Notes
|
|
22
|
-
## - All platforms: Requires git and an AI CLI tool
|
|
23
|
-
|
|
24
|
-
set -euo pipefail
|
|
25
|
-
|
|
26
|
-
# Colors
|
|
27
|
-
RED='\033[0;31m'
|
|
28
|
-
GREEN='\033[0;32m'
|
|
29
|
-
YELLOW='\033[1;33m'
|
|
30
|
-
BLUE='\033[0;34m'
|
|
31
|
-
CYAN='\033[0;36m'
|
|
32
|
-
NC='\033[0m'
|
|
33
|
-
|
|
34
|
-
PROVIDER=""
|
|
35
|
-
TARGET="HEAD"
|
|
36
|
-
STAGED_ONLY=false
|
|
37
|
-
|
|
38
|
-
# Parse arguments
|
|
39
|
-
while [[ $# -gt 0 ]]; do
|
|
40
|
-
case $1 in
|
|
41
|
-
--provider | -p)
|
|
42
|
-
PROVIDER="$2"
|
|
43
|
-
shift 2
|
|
44
|
-
;;
|
|
45
|
-
--staged | -s)
|
|
46
|
-
STAGED_ONLY=true
|
|
47
|
-
shift
|
|
48
|
-
;;
|
|
49
|
-
--help | -h)
|
|
50
|
-
echo "Usage: git ai-diff [<commit>] [--provider <provider>] [--staged]"
|
|
51
|
-
echo ""
|
|
52
|
-
echo "Options:"
|
|
53
|
-
echo " <commit> Compare against this commit (default: HEAD)"
|
|
54
|
-
echo " --provider, -p AI provider: claude, gemini, sgpt, ollama, aider"
|
|
55
|
-
echo " --staged, -s Review only staged changes"
|
|
56
|
-
echo ""
|
|
57
|
-
echo "Environment:"
|
|
58
|
-
echo " GIT_AI_PROVIDER Default AI provider"
|
|
59
|
-
exit 0
|
|
60
|
-
;;
|
|
61
|
-
-*)
|
|
62
|
-
printf '%b\n' "${RED}Unknown option: $1${NC}"
|
|
63
|
-
exit 1
|
|
64
|
-
;;
|
|
65
|
-
*)
|
|
66
|
-
TARGET="$1"
|
|
67
|
-
shift
|
|
68
|
-
;;
|
|
69
|
-
esac
|
|
70
|
-
done
|
|
71
|
-
|
|
72
|
-
# Auto-detect provider if not specified
|
|
73
|
-
detect_provider() {
|
|
74
|
-
if [[ -n "${GIT_AI_PROVIDER:-}" ]]; then
|
|
75
|
-
echo "$GIT_AI_PROVIDER"
|
|
76
|
-
elif command -v claude >/dev/null 2>&1; then
|
|
77
|
-
echo "claude"
|
|
78
|
-
elif command -v aider >/dev/null 2>&1; then
|
|
79
|
-
echo "aider"
|
|
80
|
-
elif command -v gemini >/dev/null 2>&1; then
|
|
81
|
-
echo "gemini"
|
|
82
|
-
elif command -v sgpt >/dev/null 2>&1; then
|
|
83
|
-
echo "sgpt"
|
|
84
|
-
elif command -v ollama >/dev/null 2>&1; then
|
|
85
|
-
echo "ollama"
|
|
86
|
-
else
|
|
87
|
-
echo ""
|
|
88
|
-
fi
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
PROVIDER="${PROVIDER:-$(detect_provider)}"
|
|
92
|
-
|
|
93
|
-
if [[ -z "$PROVIDER" ]]; then
|
|
94
|
-
printf '%b\n' "${RED}Error: No AI provider found. Install claude, gemini, sgpt, aider, or ollama.${NC}"
|
|
95
|
-
exit 1
|
|
96
|
-
fi
|
|
97
|
-
|
|
98
|
-
# Get the diff
|
|
99
|
-
if [[ "$STAGED_ONLY" == "true" ]]; then
|
|
100
|
-
DIFF=$(git diff --cached)
|
|
101
|
-
DIFF_STAT=$(git diff --cached --stat)
|
|
102
|
-
CONTEXT="staged changes"
|
|
103
|
-
else
|
|
104
|
-
DIFF=$(git diff "$TARGET")
|
|
105
|
-
DIFF_STAT=$(git diff "$TARGET" --stat)
|
|
106
|
-
CONTEXT="changes compared to $TARGET"
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
if [[ -z "$DIFF" ]]; then
|
|
110
|
-
printf '%b\n' "${YELLOW}No changes to review.${NC}"
|
|
111
|
-
exit 0
|
|
112
|
-
fi
|
|
113
|
-
|
|
114
|
-
printf '%b\n' "${BLUE}Analyzing ${CONTEXT} using ${PROVIDER}...${NC}"
|
|
115
|
-
echo ""
|
|
116
|
-
printf '%b\n' "${CYAN}Changed files:${NC}"
|
|
117
|
-
echo "$DIFF_STAT"
|
|
118
|
-
echo ""
|
|
119
|
-
|
|
120
|
-
# Prompt for diff analysis
|
|
121
|
-
PROMPT="You are an expert code reviewer. Analyze the following git diff and provide:
|
|
122
|
-
|
|
123
|
-
1. **Summary**: Brief overview of what changed (2-3 sentences)
|
|
124
|
-
2. **Key Changes**: Bullet points of important modifications
|
|
125
|
-
3. **Potential Issues**: Any bugs, security issues, or code smells you notice
|
|
126
|
-
4. **Suggestions**: Improvements or best practices to consider
|
|
127
|
-
5. **Risk Level**: Low/Medium/High with brief justification
|
|
128
|
-
|
|
129
|
-
Be concise but thorough. Focus on actionable feedback.
|
|
130
|
-
|
|
131
|
-
Diff:
|
|
132
|
-
\`\`\`diff
|
|
133
|
-
$DIFF
|
|
134
|
-
\`\`\`"
|
|
135
|
-
|
|
136
|
-
# Generate analysis based on provider
|
|
137
|
-
case "$PROVIDER" in
|
|
138
|
-
claude)
|
|
139
|
-
ANALYSIS=$(echo "$PROMPT" | claude --print 2>/dev/null || echo "")
|
|
140
|
-
;;
|
|
141
|
-
aider)
|
|
142
|
-
ANALYSIS=$(aider --message "$PROMPT" --no-git --yes 2>/dev/null | tail -50 || echo "")
|
|
143
|
-
;;
|
|
144
|
-
gemini)
|
|
145
|
-
ANALYSIS=$(echo "$PROMPT" | gemini 2>/dev/null || echo "")
|
|
146
|
-
;;
|
|
147
|
-
sgpt)
|
|
148
|
-
ANALYSIS=$(sgpt "$PROMPT" 2>/dev/null || echo "")
|
|
149
|
-
;;
|
|
150
|
-
ollama)
|
|
151
|
-
MODEL="${OLLAMA_MODEL:-llama3.2}"
|
|
152
|
-
ANALYSIS=$(echo "$PROMPT" | ollama run "$MODEL" 2>/dev/null || echo "")
|
|
153
|
-
;;
|
|
154
|
-
*)
|
|
155
|
-
printf '%b\n' "${RED}Unknown provider: $PROVIDER${NC}"
|
|
156
|
-
exit 1
|
|
157
|
-
;;
|
|
158
|
-
esac
|
|
159
|
-
|
|
160
|
-
if [[ -z "$ANALYSIS" ]]; then
|
|
161
|
-
printf '%b\n' "${RED}Failed to analyze diff.${NC}"
|
|
162
|
-
exit 1
|
|
163
|
-
fi
|
|
164
|
-
|
|
165
|
-
printf '%b\n' "${GREEN}=== AI Code Review ===${NC}"
|
|
166
|
-
echo ""
|
|
167
|
-
echo "$ANALYSIS"
|
|
168
|
-
echo ""
|
|
169
|
-
printf '%b\n' "${GREEN}=== End Review ===${NC}"
|