@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,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,185 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: 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
- trap 'rm -f "$tmp_rec"' RETURN
100
- age-keygen -y "$DOT_SECRETS_AGE_KEY" >"$tmp_rec"
101
- printf "%s" "$value" | age -R "$tmp_rec" -o "$file"
102
- chmod 600 "$file" 2>/dev/null || true
103
- }
104
-
105
- dot_secrets_get_plain_enc() {
106
- local key="$1"
107
- local file="$DOT_SECRETS_STORE_DIR/${key}.age"
108
- [[ -f "$DOT_SECRETS_AGE_KEY" ]] || return 1
109
- [[ -f "$file" ]] || return 1
110
- age -d -i "$DOT_SECRETS_AGE_KEY" "$file" 2>/dev/null || return 1
111
- }
112
-
113
- dot_secrets_set() {
114
- local key="${1:-}" value="${2:-}" provider
115
- [[ -n "$key" ]] || return 1
116
- provider="$(dot_secrets_provider)"
117
- case "$provider" in
118
- macos-keychain) dot_secrets_store_macos "$key" "$value" ;;
119
- pass) dot_secrets_store_pass "$key" "$value" ;;
120
- plain-enc) dot_secrets_store_plain_enc "$key" "$value" ;;
121
- *)
122
- echo "No supported secrets provider detected." >&2
123
- return 1
124
- ;;
125
- esac
126
- dot_secrets_index_add "$key"
127
- }
128
-
129
- dot_secrets_get() {
130
- local key="${1:-}" provider value rc=0
131
- [[ -n "$key" ]] || {
132
- printf 'dot_secrets_get: empty key\n' >&2
133
- return 1
134
- }
135
- provider="$(dot_secrets_provider)"
136
- case "$provider" in
137
- macos-keychain) value="$(dot_secrets_get_macos "$key")" || rc=$? ;;
138
- pass) value="$(dot_secrets_get_pass "$key")" || rc=$? ;;
139
- plain-enc) value="$(dot_secrets_get_plain_enc "$key")" || rc=$? ;;
140
- none)
141
- # No usable provider on this host — silent miss is wrong;
142
- # callers need to know whether to fall back.
143
- printf 'dot_secrets_get: no provider configured for key=%s\n' "$key" >&2
144
- return 2
145
- ;;
146
- *)
147
- printf 'dot_secrets_get: unknown provider %q\n' "$provider" >&2
148
- return 1
149
- ;;
150
- esac
151
- if [[ "$rc" -ne 0 ]]; then
152
- printf 'dot_secrets_get: provider %q failed (rc=%d) for key=%s\n' \
153
- "$provider" "$rc" "$key" >&2
154
- return "$rc"
155
- fi
156
- if [[ -z "$value" ]]; then
157
- # An empty return from a successful provider call usually means
158
- # "key not found" — distinguish from "provider crashed" so the
159
- # caller's fallback can be different.
160
- printf 'dot_secrets_get: provider %q returned empty for key=%s (not found?)\n' \
161
- "$provider" "$key" >&2
162
- return 3
163
- fi
164
- printf '%s' "$value"
165
- }
166
-
167
- dot_secrets_bucket_keys() {
168
- local data_file="${1:-}" bucket="${2:-}"
169
- [[ -f "$data_file" ]] || return 1
170
- [[ -n "$bucket" ]] || return 1
171
- awk -v b="$bucket" '
172
- $0 ~ "^[[:space:]]*" b "[[:space:]]*=" {
173
- line=$0
174
- gsub(/^.*\[/, "", line)
175
- gsub(/\].*$/, "", line)
176
- gsub(/"/, "", line)
177
- n=split(line, arr, ",")
178
- for (i=1; i<=n; i++) {
179
- gsub(/^[[:space:]]+|[[:space:]]+$/, "", arr[i])
180
- if (arr[i] != "") print arr[i]
181
- }
182
- exit
183
- }
184
- ' "$data_file"
185
- }
@@ -1,71 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: 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: 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: 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"