@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,287 +0,0 @@
|
|
|
1
|
-
#compdef dot
|
|
2
|
-
|
|
3
|
-
# Zsh completion for the dot CLI (dotfiles manager)
|
|
4
|
-
# Installed to: ~/.local/share/zsh/completions/_dot
|
|
5
|
-
|
|
6
|
-
_dot() {
|
|
7
|
-
local -a commands
|
|
8
|
-
|
|
9
|
-
commands=(
|
|
10
|
-
# Core
|
|
11
|
-
'apply:Apply dotfiles via chezmoi'
|
|
12
|
-
'sync:Apply dotfiles (alias of apply)'
|
|
13
|
-
'update:Pull latest changes and apply them'
|
|
14
|
-
'clean-cache:Clear shell initialization caches'
|
|
15
|
-
'prewarm:Regenerate shell caches for ultra-fast startup'
|
|
16
|
-
'cl:Claude CLI with context patterns'
|
|
17
|
-
'copilot:GitHub Copilot CLI with context patterns'
|
|
18
|
-
'gemini:Gemini CLI with context patterns'
|
|
19
|
-
'kiro:Kiro CLI with context patterns'
|
|
20
|
-
'sgpt:Shell-GPT with context patterns'
|
|
21
|
-
'ollama:Ollama with context patterns'
|
|
22
|
-
'opencode:OpenCode with context patterns'
|
|
23
|
-
'aider:Aider with context patterns'
|
|
24
|
-
'add:Add a file to chezmoi source'
|
|
25
|
-
'diff:Show chezmoi diff with exclusions'
|
|
26
|
-
'status:Show configuration drift'
|
|
27
|
-
'remove:Safely remove a managed file'
|
|
28
|
-
'cd:Print source directory path'
|
|
29
|
-
'edit:Open chezmoi source in \$EDITOR'
|
|
30
|
-
'commit:AI-powered conventional commit'
|
|
31
|
-
'patterns:Manage AI steering patterns'
|
|
32
|
-
'init:Bootstrap a foreign dotfiles repo through chezmoi + dot'
|
|
33
|
-
'agents:Multi-harness agent context (AGENTS.md sync, Cursor/Codex stubs)'
|
|
34
|
-
'manual:Open or download the multi-format manual'
|
|
35
|
-
'search:Find commands by keyword'
|
|
36
|
-
|
|
37
|
-
# Diagnostics
|
|
38
|
-
'doctor:Check system health and configuration'
|
|
39
|
-
'heal:Auto-repair common dotfiles issues'
|
|
40
|
-
'health:Run comprehensive health check'
|
|
41
|
-
'smoke-test:Run automated toolchain verification'
|
|
42
|
-
'chaos:Simulate config corruption to test self-healing'
|
|
43
|
-
'scorecard:Unified health/security/performance scorecard'
|
|
44
|
-
'security-score:Analyze infrastructure security score'
|
|
45
|
-
'intelligence:Show Dotfiles Intelligence Surface'
|
|
46
|
-
'rollback:Rollback dotfiles to a previous state'
|
|
47
|
-
'drift:Drift dashboard (detailed chezmoi status)'
|
|
48
|
-
'history:Shell history analysis'
|
|
49
|
-
'benchmark:Run shell startup benchmark'
|
|
50
|
-
'perf:Show performance mode and timing'
|
|
51
|
-
'load:Preload heavy shell layers'
|
|
52
|
-
'load-bench:Measure time to heavy-layer readiness'
|
|
53
|
-
'load-bench-pty:Measure background prewarm via PTY'
|
|
54
|
-
'ai:Show AI helper status'
|
|
55
|
-
'ai-setup:Interactive setup for all AI CLI tools'
|
|
56
|
-
'ai-query:Context-aware RAG query over your dotfiles'
|
|
57
|
-
'conflicts:Report alias/command conflicts'
|
|
58
|
-
'locks:Show version locks for key tools'
|
|
59
|
-
'snapshot:Capture baseline system snapshot'
|
|
60
|
-
'verify:Run post-merge verification checks'
|
|
61
|
-
|
|
62
|
-
# Tools
|
|
63
|
-
'tools:Show or install nix packages'
|
|
64
|
-
'new:Create a new project from a template'
|
|
65
|
-
'sandbox:Launch a safe sandbox preview'
|
|
66
|
-
'keys:Show keybindings catalog'
|
|
67
|
-
'aliases:List/search/explain aliases and tiers'
|
|
68
|
-
'learn:Start the interactive tour'
|
|
69
|
-
'docs:Show repo README'
|
|
70
|
-
'log-rotate:Rotate dotfiles log'
|
|
71
|
-
'setup:Interactive setup (profile, features, secrets)'
|
|
72
|
-
|
|
73
|
-
# Appearance
|
|
74
|
-
'theme:Switch terminal theme'
|
|
75
|
-
'wallpaper:Apply a wallpaper'
|
|
76
|
-
'fonts:Install Nerd Fonts'
|
|
77
|
-
'tune:Apply OS tuning'
|
|
78
|
-
|
|
79
|
-
# Secrets
|
|
80
|
-
'secrets-init:Initialize age key for secrets'
|
|
81
|
-
'secrets:Manage secrets (edit|set|get|list|load|provider)'
|
|
82
|
-
'secrets-create:Create an encrypted secrets file'
|
|
83
|
-
'ssh-key:Encrypt an SSH key with age'
|
|
84
|
-
'ssh-cert:Manage short-lived SSH certificates'
|
|
85
|
-
'env:Load environment buckets from managed secrets'
|
|
86
|
-
|
|
87
|
-
# Security
|
|
88
|
-
'backup:Create a compressed backup of home'
|
|
89
|
-
'bundle:Create offline archive of dotfiles environment'
|
|
90
|
-
'encrypt-check:Check disk encryption status'
|
|
91
|
-
'firewall:Apply firewall hardening'
|
|
92
|
-
'telemetry:Disable OS telemetry'
|
|
93
|
-
'dns-doh:Enable DNS-over-HTTPS'
|
|
94
|
-
'lock-screen:Enforce lock screen idle settings'
|
|
95
|
-
'usb-safety:Disable automount for removable media'
|
|
96
|
-
|
|
97
|
-
# Meta
|
|
98
|
-
'upgrade:Update flake, plugins, and dotfiles'
|
|
99
|
-
'packages:List installed packages'
|
|
100
|
-
'version:Show version information'
|
|
101
|
-
'--version:Show version information'
|
|
102
|
-
'help:Show help message'
|
|
103
|
-
)
|
|
104
|
-
|
|
105
|
-
_arguments -C \
|
|
106
|
-
'1:command:->cmds' \
|
|
107
|
-
'*::arg:->args'
|
|
108
|
-
|
|
109
|
-
case "$state" in
|
|
110
|
-
cmds)
|
|
111
|
-
_describe -t commands 'dot command' commands
|
|
112
|
-
;;
|
|
113
|
-
args)
|
|
114
|
-
case "$words[1]" in
|
|
115
|
-
new)
|
|
116
|
-
if ((CURRENT == 2)); then
|
|
117
|
-
local -a templates=(python go node packer molecule)
|
|
118
|
-
_describe -t templates 'project template' templates
|
|
119
|
-
else
|
|
120
|
-
_files
|
|
121
|
-
fi
|
|
122
|
-
;;
|
|
123
|
-
add | remove)
|
|
124
|
-
_files
|
|
125
|
-
;;
|
|
126
|
-
keys)
|
|
127
|
-
_message 'search pattern (optional)'
|
|
128
|
-
;;
|
|
129
|
-
perf)
|
|
130
|
-
local -a perf_opts=(
|
|
131
|
-
'--json:Output as JSON'
|
|
132
|
-
'-j:Output as JSON'
|
|
133
|
-
'--profile:Include profile output'
|
|
134
|
-
'-p:Include profile output'
|
|
135
|
-
'--runs:Set the number of runs'
|
|
136
|
-
'-r:Set the number of runs'
|
|
137
|
-
'--target:Set the timing target in milliseconds'
|
|
138
|
-
'-t:Set the timing target in milliseconds'
|
|
139
|
-
)
|
|
140
|
-
_describe -t options 'perf option' perf_opts
|
|
141
|
-
;;
|
|
142
|
-
doctor)
|
|
143
|
-
local -a doctor_opts=(
|
|
144
|
-
'--heal:Auto-repair common issues'
|
|
145
|
-
'-H:Auto-repair common issues'
|
|
146
|
-
'--score:Show score output'
|
|
147
|
-
'-s:Show score output'
|
|
148
|
-
'--json:Emit JSON summary'
|
|
149
|
-
'-j:Emit JSON summary'
|
|
150
|
-
'--ai:Include AI diagnostics'
|
|
151
|
-
'-A:Include AI diagnostics'
|
|
152
|
-
)
|
|
153
|
-
_describe -t options 'doctor option' doctor_opts
|
|
154
|
-
;;
|
|
155
|
-
attest)
|
|
156
|
-
local -a attest_opts=(
|
|
157
|
-
'--json:Emit JSON output'
|
|
158
|
-
'-j:Emit JSON output'
|
|
159
|
-
'--write:Write attestation to a file'
|
|
160
|
-
'-w:Write attestation to a file'
|
|
161
|
-
)
|
|
162
|
-
_describe -t options 'attest option' attest_opts
|
|
163
|
-
;;
|
|
164
|
-
lint)
|
|
165
|
-
local -a lint_opts=(
|
|
166
|
-
'--check:Run check-only mode'
|
|
167
|
-
'-c:Run check-only mode'
|
|
168
|
-
'--fix:Apply safe fixes'
|
|
169
|
-
'-f:Apply safe fixes'
|
|
170
|
-
)
|
|
171
|
-
_describe -t options 'lint option' lint_opts
|
|
172
|
-
;;
|
|
173
|
-
mcp)
|
|
174
|
-
local -a mcp_opts=(
|
|
175
|
-
'registry:Show the MCP registry'
|
|
176
|
-
'--strict:Treat policy warnings as errors'
|
|
177
|
-
'-s:Treat policy warnings as errors'
|
|
178
|
-
'--json:Emit JSON summary'
|
|
179
|
-
'-j:Emit JSON summary'
|
|
180
|
-
)
|
|
181
|
-
_describe -t options 'mcp option' mcp_opts
|
|
182
|
-
;;
|
|
183
|
-
health)
|
|
184
|
-
local -a health_opts=(
|
|
185
|
-
'--verbose:Show detailed checks'
|
|
186
|
-
'-v:Show detailed checks'
|
|
187
|
-
'--json:Emit JSON summary'
|
|
188
|
-
'-j:Emit JSON summary'
|
|
189
|
-
'--fix:Apply common fixes'
|
|
190
|
-
'-f:Apply common fixes'
|
|
191
|
-
'--force:Apply fixes without prompts'
|
|
192
|
-
'-F:Apply fixes without prompts'
|
|
193
|
-
)
|
|
194
|
-
_describe -t options 'health option' health_opts
|
|
195
|
-
;;
|
|
196
|
-
security-score)
|
|
197
|
-
local -a security_opts=(
|
|
198
|
-
'--verbose:Show detailed scoring'
|
|
199
|
-
'-v:Show detailed scoring'
|
|
200
|
-
'--quiet:Reduce output noise'
|
|
201
|
-
'-q:Reduce output noise'
|
|
202
|
-
'--json:Emit JSON summary'
|
|
203
|
-
'-j:Emit JSON summary'
|
|
204
|
-
)
|
|
205
|
-
_describe -t options 'security-score option' security_opts
|
|
206
|
-
;;
|
|
207
|
-
snapshot)
|
|
208
|
-
local -a snapshot_opts=(
|
|
209
|
-
'--baseline:Capture the baseline snapshot'
|
|
210
|
-
'-b:Capture the baseline snapshot'
|
|
211
|
-
'--force:Overwrite an existing snapshot'
|
|
212
|
-
'-f:Overwrite an existing snapshot'
|
|
213
|
-
)
|
|
214
|
-
_describe -t options 'snapshot option' snapshot_opts
|
|
215
|
-
;;
|
|
216
|
-
verify)
|
|
217
|
-
local -a verify_opts=(
|
|
218
|
-
'--security:Run security verification'
|
|
219
|
-
'-s:Run security verification'
|
|
220
|
-
)
|
|
221
|
-
_describe -t options 'verify option' verify_opts
|
|
222
|
-
;;
|
|
223
|
-
restore)
|
|
224
|
-
local -a restore_opts=(
|
|
225
|
-
'--list:List available backups'
|
|
226
|
-
'-l:List available backups'
|
|
227
|
-
'--latest:Restore the latest backup'
|
|
228
|
-
'-L:Restore the latest backup'
|
|
229
|
-
'--git:Restore from a git ref'
|
|
230
|
-
'-g:Restore from a git ref'
|
|
231
|
-
'--diff:Show a diff for a git ref'
|
|
232
|
-
'-d:Show a diff for a git ref'
|
|
233
|
-
'--dry-run:Preview the restore'
|
|
234
|
-
'-n:Preview the restore'
|
|
235
|
-
)
|
|
236
|
-
_describe -t options 'restore option' restore_opts
|
|
237
|
-
;;
|
|
238
|
-
load)
|
|
239
|
-
local -a load_opts=('--background:Load in background' '--status:Show load status')
|
|
240
|
-
_describe -t options 'load option' load_opts
|
|
241
|
-
;;
|
|
242
|
-
tools)
|
|
243
|
-
local -a tool_cmds=('install:Enter Nix development shell')
|
|
244
|
-
_describe -t subcommands 'tools subcommand' tool_cmds
|
|
245
|
-
;;
|
|
246
|
-
theme)
|
|
247
|
-
local -a themes=(dark light)
|
|
248
|
-
_describe -t themes 'theme mode' themes
|
|
249
|
-
;;
|
|
250
|
-
ssh-cert)
|
|
251
|
-
local -a cert_cmds=(
|
|
252
|
-
'issue:Request a short-lived SSH certificate'
|
|
253
|
-
'status:Show current certificate status'
|
|
254
|
-
'revoke:Revoke an active certificate'
|
|
255
|
-
)
|
|
256
|
-
_describe -t subcommands 'ssh-cert subcommand' cert_cmds
|
|
257
|
-
;;
|
|
258
|
-
secrets)
|
|
259
|
-
local -a secrets_cmds=(
|
|
260
|
-
'edit:Edit encrypted secrets'
|
|
261
|
-
'set:Set a secret value'
|
|
262
|
-
'get:Get a secret value'
|
|
263
|
-
'list:List secret keys'
|
|
264
|
-
'load:Load secrets into environment'
|
|
265
|
-
'provider:Show/switch secrets provider'
|
|
266
|
-
)
|
|
267
|
-
_describe -t subcommands 'secrets subcommand' secrets_cmds
|
|
268
|
-
;;
|
|
269
|
-
cl | copilot | gemini | kiro | sgpt | ollama | opencode | aider)
|
|
270
|
-
_arguments -C \
|
|
271
|
-
'(--pattern -p)'{--pattern,-p}'[Specify steering pattern]:pattern:->patterns' \
|
|
272
|
-
'*:prompt: '
|
|
273
|
-
if [[ "$state" == "patterns" ]]; then
|
|
274
|
-
local -a patterns
|
|
275
|
-
patterns=($(ls -1 "${XDG_CONFIG_HOME:-$HOME/.config}/ai/patterns" 2>/dev/null | sed 's/\.md$//'))
|
|
276
|
-
_describe -t patterns 'AI pattern' patterns
|
|
277
|
-
fi
|
|
278
|
-
;;
|
|
279
|
-
*)
|
|
280
|
-
_default
|
|
281
|
-
;;
|
|
282
|
-
esac
|
|
283
|
-
;;
|
|
284
|
-
esac
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
_dot "$@"
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
# =============================================================================
|
|
4
|
-
# check-dangerous-chmod.sh — block `chmod 777` / `chmod 666` patterns
|
|
5
|
-
# from landing in shell scripts.
|
|
6
|
-
#
|
|
7
|
-
# Invoked as a pre-commit local hook (no filename args; scans the repo).
|
|
8
|
-
# Extracted from `config/pre-commit-config.yaml` under #866.
|
|
9
|
-
# =============================================================================
|
|
10
|
-
|
|
11
|
-
set -euo pipefail
|
|
12
|
-
|
|
13
|
-
PATTERN='^[[:space:]]*chmod[[:space:]]+(-R[[:space:]]+)?(777|666)'
|
|
14
|
-
|
|
15
|
-
if grep -rn --include='*.sh' -E "$PATTERN" . 2>/dev/null | grep -v '^Binary'; then
|
|
16
|
-
echo "ERROR: Dangerous chmod patterns found (777 or 666)." >&2
|
|
17
|
-
echo "Use the minimum permissions actually required; document any exception." >&2
|
|
18
|
-
exit 1
|
|
19
|
-
fi
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
# =============================================================================
|
|
4
|
-
# check-deps-dev.sh — Validate direct dependencies against the deps.dev
|
|
5
|
-
# Insights API. Catches supply-chain risk a Grype-only scan misses:
|
|
6
|
-
# stale-but-CVE-free packages, unattested artifacts, and packages with
|
|
7
|
-
# advisories that haven't yet been mapped to a CVE.
|
|
8
|
-
#
|
|
9
|
-
# Scans:
|
|
10
|
-
# * `package.json` — direct `dependencies` + `devDependencies` (npm).
|
|
11
|
-
# * `pyproject.toml` — direct `[project.dependencies]` (Python).
|
|
12
|
-
# * `.github/workflows/*.yml` — `uses:` action references (GitHub Actions).
|
|
13
|
-
#
|
|
14
|
-
# Skips ecosystems with no matching manifest.
|
|
15
|
-
#
|
|
16
|
-
# Exit codes:
|
|
17
|
-
# 0 no advisories found (or all under threshold).
|
|
18
|
-
# 1 one or more direct deps have advisories at or above the threshold.
|
|
19
|
-
# 2 prerequisites missing (jq / curl / python3).
|
|
20
|
-
#
|
|
21
|
-
# Closes part of #877.
|
|
22
|
-
# =============================================================================
|
|
23
|
-
|
|
24
|
-
set -uo pipefail
|
|
25
|
-
|
|
26
|
-
REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
|
|
27
|
-
THRESHOLD="${DEPS_DEV_SEVERITY_THRESHOLD:-HIGH}" # LOW | MEDIUM | HIGH | CRITICAL
|
|
28
|
-
DEPS_DEV_BASE="${DEPS_DEV_BASE:-https://api.deps.dev/v3}"
|
|
29
|
-
EXCEPTIONS_FILE="$REPO_ROOT/docs/security/DEPS_DEV_EXCEPTIONS.md"
|
|
30
|
-
SARIF_OUT="${DEPS_DEV_SARIF_OUT:-}"
|
|
31
|
-
|
|
32
|
-
# Strict mode: bail on prerequisites.
|
|
33
|
-
for cmd in jq curl python3; do
|
|
34
|
-
if ! command -v "$cmd" >/dev/null 2>&1; then
|
|
35
|
-
echo "::warning::check-deps-dev: $cmd not available — skipping." >&2
|
|
36
|
-
exit 0
|
|
37
|
-
fi
|
|
38
|
-
done
|
|
39
|
-
|
|
40
|
-
# -----------------------------------------------------------------------------
|
|
41
|
-
# Helpers
|
|
42
|
-
# -----------------------------------------------------------------------------
|
|
43
|
-
|
|
44
|
-
# severity_rank — map deps.dev severity strings to integers so we can
|
|
45
|
-
# compare against THRESHOLD numerically.
|
|
46
|
-
severity_rank() {
|
|
47
|
-
case "${1:-}" in
|
|
48
|
-
CRITICAL) echo 4 ;;
|
|
49
|
-
HIGH) echo 3 ;;
|
|
50
|
-
MEDIUM | MODERATE) echo 2 ;;
|
|
51
|
-
LOW) echo 1 ;;
|
|
52
|
-
*) echo 0 ;;
|
|
53
|
-
esac
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
THRESHOLD_RANK=$(severity_rank "$THRESHOLD")
|
|
57
|
-
|
|
58
|
-
# is_excepted — check if a (system, name) pair has an active exception
|
|
59
|
-
# entry in DEPS_DEV_EXCEPTIONS.md. Exceptions look like:
|
|
60
|
-
# `npm:lodash` (expires 2026-12-31): <reason>
|
|
61
|
-
is_excepted() {
|
|
62
|
-
local system="$1" name="$2"
|
|
63
|
-
[[ -f "$EXCEPTIONS_FILE" ]] || return 1
|
|
64
|
-
grep -Eq "^\s*\`${system}:${name}\`" "$EXCEPTIONS_FILE"
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
# fetch_advisories — query deps.dev for advisories on a (system, name,
|
|
68
|
-
# version) triple. Prints one advisory-key per line; empty if none.
|
|
69
|
-
fetch_advisories() {
|
|
70
|
-
local system="$1" name="$2" version="$3"
|
|
71
|
-
local encoded_name
|
|
72
|
-
encoded_name=$(python3 -c 'import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1], safe=""))' "$name")
|
|
73
|
-
local url="$DEPS_DEV_BASE/systems/$system/packages/$encoded_name/versions/$version"
|
|
74
|
-
curl -fsSL --max-time 15 "$url" 2>/dev/null |
|
|
75
|
-
jq -r '.advisoryKeys[]?.id // empty' 2>/dev/null ||
|
|
76
|
-
true
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
# fetch_advisory_severity — given an advisory ID, return its highest
|
|
80
|
-
# severity rating. Returns empty string when the API doesn't expose
|
|
81
|
-
# severity (older advisories sometimes lack it).
|
|
82
|
-
fetch_advisory_severity() {
|
|
83
|
-
local advisory_id="$1"
|
|
84
|
-
local encoded
|
|
85
|
-
encoded=$(python3 -c 'import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1], safe=""))' "$advisory_id")
|
|
86
|
-
curl -fsSL --max-time 15 "$DEPS_DEV_BASE/advisories/$encoded" 2>/dev/null |
|
|
87
|
-
jq -r '.severity[]?.type // empty' 2>/dev/null |
|
|
88
|
-
head -1 ||
|
|
89
|
-
true
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
# -----------------------------------------------------------------------------
|
|
93
|
-
# Manifest readers
|
|
94
|
-
# -----------------------------------------------------------------------------
|
|
95
|
-
|
|
96
|
-
# Each reader prints one "system\tname\tversion" line per direct dep.
|
|
97
|
-
|
|
98
|
-
read_npm() {
|
|
99
|
-
local pkg="$REPO_ROOT/package.json"
|
|
100
|
-
[[ -f "$pkg" ]] || return 0
|
|
101
|
-
jq -r '
|
|
102
|
-
[.dependencies // {}, .devDependencies // {}]
|
|
103
|
-
| add // {}
|
|
104
|
-
| to_entries[]
|
|
105
|
-
| "NPM\t\(.key)\t\(.value | sub("^[~^>=<]+"; ""))"
|
|
106
|
-
' "$pkg"
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
read_pypi() {
|
|
110
|
-
local pyproj="$REPO_ROOT/pyproject.toml"
|
|
111
|
-
[[ -f "$pyproj" ]] || return 0
|
|
112
|
-
python3 - "$pyproj" <<'PY'
|
|
113
|
-
import sys
|
|
114
|
-
try:
|
|
115
|
-
import tomllib
|
|
116
|
-
except ImportError:
|
|
117
|
-
try:
|
|
118
|
-
import tomli as tomllib # type: ignore
|
|
119
|
-
except ImportError:
|
|
120
|
-
sys.exit(0)
|
|
121
|
-
data = tomllib.load(open(sys.argv[1], "rb"))
|
|
122
|
-
deps = data.get("project", {}).get("dependencies", [])
|
|
123
|
-
for spec in deps:
|
|
124
|
-
# spec is like "requests>=2.28.0"; pull name + version.
|
|
125
|
-
name = spec.split("[")[0].split(">")[0].split("<")[0].split("=")[0].strip()
|
|
126
|
-
version = ""
|
|
127
|
-
for op in (">=", "<=", "==", ">", "<"):
|
|
128
|
-
if op in spec:
|
|
129
|
-
version = spec.split(op, 1)[1].strip().split(",")[0]
|
|
130
|
-
break
|
|
131
|
-
print(f"PYPI\t{name}\t{version}")
|
|
132
|
-
PY
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
read_actions() {
|
|
136
|
-
local f
|
|
137
|
-
for f in "$REPO_ROOT"/.github/workflows/*.yml; do
|
|
138
|
-
[[ -f "$f" ]] || continue
|
|
139
|
-
# Match `uses: owner/repo@<40-hex-sha> # vX.Y.Z`
|
|
140
|
-
grep -Eo 'uses:[[:space:]]+[a-zA-Z0-9._-]+/[a-zA-Z0-9._/-]+@[a-f0-9]{40}[[:space:]]*#[[:space:]]*v[0-9.]+' "$f" |
|
|
141
|
-
sed -E 's/uses:[[:space:]]+([^@]+)@[a-f0-9]{40}[[:space:]]+#[[:space:]]+v([0-9.]+).*/GITHUB_ACTIONS\t\1\t\2/' ||
|
|
142
|
-
true
|
|
143
|
-
done | sort -u
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
# -----------------------------------------------------------------------------
|
|
147
|
-
# Main scan
|
|
148
|
-
# -----------------------------------------------------------------------------
|
|
149
|
-
|
|
150
|
-
findings=()
|
|
151
|
-
total_scanned=0
|
|
152
|
-
|
|
153
|
-
scan_one() {
|
|
154
|
-
local system="$1" name="$2" version="$3"
|
|
155
|
-
[[ -z "$name" || -z "$version" ]] && return 0
|
|
156
|
-
total_scanned=$((total_scanned + 1))
|
|
157
|
-
|
|
158
|
-
if is_excepted "$system" "$name"; then
|
|
159
|
-
echo " - skip $system:$name@$version (excepted)" >&2
|
|
160
|
-
return 0
|
|
161
|
-
fi
|
|
162
|
-
|
|
163
|
-
local advs
|
|
164
|
-
advs=$(fetch_advisories "$system" "$name" "$version")
|
|
165
|
-
[[ -z "$advs" ]] && return 0
|
|
166
|
-
|
|
167
|
-
while IFS= read -r adv; do
|
|
168
|
-
[[ -z "$adv" ]] && continue
|
|
169
|
-
local sev
|
|
170
|
-
sev=$(fetch_advisory_severity "$adv")
|
|
171
|
-
local rank
|
|
172
|
-
rank=$(severity_rank "$sev")
|
|
173
|
-
if ((rank >= THRESHOLD_RANK)); then
|
|
174
|
-
findings+=("$system:$name@$version :: $adv ($sev)")
|
|
175
|
-
echo "::warning::deps.dev advisory $sev: $system $name $version → $adv" >&2
|
|
176
|
-
fi
|
|
177
|
-
done <<<"$advs"
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
echo "Scanning manifests under $REPO_ROOT ..." >&2
|
|
181
|
-
|
|
182
|
-
# 1. npm
|
|
183
|
-
while IFS=$'\t' read -r system name version; do
|
|
184
|
-
scan_one "$system" "$name" "$version"
|
|
185
|
-
done < <(read_npm)
|
|
186
|
-
|
|
187
|
-
# 2. pypi
|
|
188
|
-
while IFS=$'\t' read -r system name version; do
|
|
189
|
-
scan_one "$system" "$name" "$version"
|
|
190
|
-
done < <(read_pypi)
|
|
191
|
-
|
|
192
|
-
# 3. GitHub Actions (best-effort — deps.dev coverage is partial)
|
|
193
|
-
while IFS=$'\t' read -r system name version; do
|
|
194
|
-
scan_one "$system" "$name" "$version"
|
|
195
|
-
done < <(read_actions)
|
|
196
|
-
|
|
197
|
-
echo "Scanned $total_scanned direct dependencies." >&2
|
|
198
|
-
|
|
199
|
-
# Optional SARIF emission for Code Scanning upload.
|
|
200
|
-
if [[ -n "$SARIF_OUT" ]]; then
|
|
201
|
-
python3 - "$SARIF_OUT" "${findings[@]+"${findings[@]}"}" <<'PY'
|
|
202
|
-
import json, sys
|
|
203
|
-
out = sys.argv[1]
|
|
204
|
-
findings = sys.argv[2:]
|
|
205
|
-
runs = [{
|
|
206
|
-
"tool": {"driver": {
|
|
207
|
-
"name": "check-deps-dev",
|
|
208
|
-
"version": "1.0.0",
|
|
209
|
-
"informationUri": "https://deps.dev",
|
|
210
|
-
}},
|
|
211
|
-
"results": [
|
|
212
|
-
{
|
|
213
|
-
"ruleId": "deps-dev-advisory",
|
|
214
|
-
"level": "error",
|
|
215
|
-
"message": {"text": f},
|
|
216
|
-
}
|
|
217
|
-
for f in findings
|
|
218
|
-
],
|
|
219
|
-
}]
|
|
220
|
-
with open(out, "w") as fp:
|
|
221
|
-
json.dump({"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": runs}, fp)
|
|
222
|
-
print(f"SARIF written: {out}")
|
|
223
|
-
PY
|
|
224
|
-
fi
|
|
225
|
-
|
|
226
|
-
if [[ "${#findings[@]}" -gt 0 ]]; then
|
|
227
|
-
echo "" >&2
|
|
228
|
-
echo "::error::${#findings[@]} dep(s) flagged at or above ${THRESHOLD}." >&2
|
|
229
|
-
printf ' %s\n' "${findings[@]}" >&2
|
|
230
|
-
echo "" >&2
|
|
231
|
-
echo "Document exceptions at docs/security/DEPS_DEV_EXCEPTIONS.md with expiry dates." >&2
|
|
232
|
-
exit 1
|
|
233
|
-
fi
|
|
234
|
-
|
|
235
|
-
echo "deps.dev validation: clean." >&2
|
|
236
|
-
exit 0
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
# =============================================================================
|
|
4
|
-
# check-insecure-tls.sh — block `curl -k` / `curl --insecure` /
|
|
5
|
-
# `wget --no-check-certificate` patterns from landing.
|
|
6
|
-
#
|
|
7
|
-
# Invoked as a pre-commit local hook (no filename args; scans the repo).
|
|
8
|
-
# Extracted from `config/pre-commit-config.yaml` under #866 so the line
|
|
9
|
-
# is yamllint-clean and the matcher can be tested in isolation.
|
|
10
|
-
#
|
|
11
|
-
# Matcher uses awk for proper tokenization (the previous inline grep
|
|
12
|
-
# regex false-positive'd `-k` inside package names like `-keyring`).
|
|
13
|
-
# =============================================================================
|
|
14
|
-
|
|
15
|
-
set -euo pipefail
|
|
16
|
-
|
|
17
|
-
ROOT="${1:-.}"
|
|
18
|
-
|
|
19
|
-
# Awk body intentionally lives in a variable. The $i / $NF / FILENAME /
|
|
20
|
-
# NR references inside are awk's own field/record variables — NOT shell
|
|
21
|
-
# variables — so the whole body must stay literal (single-quoted). The
|
|
22
|
-
# SC2016 suppression is the canonical signal to readers + linters that
|
|
23
|
-
# this is intentional.
|
|
24
|
-
# shellcheck disable=SC2016
|
|
25
|
-
AWK_BODY='
|
|
26
|
-
# Each input line tokenized on whitespace. Flag if the line uses
|
|
27
|
-
# curl/wget and a known insecure flag appears as a standalone token.
|
|
28
|
-
{
|
|
29
|
-
has_curl = 0; has_wget = 0
|
|
30
|
-
bad = ""
|
|
31
|
-
for (i = 1; i <= NF; i++) {
|
|
32
|
-
tok = $i
|
|
33
|
-
if (tok == "curl") has_curl = 1
|
|
34
|
-
if (tok == "wget") has_wget = 1
|
|
35
|
-
if (has_curl && (tok == "-k" || tok == "--insecure" || tok ~ /^--insecure=/)) {
|
|
36
|
-
bad = tok
|
|
37
|
-
}
|
|
38
|
-
if (has_wget && (tok == "--no-check-certificate" || tok ~ /^--no-check-certificate=/)) {
|
|
39
|
-
bad = tok
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (bad != "") printf "%s:%d:%s\n", FILENAME, NR, bad
|
|
43
|
-
}
|
|
44
|
-
'
|
|
45
|
-
|
|
46
|
-
matches=$(
|
|
47
|
-
grep -rln \
|
|
48
|
-
--include='*.sh' --include='*.bash' --include='*.zsh' --include='*.tmpl' \
|
|
49
|
-
--exclude-dir='.git' \
|
|
50
|
-
--exclude='check-insecure-tls.sh' \
|
|
51
|
-
-E '\b(curl|wget)\b' \
|
|
52
|
-
"$ROOT" 2>/dev/null |
|
|
53
|
-
xargs -I{} awk "$AWK_BODY" {} 2>/dev/null
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
if [[ -n "$matches" ]]; then
|
|
57
|
-
echo "ERROR: Insecure TLS patterns found." >&2
|
|
58
|
-
echo "$matches" >&2
|
|
59
|
-
echo "Remove the flag or, if absolutely required, pin the cert and document the why." >&2
|
|
60
|
-
exit 1
|
|
61
|
-
fi
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
# =============================================================================
|
|
4
|
-
# check-regression-traceability.sh — enforce a `# Regression for:` header on
|
|
5
|
-
# every file under `tests/regression/`, with one of three accepted forms:
|
|
6
|
-
#
|
|
7
|
-
# # Regression for: GH-1234
|
|
8
|
-
# # Regression for: <7-or-more-char-sha-prefix>
|
|
9
|
-
# # Regression for: pre-history
|
|
10
|
-
#
|
|
11
|
-
# The first two are required for any test introduced as part of fixing a
|
|
12
|
-
# known issue or shipping a known commit. The third is an explicit "we
|
|
13
|
-
# couldn't trace it" marker — still trackable, just not auto-resolvable.
|
|
14
|
-
#
|
|
15
|
-
# Invocation:
|
|
16
|
-
# * pre-commit local hook (files passed as args)
|
|
17
|
-
# * standalone: ./scripts/ci/check-regression-traceability.sh
|
|
18
|
-
# =============================================================================
|
|
19
|
-
|
|
20
|
-
set -euo pipefail
|
|
21
|
-
|
|
22
|
-
PATTERN='^# *Regression for: *(GH-[0-9]+|[0-9a-f]{7,40}|pre-history)\b'
|
|
23
|
-
|
|
24
|
-
check_one() {
|
|
25
|
-
local f="$1"
|
|
26
|
-
[[ -f "$f" ]] || return 0
|
|
27
|
-
|
|
28
|
-
# Only check files under tests/regression/
|
|
29
|
-
case "$f" in
|
|
30
|
-
tests/regression/*) ;;
|
|
31
|
-
*/tests/regression/*) ;;
|
|
32
|
-
*) return 0 ;;
|
|
33
|
-
esac
|
|
34
|
-
|
|
35
|
-
if ! head -15 "$f" | grep -Eq "$PATTERN"; then
|
|
36
|
-
echo "MISSING trace header: $f"
|
|
37
|
-
return 1
|
|
38
|
-
fi
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
fail=0
|
|
42
|
-
if [[ $# -gt 0 ]]; then
|
|
43
|
-
for f in "$@"; do
|
|
44
|
-
check_one "$f" || fail=1
|
|
45
|
-
done
|
|
46
|
-
else
|
|
47
|
-
while IFS= read -r f; do
|
|
48
|
-
check_one "$f" || fail=1
|
|
49
|
-
done < <(git ls-files "tests/regression/*.sh")
|
|
50
|
-
fi
|
|
51
|
-
|
|
52
|
-
if [[ $fail -ne 0 ]]; then
|
|
53
|
-
cat >&2 <<'MSG'
|
|
54
|
-
|
|
55
|
-
Every file under tests/regression/ must include a trace header within
|
|
56
|
-
the first 15 lines, in one of these forms:
|
|
57
|
-
|
|
58
|
-
# Regression for: GH-1234 (preferred — link to GitHub issue)
|
|
59
|
-
# Regression for: <sha-prefix> (link to introducing commit)
|
|
60
|
-
# Regression for: pre-history (no traceable origin)
|
|
61
|
-
|
|
62
|
-
Why: regressions pinned years ago without context are forensic dead-ends
|
|
63
|
-
when they fire. See docs/operations/TESTING.md and #868.
|
|
64
|
-
|
|
65
|
-
MSG
|
|
66
|
-
exit 1
|
|
67
|
-
fi
|