@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.
Files changed (323) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/LICENSE-MIT +21 -0
  4. package/README.md +43 -37
  5. package/install.sh +76 -10
  6. package/package.json +7 -7
  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/ARCHITECTURE.md +0 -117
  12. package/docs/CNAME +0 -1
  13. package/docs/CONFIG_STRATEGY.md +0 -124
  14. package/docs/COPYRIGHT +0 -7
  15. package/docs/ECOSYSTEM.md +0 -220
  16. package/docs/GOLD-STANDARD-AUDIT.md +0 -352
  17. package/docs/GOVERNANCE.md +0 -98
  18. package/docs/MAINTAINERS.md +0 -41
  19. package/docs/MINIMUM-TOOLCHAIN.md +0 -100
  20. package/docs/NAMING_CONVENTIONS.md +0 -102
  21. package/docs/OPENCODE.md +0 -127
  22. package/docs/README.md +0 -84
  23. package/docs/STRUCTURE.md +0 -102
  24. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
  25. package/docs/adr/ADR-002-shell-performance.md +0 -130
  26. package/docs/adr/ADR-003-security-first.md +0 -158
  27. package/docs/adr/ADR-004-cli-architecture.md +0 -171
  28. package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
  29. package/docs/adr/ADR-006-shell-selection.md +0 -124
  30. package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
  31. package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
  32. package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
  33. package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
  34. package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
  35. package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
  36. package/docs/adr/README.md +0 -40
  37. package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
  38. package/docs/architecture/ARCHITECTURE.md +0 -20
  39. package/docs/architecture/INTEROP.md +0 -44
  40. package/docs/architecture/REPO_LAYOUT.md +0 -241
  41. package/docs/architecture/WALKTHROUGH.md +0 -86
  42. package/docs/architecture/fleet-deployment.md +0 -77
  43. package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
  44. package/docs/archive/LEGACY_ROADMAP.md +0 -6
  45. package/docs/archive/MILESTONE_v0.2.493.md +0 -47
  46. package/docs/archive/PLAN.md +0 -199
  47. package/docs/archive/REPO_AUDIT.md +0 -31
  48. package/docs/articles/.pages +0 -6
  49. package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
  50. package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
  51. package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
  52. package/docs/articles/index.md +0 -36
  53. package/docs/guides/INSTALL.md +0 -144
  54. package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
  55. package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
  56. package/docs/guides/THEMING.md +0 -230
  57. package/docs/guides/TROUBLESHOOTING.md +0 -176
  58. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
  59. package/docs/index.md +0 -132
  60. package/docs/interop/A2A.md +0 -39
  61. package/docs/interop/POWERSHELL.md +0 -102
  62. package/docs/manual/00-introduction.md +0 -89
  63. package/docs/manual/01-concepts/01-architecture.md +0 -138
  64. package/docs/manual/01-concepts/02-trust-model.md +0 -183
  65. package/docs/manual/01-concepts/03-theme-engine.md +0 -186
  66. package/docs/manual/01-concepts/04-fleet.md +0 -148
  67. package/docs/manual/01-concepts/05-self-healing.md +0 -204
  68. package/docs/manual/02-tutorials/01-first-install.md +0 -197
  69. package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
  70. package/docs/manual/02-tutorials/03-create-profile.md +0 -244
  71. package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
  72. package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
  73. package/docs/manual/03-reference/01-dot-cli.md +0 -475
  74. package/docs/manual/03-reference/02-config-files.md +0 -265
  75. package/docs/manual/03-reference/03-environment.md +0 -124
  76. package/docs/manual/03-reference/04-templates.md +0 -190
  77. package/docs/manual/03-reference/05-feature-flags.md +0 -187
  78. package/docs/manual/04-cookbook/01-recipes.md +0 -285
  79. package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
  80. package/docs/manual/04-cookbook/03-faq.md +0 -175
  81. package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
  82. package/docs/manual/05-appendices/B-security-checklist.md +0 -85
  83. package/docs/manual/05-appendices/C-glossary.md +0 -40
  84. package/docs/manual/05-appendices/D-bibliography.md +0 -58
  85. package/docs/manual/05-appendices/E-license.md +0 -38
  86. package/docs/manual/_toc.yml +0 -58
  87. package/docs/manual/command-index.md +0 -175
  88. package/docs/manual/concept-index.md +0 -170
  89. package/docs/manual/index.md +0 -66
  90. package/docs/migration/README.md +0 -81
  91. package/docs/migration/from-bare-git-repo.md +0 -156
  92. package/docs/migration/from-gnu-stow.md +0 -165
  93. package/docs/migration/from-plain-chezmoi.md +0 -148
  94. package/docs/migration/from-yadm.md +0 -187
  95. package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
  96. package/docs/operations/ATTESTATION.md +0 -44
  97. package/docs/operations/CI_CADENCE.md +0 -107
  98. package/docs/operations/CI_COMPOSITES.md +0 -156
  99. package/docs/operations/COMPLETIONS.md +0 -123
  100. package/docs/operations/COVERAGE.md +0 -204
  101. package/docs/operations/DRIFT.md +0 -107
  102. package/docs/operations/HARD_AUDIT_2026.md +0 -631
  103. package/docs/operations/MAINTENANCE.md +0 -63
  104. package/docs/operations/MANIFEST.md +0 -127
  105. package/docs/operations/MIGRATION.md +0 -109
  106. package/docs/operations/OPERATIONS.md +0 -188
  107. package/docs/operations/PERFORMANCE.md +0 -133
  108. package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
  109. package/docs/operations/REGISTRY.md +0 -90
  110. package/docs/operations/RELEASE_PIPELINE.md +0 -128
  111. package/docs/operations/RELIABILITY.md +0 -122
  112. package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
  113. package/docs/operations/ROADMAP.md +0 -10
  114. package/docs/operations/ROADMAP_2026.md +0 -7
  115. package/docs/operations/ROADMAP_V0_2_503.md +0 -10
  116. package/docs/operations/TESTING.md +0 -216
  117. package/docs/operations/TRACEABILITY.md +0 -44
  118. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
  119. package/docs/operations/VERSION_SYNC.md +0 -393
  120. package/docs/packaging.md +0 -222
  121. package/docs/reference/ALIASES.md +0 -131
  122. package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
  123. package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
  124. package/docs/reference/FEATURE-MATRIX.md +0 -646
  125. package/docs/reference/FEATURES.md +0 -66
  126. package/docs/reference/FONTS.md +0 -112
  127. package/docs/reference/POWERSHELL_PARITY.md +0 -82
  128. package/docs/reference/PROFILES.md +0 -69
  129. package/docs/reference/SCREENSHOTS.md +0 -121
  130. package/docs/reference/SCRIPTS.md +0 -71
  131. package/docs/reference/SUPPORT_MATRIX.md +0 -80
  132. package/docs/reference/THEMES.md +0 -117
  133. package/docs/reference/TOOLS.md +0 -110
  134. package/docs/reference/UTILS.md +0 -243
  135. package/docs/registry.json +0 -6
  136. package/docs/schema/dot-env-v1.json +0 -110
  137. package/docs/schema/dot-registry-v1.json +0 -33
  138. package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
  139. package/docs/security/AUDIT_BYPASS.md +0 -103
  140. package/docs/security/AUTOMATION_SECRETS.md +0 -26
  141. package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
  142. package/docs/security/CI_PINNING.md +0 -129
  143. package/docs/security/COMMIT_SIGNING.md +0 -138
  144. package/docs/security/COMPLIANCE.md +0 -458
  145. package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
  146. package/docs/security/DISCLOSURE.md +0 -130
  147. package/docs/security/ENCRYPTION.md +0 -57
  148. package/docs/security/FMEA.md +0 -159
  149. package/docs/security/FUZZING.md +0 -209
  150. package/docs/security/HISTORY_FILTERING.md +0 -132
  151. package/docs/security/INCIDENT_RESPONSE.md +0 -579
  152. package/docs/security/INSTALL_VERIFICATION.md +0 -122
  153. package/docs/security/KEYS.md +0 -49
  154. package/docs/security/KEY_ROTATION.md +0 -303
  155. package/docs/security/MCP_POLICY.md +0 -78
  156. package/docs/security/POLICY_RELEASES.md +0 -37
  157. package/docs/security/README.md +0 -28
  158. package/docs/security/SCORECARD.md +0 -195
  159. package/docs/security/SECRETS.md +0 -158
  160. package/docs/security/SECURITY.md +0 -45
  161. package/docs/security/SECURITY_CHECKLIST.md +0 -55
  162. package/docs/security/SHELL_EXEMPTIONS.md +0 -145
  163. package/docs/security/SOUP_REGISTER.md +0 -36
  164. package/docs/security/THREAT_MODEL.md +0 -130
  165. package/docs/security/VERIFICATION_VALIDATION.md +0 -228
  166. package/docs/security/VERIFY_RELEASE.md +0 -201
  167. package/docs/security/security-pubkey.asc +0 -15
  168. package/docs/stylesheets/extra.css +0 -444
  169. package/docs/themes/README.md +0 -10
  170. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
  171. package/docs/themes/hero-shot.svg +0 -78
  172. package/scripts/README.md +0 -123
  173. package/scripts/ci/check-copyright-headers.sh +0 -8
  174. package/scripts/ci/check-shell-preamble.sh +0 -8
  175. package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
  176. package/scripts/demo/record.sh +0 -43
  177. package/scripts/diagnostics/a2a-conformance.sh +0 -163
  178. package/scripts/diagnostics/alias-governance.sh +0 -165
  179. package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
  180. package/scripts/diagnostics/aliases-manifest.sh +0 -77
  181. package/scripts/diagnostics/attest-verify.sh +0 -147
  182. package/scripts/diagnostics/benchmark.sh +0 -408
  183. package/scripts/diagnostics/conflicts.sh +0 -73
  184. package/scripts/diagnostics/doctor-unified.sh +0 -43
  185. package/scripts/diagnostics/doctor.sh +0 -797
  186. package/scripts/diagnostics/drift-dashboard.sh +0 -203
  187. package/scripts/diagnostics/health.sh +0 -656
  188. package/scripts/diagnostics/history-analysis.sh +0 -86
  189. package/scripts/diagnostics/mcp-doctor.sh +0 -582
  190. package/scripts/diagnostics/perf.sh +0 -453
  191. package/scripts/diagnostics/scorecard.sh +0 -120
  192. package/scripts/diagnostics/secret-governance.sh +0 -65
  193. package/scripts/diagnostics/security-score.sh +0 -467
  194. package/scripts/diagnostics/smoke-test.sh +0 -88
  195. package/scripts/diagnostics/snapshot.sh +0 -90
  196. package/scripts/diagnostics/verify.sh +0 -108
  197. package/scripts/diagnostics/verify_state.sh +0 -73
  198. package/scripts/diagnostics/version-locks.sh +0 -94
  199. package/scripts/diagnostics/workstation-attestation.sh +0 -212
  200. package/scripts/dot/commands/agent.sh +0 -535
  201. package/scripts/dot/commands/agents.sh +0 -352
  202. package/scripts/dot/commands/ai.sh +0 -600
  203. package/scripts/dot/commands/aliases.sh +0 -277
  204. package/scripts/dot/commands/appearance.sh +0 -110
  205. package/scripts/dot/commands/completion.sh +0 -171
  206. package/scripts/dot/commands/core.sh +0 -217
  207. package/scripts/dot/commands/diagnostics.sh +0 -265
  208. package/scripts/dot/commands/env-emit.sh +0 -203
  209. package/scripts/dot/commands/fleet.sh +0 -711
  210. package/scripts/dot/commands/init.sh +0 -185
  211. package/scripts/dot/commands/lint.sh +0 -208
  212. package/scripts/dot/commands/manual.sh +0 -169
  213. package/scripts/dot/commands/meta.sh +0 -438
  214. package/scripts/dot/commands/patterns.sh +0 -55
  215. package/scripts/dot/commands/registry.sh +0 -455
  216. package/scripts/dot/commands/restore.sh +0 -232
  217. package/scripts/dot/commands/secrets.sh +0 -296
  218. package/scripts/dot/commands/security.sh +0 -102
  219. package/scripts/dot/commands/tools.sh +0 -570
  220. package/scripts/dot/data/alias-deprecations.tsv +0 -2
  221. package/scripts/dot/powershell/Dot.psm1 +0 -319
  222. package/scripts/fonts/install-nerd-fonts.sh +0 -75
  223. package/scripts/fonts/patch-fonts.sh +0 -36
  224. package/scripts/git-hooks/install.sh +0 -12
  225. package/scripts/git-hooks/pre-commit +0 -12
  226. package/scripts/git-hooks/pre-commit-audit.sh +0 -146
  227. package/scripts/git-hooks/pre-push +0 -105
  228. package/scripts/git-hooks/prepare-commit-msg +0 -29
  229. package/scripts/lib/secrets_provider.sh +0 -200
  230. package/scripts/nvim/headless-upgrade.lua +0 -81
  231. package/scripts/ops/ai-setup.sh +0 -71
  232. package/scripts/ops/bundle.sh +0 -104
  233. package/scripts/ops/chaos.sh +0 -50
  234. package/scripts/ops/chezmoi-apply.sh +0 -333
  235. package/scripts/ops/chezmoi-diff.sh +0 -16
  236. package/scripts/ops/chezmoi-remove.sh +0 -46
  237. package/scripts/ops/chezmoi-update.sh +0 -67
  238. package/scripts/ops/heal-chezmoi.sh +0 -87
  239. package/scripts/ops/heal-system.sh +0 -129
  240. package/scripts/ops/heal-tools.sh +0 -297
  241. package/scripts/ops/heal.sh +0 -223
  242. package/scripts/ops/post-apply-repair.sh +0 -107
  243. package/scripts/ops/prewarm.sh +0 -128
  244. package/scripts/ops/release.sh +0 -262
  245. package/scripts/ops/rollback.sh +0 -613
  246. package/scripts/ops/setup.sh +0 -138
  247. package/scripts/ops/teleport.sh +0 -34
  248. package/scripts/qa/check-feature-matrix.sh +0 -296
  249. package/scripts/qa/check-version-consistency.sh +0 -12
  250. package/scripts/qa/coverage-baseline.sh +0 -61
  251. package/scripts/qa/docs-coverage.sh +0 -118
  252. package/scripts/qa/examples-coverage.sh +0 -94
  253. package/scripts/qa/powershell-contract.ps1 +0 -95
  254. package/scripts/qa/reliability-audit.sh +0 -139
  255. package/scripts/qa/scorecard-snapshot.sh +0 -128
  256. package/scripts/qa/traceability-coverage.sh +0 -124
  257. package/scripts/qa/validate-examples.sh +0 -90
  258. package/scripts/qa/wsl-contract.sh +0 -12
  259. package/scripts/secrets/age-init.sh +0 -82
  260. package/scripts/secrets/create-secrets-file.sh +0 -46
  261. package/scripts/secrets/encrypt-ssh-key.sh +0 -44
  262. package/scripts/security/backup.sh +0 -58
  263. package/scripts/security/check-disclosure-key-expiry.sh +0 -111
  264. package/scripts/security/dns-doh.sh +0 -52
  265. package/scripts/security/encryption-check.sh +0 -55
  266. package/scripts/security/enforce-policies.sh +0 -552
  267. package/scripts/security/firewall.sh +0 -91
  268. package/scripts/security/lock-configs.sh +0 -67
  269. package/scripts/security/lock-screen.sh +0 -56
  270. package/scripts/security/manage-secrets.sh +0 -429
  271. package/scripts/security/ssh-cert.sh +0 -204
  272. package/scripts/security/telemetry-kill.sh +0 -51
  273. package/scripts/security/usb-safety.sh +0 -52
  274. package/scripts/theme/apply-gnome-theme.sh +0 -333
  275. package/scripts/theme/extract-heic-frames.sh +0 -115
  276. package/scripts/theme/extract-theme.py +0 -1020
  277. package/scripts/theme/install-boot-logo.sh +0 -63
  278. package/scripts/theme/install-catppuccin-themes.sh +0 -371
  279. package/scripts/theme/install-cursors.sh +0 -26
  280. package/scripts/theme/install-file-icons.sh +0 -27
  281. package/scripts/theme/install-grub-theme.sh +0 -62
  282. package/scripts/theme/install-lock-icon.sh +0 -31
  283. package/scripts/theme/merge-wallpaper.sh +0 -146
  284. package/scripts/theme/rebuild-themes.sh +0 -603
  285. package/scripts/theme/switch.sh +0 -476
  286. package/scripts/theme/wallpaper-rotate.sh +0 -137
  287. package/scripts/theme/wallpaper-sync.sh +0 -690
  288. package/scripts/tools/cmatrix.sh +0 -22
  289. package/scripts/tools/detect-collisions.py +0 -103
  290. package/scripts/tools/emoji-picker.sh +0 -49
  291. package/scripts/tools/figlet-banner.sh +0 -19
  292. package/scripts/tools/log-rotate.sh +0 -31
  293. package/scripts/tools/lolcat-wrap.sh +0 -20
  294. package/scripts/tools/pipes.sh +0 -49
  295. package/scripts/tuning/linux.sh +0 -186
  296. package/scripts/tuning/macos.sh +0 -56
  297. package/scripts/uninstall.sh +0 -86
  298. package/scripts/verify-release-versions +0 -156
  299. package/scripts/version-sync.sh +0 -714
  300. package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
  301. package/templates/chezmoi-data/mac-m1.toml.example +0 -16
  302. package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
  303. package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
  304. package/templates/projects/go/.github/workflows/ci.yml +0 -31
  305. package/templates/projects/go/README.md +0 -7
  306. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
  307. package/templates/projects/go/go.mod +0 -3
  308. package/templates/projects/go/go.sum +0 -0
  309. package/templates/projects/molecule/README.md +0 -7
  310. package/templates/projects/molecule/converge.yml +0 -7
  311. package/templates/projects/molecule/molecule.yml +0 -16
  312. package/templates/projects/node/.github/workflows/ci.yml +0 -30
  313. package/templates/projects/node/README.md +0 -7
  314. package/templates/projects/node/package-lock.json +0 -12
  315. package/templates/projects/node/package.json +0 -10
  316. package/templates/projects/node/src/index.js +0 -3
  317. package/templates/projects/packer/README.md +0 -15
  318. package/templates/projects/packer/main.pkr.hcl +0 -15
  319. package/templates/projects/python/.github/workflows/ci.yml +0 -34
  320. package/templates/projects/python/README.md +0 -7
  321. package/templates/projects/python/pyproject.toml +0 -25
  322. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
  323. package/templates/projects/python/tests/test_basic.py +0 -3
