@sebastienrousseau/dotfiles 0.2.520 → 0.2.522

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 +52 -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,41 +0,0 @@
1
- # Maintainers
2
-
3
- This project is maintained by a single primary maintainer with an
4
- explicit, documented governance model (see [`GOVERNANCE.md`](GOVERNANCE.md)).
5
-
6
- ## Primary maintainer
7
-
8
- - **Sebastien Rousseau** — <sebastian.rousseau@gmail.com>
9
- - GitHub: [@sebastienrousseau](https://github.com/sebastienrousseau)
10
- - Role: project owner, release manager, security disclosure contact
11
- - Commit signing: SSH ED25519 (`SHA256:kIOPAavp1TCEauTr1tTIN3cv+tSs6F9m/4lZjuM9tqk`)
12
- - GPG disclosure key fingerprint: `55AFAD364FD9DB3819E61F0C8D688FAFA9144693` (ed25519 + cv25519, expires 2029-05-15, published via WKD at `security@sebastienrousseau.com`)
13
-
14
- ## Active contributors
15
-
16
- This is a solo-maintained project. Contributions are welcomed via
17
- pull request (see `CONTRIBUTING.md`); the maintainer reviews and
18
- merges. When the project gains additional regular committers their
19
- names will land here with role and contact.
20
-
21
- ## Security contact
22
-
23
- For coordinated vulnerability disclosure, follow `SECURITY.md`.
24
- TL;DR: encrypt your report to the WKD-published GPG key above and
25
- email `security@sebastienrousseau.com`. Acknowledgement SLA: 72 hours.
26
-
27
- ## Backup / continuity
28
-
29
- In the event the primary maintainer becomes unable to maintain the
30
- project, the repository is published under the MIT license and may
31
- be forked. The `chezmoi`-based architecture means existing user
32
- installs continue to work indefinitely without upstream activity.
33
-
34
- ## Releases
35
-
36
- | Release author | Cadence | Signing |
37
- |---|---|---|
38
- | Primary maintainer | ~weekly | Signed annotated git tag + Cosign-signed SBOM + SLSA L3 provenance |
39
-
40
- See `docs/operations/HARD_AUDIT_2026.md` Part 7 for the
41
- disclosure-key generation + WKD publication record.
@@ -1,100 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- <!-- SPDX-License-Identifier: Apache-2.0 OR MIT -->
6
- <!-- Copyright (c) 2015-2026 Sebastien Rousseau -->
7
-
8
- # Minimum toolchain policy
9
-
10
- This project has no compiler and therefore no MSRV. The equivalent
11
- contract is the set of **interpreter and tool versions the framework
12
- runs on**, and — more importantly — the policy for when those floors
13
- may move.
14
-
15
- The policy matters more than the numbers. A floor stated without a
16
- policy is a number that drifts silently; a floor stated without CI
17
- behind it is a claim, not a guarantee. Everything marked "enforced"
18
- below is a job in `.github/workflows/`; everything else is labelled
19
- as expectation.
20
-
21
- ## The floors
22
-
23
- | Component | Floor | Why this floor | Enforced by |
24
- |---|---|---|---|
25
- | **bash** (running `dot`, `install.sh`, every script) | **3.2** | macOS still ships bash 3.2 as `/bin/bash` and always will (GPLv3). The CLI must work there or `dot` breaks on a stock Mac. No associative arrays, no `mapfile`/`readarray`, no `${var,,}`. | `cross-platform-test.yml` and `reliability-gate.yml` on `macos-latest` + `macos-14`, whose stock `/bin/bash` is 3.2.57 |
26
- | **bash** (as an *interactive* shell with the full config) | **5.0** | The shell configuration (completions, prompt hooks) uses bash 5 features. This is a different, higher floor than the CLI's. | `reusable-test-suite.yml` on ubuntu-latest |
27
- | **zsh** | **5.8** | The default interactive shell; `rc.d` ordering and the completion system assume 5.8. | `cross-platform-test.yml` (macOS stock zsh 5.9, Ubuntu 5.9) |
28
- | **fish** | **4.0** | `dot`, the alias bridge, and the generated completions target the fish 4 syntax. | `ci.yml` job `Lint / Fish` |
29
- | **nushell** | **0.98** | Tier-3 reference shell; see [ADR-011](adr/ADR-011-nushell-tier3-keep.md). | `ci.yml` job `Lint / Nushell` |
30
- | **PowerShell** | **7.5** | The Windows parity surface. Note `windows-latest` currently ships 7.4 LTS, so CI proves 7.4 and the 7.5 claim covers features gated behind it. | `reliability-gate.yml` job `PowerShell Contract` on `windows-latest` |
31
- | **git** | **2.34** | The oldest release with SSH commit/tag signing (`gpg.format = ssh`), which the signing and verification flow requires. | Not version-gated in CI; the signing workflows exercise it on runner git (≥ 2.40) |
32
- | **chezmoi** | **2.47.1** | The pinned, checksum-verified version `install.sh` and CI install. Newer works; older is untested. | `install.sh` and `CHEZMOI_VERSION` in `ci.yml`, `ci-enforced.yml`, `perf-baseline.yml` |
33
- | **Go** (fuzz harnesses and the two TUIs only — not needed to *use* the framework) | **1.23** | `fuzz/go.mod`. | `fuzz.yml`, `cockpit-test.yml`, `dot-ui-test.yml` |
34
- | **Python** (pre-commit and the docs build only) | **3.12** | `pre-commit.yml`, `requirements-docs.txt`. | `pre-commit.yml`, `pages.yml` |
35
-
36
- `make install` additionally needs GNU make or BSD make and a POSIX
37
- `install(1)`; nothing else.
38
-
39
- ## Distro mapping — what is actually verified
40
-
41
- The rule the repository standard sets is: **never claim distro-LTS
42
- compatibility without a table mapping current distro toolchains to the
43
- floor.** Here is that table, with an honest column for whether CI
44
- proves it.
45
-
46
- | Platform | Ships bash | Ships zsh | Ships git | Meets the CLI floor? | In CI? |
47
- |---|---|---|---|---|---|
48
- | Ubuntu 24.04 LTS (`ubuntu-latest`) | 5.2 | 5.9 | 2.43 | Yes | **Yes** — the primary Linux runner across ~20 workflows |
49
- | Ubuntu 22.04 LTS | 5.1 | 5.8 | 2.34 | Yes | No — expected to work; not exercised since runners moved to 24.04 |
50
- | Debian 12 (bookworm) | 5.2 | 5.9 | 2.39 | Yes | No — same package versions as Ubuntu 22.04/24.04; expected, unverified |
51
- | Debian 13 (trixie) | 5.2 | 5.9 | 2.47 | Yes | No |
52
- | RHEL 9 / Rocky 9 / Alma 9 | 5.1 | 5.8 | 2.43 | Yes | No — no RHEL-family runner or container in CI |
53
- | RHEL 10 / Rocky 10 | 5.2 | 5.9 | 2.47 | Yes | No |
54
- | Fedora 41+ | 5.2 | 5.9 | 2.47 | Yes | No |
55
- | Arch Linux (rolling) | current | current | current | Yes | No — AUR package published, not CI-tested |
56
- | Alpine (musl, busybox ash) | — | — | 2.45 | **No** — bash is not installed by default and `install.sh` requires it | No |
57
- | macOS 14+, stock `/bin/bash` | **3.2.57** | 5.9 | 2.39+ (Xcode) | Yes — this is why the CLI floor is 3.2 | **Yes** — `macos-latest`, `macos-14` |
58
- | macOS + Homebrew bash | 5.3 | 5.9 | 2.5x | Yes | Yes (same runners, Homebrew bash present) |
59
- | Windows 11 + PowerShell 7.4 | n/a | n/a | 2.4x | Core CLI surface only | **Yes** — `windows-latest` PowerShell contract |
60
- | WSL2 (Ubuntu) | 5.2 | 5.9 | 2.43 | Yes | Partially — `reliability-gate.yml` runs a WSL *contract* check on Linux, not a real WSL VM |
61
-
62
- Read the last column as the honest one. "Expected, unverified" means
63
- the package versions clear the floor by inspection but no job proves
64
- it; a bug report from such a platform is legitimate and welcome.
65
-
66
- ## When a floor may rise
67
-
68
- A floor is not a promise never to move — it is a promise about *how*
69
- it moves.
70
-
71
- 1. **A raise is a breaking change** for the affected surface and gets
72
- a minor-version bump (a major once this project reaches 1.0), never
73
- a patch.
74
- 2. **A raise needs a reason recorded in the changelog entry**: the
75
- specific feature or fix that requires it. "Newer is better" is not
76
- a reason.
77
- 3. **The bash 3.2 floor for the CLI does not move while macOS ships
78
- 3.2 as `/bin/bash`.** This one is effectively permanent. Code that
79
- needs bash 4+ goes in a script that is not on the `dot` startup
80
- path, and says so in a comment.
81
- 4. **A raise must be enforced by CI in the same pull request** that
82
- raises it. Bumping a documented number without moving the matrix
83
- produces exactly the aspirational claim this policy exists to
84
- prevent.
85
- 5. **Deprecation window**: one minor release announcing the intent in
86
- the changelog before the floor actually rises, so a pinned consumer
87
- sees it coming.
88
-
89
- ## Where the numbers live
90
-
91
- | Number | Source of truth |
92
- |---|---|
93
- | chezmoi version | `CHEZMOI_VERSION` in `.github/workflows/ci.yml`, mirrored into `install.sh` |
94
- | Go version | `fuzz/go.mod` |
95
- | Every other pinned tool | `mise.toml` + `mise.lock` |
96
- | Python docs deps | `requirements-docs.txt` (hash-pinned) |
97
- | Platform/shell support tiers | [`reference/SUPPORT_MATRIX.md`](reference/SUPPORT_MATRIX.md) |
98
-
99
- If this document and one of those files disagree, the file wins and
100
- this document is the bug.
@@ -1,102 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
- {% raw %}
5
-
6
- # Naming Conventions & Standardization Guide
7
-
8
- This document defines the naming conventions for all files in the dotfiles repository.
9
-
10
- ---
11
-
12
- ## File Naming
13
-
14
- | Context | Convention | Example |
15
- |---|---|---|
16
- | Run scripts | `run_{type}_{NN}-{verb}-{noun}.sh.tmpl` | `run_onchange_10-install-packages.sh.tmpl` |
17
- | Shell fragments | `{NN}-{domain}-{detail}.sh.tmpl` | `90-ux-aliases.sh.tmpl` |
18
- | Alias files | `{tool}.aliases.sh` | `git.aliases.sh` |
19
- | Function files | `{name}.sh` (lowercase) | `apihealth.sh` |
20
- | Test files | `test_{domain}_{feature}.sh` | `test_aliases_git.sh` |
21
- | Scripts | `{verb}-{noun}.sh` (hyphenated) | `install-nerd-fonts.sh` |
22
-
23
- ## Run Script Numbering Tiers
24
-
25
- | Range | Category | Examples |
26
- |---|---|---|
27
- | 00-09 | Audit & pre-flight | `run_before_00-audit.sh` |
28
- | 10-19 | Package installation | `run_onchange_10-linux-packages.sh.tmpl` |
29
- | 20-29 | Config & languages | `run_onchange_20-ghostty-config.sh.tmpl` |
30
- | 25-29 | Language toolchains | `run_onchange_25-python-tools.sh.tmpl` |
31
- | 30-39 | Applications | `run_onchange_30-vscode-extensions.sh.tmpl` |
32
- | 40-49 | System defaults | `run_onchange_40-darwin-default-apps.sh.tmpl` |
33
- | 50-59 | Assets (fonts, themes) | `run_onchange_50-install-fonts.sh.tmpl` |
34
-
35
- ---
36
-
37
- ## Adding New Modules
38
-
39
- ### New app config
40
-
41
- 1. Create `dot_config/<app>/` with chezmoi-compatible filenames
42
- 2. Add entry to `dot_config/.module-manifest.json`
43
- 3. Optionally gate with feature flag in `.chezmoidata.toml` + `.chezmoiignore.tmpl`
44
-
45
- ### New alias category
46
-
47
- 1. Create `.chezmoitemplates/aliases/<category>/<name>.aliases.sh`
48
- 2. The `**/*.aliases.sh` glob auto-discovers it
49
- 3. Add to `$coreCategories` list in `90-ux-aliases.sh.tmpl` for eager loading; otherwise it loads lazily
50
-
51
- ### New function
52
-
53
- 1. Create file in `.chezmoitemplates/functions/<group>/`
54
- 2. Add to `groups.json` with the `<group>/<filename>` path
55
- 3. It auto-registers for lazy loading via `51-logic-functions-extra.sh.tmpl`
56
-
57
- ### New provisioning script
58
-
59
- 1. Create `install/provision/run_onchange_{NN}-{name}.sh.tmpl`
60
- 2. Use the numbering tiers above
61
- 3. Source `install/lib/os_detection.sh` for platform detection
62
- 4. Guard OS-specific code with `{{ if eq .chezmoi.os "darwin" }}`
63
-
64
- ---
65
-
66
- ## Directory Structure Overview
67
-
68
- ```text
69
- .chezmoitemplates/
70
- aliases/ # 48 categories, auto-discovered
71
- functions/ # Grouped by domain (api/, curl/, text/, system/, etc.)
72
- paths/ # PATH construction templates
73
- desktop/ # Desktop environment templates (dconf)
74
-
75
- dot_config/ # Flat — chezmoi constraint, no intermediate grouping
76
-
77
- install/
78
- lib/ # Shared helpers (os_detection, logging, installers)
79
- provision/ # run_onchange_* provisioning scripts
80
-
81
- scripts/ # Repo-only scripts (not deployed)
82
- dot/ # dot CLI subcommands
83
- ops/ # Operations scripts
84
- diagnostics/ # Health checks
85
- security/ # Security tools
86
- ...
87
-
88
- tests/ # Test suite (not deployed)
89
- framework/ # Test runner, assertions, mocks
90
- unit/ # Domain-organized unit tests
91
- integration/ # End-to-end tests
92
- performance/ # Benchmarks
93
-
94
- docs/ # Documentation and GitHub Pages source
95
- architecture/ # System design docs
96
- guides/ # How-to guides
97
- reference/ # Reference material
98
- security/ # Security documentation
99
- operations/ # Ops and maintenance docs
100
- ```
101
-
102
- {% endraw %}
package/docs/OPENCODE.md DELETED
@@ -1,127 +0,0 @@
1
- <!--
2
- Role: Repo-scoped instructions for the OpenCode CLI when operating
3
- inside this repository. Mirrors CLAUDE.md but targets OpenCode's
4
- conventions/discovery.
5
- Audience: OpenCode, this repo only.
6
-
7
- Distinct from:
8
- - CLAUDE.md — same intent, but for Claude Code.
9
- - dot_claude/CLAUDE.md — PERSONAL cross-project Claude Code preferences,
10
- deployed to ~/.claude/CLAUDE.md by chezmoi.
11
-
12
- Keep CLAUDE.md and OPENCODE.md in sync on repo-level conventions (layout,
13
- naming, CI, testing). If they drift, CLAUDE.md is the source of truth.
14
- -->
15
-
16
- # OPENCODE.md — AI Assistant Guidelines for Dotfiles Repository
17
-
18
- ## Chezmoi Source Directory Conventions
19
-
20
- This is a **chezmoi-managed** dotfiles repository. Files here are *source templates*,
21
- not the deployed config files. Understanding the naming conventions is critical.
22
-
23
- ### File Naming Rules
24
-
25
- | Prefix/Suffix | Meaning |
26
- |------------------|------------------------------------------------------|
27
- | `dot_` | Deployed with a leading `.` (e.g., `dot_zshrc` -> `.zshrc`) |
28
- | `executable_` | Deployed with `+x` permission |
29
- | `private_` | Deployed with `0600` permissions |
30
- | `.tmpl` | **Go template** — processed by chezmoi before deployment |
31
- | `run_onchange_` | Script that runs when the target file changes |
32
- | `encrypted_` | Age-encrypted file, decrypted at deploy time |
33
-
34
- ### Critical: Template vs Non-Template Files
35
-
36
- Many shell config files exist **only** as `.tmpl` variants. When reading files:
37
-
38
- - `dot_config/shell/00-core-paths.sh` does **NOT** exist
39
- - `dot_config/shell/00-core-paths.sh.tmpl` **DOES** exist (this is the source)
40
-
41
- **Rule**: If a `.sh` or `.zsh` file is not found, always try appending `.tmpl`.
42
-
43
- Files that are templates (use Go template syntax like `{{ .variable }}`):
44
-
45
- - `dot_config/shell/*.sh.tmpl` — all shell layer files
46
- - `dot_config/zsh/dot_zshrc.tmpl` — main zsh config
47
- - `dot_config/zsh/rc.d/*.tmpl` — zsh startup modules
48
- - `dot_gitconfig.tmpl` — git configuration
49
- - `private_dot_ssh/config.tmpl` — SSH configuration
50
- - `dot_npmrc.tmpl` — npm configuration
51
- - `private_dot_netrc.tmpl` — netrc credentials
52
-
53
- Files that are **NOT** templates (plain files, no `.tmpl` suffix):
54
-
55
- - `dot_config/shell/00-container-detect.sh` — plain shell script
56
- - `dot_config/shell/90-theme-switch.sh` — plain shell script
57
- - `dot_config/zsh/rc.d/00-alias-shims.zsh` — plain zsh
58
- - `dot_config/zsh/rc.d/05-ssh-agent.zsh` — plain zsh
59
- - Most files under `dot_config/nvim/`, `dot_config/starship.toml.tmpl`, etc.
60
-
61
- ### Reading Template Files
62
-
63
- Template files contain Go template directives like:
64
-
65
- ```
66
- {{ if eq .chezmoi.os "darwin" }}
67
- # macOS-specific config
68
- {{ end }}
69
- ```
70
-
71
- Data variables come from `.chezmoidata.toml` (profiles, features, theme, tools).
72
- User-specific values (git identity, age keys) come from `~/.config/chezmoi/chezmoi.toml`.
73
-
74
- ### Repository Layout
75
-
76
- ```
77
- .chezmoidata.toml # Feature flags, profiles, version
78
- .chezmoitemplates/ # Reusable template partials (aliases, functions, paths)
79
- dot_config/ # XDG configs (~/.config/*) — largest directory
80
- zsh/ # Zsh configuration
81
- dot_zshrc.tmpl # Main zsh orchestrator
82
- rc.d/ # Startup modules (sourced in order)
83
- shell/ # POSIX shell layers (paths, safety, aliases, functions)
84
- nvim/ # Neovim configuration (Lua)
85
- mise/ # mise version manager config
86
- starship.toml.tmpl # Starship prompt config
87
- atuin/ # Atuin shell history
88
- bat/ # bat (cat replacement) config
89
- ghostty/ # Ghostty terminal config
90
- kitty/ # Kitty terminal config
91
- alacritty/ # Alacritty terminal config
92
- dot_local/bin/ # User scripts (~/.local/bin)
93
- scripts/ # Repo-only scripts (tests, ops, security, diagnostics)
94
- docs/ # Documentation (30+ files)
95
- install.sh # Bootstrap installer
96
- ```
97
-
98
- ### Shell Startup Chain
99
-
100
- ```
101
- ~/.zshenv (dot_zshenv) → XDG vars, PATH, ZDOTDIR
102
- ~/.config/zsh/.zshrc (dot_zshrc.tmpl) → Main orchestrator
103
- → rc.d/00-alias-shims.zsh → Single-letter fallback commands
104
- → rc.d/05-ssh-agent.zsh → SSH agent + YubiKey
105
- → rc.d/10-env.zsh.tmpl → Environment variables
106
- → rc.d/20-zinit.zsh.tmpl → Plugin manager (deferred)
107
- → rc.d/30-options.zsh.tmpl → History, keybindings, completions
108
- → rc.d/40-bell.zsh.tmpl → Bell settings
109
- → rc.d/50-login-fortune.zsh.tmpl → Login greeting
110
- → shell/00-core-paths.sh.tmpl → Full PATH construction
111
- → shell/05-core-safety.sh.tmpl → Safety defaults
112
- → shell/90-ux-aliases.sh.tmpl → Core aliases (eager)
113
- → [deferred] mise, atuin, starship, zoxide, fzf
114
- → [lazy] shell/91-ux-aliases-lazy.sh.tmpl → Tool aliases
115
- ```
116
-
117
- ### Key Data Files
118
-
119
- - `.chezmoidata.toml` — All configuration: profiles, feature flags, tool settings
120
- - `dot_config/mise/conf.d/00-dotfiles.toml` — mise tool versions (node, python, go, rust, etc.); the writable `~/.config/mise/config.toml` is mise-owned and not chezmoi-managed
121
- - `dot_config/starship.toml.tmpl` — Prompt configuration
122
-
123
- ### Testing
124
-
125
- - Test framework: `tests/framework/`
126
- - Unit tests: `tests/unit/`
127
- - Tests execute bash source files directly — they do NOT use Go template syntax
package/docs/README.md DELETED
@@ -1,84 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Documentation
6
-
7
- Start here. Then go deeper.
8
-
9
- ## The Manual
10
-
11
- The complete reference is the `.dotfiles` Manual — a multi-format book covering every concept, tutorial, reference, and recipe.
12
-
13
- - Online: <https://sebastienrousseau.github.io/dotfiles/manual/> (HTML, PDF, EPUB, ASCII)
14
- - Locally: `dot manual` opens the HTML in your browser
15
- - Sources: [`docs/manual/`](manual/)
16
-
17
- Quick jumps into the Manual:
18
-
19
- - [Introduction](manual/00-introduction.md) — who, what, how
20
- - [Concepts](manual/01-concepts/) — architecture, trust model, theme engine, fleet, self-healing
21
- - [Tutorials](manual/02-tutorials/) — first install, wallpaper→theme, profiles, secrets, fleet
22
- - [Reference](manual/03-reference/) — CLI, config files, environment, templates, feature flags
23
- - [Cookbook](manual/04-cookbook/) — 40+ recipes, troubleshooting, FAQ
24
-
25
- ## Start
26
-
27
- - [Install](guides/INSTALL.md)
28
- - [Troubleshooting](guides/TROUBLESHOOTING.md)
29
- - [Support matrix](reference/SUPPORT_MATRIX.md)
30
-
31
- ## Daily use
32
-
33
- - [Utilities and `dot` CLI](reference/UTILS.md)
34
- - [Operations](operations/OPERATIONS.md)
35
- - [Trusted agent workstation](operations/TRUSTED_AGENT_WORKSTATION.md)
36
- - [Workstation attestation](operations/ATTESTATION.md)
37
- - [Interoperability](architecture/INTEROP.md)
38
- - [Agent interoperability](interop/A2A.md)
39
- - [AI integrations](AI.md)
40
-
41
- ## Security and trust
42
-
43
- - [Security overview](security/SECURITY.md)
44
- - [Security checklist](security/SECURITY_CHECKLIST.md)
45
- - [Policy bundle releases](security/POLICY_RELEASES.md)
46
- - [Secrets](security/SECRETS.md)
47
- - [Compliance](security/COMPLIANCE.md)
48
- - [Threat model](security/THREAT_MODEL.md)
49
-
50
- ## Build and maintain
51
-
52
- - [Testing](operations/TESTING.md)
53
- - [Reliability](operations/RELIABILITY.md)
54
- - [Naming conventions](NAMING_CONVENTIONS.md)
55
- - [Architecture](ARCHITECTURE.md)
56
- - [Repository layout](architecture/REPO_LAYOUT.md)
57
- - [AI cost optimization](architecture/AI_COST_OPTIMIZATION.md)
58
- - [Release pipeline](operations/RELEASE_PIPELINE.md)
59
- - [Architecture decisions](adr/README.md)
60
-
61
- ## Repository map
62
-
63
- | Path | Purpose |
64
- | :--- | :--- |
65
- | `docs/` | Guides, reference, security, and architecture |
66
- | `scripts/` | Repo-only scripts and `dot` command internals |
67
- | `install/` | Installer and provisioning helpers |
68
- | `dot_config/` | Managed user configuration files |
69
- | `dot_local/` | Managed local executables |
70
- | `examples/` | Executable examples |
71
- | `tests/` | Unit, integration, and framework coverage |
72
-
73
- ## Platform guides
74
-
75
- - [WSL2 and Nix](guides/WSL2_NIX_TROUBLESHOOTING.md)
76
- - [Neovim IDE](guides/NEOVIM_IDE_GUIDE.md)
77
-
78
- ## Reference
79
-
80
- - [Features](reference/FEATURES.md)
81
- - [Tools](reference/TOOLS.md)
82
- - [Aliases](reference/ALIASES.md)
83
- - [Roadmap](operations/ROADMAP.md)
84
- - [Version sync](operations/VERSION_SYNC.md)
package/docs/STRUCTURE.md DELETED
@@ -1,102 +0,0 @@
1
- # Repository Structure
2
-
3
- This document maps every top-level path in the repository to its
4
- purpose. Skim it once and you should be able to answer:
5
-
6
- - **Where is the `dot` CLI?** → `bin/dot` (the source-of-truth file). At runtime it lives at `~/.local/bin/dot`.
7
- - **Why are there 20+ `dot_*` files at root?** → chezmoi convention: a `dot_X` source file deploys to `~/.X` on apply. Same for `executable_*` (gains `+x`), `private_*` (`0600`), `run_onchange_*` (re-runs when source changes).
8
- - **What's the framework vs. the maintainer's personal config?** → Everything under `scripts/`, `install/`, `tools/`, `lib/`, and `defaults/.chezmoitemplates/` is framework code. Everything under `defaults/dot_config/`, `defaults/dot_warp/`, `defaults/private_dot_ssh/` is user-facing default configuration (chezmoi auto-rebases via `.chezmoiroot`).
9
-
10
- The Debian/aws-cli-style root layout shipped in **v0.2.503**:
11
- `bin/` (dispatcher), `lib/` (shared bash libs), `defaults/`
12
- (all chezmoi-tracked source files, rebased via
13
- `.chezmoiroot`). Repo root now hosts only project/CI/docs paths.
14
- See `docs/operations/ROADMAP_V0_2_503.md` for the full history.
15
-
16
- ---
17
-
18
- ## Top-level paths
19
-
20
- | Path | Kind | Purpose |
21
- |------|------|---------|
22
- | **CLI + framework** | | |
23
- | `dot_local/bin/` | framework | `executable_dot` (CLI entrypoint) and helper scripts. Deploys to `~/.local/bin/`. |
24
- | `dot_local/share/` | framework | Man pages, zsh completions. Deploys to `~/.local/share/`. |
25
- | `scripts/` | framework | Runtime-invoked scripts (`dot` CLI dispatch + specialised subtrees). See `scripts/README.md`. |
26
- | `tools/` | repo-ops | Repo-only ops: CI helpers, release, maintenance, docs-generation. Not distributable. See `tools/README.md`. |
27
- | `lib/dot/` | framework | Shared bash library sourced by every `dot` subcommand and the dispatcher. Reorganised here from `scripts/dot/lib/` per RFC Phase 1. See `lib/dot/README.md`. |
28
- | `lib/` | framework | Library tree (`lib/dot/` + the `dot-sys` Rust crate in `lib/wasm-tools/`, built for `wasm32-wasip1` and run under `wasmtime` by `dot attest --verify`). |
29
- | `install/` | framework | Bootstrap logic + distribution-channel manifests (`homebrew/`, `scoop/`, `aur/`). See `install/README.md`. `install/provision/` runs on `chezmoi apply` via `run_onchange_*` triggers. |
30
- | `install.sh` | framework | Top-level installer. SHA256-verified chezmoi fetch + initial apply. |
31
- | `.chezmoitemplates/` | framework | Reusable Go-template partials (aliases, functions, paths). Sourced by `dot_*.tmpl` files. |
32
- | **User-facing defaults** | | |
33
- | `dot_bashrc`, `dot_zshrc`, `dot_zshenv`, `dot_zprofile`, `dot_profile`, `dot_vimrc`, etc. | defaults | Shell + editor rc files. Deploy to `~/.X`. |
34
- | `dot_config/` | defaults | XDG config (`~/.config/*`). Largest tree — 80+ tool configs. |
35
- | `dot_local/` (non-bin/share) | defaults | Per-user state files for tools (`dot_local/state/`, etc.). |
36
- | `dot_cargo/`, `dot_etc/`, `dot_warp/` | defaults | Tool-specific roots (cargo, system etc, Warp terminal). |
37
- | `private_dot_ssh/` | defaults | SSH config — chezmoi `private_` prefix forces 0600. Does NOT contain private keys. |
38
- | `dot_claude/` | defaults | Claude Code per-user skills and config. |
39
- | **Templates + data** | | |
40
- | `templates/` | framework | Non-chezmoi templates (e.g. for `dot agents render`). |
41
- | `.chezmoidata/` | data | Hardware presets (`macbook-t2`, `surface-pro`) read by templates. |
42
- | `.chezmoidata.toml` | data | Feature flags + version. Single source-of-truth for `dotfiles_version`. |
43
- | `.chezmoi.toml.tmpl` | framework | Per-host chezmoi config generated on first apply. |
44
- | `.chezmoiignore` / `.chezmoiignore.tmpl` | framework | Tells chezmoi which paths NOT to deploy. |
45
- | **Docs + tests** | | |
46
- | `docs/` | docs | All documentation: `manual/` (user guide), `operations/` (audits, roadmaps), `reference/` (lookup tables), `security/`. |
47
- | `tests/` | tests | Test suite: `framework/` (runner + assertions + mocks), `unit/`, `integration/`, `regression/`, `fuzz/`, `snapshots/`. |
48
- | `examples/` | docs | Standalone examples (mise plugin, AI patterns, ops scripts). |
49
- | **CI + release** | | |
50
- | `.github/` | ci | GitHub Actions workflows + issue/PR templates + repo-level SECURITY/CODEOWNERS. |
51
- | `.devcontainer/` | ci | Dev Container spec for reproducible contributor onboarding. |
52
- | `Dockerfile.test` | ci | Container baseline for the CI test job. |
53
- | `.pre-commit-config.yaml` → `config/pre-commit-config.yaml` | ci | Pre-commit hooks (shellcheck, shfmt, luacheck, gitleaks, typos, conventional-commits). |
54
- | `flake.nix` / `flake.lock` | ci | Nix flake for reproducible dev shell. |
55
- | `mise.toml` / `mise-versions.lock.json` | ci | Pinned tool versions (mise as the package manager). |
56
- | **Misc + agents** | | |
57
- | `AGENTS.md` | docs | Cross-harness AI agent context (the standard read by Codex/Cursor/etc.). |
58
- | `.cursor/`, `.codex/`, `.windsurf/`, `.zed/`, `.roo/`, `.clinerules`, `.aider.conf.yml`, `.continuerc.json`, `.jules/`, `.agy/` | agents | Per-harness AGENTS.md renderings. Generated by `dot agents render`. Each one points back at `CLAUDE.md` as canonical. |
59
- | `CLAUDE.md` | docs | Project guidelines (the canonical source — `dot agents render` propagates it). |
60
- | `CONTRIBUTING.md` | docs | Contributor guide (must stay at root for GitHub auto-discovery). |
61
- | `docs/CONFIG_STRATEGY.md`, `docs/OPENCODE.md` | docs | Strategy + OpenCode-CLI guidance. Moved out of root for cleanliness in v0.2.503. |
62
- | `README.md` / `CHANGELOG.md` / `LICENSE` | docs | Standard project files. |
63
- | `Justfile.tmpl` / `Makefile` | dev | Task runners. |
64
- | `dist/` | build | Build artefacts directory. |
65
- | `coverage/`, `nightly-reports/` | build | CI output directories (gitignored). |
66
- | `nix/` | build | Nix flake source. |
67
- | `.well-known/` | misc | RFC-compliant `.well-known/` content (currently used for WKD GPG key publication). |
68
- | `.version-sync-backup/` | misc | Backup directory used by `scripts/version-sync.sh` during release prep. |
69
-
70
- ## Chezmoi naming contract
71
-
72
- | Prefix / suffix | Effect on deployment |
73
- |---|---|
74
- | `dot_foo` | Deploys as `.foo` (the `dot_` is consumed). |
75
- | `executable_foo` | Adds `+x` permission. |
76
- | `private_foo` | Sets `0600` permission. |
77
- | `run_onchange_foo.sh` | Script re-executes when its hash changes. |
78
- | `*.tmpl` | Processed as a Go template with chezmoi data before deployment. |
79
-
80
- **Critical gotcha:** `executable_dot_foo` deploys as `.foo` (not
81
- `dot_foo`). The `dot_` prefix is consumed by chezmoi after the
82
- `executable_` prefix. Renaming a deployed file silently can leave
83
- stale state in `~/.config/chezmoi/`.
84
-
85
- ## Where to make changes
86
-
87
- | Goal | File(s) to edit |
88
- |------|----------------|
89
- | Add a new `dot <subcommand>` | `scripts/dot/commands/<subcommand>.sh` + dispatch in `bin/dot` + entry in `docs/manual/03-reference/01-dot-cli.md` + entry in `docs/manual/command-index.md`. |
90
- | Change an alias | `.chezmoitemplates/aliases/<file>.aliases.sh` (sourced by `dot_zshrc.tmpl`, etc.). |
91
- | Add a feature flag | `[features]` block in `.chezmoidata.toml` + doc entry in `docs/manual/03-reference/05-feature-flags.md`. |
92
- | Add a new file deployed to `~/.X` | Create `dot_X` at root (or under a chezmoi-managed subtree). |
93
- | Add a new chezmoi template | `dot_X.tmpl` at root, then use `{{ }}` for chezmoi data. |
94
- | Add a CI workflow | `.github/workflows/<name>.yml`. |
95
- | Add a test | `tests/unit/<domain>/test_<name>.sh` or `tests/integration/test_<name>.sh`. |
96
-
97
- ## See also
98
-
99
- - `scripts/README.md` — map of the `scripts/` subtree.
100
- - `CONTRIBUTING.md` — code-style + commit-message + signing requirements.
101
- - `CLAUDE.md` — AI-assistant guidelines (the canonical source for `dot agents render`).
102
- - `docs/operations/ROADMAP_V0_2_503.md` — current release scope, including the v0.2.503 reorganisation plan.
@@ -1,118 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
- {% raw %}
5
-
6
- # ADR-001: Multi-stage CI/CD Pipeline Design
7
-
8
- **Status**: Accepted
9
- **Date**: 2026-02-09
10
- **Authors**: @sebastienrousseau
11
-
12
- ## Context
13
-
14
- The dotfiles repository requires a CI/CD pipeline that:
15
-
16
- - Validates changes across multiple platforms (Linux, macOS)
17
- - Runs security scans to detect secrets and vulnerabilities
18
- - Tests shell scripts, Lua configurations, and Nix expressions
19
- - Maintains fast feedback loops for developers
20
- - Minimizes GitHub Actions costs (runner minutes)
21
-
22
- Traditional approaches run all checks on every commit, leading to:
23
-
24
- - Wasted compute on unrelated changes (e.g., running Lua linting when only docs change)
25
- - High costs from macOS runners ($0.08/min vs $0.008/min for Linux)
26
- - Long feedback times from sequential job execution
27
-
28
- ## Decision
29
-
30
- Implement a **5-stage progressive CI pipeline** with path-based filtering:
31
-
32
- ### Stage 1: Change Detection
33
-
34
- Use `dorny/paths-filter` to detect which file categories changed:
35
-
36
- - `shell`: *.sh, scripts/**, install/**
37
- - `lua`: dot_config/nvim/**, *.lua
38
- - `nix`: nix/**, *.nix
39
- - `config`: dot_*/**, .chezmoitemplates/**
40
-
41
- ### Stage 2: Lint (Parallel, Conditional)
42
-
43
- - **lint-shell**: Only runs if shell files changed
44
- - **lint-lua**: Only runs if Lua files changed
45
- - Run in parallel to minimize wall-clock time
46
-
47
- ### Stage 3: Security (Always on PRs)
48
-
49
- - **secrets-scan**: Gitleaks on every PR (critical)
50
- - **link-check**: Only on schedule (expensive)
51
-
52
- ### Stage 4: Test (Conditional Matrix)
53
-
54
- - Linux-only for PRs (cheapest)
55
- - Full matrix (Linux + macOS) on schedule/manual trigger
56
- - Docker container tests for installation validation
57
-
58
- ### Stage 5: Quality (Schedule/Manual Only)
59
-
60
- - Idempotency verification
61
- - Performance benchmarks
62
- - Nix flake checks
63
-
64
- ### Cost Optimization Strategies
65
-
66
- 1. **Path filters**: Skip jobs when files don't match
67
- 2. **Concurrency groups**: Cancel in-progress runs on new pushes
68
- 3. **Conditional matrices**: Expensive OS testing only on schedule
69
- 4. **Aggressive caching**: Tools, dependencies, databases
70
-
71
- ## Consequences
72
-
73
- ### Positive
74
-
75
- - ~50% reduction in GitHub Actions minutes
76
- - Fast feedback for most changes (1-3 minutes)
77
- - Comprehensive testing still available via schedule/manual
78
- - Clear separation of concerns between stages
79
-
80
- ### Negative
81
-
82
- - Complexity in workflow configuration
83
- - Some bugs might only surface in scheduled runs
84
- - Path filter maintenance required as repo structure evolves
85
-
86
- ### Neutral
87
-
88
- - Developers can trigger full CI manually with `workflow_dispatch`
89
- - Breaking changes to CI require testing across all stages
90
-
91
- ## Implementation
92
-
93
- ```yaml
94
- # Key patterns used
95
- on:
96
- push:
97
- paths:
98
- - '**.sh' # Only trigger on shell changes
99
-
100
- concurrency:
101
- group: ${{ github.workflow }}-${{ github.ref }}
102
- cancel-in-progress: true
103
-
104
- jobs:
105
- changes:
106
- outputs:
107
- shell: ${{ steps.filter.outputs.shell }}
108
-
109
- lint-shell:
110
- needs: changes
111
- if: needs.changes.outputs.shell == 'true'
112
- ```
113
-
114
- ## References
115
-
116
- - [GitHub Actions Path Filtering](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)
117
- - [dorny/paths-filter](https://github.com/dorny/paths-filter)
118
- {% endraw %}