@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
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
# Dotfiles post-merge verification checks
|
|
5
|
-
# Runs doctor + status + diff checks and exits non-zero on issues.
|
|
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
|
-
ui_dot_banner "Diagnostics"
|
|
16
|
-
ui_header "Dotfiles Verify"
|
|
17
|
-
echo ""
|
|
18
|
-
|
|
19
|
-
failures=0
|
|
20
|
-
dot_bin=""
|
|
21
|
-
RUN_SECURITY=0
|
|
22
|
-
|
|
23
|
-
# Parse arguments
|
|
24
|
-
for arg in "$@"; do
|
|
25
|
-
case "$arg" in
|
|
26
|
-
--security | -s) RUN_SECURITY=1 ;;
|
|
27
|
-
esac
|
|
28
|
-
done
|
|
29
|
-
|
|
30
|
-
resolve_dot_bin() {
|
|
31
|
-
if command -v dot >/dev/null 2>&1; then
|
|
32
|
-
command -v dot
|
|
33
|
-
return
|
|
34
|
-
fi
|
|
35
|
-
if [[ -x "$HOME/.local/bin/dot" ]]; then
|
|
36
|
-
printf "%s\n" "$HOME/.local/bin/dot"
|
|
37
|
-
return
|
|
38
|
-
fi
|
|
39
|
-
local src_dir=""
|
|
40
|
-
if [[ -n "${CHEZMOI_SOURCE_DIR:-}" && -d "${CHEZMOI_SOURCE_DIR}" ]]; then
|
|
41
|
-
src_dir="${CHEZMOI_SOURCE_DIR}"
|
|
42
|
-
elif [[ -d "$HOME/.dotfiles" ]]; then
|
|
43
|
-
src_dir="$HOME/.dotfiles"
|
|
44
|
-
elif [[ -d "$HOME/.local/share/chezmoi" ]]; then
|
|
45
|
-
src_dir="$HOME/.local/share/chezmoi"
|
|
46
|
-
fi
|
|
47
|
-
if [[ -n "$src_dir" && -x "$src_dir/bin/dot" ]]; then
|
|
48
|
-
printf "%s\n" "$src_dir/bin/dot"
|
|
49
|
-
return
|
|
50
|
-
fi
|
|
51
|
-
return 1
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
run_step() {
|
|
55
|
-
local label="$1"
|
|
56
|
-
shift
|
|
57
|
-
|
|
58
|
-
ui_info "Running" "$label"
|
|
59
|
-
set +e
|
|
60
|
-
"$@"
|
|
61
|
-
local ec=$?
|
|
62
|
-
set -e
|
|
63
|
-
|
|
64
|
-
if [[ $ec -eq 0 ]]; then
|
|
65
|
-
ui_ok "$label" "ok"
|
|
66
|
-
else
|
|
67
|
-
ui_err "$label" "failed (exit $ec)"
|
|
68
|
-
failures=$((failures + 1))
|
|
69
|
-
fi
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if dot_bin="$(resolve_dot_bin)"; then
|
|
73
|
-
if [[ $RUN_SECURITY -eq 1 ]]; then
|
|
74
|
-
run_step "security-score" "$dot_bin" security-score
|
|
75
|
-
else
|
|
76
|
-
run_step "dot doctor" "$dot_bin" doctor
|
|
77
|
-
run_step "dot status" "$dot_bin" status
|
|
78
|
-
fi
|
|
79
|
-
else
|
|
80
|
-
# shellcheck disable=SC1091
|
|
81
|
-
ui_err "dot binary" "not found in PATH, ~/.local/bin, or source tree"
|
|
82
|
-
failures=$((failures + 1))
|
|
83
|
-
fi
|
|
84
|
-
|
|
85
|
-
ui_info "Running" "chezmoi diff"
|
|
86
|
-
set +e
|
|
87
|
-
diff_output="$(chezmoi diff 2>&1)"
|
|
88
|
-
diff_ec=$?
|
|
89
|
-
set -e
|
|
90
|
-
if [[ $diff_ec -eq 0 ]]; then
|
|
91
|
-
ui_ok "chezmoi diff" "clean"
|
|
92
|
-
else
|
|
93
|
-
ui_warn "chezmoi diff" "drift detected"
|
|
94
|
-
if [[ -n "$diff_output" ]]; then
|
|
95
|
-
printf "%s\n" "$diff_output"
|
|
96
|
-
fi
|
|
97
|
-
failures=$((failures + 1))
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
echo ""
|
|
101
|
-
if [[ $failures -eq 0 ]]; then
|
|
102
|
-
ui_ok "Verification" "all checks passed"
|
|
103
|
-
exit 0
|
|
104
|
-
fi
|
|
105
|
-
|
|
106
|
-
ui_err "Verification" "$failures check(s) failed"
|
|
107
|
-
ui_info "Hint" "Run 'dot heal' then re-run 'dot verify'"
|
|
108
|
-
exit 1
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# MIT License
|
|
3
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
4
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
5
|
-
# See LICENSE file for details.
|
|
6
|
-
|
|
7
|
-
# Script: verify_state.sh
|
|
8
|
-
# Description: Final verification of the dotfiles environment state.
|
|
9
|
-
|
|
10
|
-
set -euo pipefail
|
|
11
|
-
|
|
12
|
-
echo " Starting Final Environment Verification..."
|
|
13
|
-
|
|
14
|
-
Errors=0
|
|
15
|
-
ALIASES_CONFIG="$HOME/.config/shell/aliases.sh"
|
|
16
|
-
AliasesConfigReported=0
|
|
17
|
-
|
|
18
|
-
check_file() {
|
|
19
|
-
if [[ ! -f "$1" ]]; then
|
|
20
|
-
echo " Missing file: $1"
|
|
21
|
-
Errors=$((Errors + 1))
|
|
22
|
-
else
|
|
23
|
-
echo " Found file: $1"
|
|
24
|
-
fi
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
check_alias_in_config() {
|
|
28
|
-
if [[ ! -f "$ALIASES_CONFIG" ]]; then
|
|
29
|
-
if [[ "$AliasesConfigReported" -eq 0 ]]; then
|
|
30
|
-
echo " Missing aliases config: $ALIASES_CONFIG"
|
|
31
|
-
Errors=$((Errors + 1))
|
|
32
|
-
AliasesConfigReported=1
|
|
33
|
-
fi
|
|
34
|
-
elif ! grep -q "$1" "$ALIASES_CONFIG"; then
|
|
35
|
-
echo " Missing alias definition '$1' in built config"
|
|
36
|
-
Errors=$((Errors + 1))
|
|
37
|
-
else
|
|
38
|
-
echo " Verified alias: $1"
|
|
39
|
-
fi
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
# 1. Verify Docs
|
|
43
|
-
# Post-Phase-4b (v0.2.503): chezmoi source is under the subdir
|
|
44
|
-
# named in .chezmoiroot (typically "defaults/"). Paths without the
|
|
45
|
-
# prefix silently return "missing" from any CWD other than
|
|
46
|
-
# ~/.dotfiles/defaults/.
|
|
47
|
-
check_file "defaults/.chezmoitemplates/aliases/security/README.md"
|
|
48
|
-
check_file "defaults/.chezmoitemplates/aliases/legal/README.md"
|
|
49
|
-
|
|
50
|
-
# 2. Verify Scripts
|
|
51
|
-
check_file "scripts/security/lock-configs.sh"
|
|
52
|
-
check_file "scripts/tools/detect-collisions.py"
|
|
53
|
-
check_file "tests/test-aliases.sh"
|
|
54
|
-
|
|
55
|
-
# 3. Verify Generated Config Content (Key Features)
|
|
56
|
-
# Security
|
|
57
|
-
check_alias_in_config "lock-configs"
|
|
58
|
-
check_alias_in_config "unlock-configs"
|
|
59
|
-
check_alias_in_config "enable-signing"
|
|
60
|
-
# Legal
|
|
61
|
-
check_alias_in_config "scan-licenses"
|
|
62
|
-
check_alias_in_config "add-headers"
|
|
63
|
-
|
|
64
|
-
# 4. Verify Workflows
|
|
65
|
-
check_file ".github/workflows/security-release.yml"
|
|
66
|
-
|
|
67
|
-
if [[ $Errors -eq 0 ]]; then
|
|
68
|
-
echo " Verification Passed! All systems nominal."
|
|
69
|
-
exit 0
|
|
70
|
-
else
|
|
71
|
-
echo "️ Verification Failed with $Errors errors."
|
|
72
|
-
exit 1
|
|
73
|
-
fi
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
# Version Locks Summary
|
|
5
|
-
# Usage: dot locks
|
|
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
|
-
resolve_source_dir() {
|
|
17
|
-
if [[ -n "${CHEZMOI_SOURCE_DIR:-}" && -d "$CHEZMOI_SOURCE_DIR" ]]; then
|
|
18
|
-
printf "%s\n" "$CHEZMOI_SOURCE_DIR"
|
|
19
|
-
return
|
|
20
|
-
fi
|
|
21
|
-
if [[ -d "$HOME/.dotfiles" ]]; then
|
|
22
|
-
printf "%s\n" "$HOME/.dotfiles"
|
|
23
|
-
return
|
|
24
|
-
fi
|
|
25
|
-
if [[ -d "$HOME/.local/share/chezmoi" ]]; then
|
|
26
|
-
printf "%s\n" "$HOME/.local/share/chezmoi"
|
|
27
|
-
return
|
|
28
|
-
fi
|
|
29
|
-
return 1
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
src_dir=$(resolve_source_dir)
|
|
33
|
-
|
|
34
|
-
# resolve_source_dir returns the repo root, but since the defaults/ reorg the
|
|
35
|
-
# deployable tree lives under the .chezmoiroot subdir (defaults/). Descend
|
|
36
|
-
# into it so paths like dot_config/... resolve. (Without this the mise lookup
|
|
37
|
-
# below silently reported "config not found" on every run.)
|
|
38
|
-
cm_src="$src_dir"
|
|
39
|
-
if [[ -f "$src_dir/.chezmoiroot" ]]; then
|
|
40
|
-
_cm_root="$(tr -d '[:space:]' <"$src_dir/.chezmoiroot")"
|
|
41
|
-
[[ -n "$_cm_root" && -d "$src_dir/$_cm_root" ]] && cm_src="$src_dir/$_cm_root"
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
ui_header "Version Locks"
|
|
45
|
-
|
|
46
|
-
ui_section "mise toolchain"
|
|
47
|
-
mise_config="$cm_src/dot_config/mise/conf.d/00-dotfiles.toml"
|
|
48
|
-
if [[ -f "$mise_config" ]]; then
|
|
49
|
-
awk -F= '
|
|
50
|
-
/^\[tools\]/ {in_tools=1; next}
|
|
51
|
-
/^\[/ {in_tools=0}
|
|
52
|
-
in_tools && NF {
|
|
53
|
-
gsub(/"/, "", $0)
|
|
54
|
-
tool=$1
|
|
55
|
-
gsub(/[[:space:]]+/, "", tool)
|
|
56
|
-
ver=$2
|
|
57
|
-
gsub(/^[[:space:]]+|[[:space:]]+$/, "", ver)
|
|
58
|
-
if (tool != "") {
|
|
59
|
-
printf "%s\t%s\n", tool, ver
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
' "$mise_config" | while IFS=$'\t' read -r tool ver; do
|
|
63
|
-
[[ -n "$tool" ]] && ui_kv "$tool" "$ver"
|
|
64
|
-
done
|
|
65
|
-
else
|
|
66
|
-
ui_warn "mise" "config not found"
|
|
67
|
-
fi
|
|
68
|
-
|
|
69
|
-
ui_section "Node/Python pins"
|
|
70
|
-
# Chezmoi-tracked files (dot_*) live under $cm_src (defaults/) post-
|
|
71
|
-
# Phase-4b, NOT at repo root. Using $src_dir here silently rendered
|
|
72
|
-
# an empty section on every workstation.
|
|
73
|
-
if [[ -f "$cm_src/dot_node-version" ]]; then
|
|
74
|
-
ui_kv "node" "$(cat "$cm_src/dot_node-version")"
|
|
75
|
-
fi
|
|
76
|
-
if [[ -f "$cm_src/dot_noderc.tmpl" ]]; then
|
|
77
|
-
ui_kv "noderc" "$(sed -n '1p' "$cm_src/dot_noderc.tmpl")"
|
|
78
|
-
fi
|
|
79
|
-
|
|
80
|
-
ui_section "Package manager locks"
|
|
81
|
-
if [[ -f "$cm_src/dot_config/shell/Brewfile" ]]; then
|
|
82
|
-
ui_kv "brew" "Brewfile present"
|
|
83
|
-
fi
|
|
84
|
-
if [[ -f "$cm_src/dot_config/shell/Brewfile.cli" ]]; then
|
|
85
|
-
ui_kv "brew-cli" "Brewfile.cli present"
|
|
86
|
-
fi
|
|
87
|
-
# package.json (if any) is a repo-root artefact — use $src_dir.
|
|
88
|
-
if [[ -f "$src_dir/package.json" ]]; then
|
|
89
|
-
ui_kv "node" "package.json version pinned"
|
|
90
|
-
fi
|
|
91
|
-
|
|
92
|
-
ui_section "Notes"
|
|
93
|
-
ui_info "Policy" "Prefer LTS and explicit pins for core runtimes"
|
|
94
|
-
ui_info "Update" "Edit ~/.config/mise/config.toml to adjust pins"
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
3
|
-
# Copyright (c) 2015-2026 Sebastien Rousseau
|
|
4
|
-
## Workstation attestation export.
|
|
5
|
-
##
|
|
6
|
-
## Produces a machine-readable evidence record for the current dotfiles
|
|
7
|
-
## workstation state: version, platform, signing, MCP posture, and agent mode.
|
|
8
|
-
|
|
9
|
-
set -euo pipefail
|
|
10
|
-
|
|
11
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
|
|
13
|
-
# Export so child processes (the mcp-doctor subprocess below) inherit it
|
|
14
|
-
# without the env-prefix dance that confuses shellcheck (SC2097/SC2098).
|
|
15
|
-
export REPO_ROOT
|
|
16
|
-
|
|
17
|
-
# shellcheck source=../../lib/dot/ui.sh
|
|
18
|
-
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
19
|
-
# shellcheck source=../../lib/dot/platform.sh
|
|
20
|
-
source "$SCRIPT_DIR/../../lib/dot/platform.sh"
|
|
21
|
-
# shellcheck source=../../lib/dot/utils.sh
|
|
22
|
-
source "$SCRIPT_DIR/../../lib/dot/utils.sh"
|
|
23
|
-
|
|
24
|
-
JSON_MODE=0
|
|
25
|
-
WRITE_PATH=""
|
|
26
|
-
FLEET_STORE=""
|
|
27
|
-
FLEET_ID=""
|
|
28
|
-
VERIFY=0
|
|
29
|
-
VERIFY_MAX_AGE=""
|
|
30
|
-
while [[ $# -gt 0 ]]; do
|
|
31
|
-
case "$1" in
|
|
32
|
-
--json | -j)
|
|
33
|
-
JSON_MODE=1
|
|
34
|
-
shift
|
|
35
|
-
;;
|
|
36
|
-
--verify | -V)
|
|
37
|
-
VERIFY=1
|
|
38
|
-
shift
|
|
39
|
-
;;
|
|
40
|
-
--max-age | -a)
|
|
41
|
-
VERIFY_MAX_AGE="${2:-}"
|
|
42
|
-
VERIFY=1
|
|
43
|
-
shift 2
|
|
44
|
-
;;
|
|
45
|
-
--write | -w)
|
|
46
|
-
WRITE_PATH="${2:-}"
|
|
47
|
-
shift 2
|
|
48
|
-
;;
|
|
49
|
-
--fleet-store | -F)
|
|
50
|
-
FLEET_STORE="${2:-}"
|
|
51
|
-
shift 2
|
|
52
|
-
;;
|
|
53
|
-
--fleet-id | -I)
|
|
54
|
-
FLEET_ID="${2:-}"
|
|
55
|
-
shift 2
|
|
56
|
-
;;
|
|
57
|
-
*)
|
|
58
|
-
shift
|
|
59
|
-
;;
|
|
60
|
-
esac
|
|
61
|
-
done
|
|
62
|
-
|
|
63
|
-
command -v jq >/dev/null 2>&1 || {
|
|
64
|
-
echo "jq is required for workstation attestation." >&2
|
|
65
|
-
exit 1
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
ui_init
|
|
69
|
-
|
|
70
|
-
if [[ -z "$FLEET_STORE" && -n "${DOTFILES_FLEET_STORE:-}" ]]; then
|
|
71
|
-
FLEET_STORE="$DOTFILES_FLEET_STORE"
|
|
72
|
-
fi
|
|
73
|
-
|
|
74
|
-
attestation_dir="${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles/attestations"
|
|
75
|
-
if [[ -n "$WRITE_PATH" ]]; then
|
|
76
|
-
mkdir -p "$(dirname "$WRITE_PATH")"
|
|
77
|
-
elif [[ "$JSON_MODE" -ne 1 && -z "$FLEET_STORE" ]]; then
|
|
78
|
-
mkdir -p "$attestation_dir"
|
|
79
|
-
WRITE_PATH="$attestation_dir/workstation-attestation.json"
|
|
80
|
-
fi
|
|
81
|
-
|
|
82
|
-
dot_version="$(dotfiles_version)"
|
|
83
|
-
platform_id="$(dot_platform_id)"
|
|
84
|
-
host_os="$(dot_host_os)"
|
|
85
|
-
arch="$(uname -m)"
|
|
86
|
-
hostname_value="$(hostname 2>/dev/null || true)"
|
|
87
|
-
agent_profile_file="$REPO_ROOT/defaults/dot_config/dotfiles/agent-profiles.json"
|
|
88
|
-
agent_card_file="$REPO_ROOT/defaults/dot_config/dotfiles/agent-card.json"
|
|
89
|
-
agent_state_file="${AGENT_STATE_FILE:-$HOME/.config/dotfiles/agent-mode.env}"
|
|
90
|
-
policy_bundles_file="$REPO_ROOT/defaults/dot_config/dotfiles/policy-bundles.json"
|
|
91
|
-
model_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/model-registry.json"
|
|
92
|
-
prompt_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/prompt-registry.json"
|
|
93
|
-
mcp_policy_file="$REPO_ROOT/defaults/dot_config/dotfiles/mcp-policy.json"
|
|
94
|
-
mcp_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/mcp-registry.json"
|
|
95
|
-
signing_format="$(git config --global gpg.format 2>/dev/null || echo ssh)"
|
|
96
|
-
signing_key="$(git config --global user.signingkey 2>/dev/null || true)"
|
|
97
|
-
allowed_signers="$(git config --global gpg.ssh.allowedSignersFile 2>/dev/null || echo "$HOME/.config/git/allowed_signers")"
|
|
98
|
-
merge_verify="$(git config --global --bool merge.verifySignatures 2>/dev/null || echo false)"
|
|
99
|
-
|
|
100
|
-
if [[ -f "$agent_state_file" ]]; then
|
|
101
|
-
current_profile="$(sed -n 's/^DOT_AGENT_PROFILE=//p' "$agent_state_file" | tail -n 1)"
|
|
102
|
-
else
|
|
103
|
-
current_profile=""
|
|
104
|
-
fi
|
|
105
|
-
if [[ -z "$current_profile" ]] && [[ -f "$agent_profile_file" ]]; then
|
|
106
|
-
current_profile="$(jq -r '.defaultProfile // "ask"' "$agent_profile_file")"
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
MCP_CONFIG="$REPO_ROOT/defaults/dot_config/claude/mcp_servers.json"
|
|
110
|
-
export MCP_CONFIG
|
|
111
|
-
mcp_summary="$(bash "$REPO_ROOT/scripts/diagnostics/mcp-doctor.sh" --strict --json)"
|
|
112
|
-
|
|
113
|
-
attestation_json="$(
|
|
114
|
-
jq -n \
|
|
115
|
-
--arg generated_at "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
116
|
-
--arg repo_root "$REPO_ROOT" \
|
|
117
|
-
--arg version "$dot_version" \
|
|
118
|
-
--arg platform "$platform_id" \
|
|
119
|
-
--arg host_os "$host_os" \
|
|
120
|
-
--arg arch "$arch" \
|
|
121
|
-
--arg hostname "$hostname_value" \
|
|
122
|
-
--arg signing_format "$signing_format" \
|
|
123
|
-
--arg signing_key "$signing_key" \
|
|
124
|
-
--arg allowed_signers "$allowed_signers" \
|
|
125
|
-
--argjson merge_verify "$([[ "$merge_verify" == "true" ]] && echo true || echo false)" \
|
|
126
|
-
--arg current_profile "$current_profile" \
|
|
127
|
-
--argjson mcp "$mcp_summary" \
|
|
128
|
-
--slurpfile agent_profiles "$agent_profile_file" \
|
|
129
|
-
--slurpfile agent_card "$agent_card_file" \
|
|
130
|
-
--slurpfile policy_bundles "$policy_bundles_file" \
|
|
131
|
-
--slurpfile model_registry "$model_registry_file" \
|
|
132
|
-
--slurpfile prompt_registry "$prompt_registry_file" \
|
|
133
|
-
--slurpfile mcp_policy "$mcp_policy_file" \
|
|
134
|
-
--slurpfile mcp_registry "$mcp_registry_file" \
|
|
135
|
-
'{
|
|
136
|
-
generated_at: $generated_at,
|
|
137
|
-
repo_root: $repo_root,
|
|
138
|
-
dotfiles_version: $version,
|
|
139
|
-
platform: {
|
|
140
|
-
runtime: $platform,
|
|
141
|
-
host_os: $host_os,
|
|
142
|
-
architecture: $arch,
|
|
143
|
-
hostname: $hostname
|
|
144
|
-
},
|
|
145
|
-
git_signing: {
|
|
146
|
-
format: $signing_format,
|
|
147
|
-
signing_key: $signing_key,
|
|
148
|
-
allowed_signers_file: $allowed_signers,
|
|
149
|
-
merge_verify_signatures: $merge_verify
|
|
150
|
-
},
|
|
151
|
-
agent: {
|
|
152
|
-
current_profile: $current_profile,
|
|
153
|
-
profiles: $agent_profiles[0],
|
|
154
|
-
card: $agent_card[0]
|
|
155
|
-
},
|
|
156
|
-
governance: {
|
|
157
|
-
policy_bundles: $policy_bundles[0],
|
|
158
|
-
model_registry: $model_registry[0],
|
|
159
|
-
prompt_registry: $prompt_registry[0]
|
|
160
|
-
},
|
|
161
|
-
mcp: {
|
|
162
|
-
doctor: $mcp,
|
|
163
|
-
policy: $mcp_policy[0],
|
|
164
|
-
registry: $mcp_registry[0]
|
|
165
|
-
}
|
|
166
|
-
}'
|
|
167
|
-
)"
|
|
168
|
-
|
|
169
|
-
if [[ -n "$WRITE_PATH" ]]; then
|
|
170
|
-
printf '%s\n' "$attestation_json" >"$WRITE_PATH"
|
|
171
|
-
fi
|
|
172
|
-
|
|
173
|
-
if [[ -n "$FLEET_STORE" ]]; then
|
|
174
|
-
fleet_root="${FLEET_STORE%/}"
|
|
175
|
-
fleet_id="${FLEET_ID:-${DOTFILES_FLEET_ID:-default}}"
|
|
176
|
-
fleet_host="${hostname_value:-unknown-host}"
|
|
177
|
-
fleet_dir="$fleet_root/$fleet_id/$fleet_host"
|
|
178
|
-
fleet_file="$fleet_dir/workstation-attestation.json"
|
|
179
|
-
fleet_timestamp_file="$fleet_dir/workstation-attestation-$(date -u +%Y%m%dT%H%M%SZ).json"
|
|
180
|
-
mkdir -p "$fleet_dir"
|
|
181
|
-
printf '%s\n' "$attestation_json" >"$fleet_file"
|
|
182
|
-
printf '%s\n' "$attestation_json" >"$fleet_timestamp_file"
|
|
183
|
-
fi
|
|
184
|
-
|
|
185
|
-
# Hand the evidence to the WebAssembly verifier rather than printing it.
|
|
186
|
-
# The module has no access to this machine beyond the bytes on its stdin, so
|
|
187
|
-
# the verdict does not depend on the tools the machine under review happens
|
|
188
|
-
# to have installed.
|
|
189
|
-
if [[ "$VERIFY" -eq 1 ]]; then
|
|
190
|
-
verify_args=(--verify)
|
|
191
|
-
[[ "$JSON_MODE" -eq 1 ]] && verify_args+=(--json)
|
|
192
|
-
[[ -n "$VERIFY_MAX_AGE" ]] && verify_args+=(--max-age "$VERIFY_MAX_AGE")
|
|
193
|
-
verify_status=0
|
|
194
|
-
printf '%s\n' "$attestation_json" |
|
|
195
|
-
bash "$SCRIPT_DIR/attest-verify.sh" "${verify_args[@]}" || verify_status=$?
|
|
196
|
-
exit "$verify_status"
|
|
197
|
-
fi
|
|
198
|
-
|
|
199
|
-
if [[ "$JSON_MODE" -eq 1 ]]; then
|
|
200
|
-
printf '%s\n' "$attestation_json"
|
|
201
|
-
else
|
|
202
|
-
ui_dot_banner "Diagnostics"
|
|
203
|
-
ui_header "Workstation Attestation"
|
|
204
|
-
ui_ok "Version" "$dot_version"
|
|
205
|
-
ui_ok "Platform" "$platform_id / $host_os / $arch"
|
|
206
|
-
ui_ok "Agent profile" "$current_profile"
|
|
207
|
-
ui_ok "MCP status" "$(printf '%s' "$mcp_summary" | jq -r '.status')"
|
|
208
|
-
ui_ok "Output" "$WRITE_PATH"
|
|
209
|
-
if [[ -n "$FLEET_STORE" ]]; then
|
|
210
|
-
ui_ok "Fleet store" "$fleet_root/$fleet_id/$fleet_host"
|
|
211
|
-
fi
|
|
212
|
-
fi
|