@@ -1,105 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # =============================================================================
4
- # pre-push hook
5
- #
6
- # 1. Refuses to push any commit that is not GPG/SSH-signed.
7
- # 2. Runs `scripts/qa/reliability-audit.sh --quick`. The audit is mandatory
8
- # by default; explicit per-push bypass requires `DOTFILES_ALLOW_UNSKIPPED_PUSH=1`,
9
- # and every bypass is logged to `~/.local/share/dotfiles/audit-bypass.log`.
10
- #
11
- # The legacy `DOTFILES_SKIP_PRE_PUSH_AUDIT=1` env var (opt-out) is rejected
12
- # with a migration message. The new variable is intentionally awkwardly
13
- # named so that setting it requires deliberate intent. See
14
- # `docs/security/AUDIT_BYPASS.md`.
15
- # =============================================================================
16
-
17
- set -euo pipefail
18
-
19
- repo_root="$(git rev-parse --show-toplevel)"
20
-
21
- # -----------------------------------------------------------------------------
22
- # Step 1 — signed-commit enforcement (unchanged)
23
- # -----------------------------------------------------------------------------
24
- while read -r local_ref local_sha remote_ref remote_sha; do
25
- [ "$local_sha" = "0000000000000000000000000000000000000000" ] && continue
26
-
27
- if [ "$remote_sha" = "0000000000000000000000000000000000000000" ]; then
28
- range="$local_sha"
29
- elif git cat-file -e "${remote_sha}^{commit}" 2>/dev/null; then
30
- range="$remote_sha..$local_sha"
31
- else
32
- # Remote tip is not in the local object store yet (push without prior fetch).
33
- # Fall back to checking commits reachable from local tip.
34
- range="$local_sha"
35
- fi
36
-
37
- for c in $(git rev-list "$range"); do
38
- if ! git verify-commit "$c" >/dev/null 2>&1; then
39
- echo "Blocked: unsigned commit $c" >&2
40
- exit 1
41
- fi
42
- done
43
- done
44
-
45
- # -----------------------------------------------------------------------------
46
- # Step 2 — reject the legacy opt-out variable
47
- # -----------------------------------------------------------------------------
48
- if [ "${DOTFILES_SKIP_PRE_PUSH_AUDIT:-}" = "1" ]; then
49
- cat >&2 <<'EOF'
50
- ERROR: DOTFILES_SKIP_PRE_PUSH_AUDIT is no longer honored.
51
-
52
- The pre-push audit was previously opt-out — setting one env var was enough
53
- to skip it. That made bypass invisible and routine. Effective with #871,
54
- the policy is fail-closed: the audit always runs unless you explicitly
55
- authorize a bypass for this single push.
56
-
57
- To bypass for one push:
58
- DOTFILES_ALLOW_UNSKIPPED_PUSH=1 git push
59
-
60
- Every bypass is recorded to ~/.local/share/dotfiles/audit-bypass.log
61
- and surfaced by `dot doctor` if any are recent.
62
-
63
- See: docs/security/AUDIT_BYPASS.md
64
- EOF
65
- exit 1
66
- fi
67
-
68
- # -----------------------------------------------------------------------------
69
- # Step 3 — run the audit (or log + skip if explicitly bypassed)
70
- # -----------------------------------------------------------------------------
71
- if [ "${DOTFILES_ALLOW_UNSKIPPED_PUSH:-}" = "1" ]; then
72
- bypass_log_dir="${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles"
73
- # The audit-bypass log lives under XDG_STATE_HOME (user state — never
74
- # checked in, never deployed by chezmoi to other locations).
75
- mkdir -p "$bypass_log_dir"
76
- bypass_log="$bypass_log_dir/audit-bypass.log"
77
-
78
- ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
79
- branch="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo unknown)"
80
- remote="$(git remote get-url --push @{upstream} 2>/dev/null ||
81
- git config --get remote.origin.url 2>/dev/null ||
82
- echo unknown)"
83
- reason="${DOTFILES_BYPASS_REASON:-no reason given}"
84
-
85
- printf '%s\tbranch=%s\tremote=%s\treason=%s\n' \
86
- "$ts" "$branch" "$remote" "$reason" >>"$bypass_log"
87
-
88
- echo "WARN: pre-push audit bypassed (logged to $bypass_log)" >&2
89
- exit 0
90
- fi
91
-
92
- bash "$repo_root/scripts/qa/reliability-audit.sh" --quick
93
-
94
- # Step 4 — version-string consistency. Catches the case where the
95
- # canonical version in .chezmoidata.toml advanced but a human-visible
96
- # surface (CLI banner, man page, README badge) wasn't bumped. The
97
- # script is cheap (~8 grep calls); failure tells the user exactly
98
- # which file drifted and offers --fix.
99
- bash "$repo_root/scripts/qa/check-version-consistency.sh" --quiet || {
100
- echo "" >&2
101
- echo "Pre-push blocked: version-string drift detected." >&2
102
- echo "Run: scripts/qa/check-version-consistency.sh" >&2
103
- echo "Then: scripts/qa/check-version-consistency.sh --fix (optional auto-fix)" >&2
104
- exit 1
105
- }
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # Appends the EUXIS branding signature to every commit message.
4
- # Signature source: ~/.euxis/data/config/branding/signature.txt
5
-
6
- set -euo pipefail
7
-
8
- # R5: validate commit message file argument
9
- if [[ -z "${1:-}" || ! -f "${1:-}" ]]; then
10
- exit 0 # No file provided — git will handle the error
11
- fi
12
-
13
- COMMIT_MSG_FILE="$1"
14
- COMMIT_SOURCE="${2:-}"
15
-
16
- # Skip merge commits, amends with existing signature, and squash
17
- case "$COMMIT_SOURCE" in
18
- merge | squash) exit 0 ;;
19
- esac
20
-
21
- SIGNATURE_FILE="$HOME/.euxis/data/config/branding/signature.txt"
22
-
23
- # Only append if the signature file exists and message doesn't already have it
24
- if [[ -f "$SIGNATURE_FILE" ]]; then
25
- signature=$(cat "$SIGNATURE_FILE")
26
- if ! grep -qF "THE ARCHITECT" "$COMMIT_MSG_FILE" 2>/dev/null; then
27
- printf '\n%s\n' "$signature" >>"$COMMIT_MSG_FILE"
28
- fi
29
- fi
@@ -1,200 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: Apache-2.0 OR MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Provider-agnostic secrets bridge for dotfiles.
5
-
6
- set -euo pipefail
7
-
8
- DOT_SECRETS_HOME="${DOT_SECRETS_HOME:-$HOME/.config/dotfiles/secrets}"
9
- DOT_SECRETS_STORE_DIR="${DOT_SECRETS_STORE_DIR:-$DOT_SECRETS_HOME/store}"
10
- DOT_SECRETS_INDEX_FILE="${DOT_SECRETS_INDEX_FILE:-$DOT_SECRETS_HOME/index.txt}"
11
- DOT_SECRETS_AGE_KEY="${DOT_SECRETS_AGE_KEY:-$HOME/.config/chezmoi/key.txt}"
12
- DOT_SECRETS_SERVICE_PREFIX="${DOT_SECRETS_SERVICE_PREFIX:-dotfiles.secret}"
13
-
14
- dot_secrets_ensure_layout() {
15
- mkdir -p "$DOT_SECRETS_STORE_DIR"
16
- touch "$DOT_SECRETS_INDEX_FILE"
17
- chmod 700 "$DOT_SECRETS_HOME" 2>/dev/null || true
18
- chmod 700 "$DOT_SECRETS_STORE_DIR" 2>/dev/null || true
19
- chmod 600 "$DOT_SECRETS_INDEX_FILE" 2>/dev/null || true
20
- }
21
-
22
- dot_secrets_provider() {
23
- local provider="${DOTFILES_SECRETS_PROVIDER:-auto}"
24
- if [[ "$provider" != "auto" ]]; then
25
- printf "%s\n" "$provider"
26
- return 0
27
- fi
28
-
29
- if [[ "${OSTYPE:-}" == darwin* ]] && command -v security >/dev/null 2>&1; then
30
- printf "macos-keychain\n"
31
- return 0
32
- fi
33
- if command -v pass >/dev/null 2>&1; then
34
- printf "pass\n"
35
- return 0
36
- fi
37
- if command -v age >/dev/null 2>&1 && [[ -f "$DOT_SECRETS_AGE_KEY" ]]; then
38
- printf "plain-enc\n"
39
- return 0
40
- fi
41
- printf "none\n"
42
- }
43
-
44
- dot_secrets_index_add() {
45
- local key="${1:-}"
46
- [[ -n "$key" ]] || return 1
47
- dot_secrets_ensure_layout
48
- if ! grep -qxF "$key" "$DOT_SECRETS_INDEX_FILE" 2>/dev/null; then
49
- printf "%s\n" "$key" >>"$DOT_SECRETS_INDEX_FILE"
50
- fi
51
- }
52
-
53
- dot_secrets_index_list() {
54
- dot_secrets_ensure_layout
55
- awk 'NF > 0' "$DOT_SECRETS_INDEX_FILE" | sort -u
56
- }
57
-
58
- dot_secrets_store_macos() {
59
- local key="$1"
60
- local value="$2"
61
- local service="${DOT_SECRETS_SERVICE_PREFIX}.${key}"
62
- security add-generic-password -U -a "${USER:-dotfiles}" -s "$service" -w "$value" >/dev/null
63
- }
64
-
65
- dot_secrets_get_macos() {
66
- local key="$1"
67
- local service="${DOT_SECRETS_SERVICE_PREFIX}.${key}"
68
- security find-generic-password -a "${USER:-dotfiles}" -s "$service" -w 2>/dev/null || return 1
69
- }
70
-
71
- dot_secrets_store_pass() {
72
- local key="$1" value="$2"
73
- printf "%s\n" "$value" | pass insert -m -f "dotfiles/${key}" >/dev/null
74
- }
75
-
76
- dot_secrets_get_pass() {
77
- local key="$1"
78
- pass show "dotfiles/${key}" 2>/dev/null | head -n1
79
- }
80
-
81
- dot_secrets_store_plain_enc() {
82
- local key="$1" value="$2"
83
- local tmp_rec file
84
- [[ -f "$DOT_SECRETS_AGE_KEY" ]] || {
85
- echo "age key not found: $DOT_SECRETS_AGE_KEY" >&2
86
- return 1
87
- }
88
- command -v age >/dev/null 2>&1 || {
89
- echo "age not installed" >&2
90
- return 1
91
- }
92
- command -v age-keygen >/dev/null 2>&1 || {
93
- echo "age-keygen not installed" >&2
94
- return 1
95
- }
96
- dot_secrets_ensure_layout
97
- tmp_rec="$(umask 077 && mktemp)"
98
- file="$DOT_SECRETS_STORE_DIR/${key}.age"
99
-
100
- # No RETURN trap here. A RETURN trap set inside a function also fires when
101
- # its CALLER returns, and by then `tmp_rec` — local to this function — is
102
- # out of scope: under `set -u` the trap aborted dot_secrets_set with
103
- # "tmp_rec: unbound variable" AFTER the encrypted file had been written, so
104
- # `dot secrets set` reported failure on a write that had succeeded. Clean up
105
- # explicitly on both paths instead.
106
- if ! age-keygen -y "$DOT_SECRETS_AGE_KEY" >"$tmp_rec"; then
107
- rm -f "$tmp_rec"
108
- echo "failed to derive the age recipient from $DOT_SECRETS_AGE_KEY" >&2
109
- return 1
110
- fi
111
- if ! printf "%s" "$value" | age -R "$tmp_rec" -o "$file"; then
112
- rm -f "$tmp_rec"
113
- echo "failed to encrypt secret: $key" >&2
114
- return 1
115
- fi
116
- rm -f "$tmp_rec"
117
- chmod 600 "$file" 2>/dev/null || true
118
- }
119
-
120
- dot_secrets_get_plain_enc() {
121
- local key="$1"
122
- local file="$DOT_SECRETS_STORE_DIR/${key}.age"
123
- [[ -f "$DOT_SECRETS_AGE_KEY" ]] || return 1
124
- [[ -f "$file" ]] || return 1
125
- age -d -i "$DOT_SECRETS_AGE_KEY" "$file" 2>/dev/null || return 1
126
- }
127
-
128
- dot_secrets_set() {
129
- local key="${1:-}" value="${2:-}" provider
130
- [[ -n "$key" ]] || return 1
131
- provider="$(dot_secrets_provider)"
132
- case "$provider" in
133
- macos-keychain) dot_secrets_store_macos "$key" "$value" ;;
134
- pass) dot_secrets_store_pass "$key" "$value" ;;
135
- plain-enc) dot_secrets_store_plain_enc "$key" "$value" ;;
136
- *)
137
- echo "No supported secrets provider detected." >&2
138
- return 1
139
- ;;
140
- esac
141
- dot_secrets_index_add "$key"
142
- }
143
-
144
- dot_secrets_get() {
145
- local key="${1:-}" provider value rc=0
146
- [[ -n "$key" ]] || {
147
- printf 'dot_secrets_get: empty key\n' >&2
148
- return 1
149
- }
150
- provider="$(dot_secrets_provider)"
151
- case "$provider" in
152
- macos-keychain) value="$(dot_secrets_get_macos "$key")" || rc=$? ;;
153
- pass) value="$(dot_secrets_get_pass "$key")" || rc=$? ;;
154
- plain-enc) value="$(dot_secrets_get_plain_enc "$key")" || rc=$? ;;
155
- none)
156
- # No usable provider on this host — silent miss is wrong;
157
- # callers need to know whether to fall back.
158
- printf 'dot_secrets_get: no provider configured for key=%s\n' "$key" >&2
159
- return 2
160
- ;;
161
- *)
162
- printf 'dot_secrets_get: unknown provider %q\n' "$provider" >&2
163
- return 1
164
- ;;
165
- esac
166
- if [[ "$rc" -ne 0 ]]; then
167
- printf 'dot_secrets_get: provider %q failed (rc=%d) for key=%s\n' \
168
- "$provider" "$rc" "$key" >&2
169
- return "$rc"
170
- fi
171
- if [[ -z "$value" ]]; then
172
- # An empty return from a successful provider call usually means
173
- # "key not found" — distinguish from "provider crashed" so the
174
- # caller's fallback can be different.
175
- printf 'dot_secrets_get: provider %q returned empty for key=%s (not found?)\n' \
176
- "$provider" "$key" >&2
177
- return 3
178
- fi
179
- printf '%s' "$value"
180
- }
181
-
182
- dot_secrets_bucket_keys() {
183
- local data_file="${1:-}" bucket="${2:-}"
184
- [[ -f "$data_file" ]] || return 1
185
- [[ -n "$bucket" ]] || return 1
186
- awk -v b="$bucket" '
187
- $0 ~ "^[[:space:]]*" b "[[:space:]]*=" {
188
- line=$0
189
- gsub(/^.*\[/, "", line)
190
- gsub(/\].*$/, "", line)
191
- gsub(/"/, "", line)
192
- n=split(line, arr, ",")
193
- for (i=1; i<=n; i++) {
194
- gsub(/^[[:space:]]+|[[:space:]]+$/, "", arr[i])
195
- if (arr[i] != "") print arr[i]
196
- }
197
- exit
198
- }
199
- ' "$data_file"
200
- }
@@ -1,81 +0,0 @@
1
- -- Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
- -- headless-upgrade.lua — plugin/tool refresh for `dot upgrade`.
3
- --
4
- -- Runs Lazy sync and then waits for Mason's async install queue to drain
5
- -- before exiting. The naive invocation
6
- -- nvim --headless "+Lazy! sync" +qa
7
- -- races on two fronts:
8
- -- 1. Lazy's own async ops (git fetch/checkout, `build` hooks) can outlive
9
- -- the `Lazy! sync` command return.
10
- -- 2. `mason-nvim-dap` and `mason-lspconfig` fire `ensure_installed` on
11
- -- plugin load; those installs are enqueued to mason.nvim and run
12
- -- async, so `+qa` aborts them mid-download (leaving codelldb / debugpy
13
- -- / delve half-installed, per repeated user reports on `dot upgrade`).
14
- --
15
- -- We explicitly wait for both queues before quitting.
16
-
17
- local LAZY_TIMEOUT_MS = 300000 -- 5 min per phase
18
- local MASON_TIMEOUT_MS = 300000
19
-
20
- local function log(msg)
21
- io.stderr:write(("[headless-upgrade] %s\n"):format(msg))
22
- end
23
-
24
- -- ---------------------------------------------------------------------------
25
- -- Phase 1: Lazy sync (blocking)
26
- -- ---------------------------------------------------------------------------
27
- local ok_lazy, lazy = pcall(require, "lazy")
28
- if not ok_lazy then
29
- log("lazy.nvim not available; skipping plugin update")
30
- vim.cmd("quitall!")
31
- return
32
- end
33
-
34
- lazy.sync({ wait = true, show = false })
35
-
36
- -- Belt-and-braces: give any residual runner tasks a chance to drain even if
37
- -- `wait = true` returned early on the last task in a batch.
38
- pcall(function()
39
- local ok_runner, runner = pcall(require, "lazy.manage.runner")
40
- if not ok_runner then return end
41
- vim.wait(LAZY_TIMEOUT_MS, function()
42
- return not (runner.running and runner.running())
43
- end, 200)
44
- end)
45
-
46
- -- ---------------------------------------------------------------------------
47
- -- Phase 2: drain Mason's async install queue
48
- -- ---------------------------------------------------------------------------
49
- pcall(function()
50
- local ok_reg, registry = pcall(require, "mason-registry")
51
- if not ok_reg then return end
52
-
53
- -- Refresh the remote registry so ensure_installed picks up latest versions.
54
- local refreshed = false
55
- registry.refresh(function() refreshed = true end)
56
- vim.wait(30000, function() return refreshed end, 200)
57
-
58
- local function any_installing()
59
- for _, pkg in ipairs(registry.get_all_packages() or {}) do
60
- if pkg.is_installing and pkg:is_installing() then
61
- return true
62
- end
63
- end
64
- return false
65
- end
66
-
67
- -- Small settle time so installs triggered by ensure_installed hooks have
68
- -- a chance to enter the installing state before we start polling.
69
- vim.wait(2000, function() return false end, 200)
70
-
71
- local done = vim.wait(MASON_TIMEOUT_MS, function()
72
- return not any_installing()
73
- end, 500)
74
-
75
- if not done then
76
- log(("Mason install queue still active after %ds; exiting anyway"):format(
77
- MASON_TIMEOUT_MS / 1000))
78
- end
79
- end)
80
-
81
- vim.cmd("quitall!")
@@ -1,71 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: Apache-2.0 OR MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Universal AI Toolchain Setup & Authentication.
5
-
6
- set -euo pipefail
7
-
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
9
- # shellcheck disable=SC1091
10
- source "$SCRIPT_DIR/../lib/dot/ui.sh"
11
-
12
- ui_header "Universal AI Toolchain Setup"
13
-
14
- setup_tool() {
15
- local name="$1"
16
- local cmd="$2"
17
- shift 2
18
- # Remaining args are the auth command — passed as an array to avoid eval.
19
- local -a auth_argv=("$@")
20
-
21
- ui_section "Setting up $name"
22
- if command -v "$cmd" >/dev/null 2>&1; then
23
- if [[ ! -t 0 && "${auth_argv[*]}" != *"--version"* ]]; then
24
- ui_info "$name" "non-interactive shell; skipping login. Run '${auth_argv[*]}' in a terminal."
25
- return 0
26
- fi
27
- ui_info "Tool found, initiating authentication..."
28
- "${auth_argv[@]}" || ui_warn "$name" "Setup/Auth skipped or failed."
29
- else
30
- ui_err "$name" "Binary not found. Run 'dot apply' or install via mise first."
31
- fi
32
- }
33
-
34
- # 1. Claude
35
- setup_tool "Claude CLI" "claude" claude --version # Claude handles auth via web flow or env
36
-
37
- # 2. Antigravity CLI
38
- setup_tool "Antigravity CLI" "agy" agy --version
39
-
40
- # 3. Codex
41
- setup_tool "Codex CLI" "codex" codex --version
42
-
43
- # 4. Copilot
44
- setup_tool "Copilot CLI" "copilot" copilot --version
45
-
46
- # 5. Goose
47
- setup_tool "Goose" "goose" goose --version
48
-
49
- # 6. Kiro
50
- setup_tool "Kiro CLI" "kiro-cli" kiro-cli login
51
-
52
- # 7. Kimi
53
- setup_tool "Kimi CLI" "kimi" kimi --version
54
-
55
- # 8. Aider
56
- setup_tool "Aider" "aider" aider --version
57
-
58
- # 9. Autohand Code
59
- setup_tool "Autohand Code" "autohand" autohand --version
60
-
61
- # 10. Mistral Vibe
62
- setup_tool "Mistral Vibe" "vibe" vibe --version
63
-
64
- # 11. Qwen Code
65
- setup_tool "Qwen Code" "qwen" qwen --version
66
-
67
- # 12. ZAI
68
- setup_tool "ZAI" "zai" zai --version
69
-
70
- ui_header "AI Setup Complete"
71
- ui_info "All tools are ready. Use 'dot ai' to check status."
@@ -1,104 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: Apache-2.0 OR MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Create an offline bundle of the dotfiles environment for air-gapped systems.
5
-
6
- set -euo pipefail
7
-
8
- _cleanup_files=()
9
- trap 'set +u; rm -f "${_cleanup_files[@]}" 2>/dev/null; set -u' EXIT
10
-
11
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
12
- # shellcheck disable=SC1091
13
- source "$SCRIPT_DIR/../lib/dot/ui.sh"
14
- # shellcheck disable=SC1091
15
- source "$SCRIPT_DIR/../lib/dot/log.sh"
16
- export DOT_COMMAND="bundle"
17
-
18
- usage() {
19
- cat <<'EOF'
20
- Usage: bundle.sh [output-dir]
21
-
22
- Create an offline dotfiles bundle as a .tar.zst archive.
23
- EOF
24
- }
25
-
26
- case "${1:-}" in
27
- --help | -h)
28
- usage
29
- exit 0
30
- ;;
31
- -*)
32
- printf 'Unknown option: %s\n' "$1" >&2
33
- usage >&2
34
- exit 2
35
- ;;
36
- esac
37
-
38
- # Concurrency guard
39
- LOCK_DIR="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}"
40
- if [[ ! -d "$LOCK_DIR" || ! -w "$LOCK_DIR" ]]; then
41
- LOCK_DIR="${TMPDIR:-/tmp}"
42
- fi
43
- LOCK_FILE="$LOCK_DIR/dotfiles-bundle.lock"
44
- if command -v flock >/dev/null 2>&1; then
45
- exec 9>"$LOCK_FILE"
46
- if ! flock -n 9; then
47
- ui_warn "Already running" "Another bundle instance is active"
48
- exit 0
49
- fi
50
- fi
51
-
52
- OUTPUT_DIR="${1:-$HOME/Downloads}"
53
- TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
54
- BUNDLE_FILE="$OUTPUT_DIR/dotfiles_offline_bundle_$TIMESTAMP.tar.zst"
55
-
56
- dot_log info "bundle_start"
57
- ui_header "Creating Offline Bundle (Zero-Network Mode)"
58
-
59
- # Ensure target directory exists
60
- mkdir -p "$OUTPUT_DIR"
61
-
62
- ui_info "Gathering artifacts..."
63
- # We use zstd for much faster compression of binary artifacts compared to gzip/xz
64
- if ! command -v tar >/dev/null || ! command -v zstd >/dev/null; then
65
- ui_err "tar and zstd are required for bundling."
66
- exit 1
67
- fi
68
-
69
- # Define paths to bundle
70
- declare -a paths_to_bundle=(
71
- "$HOME/.dotfiles"
72
- "$HOME/.config/chezmoi"
73
- "$HOME/.local/share/mise"
74
- )
75
-
76
- # Optional: Add nix store if present and requested
77
- if [[ -d "/nix/store" ]] && [[ "${DOTFILES_BUNDLE_NIX:-0}" == "1" ]]; then
78
- ui_warn "Including Nix store. This will be very large."
79
- paths_to_bundle+=("/nix/store" "/nix/var/nix" "$HOME/.nix-profile")
80
- fi
81
-
82
- # Filter only existing paths
83
- declare -a valid_paths=()
84
- for p in "${paths_to_bundle[@]}"; do
85
- if [[ -e "$p" ]]; then
86
- valid_paths+=("$p")
87
- ui_bullet "Adding: $p"
88
- fi
89
- done
90
-
91
- ui_info "Compressing artifacts (this may take a while)..."
92
- # Use absolute paths and store them relative to / to preserve structure
93
- tar --zstd -cf "$BUNDLE_FILE" -P "${valid_paths[@]}" 2>/dev/null || {
94
- ui_err "Failed to create bundle."
95
- exit 1
96
- }
97
-
98
- bundle_size=$(stat -c '%s' "$BUNDLE_FILE" 2>/dev/null || stat -f '%z' "$BUNDLE_FILE" 2>/dev/null || echo 0)
99
- dot_log info "bundle_end" "file=$BUNDLE_FILE"
100
- dot_metric "bundle_size" "$bundle_size" "bytes"
101
- ui_ok "Bundle created" "$BUNDLE_FILE"
102
- ui_info "To restore on an offline machine:"
103
- ui_bullet "tar --zstd -xf $BUNDLE_FILE -P"
104
- ui_bullet "cd ~/.dotfiles && ./install.sh --force"
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: Apache-2.0 OR MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Chaos Engineering: Randomly corrupt config files to test self-healing (dot heal)
5
- # USE WITH CAUTION: This intentionally breaks your environment.
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
- ui_init
14
-
15
- if [[ "${1:-}" != "--force" ]]; then
16
- ui_err "WARNING" "This script will intentionally break your dotfiles configuration."
17
- ui_info "Purpose" "Tests 'dot heal' auto-repair capabilities."
18
- echo ""
19
- ui_info "To run, execute" "${0} --force"
20
- exit 1
21
- fi
22
-
23
- ui_warn "Initiating Chaos Engineering Sequence..."
24
-
25
- # Target files for corruption/deletion
26
- TARGETS=(
27
- "$HOME/.config/starship.toml"
28
- "$HOME/.zshrc"
29
- "$HOME/.config/alacritty/alacritty.toml"
30
- )
31
-
32
- # 1. Configuration Deletion
33
- for target in "${TARGETS[@]}"; do
34
- if [[ -f "$target" ]] || [[ -L "$target" ]]; then
35
- ui_err "Destroying" "$target"
36
- rm -f "$target"
37
- fi
38
- done
39
-
40
- # 2. Symlink Corruption
41
- ui_err "Creating" "broken symlinks..."
42
- ln -sf /tmp/nonexistent_file_xyz "$HOME/.config/broken_symlink_test"
43
-
44
- # 3. Path Mutation
45
- ui_err "Corrupting" "PATH..."
46
- export PATH="/bin"
47
-
48
- echo ""
49
- ui_ok "Chaos injected" "State is drifted and broken."
50
- ui_info "Recover" "dot heal"