@sebastienrousseau/dotfiles 0.2.520 → 0.2.521
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 +18 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +43 -37
- package/install.sh +76 -10
- package/package.json +7 -7
- package/tools/README.md +49 -0
- package/tools/ci/install-chezmoi-verified.sh +68 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
- package/docs/AI.md +0 -179
- package/docs/ARCHITECTURE.md +0 -117
- package/docs/CNAME +0 -1
- package/docs/CONFIG_STRATEGY.md +0 -124
- package/docs/COPYRIGHT +0 -7
- package/docs/ECOSYSTEM.md +0 -220
- package/docs/GOLD-STANDARD-AUDIT.md +0 -352
- package/docs/GOVERNANCE.md +0 -98
- package/docs/MAINTAINERS.md +0 -41
- package/docs/MINIMUM-TOOLCHAIN.md +0 -100
- package/docs/NAMING_CONVENTIONS.md +0 -102
- package/docs/OPENCODE.md +0 -127
- package/docs/README.md +0 -84
- package/docs/STRUCTURE.md +0 -102
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
- package/docs/adr/ADR-002-shell-performance.md +0 -130
- package/docs/adr/ADR-003-security-first.md +0 -158
- package/docs/adr/ADR-004-cli-architecture.md +0 -171
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
- package/docs/adr/ADR-006-shell-selection.md +0 -124
- package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
- package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
- package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
- package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
- package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
- package/docs/adr/README.md +0 -40
- package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
- package/docs/architecture/ARCHITECTURE.md +0 -20
- package/docs/architecture/INTEROP.md +0 -44
- package/docs/architecture/REPO_LAYOUT.md +0 -241
- package/docs/architecture/WALKTHROUGH.md +0 -86
- package/docs/architecture/fleet-deployment.md +0 -77
- package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
- package/docs/archive/LEGACY_ROADMAP.md +0 -6
- package/docs/archive/MILESTONE_v0.2.493.md +0 -47
- package/docs/archive/PLAN.md +0 -199
- package/docs/archive/REPO_AUDIT.md +0 -31
- package/docs/articles/.pages +0 -6
- package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
- package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
- package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
- package/docs/articles/index.md +0 -36
- package/docs/guides/INSTALL.md +0 -144
- package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
- package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
- package/docs/guides/THEMING.md +0 -230
- package/docs/guides/TROUBLESHOOTING.md +0 -176
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
- package/docs/index.md +0 -132
- package/docs/interop/A2A.md +0 -39
- package/docs/interop/POWERSHELL.md +0 -102
- package/docs/manual/00-introduction.md +0 -89
- package/docs/manual/01-concepts/01-architecture.md +0 -138
- package/docs/manual/01-concepts/02-trust-model.md +0 -183
- package/docs/manual/01-concepts/03-theme-engine.md +0 -186
- package/docs/manual/01-concepts/04-fleet.md +0 -148
- package/docs/manual/01-concepts/05-self-healing.md +0 -204
- package/docs/manual/02-tutorials/01-first-install.md +0 -197
- package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
- package/docs/manual/02-tutorials/03-create-profile.md +0 -244
- package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
- package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
- package/docs/manual/03-reference/01-dot-cli.md +0 -475
- package/docs/manual/03-reference/02-config-files.md +0 -265
- package/docs/manual/03-reference/03-environment.md +0 -124
- package/docs/manual/03-reference/04-templates.md +0 -190
- package/docs/manual/03-reference/05-feature-flags.md +0 -187
- package/docs/manual/04-cookbook/01-recipes.md +0 -285
- package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
- package/docs/manual/04-cookbook/03-faq.md +0 -175
- package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
- package/docs/manual/05-appendices/B-security-checklist.md +0 -85
- package/docs/manual/05-appendices/C-glossary.md +0 -40
- package/docs/manual/05-appendices/D-bibliography.md +0 -58
- package/docs/manual/05-appendices/E-license.md +0 -38
- package/docs/manual/_toc.yml +0 -58
- package/docs/manual/command-index.md +0 -175
- package/docs/manual/concept-index.md +0 -170
- package/docs/manual/index.md +0 -66
- package/docs/migration/README.md +0 -81
- package/docs/migration/from-bare-git-repo.md +0 -156
- package/docs/migration/from-gnu-stow.md +0 -165
- package/docs/migration/from-plain-chezmoi.md +0 -148
- package/docs/migration/from-yadm.md +0 -187
- package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
- package/docs/operations/ATTESTATION.md +0 -44
- package/docs/operations/CI_CADENCE.md +0 -107
- package/docs/operations/CI_COMPOSITES.md +0 -156
- package/docs/operations/COMPLETIONS.md +0 -123
- package/docs/operations/COVERAGE.md +0 -204
- package/docs/operations/DRIFT.md +0 -107
- package/docs/operations/HARD_AUDIT_2026.md +0 -631
- package/docs/operations/MAINTENANCE.md +0 -63
- package/docs/operations/MANIFEST.md +0 -127
- package/docs/operations/MIGRATION.md +0 -109
- package/docs/operations/OPERATIONS.md +0 -188
- package/docs/operations/PERFORMANCE.md +0 -133
- package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
- package/docs/operations/REGISTRY.md +0 -90
- package/docs/operations/RELEASE_PIPELINE.md +0 -128
- package/docs/operations/RELIABILITY.md +0 -122
- package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
- package/docs/operations/ROADMAP.md +0 -10
- package/docs/operations/ROADMAP_2026.md +0 -7
- package/docs/operations/ROADMAP_V0_2_503.md +0 -10
- package/docs/operations/TESTING.md +0 -216
- package/docs/operations/TRACEABILITY.md +0 -44
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
- package/docs/operations/VERSION_SYNC.md +0 -393
- package/docs/packaging.md +0 -222
- package/docs/reference/ALIASES.md +0 -131
- package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
- package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
- package/docs/reference/FEATURE-MATRIX.md +0 -646
- package/docs/reference/FEATURES.md +0 -66
- package/docs/reference/FONTS.md +0 -112
- package/docs/reference/POWERSHELL_PARITY.md +0 -82
- package/docs/reference/PROFILES.md +0 -69
- package/docs/reference/SCREENSHOTS.md +0 -121
- package/docs/reference/SCRIPTS.md +0 -71
- package/docs/reference/SUPPORT_MATRIX.md +0 -80
- package/docs/reference/THEMES.md +0 -117
- package/docs/reference/TOOLS.md +0 -110
- package/docs/reference/UTILS.md +0 -243
- package/docs/registry.json +0 -6
- package/docs/schema/dot-env-v1.json +0 -110
- package/docs/schema/dot-registry-v1.json +0 -33
- package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
- package/docs/security/AUDIT_BYPASS.md +0 -103
- package/docs/security/AUTOMATION_SECRETS.md +0 -26
- package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
- package/docs/security/CI_PINNING.md +0 -129
- package/docs/security/COMMIT_SIGNING.md +0 -138
- package/docs/security/COMPLIANCE.md +0 -458
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
- package/docs/security/DISCLOSURE.md +0 -130
- package/docs/security/ENCRYPTION.md +0 -57
- package/docs/security/FMEA.md +0 -159
- package/docs/security/FUZZING.md +0 -209
- package/docs/security/HISTORY_FILTERING.md +0 -132
- package/docs/security/INCIDENT_RESPONSE.md +0 -579
- package/docs/security/INSTALL_VERIFICATION.md +0 -122
- package/docs/security/KEYS.md +0 -49
- package/docs/security/KEY_ROTATION.md +0 -303
- package/docs/security/MCP_POLICY.md +0 -78
- package/docs/security/POLICY_RELEASES.md +0 -37
- package/docs/security/README.md +0 -28
- package/docs/security/SCORECARD.md +0 -195
- package/docs/security/SECRETS.md +0 -158
- package/docs/security/SECURITY.md +0 -45
- package/docs/security/SECURITY_CHECKLIST.md +0 -55
- package/docs/security/SHELL_EXEMPTIONS.md +0 -145
- package/docs/security/SOUP_REGISTER.md +0 -36
- package/docs/security/THREAT_MODEL.md +0 -130
- package/docs/security/VERIFICATION_VALIDATION.md +0 -228
- package/docs/security/VERIFY_RELEASE.md +0 -201
- package/docs/security/security-pubkey.asc +0 -15
- package/docs/stylesheets/extra.css +0 -444
- package/docs/themes/README.md +0 -10
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
- package/docs/themes/hero-shot.svg +0 -78
- package/scripts/README.md +0 -123
- package/scripts/ci/check-copyright-headers.sh +0 -8
- package/scripts/ci/check-shell-preamble.sh +0 -8
- package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
- package/scripts/demo/record.sh +0 -43
- package/scripts/diagnostics/a2a-conformance.sh +0 -163
- package/scripts/diagnostics/alias-governance.sh +0 -165
- package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
- package/scripts/diagnostics/aliases-manifest.sh +0 -77
- package/scripts/diagnostics/attest-verify.sh +0 -147
- package/scripts/diagnostics/benchmark.sh +0 -408
- package/scripts/diagnostics/conflicts.sh +0 -73
- package/scripts/diagnostics/doctor-unified.sh +0 -43
- package/scripts/diagnostics/doctor.sh +0 -797
- package/scripts/diagnostics/drift-dashboard.sh +0 -203
- package/scripts/diagnostics/health.sh +0 -656
- package/scripts/diagnostics/history-analysis.sh +0 -86
- package/scripts/diagnostics/mcp-doctor.sh +0 -582
- package/scripts/diagnostics/perf.sh +0 -453
- package/scripts/diagnostics/scorecard.sh +0 -120
- package/scripts/diagnostics/secret-governance.sh +0 -65
- package/scripts/diagnostics/security-score.sh +0 -467
- package/scripts/diagnostics/smoke-test.sh +0 -88
- package/scripts/diagnostics/snapshot.sh +0 -90
- package/scripts/diagnostics/verify.sh +0 -108
- package/scripts/diagnostics/verify_state.sh +0 -73
- package/scripts/diagnostics/version-locks.sh +0 -94
- package/scripts/diagnostics/workstation-attestation.sh +0 -212
- package/scripts/dot/commands/agent.sh +0 -535
- package/scripts/dot/commands/agents.sh +0 -352
- package/scripts/dot/commands/ai.sh +0 -600
- package/scripts/dot/commands/aliases.sh +0 -277
- package/scripts/dot/commands/appearance.sh +0 -110
- package/scripts/dot/commands/completion.sh +0 -171
- package/scripts/dot/commands/core.sh +0 -217
- package/scripts/dot/commands/diagnostics.sh +0 -265
- package/scripts/dot/commands/env-emit.sh +0 -203
- package/scripts/dot/commands/fleet.sh +0 -711
- package/scripts/dot/commands/init.sh +0 -185
- package/scripts/dot/commands/lint.sh +0 -208
- package/scripts/dot/commands/manual.sh +0 -169
- package/scripts/dot/commands/meta.sh +0 -438
- package/scripts/dot/commands/patterns.sh +0 -55
- package/scripts/dot/commands/registry.sh +0 -455
- package/scripts/dot/commands/restore.sh +0 -232
- package/scripts/dot/commands/secrets.sh +0 -296
- package/scripts/dot/commands/security.sh +0 -102
- package/scripts/dot/commands/tools.sh +0 -570
- package/scripts/dot/data/alias-deprecations.tsv +0 -2
- package/scripts/dot/powershell/Dot.psm1 +0 -319
- package/scripts/fonts/install-nerd-fonts.sh +0 -75
- package/scripts/fonts/patch-fonts.sh +0 -36
- package/scripts/git-hooks/install.sh +0 -12
- package/scripts/git-hooks/pre-commit +0 -12
- package/scripts/git-hooks/pre-commit-audit.sh +0 -146
- package/scripts/git-hooks/pre-push +0 -105
- package/scripts/git-hooks/prepare-commit-msg +0 -29
- package/scripts/lib/secrets_provider.sh +0 -200
- package/scripts/nvim/headless-upgrade.lua +0 -81
- package/scripts/ops/ai-setup.sh +0 -71
- package/scripts/ops/bundle.sh +0 -104
- package/scripts/ops/chaos.sh +0 -50
- package/scripts/ops/chezmoi-apply.sh +0 -333
- package/scripts/ops/chezmoi-diff.sh +0 -16
- package/scripts/ops/chezmoi-remove.sh +0 -46
- package/scripts/ops/chezmoi-update.sh +0 -67
- package/scripts/ops/heal-chezmoi.sh +0 -87
- package/scripts/ops/heal-system.sh +0 -129
- package/scripts/ops/heal-tools.sh +0 -297
- package/scripts/ops/heal.sh +0 -223
- package/scripts/ops/post-apply-repair.sh +0 -107
- package/scripts/ops/prewarm.sh +0 -128
- package/scripts/ops/release.sh +0 -262
- package/scripts/ops/rollback.sh +0 -613
- package/scripts/ops/setup.sh +0 -138
- package/scripts/ops/teleport.sh +0 -34
- package/scripts/qa/check-feature-matrix.sh +0 -296
- package/scripts/qa/check-version-consistency.sh +0 -12
- package/scripts/qa/coverage-baseline.sh +0 -61
- package/scripts/qa/docs-coverage.sh +0 -118
- package/scripts/qa/examples-coverage.sh +0 -94
- package/scripts/qa/powershell-contract.ps1 +0 -95
- package/scripts/qa/reliability-audit.sh +0 -139
- package/scripts/qa/scorecard-snapshot.sh +0 -128
- package/scripts/qa/traceability-coverage.sh +0 -124
- package/scripts/qa/validate-examples.sh +0 -90
- package/scripts/qa/wsl-contract.sh +0 -12
- package/scripts/secrets/age-init.sh +0 -82
- package/scripts/secrets/create-secrets-file.sh +0 -46
- package/scripts/secrets/encrypt-ssh-key.sh +0 -44
- package/scripts/security/backup.sh +0 -58
- package/scripts/security/check-disclosure-key-expiry.sh +0 -111
- package/scripts/security/dns-doh.sh +0 -52
- package/scripts/security/encryption-check.sh +0 -55
- package/scripts/security/enforce-policies.sh +0 -552
- package/scripts/security/firewall.sh +0 -91
- package/scripts/security/lock-configs.sh +0 -67
- package/scripts/security/lock-screen.sh +0 -56
- package/scripts/security/manage-secrets.sh +0 -429
- package/scripts/security/ssh-cert.sh +0 -204
- package/scripts/security/telemetry-kill.sh +0 -51
- package/scripts/security/usb-safety.sh +0 -52
- package/scripts/theme/apply-gnome-theme.sh +0 -333
- package/scripts/theme/extract-heic-frames.sh +0 -115
- package/scripts/theme/extract-theme.py +0 -1020
- package/scripts/theme/install-boot-logo.sh +0 -63
- package/scripts/theme/install-catppuccin-themes.sh +0 -371
- package/scripts/theme/install-cursors.sh +0 -26
- package/scripts/theme/install-file-icons.sh +0 -27
- package/scripts/theme/install-grub-theme.sh +0 -62
- package/scripts/theme/install-lock-icon.sh +0 -31
- package/scripts/theme/merge-wallpaper.sh +0 -146
- package/scripts/theme/rebuild-themes.sh +0 -603
- package/scripts/theme/switch.sh +0 -476
- package/scripts/theme/wallpaper-rotate.sh +0 -137
- package/scripts/theme/wallpaper-sync.sh +0 -690
- package/scripts/tools/cmatrix.sh +0 -22
- package/scripts/tools/detect-collisions.py +0 -103
- package/scripts/tools/emoji-picker.sh +0 -49
- package/scripts/tools/figlet-banner.sh +0 -19
- package/scripts/tools/log-rotate.sh +0 -31
- package/scripts/tools/lolcat-wrap.sh +0 -20
- package/scripts/tools/pipes.sh +0 -49
- package/scripts/tuning/linux.sh +0 -186
- package/scripts/tuning/macos.sh +0 -56
- package/scripts/uninstall.sh +0 -86
- package/scripts/verify-release-versions +0 -156
- package/scripts/version-sync.sh +0 -714
- package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
- package/templates/chezmoi-data/mac-m1.toml.example +0 -16
- package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
- package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
- package/templates/projects/go/.github/workflows/ci.yml +0 -31
- package/templates/projects/go/README.md +0 -7
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
- package/templates/projects/go/go.mod +0 -3
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/node/.github/workflows/ci.yml +0 -30
- package/templates/projects/node/README.md +0 -7
- package/templates/projects/node/package-lock.json +0 -12
- package/templates/projects/node/package.json +0 -10
- package/templates/projects/node/src/index.js +0 -3
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
- package/templates/projects/python/.github/workflows/ci.yml +0 -34
- package/templates/projects/python/README.md +0 -7
- package/templates/projects/python/pyproject.toml +0 -25
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
- package/templates/projects/python/tests/test_basic.py +0 -3
package/scripts/ops/setup.sh
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
# Interactive setup for dotfiles preferences
|
|
5
|
-
# Usage: dot setup
|
|
6
|
-
|
|
7
|
-
set -euo pipefail
|
|
8
|
-
|
|
9
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
-
# shellcheck source=../../lib/dot/ui.sh
|
|
11
|
-
# shellcheck disable=SC1091
|
|
12
|
-
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
13
|
-
|
|
14
|
-
ui_init
|
|
15
|
-
|
|
16
|
-
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi"
|
|
17
|
-
CONFIG_FILE="$CONFIG_DIR/chezmoi.toml"
|
|
18
|
-
BACKUP_FILE="$CONFIG_DIR/chezmoi.toml.bak.$(date +%Y%m%d_%H%M%S)"
|
|
19
|
-
mkdir -p "$CONFIG_DIR"
|
|
20
|
-
|
|
21
|
-
choose() {
|
|
22
|
-
local prompt="$1"
|
|
23
|
-
shift
|
|
24
|
-
if command -v gum >/dev/null 2>&1; then
|
|
25
|
-
gum choose --cursor.foreground=212 --selected.foreground=212 --header "$prompt" "$@"
|
|
26
|
-
else
|
|
27
|
-
echo "$prompt"
|
|
28
|
-
select opt in "$@"; do
|
|
29
|
-
echo "$opt"
|
|
30
|
-
return
|
|
31
|
-
done
|
|
32
|
-
fi
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
confirm() {
|
|
36
|
-
local prompt="$1"
|
|
37
|
-
if command -v gum >/dev/null 2>&1; then
|
|
38
|
-
gum confirm "$prompt"
|
|
39
|
-
else
|
|
40
|
-
read -r -p "$prompt [y/N]: " ans
|
|
41
|
-
[[ "$ans" =~ ^[Yy]$ ]]
|
|
42
|
-
fi
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
ui_header "Dotfiles Setup"
|
|
46
|
-
|
|
47
|
-
profile=$(choose "Select profile" laptop desktop server minimal)
|
|
48
|
-
|
|
49
|
-
feature_zsh=true
|
|
50
|
-
feature_nvim=true
|
|
51
|
-
feature_tmux=true
|
|
52
|
-
feature_gui=true
|
|
53
|
-
feature_secrets=true
|
|
54
|
-
|
|
55
|
-
confirm "Enable Zsh config?" || feature_zsh=false
|
|
56
|
-
confirm "Enable Neovim config?" || feature_nvim=false
|
|
57
|
-
confirm "Enable tmux config?" || feature_tmux=false
|
|
58
|
-
confirm "Enable GUI extras (fonts/themes)?" || feature_gui=false
|
|
59
|
-
confirm "Enable secrets integration?" || feature_secrets=false
|
|
60
|
-
|
|
61
|
-
alias_profile=$(choose "Alias profile" standard minimal)
|
|
62
|
-
strict_mode=false
|
|
63
|
-
confirm "Enable strict alias governance?" && strict_mode=true
|
|
64
|
-
|
|
65
|
-
secrets_provider=$(choose "Secrets provider" auto sops onepassword bitwarden)
|
|
66
|
-
|
|
67
|
-
theme_choices=(
|
|
68
|
-
macos-ai-dark macos-ai-light
|
|
69
|
-
macos-bigsur-dark macos-bigsur-light
|
|
70
|
-
macos-blue-dark macos-blue-light
|
|
71
|
-
macos-blush-dark macos-blush-light
|
|
72
|
-
macos-citrus-dark macos-citrus-light
|
|
73
|
-
macos-green-dark macos-green-light
|
|
74
|
-
macos-gridgreen-dark macos-gridgreen-light
|
|
75
|
-
macos-heatmap-dark macos-heatmap-light
|
|
76
|
-
macos-indigo-dark macos-indigo-light
|
|
77
|
-
macos-miami-dark macos-miami-light
|
|
78
|
-
macos-mojave-dark macos-mojave-light
|
|
79
|
-
macos-monterey-dark macos-monterey-light
|
|
80
|
-
macos-nova-dark macos-nova-light
|
|
81
|
-
macos-orange-dark macos-orange-light
|
|
82
|
-
macos-pink-dark macos-pink-light
|
|
83
|
-
macos-purple-dark macos-purple-light
|
|
84
|
-
macos-sequoia-dark macos-sequoia-light
|
|
85
|
-
macos-silver-dark macos-silver-light
|
|
86
|
-
macos-sonoma-dark macos-sonoma-light
|
|
87
|
-
macos-tahoe-dark macos-tahoe-light
|
|
88
|
-
macos-valentine-dark macos-valentine-light
|
|
89
|
-
macos-ventura-dark macos-ventura-light
|
|
90
|
-
macos-wave-dark macos-wave-light
|
|
91
|
-
macos-yellow-dark macos-yellow-light
|
|
92
|
-
)
|
|
93
|
-
theme=$(choose "Theme" "${theme_choices[@]}")
|
|
94
|
-
|
|
95
|
-
if [[ -f "$CONFIG_FILE" ]]; then
|
|
96
|
-
cp "$CONFIG_FILE" "$BACKUP_FILE"
|
|
97
|
-
ui_info "Backup" "$BACKUP_FILE"
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
cat >"$CONFIG_FILE" <<TOML
|
|
101
|
-
[data]
|
|
102
|
-
profile = "$profile"
|
|
103
|
-
theme = "$theme"
|
|
104
|
-
|
|
105
|
-
[data.features]
|
|
106
|
-
zsh = ${feature_zsh}
|
|
107
|
-
nvim = ${feature_nvim}
|
|
108
|
-
tmux = ${feature_tmux}
|
|
109
|
-
gui = ${feature_gui}
|
|
110
|
-
secrets = ${feature_secrets}
|
|
111
|
-
|
|
112
|
-
[data.aliases]
|
|
113
|
-
profile = "$alias_profile"
|
|
114
|
-
|
|
115
|
-
[data.aliases.policy]
|
|
116
|
-
strict_mode = ${strict_mode}
|
|
117
|
-
|
|
118
|
-
[data.aliases.buckets]
|
|
119
|
-
system = true
|
|
120
|
-
svn = true
|
|
121
|
-
|
|
122
|
-
[data.secrets]
|
|
123
|
-
|
|
124
|
-
[data.secrets.policy]
|
|
125
|
-
provider = "$secrets_provider"
|
|
126
|
-
auto_load = true
|
|
127
|
-
TOML
|
|
128
|
-
|
|
129
|
-
ui_ok "Config" "Updated $CONFIG_FILE"
|
|
130
|
-
|
|
131
|
-
if confirm "Apply dotfiles now?"; then
|
|
132
|
-
if command -v chezmoi >/dev/null 2>&1; then
|
|
133
|
-
chezmoi apply
|
|
134
|
-
ui_ok "Apply" "Complete"
|
|
135
|
-
else
|
|
136
|
-
ui_warn "chezmoi" "Not installed"
|
|
137
|
-
fi
|
|
138
|
-
fi
|
package/scripts/ops/teleport.sh
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
# Script: teleport.sh
|
|
5
|
-
# Description: Deploys dotfiles to a remote host ephemerally.
|
|
6
|
-
# Usage: ./teleport.sh user@hostname
|
|
7
|
-
|
|
8
|
-
set -euo pipefail
|
|
9
|
-
|
|
10
|
-
TARGET="${1:-}"
|
|
11
|
-
|
|
12
|
-
if [[ -z "$TARGET" ]]; then
|
|
13
|
-
echo "Usage: dot teleport user@host"
|
|
14
|
-
exit 1
|
|
15
|
-
fi
|
|
16
|
-
|
|
17
|
-
# Validate SSH target: must be user@host format, no shell metacharacters
|
|
18
|
-
if [[ ! "$TARGET" =~ ^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+$ ]]; then
|
|
19
|
-
echo "Invalid SSH target: $TARGET" >&2
|
|
20
|
-
echo "Expected format: user@hostname (alphanumeric, dots, hyphens, underscores only)" >&2
|
|
21
|
-
exit 1
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
echo " Teleporting dotfiles to ${TARGET}..."
|
|
25
|
-
|
|
26
|
-
# 1. Archive the current state
|
|
27
|
-
# 2. Pipe to SSH
|
|
28
|
-
# 3. Extract in remote home directory with safety flags
|
|
29
|
-
# --no-same-owner: don't try to preserve owner (non-root)
|
|
30
|
-
# --strip-components=0: don't strip path components
|
|
31
|
-
chezmoi archive | ssh "$TARGET" 'tar xz -C "$HOME" --no-same-owner'
|
|
32
|
-
|
|
33
|
-
echo " Teleport successful!"
|
|
34
|
-
echo " Note: Changes are applied to files, but shell may need restart or sourcing."
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
#
|
|
5
|
-
# check-feature-matrix.sh — drift gate for docs/reference/FEATURE-MATRIX.md.
|
|
6
|
-
#
|
|
7
|
-
# The matrix is a contract: every user-facing feature of the `dot` CLI has a
|
|
8
|
-
# row naming the regression test, benchmark, example and manual section that
|
|
9
|
-
# cover it. A contract nobody checks rots, so this script checks it, and
|
|
10
|
-
# ci.yml runs it on every push.
|
|
11
|
-
#
|
|
12
|
-
# Four checks:
|
|
13
|
-
#
|
|
14
|
-
# 1. Command coverage — every command the dispatcher can route (bin/dot's
|
|
15
|
-
# route table, which is what `scripts/dot/commands/*.sh` are reached
|
|
16
|
-
# through) and every command in the generated docs/manual/command-index.md
|
|
17
|
-
# has at least one row.
|
|
18
|
-
# 2. Test coverage — every regression test function named in a row is
|
|
19
|
-
# defined by one of tests/regression/test_feature_matrix_*.sh.
|
|
20
|
-
# 3. Benchmark coverage — every benchmark id named in a row is produced by
|
|
21
|
-
# `benches/dot_command_bench.sh --list-ids`.
|
|
22
|
-
# 4. Example coverage — every example file named in a row exists and is
|
|
23
|
-
# executable by scripts/qa/validate-examples.sh.
|
|
24
|
-
#
|
|
25
|
-
# Usage:
|
|
26
|
-
# scripts/qa/check-feature-matrix.sh [--quiet]
|
|
27
|
-
#
|
|
28
|
-
# Exit codes:
|
|
29
|
-
# 0 the matrix is in sync
|
|
30
|
-
# 1 drift detected (details on stderr)
|
|
31
|
-
# 2 bad invocation, or a file the gate depends on is missing
|
|
32
|
-
|
|
33
|
-
set -euo pipefail
|
|
34
|
-
|
|
35
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
36
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
|
|
37
|
-
cd "$REPO_ROOT"
|
|
38
|
-
|
|
39
|
-
MATRIX="docs/reference/FEATURE-MATRIX.md"
|
|
40
|
-
DOT_BIN="bin/dot"
|
|
41
|
-
COMMAND_INDEX="docs/manual/command-index.md"
|
|
42
|
-
BENCH="benches/dot_command_bench.sh"
|
|
43
|
-
TEST_GLOB="tests/regression/test_feature_matrix_*.sh"
|
|
44
|
-
|
|
45
|
-
QUIET=0
|
|
46
|
-
case "${1:-}" in
|
|
47
|
-
--quiet | -q) QUIET=1 ;;
|
|
48
|
-
-h | --help)
|
|
49
|
-
sed -n '5,30p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
|
|
50
|
-
exit 0
|
|
51
|
-
;;
|
|
52
|
-
"") ;;
|
|
53
|
-
*)
|
|
54
|
-
printf 'Unknown option: %s\n' "$1" >&2
|
|
55
|
-
exit 2
|
|
56
|
-
;;
|
|
57
|
-
esac
|
|
58
|
-
|
|
59
|
-
say() { [[ "$QUIET" -eq 1 ]] || printf '%s\n' "$*"; }
|
|
60
|
-
|
|
61
|
-
for required in "$MATRIX" "$DOT_BIN" "$COMMAND_INDEX" "$BENCH"; do
|
|
62
|
-
if [[ ! -f "$required" ]]; then
|
|
63
|
-
printf '::error::required file missing: %s\n' "$required" >&2
|
|
64
|
-
exit 2
|
|
65
|
-
fi
|
|
66
|
-
done
|
|
67
|
-
|
|
68
|
-
failures=0
|
|
69
|
-
fail() {
|
|
70
|
-
printf '::error::%s\n' "$1" >&2
|
|
71
|
-
failures=$((failures + 1))
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
work="$(mktemp -d)"
|
|
75
|
-
trap 'rm -rf "$work"' EXIT
|
|
76
|
-
|
|
77
|
-
# ---------------------------------------------------------------------------
|
|
78
|
-
# Parse the matrix.
|
|
79
|
-
#
|
|
80
|
-
# Rows look like:
|
|
81
|
-
# | `dot fleet apply` | --dry-run | `test_fm_x` | `run:y` | `examples/z.sh` | `docs/…` | regression |
|
|
82
|
-
#
|
|
83
|
-
# Field 1 is the command (backticked, "dot " prefix), 3 the test function,
|
|
84
|
-
# 4 the benchmark id, 5 the example path. The two explanatory tables at the
|
|
85
|
-
# top of the document have different shapes and are skipped by requiring a
|
|
86
|
-
# leading "| `dot ".
|
|
87
|
-
# ---------------------------------------------------------------------------
|
|
88
|
-
|
|
89
|
-
awk '
|
|
90
|
-
# A cell may legitimately contain an escaped pipe (a variant like
|
|
91
|
-
# "set advisory\|strict"). Neutralise those BEFORE splitting on "|", or the
|
|
92
|
-
# row shifts a column and every later check reads the wrong cell.
|
|
93
|
-
/^\| `dot / {
|
|
94
|
-
line = $0
|
|
95
|
-
gsub(/\\\|/, "\002", line)
|
|
96
|
-
n = split(line, cell, "|")
|
|
97
|
-
# 7 content columns become 9 fields: the empty strings either side of the
|
|
98
|
-
# leading and trailing pipes. The document also carries a 3-column summary
|
|
99
|
-
# table of the unmeasurable rows, which must not be parsed as feature rows.
|
|
100
|
-
if (n < 9) next
|
|
101
|
-
for (i = 1; i <= n; i++) {
|
|
102
|
-
gsub(/^[ \t]+|[ \t]+$/, "", cell[i])
|
|
103
|
-
gsub(/`/, "", cell[i])
|
|
104
|
-
gsub(/\002/, "|", cell[i])
|
|
105
|
-
}
|
|
106
|
-
# cell[2] command, cell[4] test, cell[5] bench, cell[6] example, cell[8] coverage
|
|
107
|
-
print cell[2] "\t" cell[4] "\t" cell[5] "\t" cell[6] "\t" cell[8]
|
|
108
|
-
}
|
|
109
|
-
' "$MATRIX" >"$work/rows.tsv"
|
|
110
|
-
|
|
111
|
-
row_count="$(wc -l <"$work/rows.tsv" | tr -d ' ')"
|
|
112
|
-
if [[ "$row_count" -lt 50 ]]; then
|
|
113
|
-
fail "only $row_count rows parsed from $MATRIX — has the table format changed?"
|
|
114
|
-
exit 1
|
|
115
|
-
fi
|
|
116
|
-
|
|
117
|
-
# The command cell is "dot <command>"; a row may name a subcommand
|
|
118
|
-
# ("dot fleet apply"), so the routable command is the first word after "dot".
|
|
119
|
-
cut -f1 "$work/rows.tsv" | sed 's/^dot *//' | awk '{print $1}' |
|
|
120
|
-
sort -u >"$work/matrix-commands.txt"
|
|
121
|
-
cut -f2 "$work/rows.tsv" | sort -u | grep -v '^$' >"$work/matrix-tests.txt"
|
|
122
|
-
cut -f3 "$work/rows.tsv" | sort -u | grep -v '^$' >"$work/matrix-benches.txt"
|
|
123
|
-
cut -f4 "$work/rows.tsv" | sort -u | grep -v '^$' >"$work/matrix-examples.txt"
|
|
124
|
-
|
|
125
|
-
say "Feature matrix: $row_count rows, $(wc -l <"$work/matrix-commands.txt" | tr -d ' ') distinct commands"
|
|
126
|
-
|
|
127
|
-
# ---------------------------------------------------------------------------
|
|
128
|
-
# 1. Command coverage
|
|
129
|
-
# ---------------------------------------------------------------------------
|
|
130
|
-
|
|
131
|
-
# bin/dot's route table is the authority on what the dispatcher can reach.
|
|
132
|
-
# Flag aliases (--help/-h/--version/-v) are not commands and are excluded.
|
|
133
|
-
awk '/^_dot_command_routes\(\)/,/^EOF$/' "$DOT_BIN" |
|
|
134
|
-
awk -F'|' '/^[a-z][a-z0-9-]*\|[a-z]+$/ { print $1 }' |
|
|
135
|
-
sort -u >"$work/routed.txt"
|
|
136
|
-
|
|
137
|
-
# The generated command index is the documented surface.
|
|
138
|
-
grep -oE '^\| `dot [a-z][a-z0-9-]*' "$COMMAND_INDEX" |
|
|
139
|
-
sed 's/^| `dot //' | sort -u >"$work/indexed.txt"
|
|
140
|
-
|
|
141
|
-
missing_routed="$(comm -23 "$work/routed.txt" "$work/matrix-commands.txt")"
|
|
142
|
-
if [[ -n "$missing_routed" ]]; then
|
|
143
|
-
while IFS= read -r cmd; do
|
|
144
|
-
[[ -n "$cmd" ]] || continue
|
|
145
|
-
fail "routable command has no FEATURE-MATRIX row: dot $cmd"
|
|
146
|
-
done <<<"$missing_routed"
|
|
147
|
-
else
|
|
148
|
-
say " ✓ every routable command has a row ($(wc -l <"$work/routed.txt" | tr -d ' ') commands)"
|
|
149
|
-
fi
|
|
150
|
-
|
|
151
|
-
missing_indexed="$(comm -23 "$work/indexed.txt" "$work/matrix-commands.txt")"
|
|
152
|
-
if [[ -n "$missing_indexed" ]]; then
|
|
153
|
-
while IFS= read -r cmd; do
|
|
154
|
-
[[ -n "$cmd" ]] || continue
|
|
155
|
-
fail "command documented in $COMMAND_INDEX has no FEATURE-MATRIX row: dot $cmd"
|
|
156
|
-
done <<<"$missing_indexed"
|
|
157
|
-
else
|
|
158
|
-
say " ✓ every documented command has a row ($(wc -l <"$work/indexed.txt" | tr -d ' ') commands)"
|
|
159
|
-
fi
|
|
160
|
-
|
|
161
|
-
# A row naming a command the dispatcher cannot route is a phantom: the
|
|
162
|
-
# feature was removed but its coverage claim was not.
|
|
163
|
-
phantom="$(comm -13 <(sort -u "$work/routed.txt" "$work/indexed.txt") \
|
|
164
|
-
"$work/matrix-commands.txt")"
|
|
165
|
-
if [[ -n "$phantom" ]]; then
|
|
166
|
-
while IFS= read -r cmd; do
|
|
167
|
-
[[ -n "$cmd" ]] || continue
|
|
168
|
-
fail "FEATURE-MATRIX row names a command that is neither routable nor documented: dot $cmd"
|
|
169
|
-
done <<<"$phantom"
|
|
170
|
-
else
|
|
171
|
-
say " ✓ no phantom command rows"
|
|
172
|
-
fi
|
|
173
|
-
|
|
174
|
-
# ---------------------------------------------------------------------------
|
|
175
|
-
# 2. Test coverage
|
|
176
|
-
# ---------------------------------------------------------------------------
|
|
177
|
-
|
|
178
|
-
# `|| true`: this runs at top level under `set -euo pipefail`, so without it an
|
|
179
|
-
# unmatched glob (or a grep that simply finds nothing) aborts the whole script
|
|
180
|
-
# with grep's status before the emptiness check below can run — exit 2 and not
|
|
181
|
-
# a word about why, instead of the diagnostic that check exists to print.
|
|
182
|
-
# shellcheck disable=SC2086
|
|
183
|
-
grep -ho '^test_fm_[a-z0-9_]*()' $TEST_GLOB 2>/dev/null |
|
|
184
|
-
sed 's/()//' | sort -u >"$work/defined-tests.txt" || true
|
|
185
|
-
|
|
186
|
-
if [[ ! -s "$work/defined-tests.txt" ]]; then
|
|
187
|
-
fail "no test functions found in $TEST_GLOB"
|
|
188
|
-
else
|
|
189
|
-
undefined="$(comm -23 "$work/matrix-tests.txt" "$work/defined-tests.txt")"
|
|
190
|
-
if [[ -n "$undefined" ]]; then
|
|
191
|
-
while IFS= read -r fn; do
|
|
192
|
-
[[ -n "$fn" ]] || continue
|
|
193
|
-
fail "FEATURE-MATRIX names a test function that does not exist: $fn"
|
|
194
|
-
done <<<"$undefined"
|
|
195
|
-
else
|
|
196
|
-
say " ✓ every named test function exists ($(wc -l <"$work/matrix-tests.txt" | tr -d ' ') referenced, $(wc -l <"$work/defined-tests.txt" | tr -d ' ') defined)"
|
|
197
|
-
fi
|
|
198
|
-
|
|
199
|
-
# A defined-but-unreferenced test is not an error — it may be a helper or a
|
|
200
|
-
# cross-cutting invariant — but it is worth surfacing so coverage does not
|
|
201
|
-
# quietly drift out of the table.
|
|
202
|
-
orphan_count="$(comm -13 "$work/matrix-tests.txt" "$work/defined-tests.txt" | grep -c . || true)"
|
|
203
|
-
if [[ "$orphan_count" -gt 0 ]]; then
|
|
204
|
-
say " · $orphan_count test function(s) defined but not referenced by any row"
|
|
205
|
-
fi
|
|
206
|
-
fi
|
|
207
|
-
|
|
208
|
-
# Every function the matrix names must also actually be CALLED by its file;
|
|
209
|
-
# a defined-but-never-invoked test passes vacuously.
|
|
210
|
-
uncalled=0
|
|
211
|
-
while IFS= read -r fn; do
|
|
212
|
-
[[ -n "$fn" ]] || continue
|
|
213
|
-
# shellcheck disable=SC2086
|
|
214
|
-
if ! grep -hqE "^[[:space:]]*${fn}([[:space:]]|$)" $TEST_GLOB 2>/dev/null; then
|
|
215
|
-
fail "test function is defined but never called: $fn"
|
|
216
|
-
uncalled=$((uncalled + 1))
|
|
217
|
-
fi
|
|
218
|
-
done <"$work/matrix-tests.txt"
|
|
219
|
-
[[ "$uncalled" -eq 0 ]] && say " ✓ every named test function is invoked by its file"
|
|
220
|
-
|
|
221
|
-
# ---------------------------------------------------------------------------
|
|
222
|
-
# 3. Benchmark coverage
|
|
223
|
-
# ---------------------------------------------------------------------------
|
|
224
|
-
|
|
225
|
-
if bash "$BENCH" --list-ids >"$work/bench-ids.txt" 2>/dev/null &&
|
|
226
|
-
[[ -s "$work/bench-ids.txt" ]]; then
|
|
227
|
-
sort -u -o "$work/bench-ids.txt" "$work/bench-ids.txt"
|
|
228
|
-
unknown_bench="$(comm -23 "$work/matrix-benches.txt" "$work/bench-ids.txt")"
|
|
229
|
-
if [[ -n "$unknown_bench" ]]; then
|
|
230
|
-
while IFS= read -r id; do
|
|
231
|
-
[[ -n "$id" ]] || continue
|
|
232
|
-
fail "FEATURE-MATRIX names a benchmark id the harness does not produce: $id"
|
|
233
|
-
done <<<"$unknown_bench"
|
|
234
|
-
else
|
|
235
|
-
say " ✓ every named benchmark id exists ($(wc -l <"$work/matrix-benches.txt" | tr -d ' ') referenced, $(wc -l <"$work/bench-ids.txt" | tr -d ' ') available)"
|
|
236
|
-
fi
|
|
237
|
-
|
|
238
|
-
# Cold-start coverage must be total: one help benchmark per routable command.
|
|
239
|
-
missing_bench=0
|
|
240
|
-
while IFS= read -r cmd; do
|
|
241
|
-
[[ -n "$cmd" ]] || continue
|
|
242
|
-
if ! grep -qx "help:$cmd" "$work/bench-ids.txt"; then
|
|
243
|
-
fail "no cold-start benchmark for routable command: dot $cmd"
|
|
244
|
-
missing_bench=$((missing_bench + 1))
|
|
245
|
-
fi
|
|
246
|
-
done <"$work/routed.txt"
|
|
247
|
-
[[ "$missing_bench" -eq 0 ]] &&
|
|
248
|
-
say " ✓ every routable command has a cold-start benchmark"
|
|
249
|
-
else
|
|
250
|
-
fail "could not list benchmark ids: $BENCH --list-ids"
|
|
251
|
-
fi
|
|
252
|
-
|
|
253
|
-
# ---------------------------------------------------------------------------
|
|
254
|
-
# 4. Example coverage
|
|
255
|
-
# ---------------------------------------------------------------------------
|
|
256
|
-
|
|
257
|
-
missing_example=0
|
|
258
|
-
while IFS= read -r path; do
|
|
259
|
-
[[ -n "$path" ]] || continue
|
|
260
|
-
if [[ ! -f "$path" ]]; then
|
|
261
|
-
fail "FEATURE-MATRIX names an example that does not exist: $path"
|
|
262
|
-
missing_example=$((missing_example + 1))
|
|
263
|
-
elif [[ "$path" != examples/*.sh ]]; then
|
|
264
|
-
fail "example is outside the directory validate-examples.sh runs: $path"
|
|
265
|
-
missing_example=$((missing_example + 1))
|
|
266
|
-
fi
|
|
267
|
-
done <"$work/matrix-examples.txt"
|
|
268
|
-
[[ "$missing_example" -eq 0 ]] &&
|
|
269
|
-
say " ✓ every named example exists ($(wc -l <"$work/matrix-examples.txt" | tr -d ' ') referenced)"
|
|
270
|
-
|
|
271
|
-
# Every command module should be demonstrated by at least one example.
|
|
272
|
-
missing_group=0
|
|
273
|
-
for module in scripts/dot/commands/*.sh; do
|
|
274
|
-
[[ -f "$module" ]] || continue
|
|
275
|
-
name="$(basename "$module" .sh)"
|
|
276
|
-
if ! grep -rqlE "scripts/dot/commands/${name}\.sh" examples/ 2>/dev/null; then
|
|
277
|
-
fail "no example references the command module: $module"
|
|
278
|
-
missing_group=$((missing_group + 1))
|
|
279
|
-
fi
|
|
280
|
-
done
|
|
281
|
-
[[ "$missing_group" -eq 0 ]] &&
|
|
282
|
-
say " ✓ every command module is referenced by an example"
|
|
283
|
-
|
|
284
|
-
# ---------------------------------------------------------------------------
|
|
285
|
-
# Verdict
|
|
286
|
-
# ---------------------------------------------------------------------------
|
|
287
|
-
|
|
288
|
-
if [[ "$failures" -ne 0 ]]; then
|
|
289
|
-
printf '\nFEATURE-MATRIX drift: %s problem(s).\n' "$failures" >&2
|
|
290
|
-
printf 'Add or correct the row(s) in %s, then re-run this check.\n' "$MATRIX" >&2
|
|
291
|
-
exit 1
|
|
292
|
-
fi
|
|
293
|
-
|
|
294
|
-
say ""
|
|
295
|
-
say "FEATURE-MATRIX is in sync."
|
|
296
|
-
exit 0
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
#
|
|
5
|
-
# Compatibility wrapper. The canonical name for this gate is
|
|
6
|
-
# `scripts/verify-release-versions` (the name the repository standard
|
|
7
|
-
# uses); this path is kept so existing callers — the `version-consistency`
|
|
8
|
-
# pre-commit hook, older docs, muscle memory — keep working.
|
|
9
|
-
#
|
|
10
|
-
# Do not add logic here. Edit scripts/verify-release-versions.
|
|
11
|
-
set -euo pipefail
|
|
12
|
-
exec bash "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/scripts/verify-release-versions" "$@"
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
8
|
-
|
|
9
|
-
include_module_coverage=0
|
|
10
|
-
|
|
11
|
-
usage() {
|
|
12
|
-
cat <<'EOF'
|
|
13
|
-
Coverage Baseline
|
|
14
|
-
|
|
15
|
-
Usage:
|
|
16
|
-
coverage-baseline.sh [--with-module-coverage]
|
|
17
|
-
|
|
18
|
-
Options:
|
|
19
|
-
--with-module-coverage Run tests/framework/module_coverage.sh and include the result
|
|
20
|
-
-h, --help Show this help
|
|
21
|
-
EOF
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
while [ "$#" -gt 0 ]; do
|
|
25
|
-
case "$1" in
|
|
26
|
-
--with-module-coverage)
|
|
27
|
-
include_module_coverage=1
|
|
28
|
-
;;
|
|
29
|
-
-h | --help)
|
|
30
|
-
usage
|
|
31
|
-
exit 0
|
|
32
|
-
;;
|
|
33
|
-
*)
|
|
34
|
-
printf 'Unknown option: %s\n' "$1" >&2
|
|
35
|
-
usage >&2
|
|
36
|
-
exit 1
|
|
37
|
-
;;
|
|
38
|
-
esac
|
|
39
|
-
shift
|
|
40
|
-
done
|
|
41
|
-
|
|
42
|
-
unit_tests="$(find "$REPO_ROOT/tests/unit" -name 'test_*.sh' | wc -l | tr -d ' ')"
|
|
43
|
-
integration_tests="$(find "$REPO_ROOT/tests/integration" -name 'test_*.sh' | wc -l | tr -d ' ')"
|
|
44
|
-
total_tests="$(find "$REPO_ROOT/tests" -path '*/framework/*' -prune -o -name 'test_*.sh' -print | wc -l | tr -d ' ')"
|
|
45
|
-
named_tests="$(rg -o '\btest_start\b' "$REPO_ROOT/tests/unit" "$REPO_ROOT/tests/integration" -g 'test_*.sh' | wc -l | tr -d ' ')"
|
|
46
|
-
docs_files="$(find "$REPO_ROOT/docs" -type f \( -name '*.md' -o -name '*.md.tmpl' \) | wc -l | tr -d ' ')"
|
|
47
|
-
shell_surfaces="$(find "$REPO_ROOT/scripts" "$REPO_ROOT/defaults/dot_local/bin" "$REPO_ROOT/defaults/.chezmoitemplates/functions" -type f \( -name '*.sh' -o -name 'executable_*' \) | wc -l | tr -d ' ')"
|
|
48
|
-
|
|
49
|
-
printf 'Coverage Baseline\n'
|
|
50
|
-
printf 'Repository: %s\n' "$REPO_ROOT"
|
|
51
|
-
printf 'Documentation files: %s\n' "$docs_files"
|
|
52
|
-
printf 'Executable shell surfaces: %s\n' "$shell_surfaces"
|
|
53
|
-
printf 'Unit test files: %s\n' "$unit_tests"
|
|
54
|
-
printf 'Integration test files: %s\n' "$integration_tests"
|
|
55
|
-
printf 'Total test files: %s\n' "$total_tests"
|
|
56
|
-
printf 'Named tests: %s\n' "$named_tests"
|
|
57
|
-
|
|
58
|
-
if [ "$include_module_coverage" -eq 1 ]; then
|
|
59
|
-
printf '\n'
|
|
60
|
-
(cd "$REPO_ROOT" && bash ./tests/framework/module_coverage.sh)
|
|
61
|
-
fi
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
8
|
-
|
|
9
|
-
DOT_CLI="$REPO_ROOT/bin/dot"
|
|
10
|
-
UTILS_DOC="$REPO_ROOT/docs/reference/UTILS.md"
|
|
11
|
-
AI_DOC="$REPO_ROOT/docs/AI.md"
|
|
12
|
-
SCRIPTS_DOC="$REPO_ROOT/docs/reference/SCRIPTS.md"
|
|
13
|
-
ARCH_DOC="$REPO_ROOT/docs/ARCHITECTURE.md"
|
|
14
|
-
FUNCTION_GROUPS_JSON="$REPO_ROOT/defaults/.chezmoitemplates/functions/groups.json"
|
|
15
|
-
MIN_DOCS_COVERAGE="${MIN_DOCS_COVERAGE:-100}"
|
|
16
|
-
|
|
17
|
-
TOTAL_CHECKS=0
|
|
18
|
-
COVERED_CHECKS=0
|
|
19
|
-
|
|
20
|
-
record_doc_check() {
|
|
21
|
-
local label="$1"
|
|
22
|
-
local needle="$2"
|
|
23
|
-
local file="$3"
|
|
24
|
-
|
|
25
|
-
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
|
26
|
-
if grep -Fq "$needle" "$file"; then
|
|
27
|
-
COVERED_CHECKS=$((COVERED_CHECKS + 1))
|
|
28
|
-
else
|
|
29
|
-
printf 'Missing documentation: %s\n' "$label" >&2
|
|
30
|
-
fi
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
extract_public_commands() {
|
|
34
|
-
awk '
|
|
35
|
-
/_dot_help_specs\(\)/ { in_func=1; next }
|
|
36
|
-
in_func && /cat <<'\''EOF'\''/ { in_block=1; next }
|
|
37
|
-
in_block && /^EOF$/ { exit }
|
|
38
|
-
in_block && /\|/ {
|
|
39
|
-
split($0, parts, /\|/)
|
|
40
|
-
print parts[2]
|
|
41
|
-
}
|
|
42
|
-
' "$DOT_CLI"
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
check_dot_command_docs() {
|
|
46
|
-
local command=""
|
|
47
|
-
|
|
48
|
-
while IFS= read -r command; do
|
|
49
|
-
[ -n "$command" ] || continue
|
|
50
|
-
record_doc_check "dot $command in UTILS.md" "\`dot $command" "$UTILS_DOC"
|
|
51
|
-
done < <(extract_public_commands)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
check_ai_provider_docs() {
|
|
55
|
-
local provider=""
|
|
56
|
-
|
|
57
|
-
for provider in cl copilot kimi agy kiro sgpt ollama opencode aider; do
|
|
58
|
-
record_doc_check "dot $provider in AI.md" "\`dot $provider\`" "$AI_DOC"
|
|
59
|
-
done
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
check_utility_docs() {
|
|
63
|
-
local utility=""
|
|
64
|
-
|
|
65
|
-
for utility in \
|
|
66
|
-
ai-update ai_core antigravity b64 bm cb dot dot-ai dot-bootstrap dot-launch-or-focus \
|
|
67
|
-
dot-load-benchmark dot-load-benchmark-pty dot-theme-sync dtags epoch extract gbd gd \
|
|
68
|
-
git-ai-commit git-ai-diff gl hash hashsum hex jsonv jwt kill-port lorem monitor myip \
|
|
69
|
-
notify open pw rec-start rec-stop regex start-niri tmux-sessionizer tour up update uuid \
|
|
70
|
-
win yamlv; do
|
|
71
|
-
record_doc_check "$utility in SCRIPTS.md" "\`$utility\`" "$SCRIPTS_DOC"
|
|
72
|
-
done
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
check_function_group_docs() {
|
|
76
|
-
local group=""
|
|
77
|
-
|
|
78
|
-
for group in $(
|
|
79
|
-
FUNCTION_GROUPS_JSON="$FUNCTION_GROUPS_JSON" python3 - <<'PY'
|
|
80
|
-
import json
|
|
81
|
-
import os
|
|
82
|
-
from pathlib import Path
|
|
83
|
-
path = Path(os.environ["FUNCTION_GROUPS_JSON"])
|
|
84
|
-
for key in json.loads(path.read_text()).keys():
|
|
85
|
-
print(key)
|
|
86
|
-
PY
|
|
87
|
-
); do
|
|
88
|
-
record_doc_check "function group $group in ARCHITECTURE.md" "\`$group\`" "$ARCH_DOC"
|
|
89
|
-
done
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
report_coverage() {
|
|
93
|
-
local pct
|
|
94
|
-
pct="$(awk -v c="$COVERED_CHECKS" -v t="$TOTAL_CHECKS" 'BEGIN{if(t==0){print "0.00"}else{printf "%.2f", (100*c/t)}}')"
|
|
95
|
-
|
|
96
|
-
printf 'Docs coverage: %s/%s (%s%%)\n' "$COVERED_CHECKS" "$TOTAL_CHECKS" "$pct"
|
|
97
|
-
printf 'Threshold: %s%%\n' "$MIN_DOCS_COVERAGE"
|
|
98
|
-
|
|
99
|
-
awk -v p="$pct" -v min="$MIN_DOCS_COVERAGE" 'BEGIN{exit !(p+0 >= min+0)}'
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
main() {
|
|
103
|
-
check_dot_command_docs
|
|
104
|
-
check_ai_provider_docs
|
|
105
|
-
check_utility_docs
|
|
106
|
-
check_function_group_docs
|
|
107
|
-
# Capture the coverage threshold verdict — without this the final
|
|
108
|
-
# `printf PASS...` overwrites report_coverage's exit code and CI
|
|
109
|
-
# never sees a coverage regression.
|
|
110
|
-
if ! report_coverage; then
|
|
111
|
-
printf 'FAIL: docs coverage below MIN_DOCS_COVERAGE=%s%%\n' "$MIN_DOCS_COVERAGE" >&2
|
|
112
|
-
return 1
|
|
113
|
-
fi
|
|
114
|
-
|
|
115
|
-
printf 'PASS: public dot commands, utility entrypoints, AI providers, and function groups are documented at or above the required threshold\n'
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
main "$@"
|