@sebastienrousseau/dotfiles 0.2.519 → 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.
Files changed (306) hide show
  1. package/CHANGELOG.md +200 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/{LICENSE → LICENSE-MIT} +1 -1
  4. package/README.md +1172 -166
  5. package/install.sh +77 -11
  6. package/package.json +8 -8
  7. package/tools/README.md +49 -0
  8. package/tools/ci/install-chezmoi-verified.sh +68 -0
  9. package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
  10. package/docs/AI.md +0 -179
  11. package/docs/CNAME +0 -1
  12. package/docs/CONFIG_STRATEGY.md +0 -124
  13. package/docs/COPYRIGHT +0 -7
  14. package/docs/GOVERNANCE.md +0 -98
  15. package/docs/MAINTAINERS.md +0 -41
  16. package/docs/NAMING_CONVENTIONS.md +0 -102
  17. package/docs/OPENCODE.md +0 -127
  18. package/docs/README.md +0 -84
  19. package/docs/STRUCTURE.md +0 -102
  20. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
  21. package/docs/adr/ADR-002-shell-performance.md +0 -130
  22. package/docs/adr/ADR-003-security-first.md +0 -158
  23. package/docs/adr/ADR-004-cli-architecture.md +0 -171
  24. package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
  25. package/docs/adr/ADR-006-shell-selection.md +0 -124
  26. package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
  27. package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
  28. package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
  29. package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
  30. package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
  31. package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
  32. package/docs/adr/README.md +0 -40
  33. package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
  34. package/docs/architecture/ARCHITECTURE.md +0 -117
  35. package/docs/architecture/INTEROP.md +0 -44
  36. package/docs/architecture/REPO_LAYOUT.md +0 -241
  37. package/docs/architecture/WALKTHROUGH.md +0 -86
  38. package/docs/architecture/fleet-deployment.md +0 -77
  39. package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
  40. package/docs/archive/LEGACY_ROADMAP.md +0 -6
  41. package/docs/archive/MILESTONE_v0.2.493.md +0 -47
  42. package/docs/archive/PLAN.md +0 -199
  43. package/docs/archive/REPO_AUDIT.md +0 -31
  44. package/docs/articles/.pages +0 -6
  45. package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
  46. package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
  47. package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
  48. package/docs/articles/index.md +0 -36
  49. package/docs/guides/INSTALL.md +0 -144
  50. package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
  51. package/docs/guides/THEMING.md +0 -230
  52. package/docs/guides/TROUBLESHOOTING.md +0 -176
  53. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
  54. package/docs/index.md +0 -132
  55. package/docs/interop/A2A.md +0 -39
  56. package/docs/interop/POWERSHELL.md +0 -102
  57. package/docs/manual/00-introduction.md +0 -89
  58. package/docs/manual/01-concepts/01-architecture.md +0 -138
  59. package/docs/manual/01-concepts/02-trust-model.md +0 -183
  60. package/docs/manual/01-concepts/03-theme-engine.md +0 -186
  61. package/docs/manual/01-concepts/04-fleet.md +0 -148
  62. package/docs/manual/01-concepts/05-self-healing.md +0 -204
  63. package/docs/manual/02-tutorials/01-first-install.md +0 -197
  64. package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
  65. package/docs/manual/02-tutorials/03-create-profile.md +0 -244
  66. package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
  67. package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
  68. package/docs/manual/03-reference/01-dot-cli.md +0 -450
  69. package/docs/manual/03-reference/02-config-files.md +0 -265
  70. package/docs/manual/03-reference/03-environment.md +0 -124
  71. package/docs/manual/03-reference/04-templates.md +0 -190
  72. package/docs/manual/03-reference/05-feature-flags.md +0 -187
  73. package/docs/manual/04-cookbook/01-recipes.md +0 -285
  74. package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
  75. package/docs/manual/04-cookbook/03-faq.md +0 -175
  76. package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
  77. package/docs/manual/05-appendices/B-security-checklist.md +0 -85
  78. package/docs/manual/05-appendices/C-glossary.md +0 -40
  79. package/docs/manual/05-appendices/D-bibliography.md +0 -58
  80. package/docs/manual/05-appendices/E-license.md +0 -38
  81. package/docs/manual/_toc.yml +0 -58
  82. package/docs/manual/command-index.md +0 -155
  83. package/docs/manual/concept-index.md +0 -168
  84. package/docs/manual/index.md +0 -66
  85. package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
  86. package/docs/operations/ATTESTATION.md +0 -44
  87. package/docs/operations/CI_CADENCE.md +0 -107
  88. package/docs/operations/CI_COMPOSITES.md +0 -156
  89. package/docs/operations/COMPLETIONS.md +0 -123
  90. package/docs/operations/COVERAGE.md +0 -204
  91. package/docs/operations/DRIFT.md +0 -107
  92. package/docs/operations/HARD_AUDIT_2026.md +0 -631
  93. package/docs/operations/MAINTENANCE.md +0 -63
  94. package/docs/operations/MANIFEST.md +0 -127
  95. package/docs/operations/MIGRATION.md +0 -109
  96. package/docs/operations/OPERATIONS.md +0 -188
  97. package/docs/operations/PERFORMANCE.md +0 -133
  98. package/docs/operations/REGISTRY.md +0 -90
  99. package/docs/operations/RELEASE_PIPELINE.md +0 -128
  100. package/docs/operations/RELIABILITY.md +0 -122
  101. package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
  102. package/docs/operations/ROADMAP.md +0 -10
  103. package/docs/operations/ROADMAP_2026.md +0 -7
  104. package/docs/operations/ROADMAP_V0_2_503.md +0 -10
  105. package/docs/operations/TESTING.md +0 -216
  106. package/docs/operations/TRACEABILITY.md +0 -43
  107. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
  108. package/docs/operations/VERSION_SYNC.md +0 -393
  109. package/docs/reference/ALIASES.md +0 -131
  110. package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
  111. package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
  112. package/docs/reference/FEATURES.md +0 -66
  113. package/docs/reference/FONTS.md +0 -112
  114. package/docs/reference/POWERSHELL_PARITY.md +0 -82
  115. package/docs/reference/PROFILES.md +0 -69
  116. package/docs/reference/SCREENSHOTS.md +0 -121
  117. package/docs/reference/SCRIPTS.md +0 -71
  118. package/docs/reference/SUPPORT_MATRIX.md +0 -80
  119. package/docs/reference/THEMES.md +0 -117
  120. package/docs/reference/TOOLS.md +0 -110
  121. package/docs/reference/UTILS.md +0 -242
  122. package/docs/registry.json +0 -6
  123. package/docs/schema/dot-env-v1.json +0 -110
  124. package/docs/schema/dot-registry-v1.json +0 -33
  125. package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
  126. package/docs/security/AUDIT_BYPASS.md +0 -103
  127. package/docs/security/AUTOMATION_SECRETS.md +0 -26
  128. package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
  129. package/docs/security/CI_PINNING.md +0 -129
  130. package/docs/security/COMMIT_SIGNING.md +0 -138
  131. package/docs/security/COMPLIANCE.md +0 -458
  132. package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
  133. package/docs/security/DISCLOSURE.md +0 -130
  134. package/docs/security/ENCRYPTION.md +0 -57
  135. package/docs/security/FMEA.md +0 -159
  136. package/docs/security/FUZZING.md +0 -114
  137. package/docs/security/HISTORY_FILTERING.md +0 -132
  138. package/docs/security/INCIDENT_RESPONSE.md +0 -579
  139. package/docs/security/INSTALL_VERIFICATION.md +0 -122
  140. package/docs/security/KEYS.md +0 -49
  141. package/docs/security/KEY_ROTATION.md +0 -303
  142. package/docs/security/MCP_POLICY.md +0 -78
  143. package/docs/security/POLICY_RELEASES.md +0 -37
  144. package/docs/security/README.md +0 -28
  145. package/docs/security/SCORECARD.md +0 -195
  146. package/docs/security/SECRETS.md +0 -158
  147. package/docs/security/SECURITY.md +0 -45
  148. package/docs/security/SECURITY_CHECKLIST.md +0 -55
  149. package/docs/security/SHELL_EXEMPTIONS.md +0 -145
  150. package/docs/security/SOUP_REGISTER.md +0 -36
  151. package/docs/security/THREAT_MODEL.md +0 -130
  152. package/docs/security/VERIFICATION_VALIDATION.md +0 -228
  153. package/docs/security/VERIFY_RELEASE.md +0 -201
  154. package/docs/security/security-pubkey.asc +0 -15
  155. package/docs/stylesheets/extra.css +0 -444
  156. package/docs/themes/README.md +0 -10
  157. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
  158. package/docs/themes/hero-shot.svg +0 -78
  159. package/scripts/README.md +0 -123
  160. package/scripts/ci/check-copyright-headers.sh +0 -8
  161. package/scripts/ci/check-shell-preamble.sh +0 -8
  162. package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
  163. package/scripts/demo/record.sh +0 -43
  164. package/scripts/diagnostics/a2a-conformance.sh +0 -163
  165. package/scripts/diagnostics/alias-governance.sh +0 -138
  166. package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
  167. package/scripts/diagnostics/aliases-manifest.sh +0 -77
  168. package/scripts/diagnostics/benchmark.sh +0 -408
  169. package/scripts/diagnostics/conflicts.sh +0 -73
  170. package/scripts/diagnostics/doctor-unified.sh +0 -39
  171. package/scripts/diagnostics/doctor.sh +0 -751
  172. package/scripts/diagnostics/drift-dashboard.sh +0 -202
  173. package/scripts/diagnostics/health.sh +0 -623
  174. package/scripts/diagnostics/history-analysis.sh +0 -86
  175. package/scripts/diagnostics/mcp-doctor.sh +0 -582
  176. package/scripts/diagnostics/perf.sh +0 -453
  177. package/scripts/diagnostics/scorecard.sh +0 -119
  178. package/scripts/diagnostics/secret-governance.sh +0 -65
  179. package/scripts/diagnostics/security-score.sh +0 -467
  180. package/scripts/diagnostics/smoke-test.sh +0 -88
  181. package/scripts/diagnostics/snapshot.sh +0 -90
  182. package/scripts/diagnostics/verify.sh +0 -108
  183. package/scripts/diagnostics/verify_state.sh +0 -73
  184. package/scripts/diagnostics/version-locks.sh +0 -94
  185. package/scripts/diagnostics/workstation-attestation.sh +0 -187
  186. package/scripts/dot/commands/agent.sh +0 -485
  187. package/scripts/dot/commands/agents.sh +0 -336
  188. package/scripts/dot/commands/ai.sh +0 -587
  189. package/scripts/dot/commands/aliases.sh +0 -277
  190. package/scripts/dot/commands/appearance.sh +0 -110
  191. package/scripts/dot/commands/completion.sh +0 -134
  192. package/scripts/dot/commands/core.sh +0 -217
  193. package/scripts/dot/commands/diagnostics.sh +0 -265
  194. package/scripts/dot/commands/env-emit.sh +0 -203
  195. package/scripts/dot/commands/fleet.sh +0 -688
  196. package/scripts/dot/commands/init.sh +0 -185
  197. package/scripts/dot/commands/lint.sh +0 -208
  198. package/scripts/dot/commands/manual.sh +0 -169
  199. package/scripts/dot/commands/meta.sh +0 -333
  200. package/scripts/dot/commands/patterns.sh +0 -55
  201. package/scripts/dot/commands/registry.sh +0 -419
  202. package/scripts/dot/commands/restore.sh +0 -232
  203. package/scripts/dot/commands/secrets.sh +0 -296
  204. package/scripts/dot/commands/security.sh +0 -102
  205. package/scripts/dot/commands/tools.sh +0 -556
  206. package/scripts/dot/data/alias-deprecations.tsv +0 -2
  207. package/scripts/dot/powershell/Dot.psm1 +0 -319
  208. package/scripts/fonts/install-nerd-fonts.sh +0 -75
  209. package/scripts/fonts/patch-fonts.sh +0 -36
  210. package/scripts/git-hooks/install.sh +0 -12
  211. package/scripts/git-hooks/pre-commit +0 -12
  212. package/scripts/git-hooks/pre-commit-audit.sh +0 -146
  213. package/scripts/git-hooks/pre-push +0 -105
  214. package/scripts/git-hooks/prepare-commit-msg +0 -29
  215. package/scripts/lib/secrets_provider.sh +0 -185
  216. package/scripts/ops/ai-setup.sh +0 -71
  217. package/scripts/ops/bundle.sh +0 -104
  218. package/scripts/ops/chaos.sh +0 -50
  219. package/scripts/ops/chezmoi-apply.sh +0 -333
  220. package/scripts/ops/chezmoi-diff.sh +0 -16
  221. package/scripts/ops/chezmoi-remove.sh +0 -46
  222. package/scripts/ops/chezmoi-update.sh +0 -63
  223. package/scripts/ops/heal-chezmoi.sh +0 -87
  224. package/scripts/ops/heal-system.sh +0 -129
  225. package/scripts/ops/heal-tools.sh +0 -297
  226. package/scripts/ops/heal.sh +0 -223
  227. package/scripts/ops/post-apply-repair.sh +0 -107
  228. package/scripts/ops/prewarm.sh +0 -128
  229. package/scripts/ops/release.sh +0 -262
  230. package/scripts/ops/rollback.sh +0 -604
  231. package/scripts/ops/setup.sh +0 -138
  232. package/scripts/ops/teleport.sh +0 -34
  233. package/scripts/qa/check-version-consistency.sh +0 -124
  234. package/scripts/qa/coverage-baseline.sh +0 -61
  235. package/scripts/qa/docs-coverage.sh +0 -112
  236. package/scripts/qa/examples-coverage.sh +0 -94
  237. package/scripts/qa/powershell-contract.ps1 +0 -95
  238. package/scripts/qa/reliability-audit.sh +0 -139
  239. package/scripts/qa/scorecard-snapshot.sh +0 -128
  240. package/scripts/qa/traceability-coverage.sh +0 -117
  241. package/scripts/qa/validate-examples.sh +0 -27
  242. package/scripts/qa/wsl-contract.sh +0 -12
  243. package/scripts/secrets/age-init.sh +0 -82
  244. package/scripts/secrets/create-secrets-file.sh +0 -46
  245. package/scripts/secrets/encrypt-ssh-key.sh +0 -44
  246. package/scripts/security/backup.sh +0 -58
  247. package/scripts/security/check-disclosure-key-expiry.sh +0 -111
  248. package/scripts/security/dns-doh.sh +0 -52
  249. package/scripts/security/encryption-check.sh +0 -55
  250. package/scripts/security/enforce-policies.sh +0 -335
  251. package/scripts/security/firewall.sh +0 -91
  252. package/scripts/security/lock-configs.sh +0 -67
  253. package/scripts/security/lock-screen.sh +0 -56
  254. package/scripts/security/manage-secrets.sh +0 -429
  255. package/scripts/security/ssh-cert.sh +0 -204
  256. package/scripts/security/telemetry-kill.sh +0 -51
  257. package/scripts/security/usb-safety.sh +0 -52
  258. package/scripts/theme/apply-gnome-theme.sh +0 -333
  259. package/scripts/theme/extract-heic-frames.sh +0 -115
  260. package/scripts/theme/extract-theme.py +0 -742
  261. package/scripts/theme/install-boot-logo.sh +0 -63
  262. package/scripts/theme/install-catppuccin-themes.sh +0 -371
  263. package/scripts/theme/install-cursors.sh +0 -26
  264. package/scripts/theme/install-file-icons.sh +0 -27
  265. package/scripts/theme/install-grub-theme.sh +0 -62
  266. package/scripts/theme/install-lock-icon.sh +0 -31
  267. package/scripts/theme/merge-wallpaper.sh +0 -146
  268. package/scripts/theme/rebuild-themes.sh +0 -544
  269. package/scripts/theme/switch.sh +0 -449
  270. package/scripts/theme/wallpaper-rotate.sh +0 -137
  271. package/scripts/theme/wallpaper-sync.sh +0 -690
  272. package/scripts/tools/cmatrix.sh +0 -22
  273. package/scripts/tools/detect-collisions.py +0 -103
  274. package/scripts/tools/emoji-picker.sh +0 -49
  275. package/scripts/tools/figlet-banner.sh +0 -19
  276. package/scripts/tools/log-rotate.sh +0 -31
  277. package/scripts/tools/lolcat-wrap.sh +0 -20
  278. package/scripts/tools/pipes.sh +0 -49
  279. package/scripts/tuning/linux.sh +0 -186
  280. package/scripts/tuning/macos.sh +0 -56
  281. package/scripts/uninstall.sh +0 -86
  282. package/scripts/version-sync.sh +0 -654
  283. package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
  284. package/templates/chezmoi-data/mac-m1.toml.example +0 -16
  285. package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
  286. package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
  287. package/templates/projects/go/.github/workflows/ci.yml +0 -31
  288. package/templates/projects/go/README.md +0 -7
  289. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
  290. package/templates/projects/go/go.mod +0 -3
  291. package/templates/projects/go/go.sum +0 -0
  292. package/templates/projects/molecule/README.md +0 -7
  293. package/templates/projects/molecule/converge.yml +0 -7
  294. package/templates/projects/molecule/molecule.yml +0 -16
  295. package/templates/projects/node/.github/workflows/ci.yml +0 -30
  296. package/templates/projects/node/README.md +0 -7
  297. package/templates/projects/node/package-lock.json +0 -12
  298. package/templates/projects/node/package.json +0 -10
  299. package/templates/projects/node/src/index.js +0 -3
  300. package/templates/projects/packer/README.md +0 -15
  301. package/templates/projects/packer/main.pkr.hcl +0 -15
  302. package/templates/projects/python/.github/workflows/ci.yml +0 -34
  303. package/templates/projects/python/README.md +0 -7
  304. package/templates/projects/python/pyproject.toml +0 -25
  305. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
  306. package/templates/projects/python/tests/test_basic.py +0 -3
