@sebastienrousseau/dotfiles 0.2.501 → 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 +155 -4
- package/LICENSE +21 -1283
- package/README.md +40 -8
- 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/01-dot-cli.md +63 -45
- package/docs/manual/03-reference/02-config-files.md +2 -2
- package/docs/manual/03-reference/05-feature-flags.md +62 -3
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +72 -55
- package/docs/manual/index.md +66 -0
- package/docs/operations/CI_COMPOSITES.md +2 -2
- package/docs/operations/COMPLETIONS.md +2 -2
- package/docs/operations/COVERAGE.md +40 -6
- package/docs/operations/HARD_AUDIT_2026.md +631 -0
- package/docs/operations/MAINTENANCE.md +3 -3
- package/docs/operations/MANIFEST.md +127 -0
- package/docs/operations/REGISTRY.md +89 -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 +665 -0
- package/docs/operations/ROADMAP_V0_2_503.md +134 -0
- package/docs/operations/TESTING.md +17 -0
- package/docs/operations/TRACEABILITY.md +9 -3
- package/docs/operations/VERSION_SYNC.md +4 -4
- package/docs/reference/POWERSHELL_PARITY.md +81 -0
- package/docs/registry.json +6 -0
- package/docs/schema/dot-env-v1.json +110 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
- package/docs/security/CI_PINNING.md +121 -0
- package/docs/security/COMMIT_SIGNING.md +138 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
- package/docs/security/DISCLOSURE.md +130 -0
- package/docs/security/FUZZING.md +114 -0
- package/docs/security/INSTALL_VERIFICATION.md +2 -2
- package/docs/security/KEY_ROTATION.md +81 -1
- package/docs/security/POLICY_RELEASES.md +2 -2
- package/docs/security/SCORECARD.md +130 -15
- package/docs/security/SHELL_EXEMPTIONS.md +4 -4
- package/docs/security/VERIFY_RELEASE.md +201 -0
- package/docs/security/security-pubkey.asc +15 -0
- package/install.sh +67 -38
- 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 +45 -15
- 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 +27 -22
- package/scripts/dot/commands/agents.sh +335 -0
- package/scripts/dot/commands/ai.sh +144 -25
- package/scripts/dot/commands/aliases.sh +10 -8
- package/scripts/dot/commands/appearance.sh +2 -2
- package/scripts/dot/commands/core.sh +12 -6
- package/scripts/dot/commands/diagnostics.sh +5 -5
- package/scripts/dot/commands/env-emit.sh +202 -0
- package/scripts/dot/commands/fleet.sh +290 -14
- package/scripts/dot/commands/init.sh +184 -0
- package/scripts/dot/commands/lint.sh +9 -4
- package/scripts/dot/commands/manual.sh +3 -3
- package/scripts/dot/commands/meta.sh +19 -10
- package/scripts/dot/commands/patterns.sh +2 -2
- package/scripts/dot/commands/registry.sh +263 -0
- 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 +62 -4
- 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/lib/secrets_provider.sh +32 -6
- 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 +18 -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/check-disclosure-key-expiry.sh +110 -0
- 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-configs.sh +11 -2
- 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 +58 -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/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/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 -134
- 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 -635
- 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 -596
- package/dot_local/bin/executable_dot-ai +0 -36
- package/dot_local/bin/executable_dot-bootstrap +0 -77
- 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 -283
- 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/install-chezmoi-verified.sh +0 -64
- package/scripts/ci/run-coverage.sh +0 -362
- package/scripts/ci/validate-chezmoidata.sh +0 -25
- package/scripts/ci/validate-ci-config.sh +0 -224
- 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 -99
- package/scripts/dot/lib/ui.sh +0 -518
- 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
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
10
|
-
source "$SCRIPT_DIR
|
|
9
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
10
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
11
11
|
|
|
12
12
|
PATTERN_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ai/patterns"
|
|
13
13
|
mkdir -p "$PATTERN_DIR"
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
# shellcheck shell=bash
|
|
4
|
+
#
|
|
5
|
+
# scripts/dot/commands/registry.sh
|
|
6
|
+
#
|
|
7
|
+
# `dot registry` — initial scaffold for the dot module registry.
|
|
8
|
+
#
|
|
9
|
+
# §3 audit roadmap: ship a registry of reusable dotfile modules
|
|
10
|
+
# ("rust-dev-setup", "k8s-operator-laptop") to seed network effects.
|
|
11
|
+
# Hosted as a GitHub-Pages-indexed JSON file to keep ops cost near
|
|
12
|
+
# zero.
|
|
13
|
+
#
|
|
14
|
+
# Current state: SCAFFOLD ONLY. This file ships the CLI surface and
|
|
15
|
+
# the JSON contract (see _registry_default_url). The registry itself
|
|
16
|
+
# is empty; populating it is its own roadmap item.
|
|
17
|
+
#
|
|
18
|
+
# Subcommands:
|
|
19
|
+
# list Show modules in the configured registry
|
|
20
|
+
# search <q> Filter modules by keyword (name, description, tags)
|
|
21
|
+
# info <name> Print full metadata for a module
|
|
22
|
+
# install <name> Apply a module to the current workstation (stub —
|
|
23
|
+
# prints what would be installed; full implementation
|
|
24
|
+
# needs a sandboxed apply pipeline)
|
|
25
|
+
# url Show the active registry URL
|
|
26
|
+
# set-url <u> Override the registry URL (writes to user config)
|
|
27
|
+
#
|
|
28
|
+
# Registry JSON shape:
|
|
29
|
+
# {
|
|
30
|
+
# "version": 1,
|
|
31
|
+
# "updated": "2026-05-15T16:00:00Z",
|
|
32
|
+
# "modules": [
|
|
33
|
+
# { "name": "rust-dev-setup",
|
|
34
|
+
# "description": "Rust toolchain + cargo plugins + IDE config",
|
|
35
|
+
# "repo": "https://github.com/example/rust-dev-setup",
|
|
36
|
+
# "tags": ["rust", "dev", "language"],
|
|
37
|
+
# "maintainer": "alice@example.com",
|
|
38
|
+
# "version": "1.2.0",
|
|
39
|
+
# "sha256": "abc123..." }
|
|
40
|
+
# ]
|
|
41
|
+
# }
|
|
42
|
+
|
|
43
|
+
set -euo pipefail
|
|
44
|
+
|
|
45
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
46
|
+
# shellcheck source=../../../lib/dot/ui.sh disable=SC1091
|
|
47
|
+
source "$SCRIPT_DIR/../../../lib/dot/ui.sh"
|
|
48
|
+
# shellcheck source=../../../lib/dot/utils.sh disable=SC1091
|
|
49
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
50
|
+
|
|
51
|
+
_registry_default_url() {
|
|
52
|
+
printf '%s\n' "https://sebastienrousseau.github.io/dotfiles/registry.json"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
_registry_config_file() {
|
|
56
|
+
printf '%s/dotfiles/registry.toml\n' "${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
_registry_url() {
|
|
60
|
+
if [[ -n "${DOTFILES_REGISTRY_URL:-}" ]]; then
|
|
61
|
+
printf '%s\n' "$DOTFILES_REGISTRY_URL"
|
|
62
|
+
return
|
|
63
|
+
fi
|
|
64
|
+
local cfg
|
|
65
|
+
cfg="$(_registry_config_file)"
|
|
66
|
+
if [[ -f "$cfg" ]]; then
|
|
67
|
+
local u
|
|
68
|
+
u="$(awk -F'[ \t]*=[ \t]*' '/^url[ \t]*=/{gsub(/"/,"",$2); print $2; exit}' "$cfg")"
|
|
69
|
+
[[ -n "$u" ]] && {
|
|
70
|
+
printf '%s\n' "$u"
|
|
71
|
+
return
|
|
72
|
+
}
|
|
73
|
+
fi
|
|
74
|
+
_registry_default_url
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
_registry_cache_dir() {
|
|
78
|
+
printf '%s/dotfiles/registry\n' "${XDG_CACHE_HOME:-$HOME/.cache}"
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
_registry_fetch() {
|
|
82
|
+
local url cache_dir cache_file
|
|
83
|
+
url="$(_registry_url)"
|
|
84
|
+
cache_dir="$(_registry_cache_dir)"
|
|
85
|
+
cache_file="$cache_dir/index.json"
|
|
86
|
+
mkdir -p "$cache_dir"
|
|
87
|
+
# Refresh if older than 6h or missing.
|
|
88
|
+
local now mtime
|
|
89
|
+
now="$(date +%s)"
|
|
90
|
+
if [[ -s "$cache_file" ]]; then
|
|
91
|
+
if mtime="$(stat -f %m "$cache_file" 2>/dev/null || stat -c %Y "$cache_file" 2>/dev/null)"; then
|
|
92
|
+
if ((now - mtime < 21600)); then
|
|
93
|
+
printf '%s\n' "$cache_file"
|
|
94
|
+
return 0
|
|
95
|
+
fi
|
|
96
|
+
fi
|
|
97
|
+
fi
|
|
98
|
+
if ! command -v curl >/dev/null 2>&1; then
|
|
99
|
+
ui_err "registry" "curl not installed"
|
|
100
|
+
return 127
|
|
101
|
+
fi
|
|
102
|
+
local tmp
|
|
103
|
+
tmp="$(mktemp "${cache_file}.XXXXXX")"
|
|
104
|
+
if ! curl -fsSL --max-time 15 -o "$tmp" "$url"; then
|
|
105
|
+
rm -f "$tmp"
|
|
106
|
+
if [[ -s "$cache_file" ]]; then
|
|
107
|
+
ui_warn "registry" "fetch failed; using stale cache at $cache_file"
|
|
108
|
+
printf '%s\n' "$cache_file"
|
|
109
|
+
return 0
|
|
110
|
+
fi
|
|
111
|
+
ui_err "registry" "could not fetch $url"
|
|
112
|
+
return 1
|
|
113
|
+
fi
|
|
114
|
+
mv "$tmp" "$cache_file"
|
|
115
|
+
printf '%s\n' "$cache_file"
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
_registry_require_jq() {
|
|
119
|
+
command -v jq >/dev/null 2>&1 || {
|
|
120
|
+
ui_err "registry" "jq is required"
|
|
121
|
+
return 127
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
cmd_registry() {
|
|
126
|
+
local subcommand="${1:-list}"
|
|
127
|
+
shift || true
|
|
128
|
+
|
|
129
|
+
case "$subcommand" in
|
|
130
|
+
url)
|
|
131
|
+
printf '%s\n' "$(_registry_url)"
|
|
132
|
+
;;
|
|
133
|
+
set-url)
|
|
134
|
+
local new_url="${1:-}"
|
|
135
|
+
[[ -n "$new_url" ]] || {
|
|
136
|
+
ui_err "set-url" "missing URL"
|
|
137
|
+
return 1
|
|
138
|
+
}
|
|
139
|
+
# Refuse non-HTTPS schemes. The registry index is unsigned today,
|
|
140
|
+
# so HTTPS is the only transport that gives us cert-pinned
|
|
141
|
+
# integrity. The `file://` exemption is for local testing only
|
|
142
|
+
# (the bench-script and unit tests use it).
|
|
143
|
+
if [[ ! "$new_url" =~ ^(https://|file://) ]]; then
|
|
144
|
+
ui_err "set-url" "registry URL must use https:// (or file:// for local testing) — got: $new_url"
|
|
145
|
+
return 1
|
|
146
|
+
fi
|
|
147
|
+
local cfg
|
|
148
|
+
cfg="$(_registry_config_file)"
|
|
149
|
+
mkdir -p "$(dirname "$cfg")"
|
|
150
|
+
# Atomic write so a concurrent invocation can't read a half-
|
|
151
|
+
# written file. Explicit if/else (avoid SC2015 A && B || C).
|
|
152
|
+
local _tmp
|
|
153
|
+
_tmp="$(mktemp "${cfg}.XXXXXX")"
|
|
154
|
+
if printf 'url = "%s"\n' "$new_url" >"$_tmp"; then
|
|
155
|
+
if ! mv "$_tmp" "$cfg"; then
|
|
156
|
+
rm -f "$_tmp"
|
|
157
|
+
ui_err "set-url" "failed to commit $cfg"
|
|
158
|
+
return 1
|
|
159
|
+
fi
|
|
160
|
+
else
|
|
161
|
+
rm -f "$_tmp"
|
|
162
|
+
ui_err "set-url" "failed to write $cfg"
|
|
163
|
+
return 1
|
|
164
|
+
fi
|
|
165
|
+
ui_ok "registry" "set to $new_url ($cfg)"
|
|
166
|
+
;;
|
|
167
|
+
list)
|
|
168
|
+
_registry_require_jq || return $?
|
|
169
|
+
local index
|
|
170
|
+
index="$(_registry_fetch)" || return $?
|
|
171
|
+
ui_header "Registry modules"
|
|
172
|
+
ui_info "Source" "$(_registry_url)"
|
|
173
|
+
echo ""
|
|
174
|
+
if ! jq -e '.modules | length > 0' "$index" >/dev/null 2>&1; then
|
|
175
|
+
ui_warn "registry" "no modules published yet — see docs/operations/REGISTRY.md to contribute one"
|
|
176
|
+
return 0
|
|
177
|
+
fi
|
|
178
|
+
ui_table_begin "Module" "Version" "Description"
|
|
179
|
+
while IFS=$'\t' read -r name ver desc; do
|
|
180
|
+
ui_table_add "$name" "v$ver" "$desc"
|
|
181
|
+
done < <(jq -r '.modules[] | "\(.name)\t\(.version // "-")\t\(.description // "")"' "$index")
|
|
182
|
+
ui_table_end
|
|
183
|
+
;;
|
|
184
|
+
search)
|
|
185
|
+
_registry_require_jq || return $?
|
|
186
|
+
local q="${1:-}"
|
|
187
|
+
[[ -n "$q" ]] || {
|
|
188
|
+
ui_err "search" "missing query"
|
|
189
|
+
return 1
|
|
190
|
+
}
|
|
191
|
+
local index
|
|
192
|
+
index="$(_registry_fetch)" || return $?
|
|
193
|
+
ui_header "Registry search: $q"
|
|
194
|
+
echo ""
|
|
195
|
+
ui_table_begin "Module" "Version" "Description"
|
|
196
|
+
while IFS=$'\t' read -r name ver desc; do
|
|
197
|
+
ui_table_add "$name" "v$ver" "$desc"
|
|
198
|
+
done < <(jq -r --arg q "$q" '
|
|
199
|
+
.modules[]
|
|
200
|
+
| select(
|
|
201
|
+
(.name // "" | ascii_downcase | contains($q | ascii_downcase)) or
|
|
202
|
+
(.description // "" | ascii_downcase | contains($q | ascii_downcase)) or
|
|
203
|
+
((.tags // []) | map(ascii_downcase) | index($q | ascii_downcase))
|
|
204
|
+
)
|
|
205
|
+
| "\(.name)\t\(.version // "-")\t\(.description // "")"
|
|
206
|
+
' "$index")
|
|
207
|
+
ui_table_end
|
|
208
|
+
;;
|
|
209
|
+
info)
|
|
210
|
+
_registry_require_jq || return $?
|
|
211
|
+
local name="${1:-}"
|
|
212
|
+
[[ -n "$name" ]] || {
|
|
213
|
+
ui_err "info" "missing module name"
|
|
214
|
+
return 1
|
|
215
|
+
}
|
|
216
|
+
local index
|
|
217
|
+
index="$(_registry_fetch)" || return $?
|
|
218
|
+
local found
|
|
219
|
+
found="$(jq -r --arg n "$name" '.modules[] | select(.name == $n) | "OK"' "$index" 2>/dev/null)"
|
|
220
|
+
if [[ "$found" != "OK" ]]; then
|
|
221
|
+
ui_err "info" "module not found: $name"
|
|
222
|
+
return 1
|
|
223
|
+
fi
|
|
224
|
+
jq -r --arg n "$name" '.modules[] | select(.name == $n) | to_entries[] | "\(.key)\t\(.value | if type == "array" then join(", ") else tostring end)"' "$index" |
|
|
225
|
+
while IFS=$'\t' read -r key value; do
|
|
226
|
+
ui_ok "$key" "$value"
|
|
227
|
+
done
|
|
228
|
+
;;
|
|
229
|
+
install)
|
|
230
|
+
local name="${1:-}"
|
|
231
|
+
[[ -n "$name" ]] || {
|
|
232
|
+
ui_err "install" "missing module name"
|
|
233
|
+
return 1
|
|
234
|
+
}
|
|
235
|
+
ui_warn "install" "scaffold only — full module installer is a roadmap item"
|
|
236
|
+
ui_info "install" "would fetch module $name from registry and apply it as a chezmoi sub-source"
|
|
237
|
+
return 0
|
|
238
|
+
;;
|
|
239
|
+
--help | -h | help)
|
|
240
|
+
cat <<EOF
|
|
241
|
+
Usage: dot registry <subcommand>
|
|
242
|
+
|
|
243
|
+
Subcommands:
|
|
244
|
+
list List modules in the configured registry
|
|
245
|
+
search <q> Filter modules by keyword (name, description, tags)
|
|
246
|
+
info <name> Print metadata for a single module
|
|
247
|
+
install <name> Install a module (scaffold — see docs/operations/REGISTRY.md)
|
|
248
|
+
url Show the active registry URL
|
|
249
|
+
set-url <url> Override the registry URL (persists to user config)
|
|
250
|
+
|
|
251
|
+
Env overrides:
|
|
252
|
+
DOTFILES_REGISTRY_URL One-shot override of the registry URL.
|
|
253
|
+
|
|
254
|
+
Default registry: $(_registry_default_url)
|
|
255
|
+
EOF
|
|
256
|
+
;;
|
|
257
|
+
*)
|
|
258
|
+
ui_err "Unknown subcommand" "$subcommand"
|
|
259
|
+
echo "Run 'dot registry --help' for usage." >&2
|
|
260
|
+
return 1
|
|
261
|
+
;;
|
|
262
|
+
esac
|
|
263
|
+
}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
10
|
-
source "$SCRIPT_DIR
|
|
11
|
-
# shellcheck source
|
|
12
|
-
source "$SCRIPT_DIR
|
|
9
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
10
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
11
|
+
# shellcheck source=../../../lib/dot/log.sh
|
|
12
|
+
source "$SCRIPT_DIR/../../../lib/dot/log.sh"
|
|
13
13
|
|
|
14
14
|
DOTFILES_DIR="${DOTFILES_DIR:-$HOME/.dotfiles}"
|
|
15
15
|
BACKUP_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/dotfiles/backups"
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
10
|
-
source "$SCRIPT_DIR
|
|
9
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
10
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
11
11
|
# shellcheck source=../../lib/secrets_provider.sh
|
|
12
12
|
source "$SCRIPT_DIR/../../lib/secrets_provider.sh"
|
|
13
13
|
|
|
@@ -15,7 +15,8 @@ dot_ui_command_banner "Secrets" "${1:-}"
|
|
|
15
15
|
|
|
16
16
|
dot_data_file() {
|
|
17
17
|
local src_dir
|
|
18
|
-
src_dir="$(
|
|
18
|
+
src_dir="$(resolve_chezmoi_source_dir)"
|
|
19
|
+
[[ -z "$src_dir" ]] && src_dir="$(require_source_dir)"
|
|
19
20
|
printf "%s\n" "$src_dir/.chezmoidata.toml"
|
|
20
21
|
}
|
|
21
22
|
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
10
|
-
source "$SCRIPT_DIR
|
|
9
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
10
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
11
11
|
|
|
12
12
|
dot_ui_command_banner "Security" "${1:-}"
|
|
13
13
|
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
_TOOLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
10
|
-
source "$_TOOLS_DIR
|
|
9
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
10
|
+
source "$_TOOLS_DIR/../../../lib/dot/utils.sh"
|
|
11
11
|
# shellcheck source=aliases.sh
|
|
12
12
|
source "$_TOOLS_DIR/aliases.sh"
|
|
13
13
|
|
|
@@ -348,12 +348,70 @@ cmd_log_rotate() {
|
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
cmd_env_mise() {
|
|
351
|
+
# `dot env emit` is a separate sub-handler — it doesn't need mise
|
|
352
|
+
# at command-time, only when actually invoked (the script checks).
|
|
353
|
+
if [[ "${1:-}" == "emit" ]]; then
|
|
354
|
+
shift
|
|
355
|
+
# shellcheck source=./env-emit.sh
|
|
356
|
+
source "$(require_source_dir)/scripts/dot/commands/env-emit.sh"
|
|
357
|
+
dot_env_emit "$@"
|
|
358
|
+
return $?
|
|
359
|
+
fi
|
|
360
|
+
|
|
351
361
|
if ! has_command mise; then
|
|
352
362
|
ui_err "mise not installed (required for dot env)"
|
|
353
363
|
exit 1
|
|
354
364
|
fi
|
|
355
365
|
case "${1:-list}" in
|
|
356
|
-
list | ls)
|
|
366
|
+
list | ls)
|
|
367
|
+
if has_command jq; then
|
|
368
|
+
ui_table_begin "Tool" "Version" "Source" "Requested"
|
|
369
|
+
while IFS=$'\t' read -r tool ver source req; do
|
|
370
|
+
ui_table_add "$tool" "$ver" "${source/$HOME/\~}" "$req"
|
|
371
|
+
done < <(mise ls --json 2>/dev/null | jq -r '
|
|
372
|
+
to_entries[] as $t
|
|
373
|
+
| $t.value[]
|
|
374
|
+
| [
|
|
375
|
+
$t.key,
|
|
376
|
+
(.version // "-"),
|
|
377
|
+
(.source.path // ""),
|
|
378
|
+
(.requested_version // "")
|
|
379
|
+
]
|
|
380
|
+
| @tsv
|
|
381
|
+
')
|
|
382
|
+
ui_table_end
|
|
383
|
+
else
|
|
384
|
+
mise ls
|
|
385
|
+
fi
|
|
386
|
+
# Surface orphan installs (tool versions on disk that no active config
|
|
387
|
+
# claims). `--dry-run-code` exits 1 iff there is something to prune;
|
|
388
|
+
# the call is fast (no I/O beyond reading the tracked-configs index).
|
|
389
|
+
if mise prune --dry-run-code --quiet >/dev/null 2>&1; then
|
|
390
|
+
:
|
|
391
|
+
else
|
|
392
|
+
echo ""
|
|
393
|
+
ui_warn "orphan installs" "tool versions on disk are not requested by any config"
|
|
394
|
+
ui_info "to clean" "run 'dot env prune' (dry-run) or 'dot env prune --yes' to commit"
|
|
395
|
+
fi
|
|
396
|
+
;;
|
|
397
|
+
prune)
|
|
398
|
+
shift
|
|
399
|
+
local commit=0
|
|
400
|
+
for arg in "$@"; do
|
|
401
|
+
case "$arg" in
|
|
402
|
+
--yes | -y) commit=1 ;;
|
|
403
|
+
esac
|
|
404
|
+
done
|
|
405
|
+
if ((commit)); then
|
|
406
|
+
mise prune
|
|
407
|
+
else
|
|
408
|
+
ui_info "dry-run" "showing what 'mise prune' would remove (pass --yes to commit)"
|
|
409
|
+
echo ""
|
|
410
|
+
mise prune --dry-run
|
|
411
|
+
echo ""
|
|
412
|
+
ui_info "next" "re-run with 'dot env prune --yes' to actually uninstall"
|
|
413
|
+
fi
|
|
414
|
+
;;
|
|
357
415
|
install)
|
|
358
416
|
shift
|
|
359
417
|
# Validate tool names to prevent injection
|
|
@@ -377,7 +435,7 @@ cmd_env_mise() {
|
|
|
377
435
|
|
|
378
436
|
cmd_profile() {
|
|
379
437
|
local data_file
|
|
380
|
-
data_file="$(
|
|
438
|
+
data_file="$(resolve_chezmoi_source_dir)/.chezmoidata.toml"
|
|
381
439
|
if [[ ! -f "$data_file" ]]; then
|
|
382
440
|
die ".chezmoidata.toml not found"
|
|
383
441
|
fi
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Dot — native PowerShell module for the dotfiles framework.
|
|
2
|
+
#
|
|
3
|
+
# This module provides native PowerShell cmdlets for the subset of
|
|
4
|
+
# `dot` subcommands that don't require bash. Closes Stub rows in
|
|
5
|
+
# docs/reference/POWERSHELL_PARITY.md.
|
|
6
|
+
#
|
|
7
|
+
# Loaded by bin/dot.ps1 dispatcher; cmdlets are also callable
|
|
8
|
+
# directly:
|
|
9
|
+
# Import-Module ./scripts/dot/powershell/Dot.psm1
|
|
10
|
+
# Get-DotVersion
|
|
11
|
+
# Invoke-DotHelp
|
|
12
|
+
# Test-DotAgentsSync -Verbose
|
|
13
|
+
#
|
|
14
|
+
# Tested via scripts/ci/windows-smoke-test.ps1.
|
|
15
|
+
|
|
16
|
+
#requires -Version 7.0
|
|
17
|
+
|
|
18
|
+
Set-StrictMode -Version Latest
|
|
19
|
+
$ErrorActionPreference = 'Stop'
|
|
20
|
+
|
|
21
|
+
# Module-level constants -------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
$script:RepoRoot = if ($env:DOT_REPO_ROOT) {
|
|
24
|
+
$env:DOT_REPO_ROOT
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
# When called from bin/dot.ps1 the dispatcher sets DOT_REPO_ROOT.
|
|
28
|
+
# When imported directly, infer it from this file's path:
|
|
29
|
+
# scripts/dot/powershell/Dot.psm1 → ../../..
|
|
30
|
+
(Resolve-Path (Join-Path $PSScriptRoot '..\..\..')).Path
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Post-Phase-4b (v0.2.503) .chezmoidata.toml ships under defaults/.
|
|
34
|
+
# Probe defaults/ first; fall back to legacy root location for older
|
|
35
|
+
# deployments that pre-date the .chezmoiroot activation.
|
|
36
|
+
$script:DataFile = Join-Path $script:RepoRoot 'defaults/.chezmoidata.toml'
|
|
37
|
+
if (-not (Test-Path $script:DataFile)) {
|
|
38
|
+
$script:DataFile = Join-Path $script:RepoRoot '.chezmoidata.toml'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Helpers ---------------------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
function script:Get-DotfilesVersionFromData {
|
|
44
|
+
if (-not (Test-Path $script:DataFile)) {
|
|
45
|
+
throw "Cannot read $script:DataFile (set DOT_REPO_ROOT to override)"
|
|
46
|
+
}
|
|
47
|
+
$line = Get-Content $script:DataFile |
|
|
48
|
+
Where-Object { $_ -match '^dotfiles_version\s*=\s*"([^"]+)"' } |
|
|
49
|
+
Select-Object -First 1
|
|
50
|
+
if (-not $line) {
|
|
51
|
+
throw "dotfiles_version not found in $script:DataFile"
|
|
52
|
+
}
|
|
53
|
+
if ($line -notmatch '"([^"]+)"') {
|
|
54
|
+
throw "Could not parse dotfiles_version from line: $line"
|
|
55
|
+
}
|
|
56
|
+
return $Matches[1]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function script:Write-DotBanner {
|
|
60
|
+
param([string]$Section)
|
|
61
|
+
if ($env:NO_COLOR) {
|
|
62
|
+
Write-Host "Dot · $Section"
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
$esc = [char]27
|
|
66
|
+
Write-Host "$esc[1;38;5;212mDot · $Section$esc[0m"
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
# Public cmdlets --------------------------------------------------------------
|
|
70
|
+
|
|
71
|
+
<#
|
|
72
|
+
.SYNOPSIS
|
|
73
|
+
Print the dotfiles framework version.
|
|
74
|
+
|
|
75
|
+
.DESCRIPTION
|
|
76
|
+
Native PowerShell implementation of `dot version`. Reads the
|
|
77
|
+
canonical version from .chezmoidata.toml (the single source of
|
|
78
|
+
truth) — does NOT shell out to bash.
|
|
79
|
+
|
|
80
|
+
.EXAMPLE
|
|
81
|
+
Get-DotVersion
|
|
82
|
+
0.2.503
|
|
83
|
+
|
|
84
|
+
.EXAMPLE
|
|
85
|
+
Get-DotVersion -AsObject | ConvertTo-Json
|
|
86
|
+
{
|
|
87
|
+
"Version": "0.2.503",
|
|
88
|
+
"Source": "...\\.chezmoidata.toml",
|
|
89
|
+
"Native": true
|
|
90
|
+
}
|
|
91
|
+
#>
|
|
92
|
+
function Get-DotVersion {
|
|
93
|
+
[CmdletBinding()]
|
|
94
|
+
param(
|
|
95
|
+
[switch]$AsObject
|
|
96
|
+
)
|
|
97
|
+
$version = Get-DotfilesVersionFromData
|
|
98
|
+
if ($AsObject) {
|
|
99
|
+
return [pscustomobject]@{
|
|
100
|
+
Version = $version
|
|
101
|
+
Source = $script:DataFile
|
|
102
|
+
Native = $true
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return $version
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
<#
|
|
109
|
+
.SYNOPSIS
|
|
110
|
+
Print the dot CLI help overview.
|
|
111
|
+
|
|
112
|
+
.DESCRIPTION
|
|
113
|
+
Native PowerShell implementation of `dot help`. Reads command
|
|
114
|
+
metadata from CLAUDE.md / the dispatcher's help table; does
|
|
115
|
+
NOT shell out to bash.
|
|
116
|
+
|
|
117
|
+
The full Linux-style help (every subcommand grouped by category)
|
|
118
|
+
requires the bash dispatcher; this cmdlet shows the Windows-
|
|
119
|
+
native subset.
|
|
120
|
+
#>
|
|
121
|
+
function Invoke-DotHelp {
|
|
122
|
+
[CmdletBinding()]
|
|
123
|
+
param()
|
|
124
|
+
$version = Get-DotfilesVersionFromData
|
|
125
|
+
Write-DotBanner -Section 'Help'
|
|
126
|
+
Write-Host ''
|
|
127
|
+
Write-Host " Version v$version"
|
|
128
|
+
Write-Host " Repo https://github.com/sebastienrousseau/dotfiles"
|
|
129
|
+
Write-Host " Docs https://github.com/sebastienrousseau/dotfiles/blob/master/docs/manual/"
|
|
130
|
+
Write-Host ''
|
|
131
|
+
Write-Host 'Native PowerShell commands (no bash required):'
|
|
132
|
+
Write-Host ''
|
|
133
|
+
Write-Host ' Get-DotVersion Print framework version'
|
|
134
|
+
Write-Host ' Invoke-DotHelp This screen'
|
|
135
|
+
Write-Host ' Test-DotAgentsSync Check AGENTS.md ↔ CLAUDE.md sync'
|
|
136
|
+
Write-Host ''
|
|
137
|
+
Write-Host 'Bash-bridged subcommands (require bash on PATH):'
|
|
138
|
+
Write-Host ''
|
|
139
|
+
Write-Host ' dot doctor Deep environment audit'
|
|
140
|
+
Write-Host ' dot env list List installed mise tools'
|
|
141
|
+
Write-Host ' dot env emit Emit v1 environment manifest'
|
|
142
|
+
Write-Host ' dot agents render Re-render every AGENTS.md harness'
|
|
143
|
+
Write-Host ' dot fleet status Single-node fleet status (Full on PowerShell)'
|
|
144
|
+
Write-Host ''
|
|
145
|
+
Write-Host 'See: dot help all (via bash) — full command index'
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
<#
|
|
149
|
+
.SYNOPSIS
|
|
150
|
+
Verify that AGENTS.md is in sync with CLAUDE.md.
|
|
151
|
+
|
|
152
|
+
.DESCRIPTION
|
|
153
|
+
Native PowerShell implementation of `dot agents check`. Both
|
|
154
|
+
files share a "Project Overview" paragraph that is the canonical
|
|
155
|
+
sync surface. If they diverge, AGENTS.md needs re-rendering
|
|
156
|
+
(run `dot agents render` via bash; native PowerShell render is
|
|
157
|
+
a separate ticket).
|
|
158
|
+
|
|
159
|
+
.OUTPUTS
|
|
160
|
+
[bool] — $true when in sync, $false otherwise.
|
|
161
|
+
|
|
162
|
+
.EXAMPLE
|
|
163
|
+
if (-not (Test-DotAgentsSync)) {
|
|
164
|
+
Write-Warning 'AGENTS.md is stale; run: bash dot_local/bin/executable_dot agents render'
|
|
165
|
+
}
|
|
166
|
+
#>
|
|
167
|
+
function Test-DotAgentsSync {
|
|
168
|
+
[CmdletBinding()]
|
|
169
|
+
[OutputType([bool])]
|
|
170
|
+
param()
|
|
171
|
+
$claude = Join-Path $script:RepoRoot 'CLAUDE.md'
|
|
172
|
+
$agents = Join-Path $script:RepoRoot 'AGENTS.md'
|
|
173
|
+
foreach ($f in @($claude, $agents)) {
|
|
174
|
+
if (-not (Test-Path $f)) {
|
|
175
|
+
Write-Error "missing: $f"
|
|
176
|
+
return $false
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
# Both files declare: "Chezmoi-managed dotfiles for macOS, Linux,
|
|
180
|
+
# WSL, and PowerShell 7.5+. Version `0.2.503`."
|
|
181
|
+
# That single line is the canonical sync surface — its content
|
|
182
|
+
# is generated from the same template by `dot agents render`.
|
|
183
|
+
$claudeLine = (Select-String -Path $claude -Pattern '^Chezmoi-managed dotfiles' -SimpleMatch:$false |
|
|
184
|
+
Select-Object -First 1).Line
|
|
185
|
+
$agentsLine = (Select-String -Path $agents -Pattern '^Chezmoi-managed dotfiles' -SimpleMatch:$false |
|
|
186
|
+
Select-Object -First 1).Line
|
|
187
|
+
if (-not $claudeLine -or -not $agentsLine) {
|
|
188
|
+
Write-Verbose "sync surface line not found — claude:[$claudeLine] agents:[$agentsLine]"
|
|
189
|
+
return $false
|
|
190
|
+
}
|
|
191
|
+
if ($claudeLine -ne $agentsLine) {
|
|
192
|
+
Write-Verbose "drift detected:`n CLAUDE.md: $claudeLine`n AGENTS.md: $agentsLine"
|
|
193
|
+
return $false
|
|
194
|
+
}
|
|
195
|
+
Write-Verbose 'AGENTS.md sync surface matches CLAUDE.md'
|
|
196
|
+
return $true
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
Export-ModuleMember -Function Get-DotVersion, Invoke-DotHelp, Test-DotAgentsSync
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
set -euo pipefail
|
|
4
4
|
|
|
5
5
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
# shellcheck source
|
|
6
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
7
7
|
# shellcheck disable=SC1091
|
|
8
|
-
source "$SCRIPT_DIR
|
|
8
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
9
9
|
|
|
10
10
|
ui_init
|
|
11
11
|
ui_header "Nerd Fonts"
|
|
@@ -33,7 +33,7 @@ echo -n " 🔍 Scanning for secrets... "
|
|
|
33
33
|
# Exclude assignments to values containing common placeholder strings or within template expressions
|
|
34
34
|
SENSITIVE_PATTERNS="(GITHUB_TOKEN|API_KEY|SECRET|password|private_key|AKIA[0-9A-Z]{16})[[:space:]]*[:=]"
|
|
35
35
|
# Exclusions list for legitimate variable checks or documentation
|
|
36
|
-
SECRET_EXCLUDES="test_|assertions.sh|.pre-commit|README|CHANGELOG|FEATURES.md|
|
|
36
|
+
SECRET_EXCLUDES="test_|assertions.sh|.pre-commit|README|CHANGELOG|FEATURES.md|docs/|install/lib/|.chezmoitemplates/|mcp-doctor.sh|\.github/workflows/"
|
|
37
37
|
# Also exclude .tmpl files from secret scanning as they contain many false positive markers
|
|
38
38
|
if echo "$STAGED_FILES" | grep -v "\.tmpl" | xargs grep -EiE "$SENSITIVE_PATTERNS" /dev/null | grep -vE "$SECRET_EXCLUDES" | grep -viE "dummy|placeholder|example|test|sk-placeholder|\\{\\{" >/dev/null 2>&1; then
|
|
39
39
|
printf '%b\\n' "${RED}FAILED${NC}"
|
|
@@ -140,6 +140,6 @@ if [[ $FAILED -eq 1 ]]; then
|
|
|
140
140
|
printf '%b\\n' " (Use --no-verify to bypass if absolutely necessary)"
|
|
141
141
|
exit 1
|
|
142
142
|
else
|
|
143
|
-
printf '%b\n' "${GREEN}${BOLD}✅ Audit passed.${NC} v0.2.
|
|
143
|
+
printf '%b\n' "${GREEN}${BOLD}✅ Audit passed.${NC} v0.2.503 standards maintained."
|
|
144
144
|
exit 0
|
|
145
145
|
fi
|
|
@@ -90,3 +90,16 @@ if [ "${DOTFILES_ALLOW_UNSKIPPED_PUSH:-}" = "1" ]; then
|
|
|
90
90
|
fi
|
|
91
91
|
|
|
92
92
|
bash "$repo_root/scripts/qa/reliability-audit.sh" --quick
|
|
93
|
+
|
|
94
|
+
# Step 4 — version-string consistency. Catches the case where the
|
|
95
|
+
# canonical version in .chezmoidata.toml advanced but a human-visible
|
|
96
|
+
# surface (CLI banner, man page, README badge) wasn't bumped. The
|
|
97
|
+
# script is cheap (~8 grep calls); failure tells the user exactly
|
|
98
|
+
# which file drifted and offers --fix.
|
|
99
|
+
bash "$repo_root/scripts/qa/check-version-consistency.sh" --quiet || {
|
|
100
|
+
echo "" >&2
|
|
101
|
+
echo "Pre-push blocked: version-string drift detected." >&2
|
|
102
|
+
echo "Run: scripts/qa/check-version-consistency.sh" >&2
|
|
103
|
+
echo "Then: scripts/qa/check-version-consistency.sh --fix (optional auto-fix)" >&2
|
|
104
|
+
exit 1
|
|
105
|
+
}
|