@@ -1,108 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: 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: 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: 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,187 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: 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
- while [[ $# -gt 0 ]]; do
29
- case "$1" in
30
- --json | -j)
31
- JSON_MODE=1
32
- shift
33
- ;;
34
- --write | -w)
35
- WRITE_PATH="${2:-}"
36
- shift 2
37
- ;;
38
- --fleet-store | -F)
39
- FLEET_STORE="${2:-}"
40
- shift 2
41
- ;;
42
- --fleet-id | -I)
43
- FLEET_ID="${2:-}"
44
- shift 2
45
- ;;
46
- *)
47
- shift
48
- ;;
49
- esac
50
- done
51
-
52
- command -v jq >/dev/null 2>&1 || {
53
- echo "jq is required for workstation attestation." >&2
54
- exit 1
55
- }
56
-
57
- ui_init
58
-
59
- if [[ -z "$FLEET_STORE" && -n "${DOTFILES_FLEET_STORE:-}" ]]; then
60
- FLEET_STORE="$DOTFILES_FLEET_STORE"
61
- fi
62
-
63
- attestation_dir="${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles/attestations"
64
- if [[ -n "$WRITE_PATH" ]]; then
65
- mkdir -p "$(dirname "$WRITE_PATH")"
66
- elif [[ "$JSON_MODE" -ne 1 && -z "$FLEET_STORE" ]]; then
67
- mkdir -p "$attestation_dir"
68
- WRITE_PATH="$attestation_dir/workstation-attestation.json"
69
- fi
70
-
71
- dot_version="$(dotfiles_version)"
72
- platform_id="$(dot_platform_id)"
73
- host_os="$(dot_host_os)"
74
- arch="$(uname -m)"
75
- hostname_value="$(hostname 2>/dev/null || true)"
76
- agent_profile_file="$REPO_ROOT/defaults/dot_config/dotfiles/agent-profiles.json"
77
- agent_card_file="$REPO_ROOT/defaults/dot_config/dotfiles/agent-card.json"
78
- agent_state_file="${AGENT_STATE_FILE:-$HOME/.config/dotfiles/agent-mode.env}"
79
- policy_bundles_file="$REPO_ROOT/defaults/dot_config/dotfiles/policy-bundles.json"
80
- model_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/model-registry.json"
81
- prompt_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/prompt-registry.json"
82
- mcp_policy_file="$REPO_ROOT/defaults/dot_config/dotfiles/mcp-policy.json"
83
- mcp_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/mcp-registry.json"
84
- signing_format="$(git config --global gpg.format 2>/dev/null || echo ssh)"
85
- signing_key="$(git config --global user.signingkey 2>/dev/null || true)"
86
- allowed_signers="$(git config --global gpg.ssh.allowedSignersFile 2>/dev/null || echo "$HOME/.config/git/allowed_signers")"
87
- merge_verify="$(git config --global --bool merge.verifySignatures 2>/dev/null || echo false)"
88
-
89
- if [[ -f "$agent_state_file" ]]; then
90
- current_profile="$(sed -n 's/^DOT_AGENT_PROFILE=//p' "$agent_state_file" | tail -n 1)"
91
- else
92
- current_profile=""
93
- fi
94
- if [[ -z "$current_profile" ]] && [[ -f "$agent_profile_file" ]]; then
95
- current_profile="$(jq -r '.defaultProfile // "ask"' "$agent_profile_file")"
96
- fi
97
-
98
- MCP_CONFIG="$REPO_ROOT/defaults/dot_config/claude/mcp_servers.json"
99
- export MCP_CONFIG
100
- mcp_summary="$(bash "$REPO_ROOT/scripts/diagnostics/mcp-doctor.sh" --strict --json)"
101
-
102
- attestation_json="$(
103
- jq -n \
104
- --arg generated_at "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
105
- --arg repo_root "$REPO_ROOT" \
106
- --arg version "$dot_version" \
107
- --arg platform "$platform_id" \
108
- --arg host_os "$host_os" \
109
- --arg arch "$arch" \
110
- --arg hostname "$hostname_value" \
111
- --arg signing_format "$signing_format" \
112
- --arg signing_key "$signing_key" \
113
- --arg allowed_signers "$allowed_signers" \
114
- --argjson merge_verify "$([[ "$merge_verify" == "true" ]] && echo true || echo false)" \
115
- --arg current_profile "$current_profile" \
116
- --argjson mcp "$mcp_summary" \
117
- --slurpfile agent_profiles "$agent_profile_file" \
118
- --slurpfile agent_card "$agent_card_file" \
119
- --slurpfile policy_bundles "$policy_bundles_file" \
120
- --slurpfile model_registry "$model_registry_file" \
121
- --slurpfile prompt_registry "$prompt_registry_file" \
122
- --slurpfile mcp_policy "$mcp_policy_file" \
123
- --slurpfile mcp_registry "$mcp_registry_file" \
124
- '{
125
- generated_at: $generated_at,
126
- repo_root: $repo_root,
127
- dotfiles_version: $version,
128
- platform: {
129
- runtime: $platform,
130
- host_os: $host_os,
131
- architecture: $arch,
132
- hostname: $hostname
133
- },
134
- git_signing: {
135
- format: $signing_format,
136
- signing_key: $signing_key,
137
- allowed_signers_file: $allowed_signers,
138
- merge_verify_signatures: $merge_verify
139
- },
140
- agent: {
141
- current_profile: $current_profile,
142
- profiles: $agent_profiles[0],
143
- card: $agent_card[0]
144
- },
145
- governance: {
146
- policy_bundles: $policy_bundles[0],
147
- model_registry: $model_registry[0],
148
- prompt_registry: $prompt_registry[0]
149
- },
150
- mcp: {
151
- doctor: $mcp,
152
- policy: $mcp_policy[0],
153
- registry: $mcp_registry[0]
154
- }
155
- }'
156
- )"
157
-
158
- if [[ -n "$WRITE_PATH" ]]; then
159
- printf '%s\n' "$attestation_json" >"$WRITE_PATH"
160
- fi
161
-
162
- if [[ -n "$FLEET_STORE" ]]; then
163
- fleet_root="${FLEET_STORE%/}"
164
- fleet_id="${FLEET_ID:-${DOTFILES_FLEET_ID:-default}}"
165
- fleet_host="${hostname_value:-unknown-host}"
166
- fleet_dir="$fleet_root/$fleet_id/$fleet_host"
167
- fleet_file="$fleet_dir/workstation-attestation.json"
168
- fleet_timestamp_file="$fleet_dir/workstation-attestation-$(date -u +%Y%m%dT%H%M%SZ).json"
169
- mkdir -p "$fleet_dir"
170
- printf '%s\n' "$attestation_json" >"$fleet_file"
171
- printf '%s\n' "$attestation_json" >"$fleet_timestamp_file"
172
- fi
173
-
174
- if [[ "$JSON_MODE" -eq 1 ]]; then
175
- printf '%s\n' "$attestation_json"
176
- else
177
- ui_dot_banner "Diagnostics"
178
- ui_header "Workstation Attestation"
179
- ui_ok "Version" "$dot_version"
180
- ui_ok "Platform" "$platform_id / $host_os / $arch"
181
- ui_ok "Agent profile" "$current_profile"
182
- ui_ok "MCP status" "$(printf '%s' "$mcp_summary" | jq -r '.status')"
183
- ui_ok "Output" "$WRITE_PATH"
184
- if [[ -n "$FLEET_STORE" ]]; then
185
- ui_ok "Fleet store" "$fleet_root/$fleet_id/$fleet_host"
186
- fi
187
- fi