@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,90 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- title: "Dot Module Registry"
4
- description: "How to publish and consume reusable dotfile modules."
5
- ---
6
-
7
- # Dot Module Registry
8
-
9
- The `dot registry` command discovers reusable dotfile modules from a JSON index published over HTTPS. The default registry is hosted by this repo at:
10
-
11
- ```
12
- https://sebastienrousseau.github.io/dotfiles/registry.json
13
- ```
14
-
15
- This page documents the JSON contract and the contribution flow. It is the §3 / Months 12-18 deliverable from [HARD_AUDIT_2026.md](./HARD_AUDIT_2026.md) — the registry is the network-effect feature that turns the framework into a category, not just one person's setup.
16
-
17
- ## Quick start (consumer side)
18
-
19
- ```sh
20
- dot registry list # list every published module
21
- dot registry search rust # filter by keyword
22
- dot registry info rust-dev-setup # full metadata for one module
23
- dot registry install rust-dev-setup # verify and preview changes
24
- dot registry install rust-dev-setup --yes # verify, persist, and apply
25
- dot registry installed # list locally installed modules
26
- dot registry url # show active registry URL
27
- dot registry set-url <url> # point at a different registry
28
- ```
29
-
30
- The registry index is cached locally at `${XDG_CACHE_HOME:-~/.cache}/dotfiles/registry/index.json` with a 6 hour TTL. Override the URL one-off via `DOTFILES_REGISTRY_URL=<url> dot registry list`.
31
-
32
- ## JSON contract
33
-
34
- A registry index is a single JSON document:
35
-
36
- ```json
37
- {
38
- "version": 1,
39
- "updated": "2026-05-15T16:30:00Z",
40
- "registry": "sebastienrousseau/dotfiles",
41
- "modules": [
42
- {
43
- "name": "rust-dev-setup",
44
- "description": "Rust toolchain + cargo plugins + Helix/Neovim editor config",
45
- "repo": "https://github.com/example/rust-dev-setup",
46
- "version": "1.2.0",
47
- "tags": ["rust", "language", "dev"],
48
- "maintainer": "alice@example.com",
49
- "archive_url": "https://example.com/rust-dev-setup-1.2.0.tar.gz",
50
- "sha256": "f9a2c1b0a8d27c41b99c8c93641a0d476a0e54b23161847c47c780025ac7c4a1",
51
- "license": "MIT"
52
- }
53
- ]
54
- }
55
- ```
56
-
57
- Required keys: `name` (kebab-case, no more than 32 characters), `description` (no more than 200 characters), `version` (semver), `archive_url` (immutable HTTPS archive), and `sha256` (64 lowercase hexadecimal characters).
58
-
59
- Optional keys: `repo` (HTTPS project URL), `tags` (lower-case array), `maintainer`, and `license` (SPDX identifier). The machine-readable contract is [`docs/schema/dot-registry-v1.json`](../schema/dot-registry-v1.json).
60
-
61
- ## Contributing a module
62
-
63
- 1. Build a gzip-compressed tar archive containing a chezmoi-source-compatible directory. Publish it at an immutable HTTPS URL, such as a versioned GitHub release asset.
64
- 2. Open a PR against `sebastienrousseau/dotfiles` adding one entry to `docs/registry.json` (alphabetical by `name`).
65
- 3. The PR runs CI checks for:
66
- - Runtime contract validity and unique, sorted module names.
67
- - Valid JSON for both the index and its published JSON Schema.
68
- - A pinned SHA-256 digest for every archive.
69
- 4. Once merged, the GitHub Pages workflow re-deploys the registry; `dot registry list` picks it up within 6 hours (or immediately if the consumer purges the cache).
70
-
71
- ## Install pipeline
72
-
73
- `dot registry install <name>` is preview-first and does not mutate the workstation. Pass `--yes` only after reviewing the chezmoi dry-run. The installer:
74
-
75
- 1. Resolve the module entry from the registry index.
76
- 2. Download the versioned archive using HTTPS and TLS 1.2 or newer.
77
- 3. Verify the archive against the registry's SHA-256 digest.
78
- 4. Reject absolute paths, parent traversal, symbolic links, and hard links before extraction.
79
- 5. Run `chezmoi apply --dry-run` against the isolated module source.
80
- 6. With `--yes`, persist it at `${XDG_DATA_HOME:-~/.local/share}/dotfiles/modules/<name>/<version>` and apply that exact verified source.
81
-
82
- ## Security model
83
-
84
- - Modules execute with the consumer's user privileges via chezmoi scripts. Review the default dry-run and publisher before passing `--yes`.
85
- - The SHA-256 pin binds installation to the reviewed archive bytes, even if the hosting release later changes.
86
- - The registry index itself is fetched over HTTPS; the GitHub Pages cert chain provides transport integrity.
87
-
88
- ## Why this lives in this repo (for now)
89
-
90
- A vendor-neutral registry would be ideal but adds operations cost. Hosting `registry.json` under this repo's `docs/` directory and serving it via GitHub Pages keeps the maintenance burden near zero while the registry is small. If/when the registry outgrows GitHub Pages, the JSON contract is stable and the index can move to a dedicated subdomain.
@@ -1,128 +0,0 @@
1
- ---
2
- title: "Release Pipeline"
3
- date: 2026-05-24
4
- ---
5
-
6
- # Release Pipeline
7
-
8
- End-to-end flow from `git tag v0.2.503 && git push --tags` to a fully
9
- signed, distributed release on GitHub + Homebrew + Scoop + AUR.
10
-
11
- Release workflows are triggered by either `release.created` or
12
- `release.published`. Packaging starts at creation; distribution and the
13
- single security chain start at publication and run in parallel where
14
- dependencies allow.
15
-
16
- ```
17
- git push --tags (you)
18
-
19
-
20
- ┌────────────────────────────┐
21
- │ GitHub creates Release │ (auto, from tag)
22
- └─┬──────────────────────────┘
23
- ├── on: release.created
24
- │ └── release-package-dot.yml
25
- │ → dot-VERSION.tar.gz + .zip
26
-
27
- └── on: release.published
28
-
29
- ├──────────────────────────────────┐
30
- ▼ ▼
31
- ┌─────────────────────────────┐ ┌─────────────────────────────┐
32
- │ release-distribute-*.yml │ │ security-release.yml │
33
- │ ┌─────────────────────┐ │ │ → SBOM + provenance │
34
- │ │ homebrew → tap PR │ │ │ → ALL_SHA256SUMS │
35
- │ │ scoop → bucket PR│ │ │ → cosign sig + cert │
36
- │ │ aur → AUR push │ │ │ → verify full bundle │
37
- │ └─────────────────────┘ │ └─────────────────────────────┘
38
- └─────────────────────────────┘
39
-
40
-
41
- ┌─────────────────────────────┐
42
- │ release-attestation-check │ (Mondays + on demand)
43
- │ → opens issue if missing │
44
- └─────────────────────────────┘
45
- ```
46
-
47
- ## Workflows
48
-
49
- | Workflow | Trigger | Owns | Outputs |
50
- |---|---|---|---|
51
- | `release-package-dot.yml` | `release.created`, dispatch | Build deterministic `dot-VERSION.{tar.gz,zip}` from `bin/`, `lib/`, `share/`, completions. | Two release assets. |
52
- | `security-release.yml` (sbom job) | `release.published`, dispatch | Generate SPDX SBOM via anchore/sbom-action. Cosign keyless sign the SBOM. | `dotfiles-sbom.spdx.json` + `.sig` + `.pem`. |
53
- | `security-release.yml` (provenance job) | needs sbom | SLSA L3 provenance via slsa-framework/slsa-github-generator. | `dotfiles-sbom.spdx.json.intoto.jsonl`. |
54
- | `security-release.yml` (manifest job) | needs provenance + complete asset set | Build `ALL_SHA256SUMS` over every release asset, Cosign-sign it, and verify its signature and digests. | `ALL_SHA256SUMS` + `.sig` + `.pem`. |
55
- | `release-distribute-homebrew.yml` | `release.published`, dispatch | Hash `dot-VERSION.tar.gz`, regenerate `install/homebrew/dot.rb`, push branch + PR to `sebastienrousseau/homebrew-tap`. | One PR on the tap repo. |
56
- | `release-distribute-scoop.yml` | `release.published`, dispatch | Hash `dot-VERSION.zip`, rewrite `install/scoop/dot.json` via jq (both 64bit + arm64 point at same zip), PR to `sebastienrousseau/scoop-bucket`. | One PR on the bucket repo. |
57
- | `release-distribute-aur.yml` | `release.published`, dispatch | Hash `dot-VERSION.tar.gz`, rewrite `pkgver` + `sha256sums` in `install/aur/PKGBUILD`, regenerate `.SRCINFO` via dockerised `makepkg`, push to `ssh://aur@aur.archlinux.org/dot-cli-git.git`. | One commit on AUR. |
58
- | `release-attestation-check.yml` | weekly cron + dispatch | Verify the latest release carries the full attestation bundle (SBOM + sig + cert + intoto + manifest + sig + cert). | Opens or comments on a tracking issue. |
59
-
60
- ## Event ownership and readiness
61
-
62
- GitHub fires `release.created` the moment a Release record exists.
63
- That starts the packaging step, which depends only on source bytes at
64
- the tag and does not need other assets to be present.
65
-
66
- `release.published` fires later, when a human flips the Release from
67
- draft to public (or when a Release is created already-public, the
68
- events fire together). Distribution and the security chain start from
69
- this event. Publication does not mean independently triggered asset
70
- publishers have finished, so the manifest job waits for all 13 required
71
- package, documentation, SBOM, signature, and provenance assets before
72
- it downloads or signs the bundle. The final integrity job then verifies
73
- the manifest's Cosign identity and every recorded digest.
74
-
75
- Both release and dispatch paths of `security-release.yml` are
76
- idempotent: re-running the manifest job after late asset uploads picks
77
- up the new state and the `--clobber` flag overwrites the previous
78
- manifest sig + cert.
79
-
80
- ## Secrets used
81
-
82
- | Secret | Used by | Setup |
83
- |---|---|---|
84
- | `GITHUB_TOKEN` | every workflow (auto) | n/a |
85
- | `ACTIONS_BOT_SIGNING_KEY` | distribute-* (signed commits on tap repos), `bump-reusable-pins.yml`, `update-deps.yml` | See `docs/security/AUTOMATION_SECRETS.md`. |
86
- | `AUR_SSH_KEY` | `release-distribute-aur.yml` only | SSH ED25519 keypair; public key on the `srousseau` AUR profile, private key in this secret. See `memory/reference_aur_account.md` for the AUR Edit-Account form quirk that bit us during setup. |
87
-
88
- ## Distribution targets
89
-
90
- | Target | Repo | First-run prereq |
91
- |---|---|---|
92
- | Homebrew | `sebastienrousseau/homebrew-tap` | Tap repo exists (currently bare README + LICENSE). Workflow creates the `Formula/dot.rb` path on first publish. |
93
- | Scoop | `sebastienrousseau/scoop-bucket` | Bucket repo exists (currently bare). Workflow creates `bucket/dot.json` on first publish. |
94
- | AUR | `ssh://aur@aur.archlinux.org/dot-cli-git.git` | **Manual one-time step**: the maintainer must create the package entry via the AUR web UI before the workflow's `git clone` can succeed. The workflow exits with a clear error message on the first run if the repo doesn't exist. |
95
-
96
- ## Verifying a release
97
-
98
- See `docs/security/VERIFY_RELEASE.md` for the consumer-facing
99
- verification recipe. The pipeline produces four orthogonal
100
- attestations (SBOM, Cosign signature on SBOM, SLSA provenance,
101
- unified Cosign-signed manifest) and a verifier can check any of them
102
- independently.
103
-
104
- ## Known caveats
105
-
106
- - **AUR `pkgname=dot-cli-git`**: AUR's `-git` convention means
107
- "tracks git HEAD", but the workflow publishes tagged stable
108
- releases. Either rename to plain `dotfiles` in
109
- `install/aur/PKGBUILD` and register that package, or accept the
110
- misnomer. Documented in the v0.2.503 PR (#895).
111
- - **Signed-Releases retroactive**: the unified manifest landed in
112
- v0.2.503. Releases v0.2.500-502 carry the SBOM bundle only.
113
- We do not re-tag older releases (would break consumer pins). The
114
- OSSF Scorecard score climbs naturally as new releases land.
115
- - **First-tag rehearsal**: tag a `v0.2.503-rc1` once before the real
116
- v0.2.503 to live-test the full pipeline without burning the final
117
- release tag. The workflows are idempotent so a real v0.2.503 still
118
- works after the rc.
119
-
120
- ## See also
121
-
122
- - `docs/security/VERIFY_RELEASE.md` — consumer-facing verification.
123
- - `docs/security/CI_PINNING.md` — reusable workflow pin policy + the
124
- `bump-reusable-pins.yml` auto-bump bot.
125
- - `docs/security/AUTOMATION_SECRETS.md` — how each automation secret
126
- is generated, scoped, and rotated.
127
- - `docs/operations/ROADMAP_V0_2_503.md` — the 7-workstream plan this
128
- pipeline executed.
@@ -1,122 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
- {% raw %}
5
-
6
- # Reliability
7
-
8
- ## Reliability scorecard
9
-
10
- - Unit coverage: 100% module mapping target, enforced by `tests/framework/module_coverage.sh`
11
- - Integration depth: 11 integration test files in `tests/integration/`
12
- - Regression automation: 436 discovered test files and 2149 named tests in the current baseline
13
-
14
- ## Coverage gap map
15
-
16
- | Module | Missing path | Risk level | Proposed test case |
17
- | :--- | :--- | :--- | :--- |
18
- | `scripts/qa/reliability-audit.sh` | Quick mode and integration mode branch handling | Closed | Covered by `tests/unit/misc/test_qa_reliability_behaviour.sh` |
19
- | `scripts/git-hooks/pre-push` | Audit command failure path | Closed | Covered by `tests/unit/misc/test_git_hooks_pre_push_behaviour.sh` |
20
- | `tests/framework/module_coverage.sh` | False-positive module matches | Closed | Covered by `tests/unit/misc/test_module_coverage_behaviour.sh` |
21
- | `examples/*.sh` | Drift between examples and real commands | Closed | Examples execute in CI through `Examples Contract` and `validate-examples.sh` |
22
-
23
- ## Integration boundaries
24
-
25
- ```mermaid
26
- flowchart LR
27
- Dev[Developer] --> Hook[pre-push hook]
28
- Hook --> Audit[reliability-audit.sh]
29
- Audit --> Syntax[Shell syntax gate]
30
- Audit --> Unit[Unit suite]
31
- Audit --> Coverage[Module coverage]
32
- Audit --> Examples[Example validation]
33
- Audit --> WSL[WSL contract]
34
- Audit --> Integration[Integration suite]
35
- Integration --> Repo[Dotfiles workflows]
36
- WSL --> Repo
37
- ```
38
-
39
- ```mermaid
40
- sequenceDiagram
41
- participant Dev as Developer
42
- participant Git as Git client
43
- participant Hook as pre-push
44
- participant Audit as reliability-audit.sh
45
- participant Suite as tests/framework/test_runner.sh
46
- participant Cov as module_coverage.sh
47
- participant Ex as validate-examples.sh
48
- participant WSL as wsl-contract.sh
49
-
50
- Dev->>Git: git push
51
- Git->>Hook: invoke pre-push
52
- Hook->>Hook: verify signed commits
53
- Hook->>Audit: run quick gate
54
- Audit->>Suite: run unit suite
55
- Audit->>Cov: enforce 100% module mapping
56
- Audit->>Ex: execute examples
57
- Audit->>WSL: verify WSL parity contract
58
- Ex-->>Audit: pass
59
- Cov-->>Audit: pass
60
- WSL-->>Audit: pass
61
- Suite-->>Audit: pass
62
- Audit-->>Hook: pass
63
- Hook-->>Git: allow push
64
- ```
65
-
66
- ## CI gate
67
-
68
- ```yaml
69
- name: Reliability Gate
70
-
71
- on:
72
- pull_request:
73
- push:
74
- branches: [main]
75
- workflow_dispatch:
76
-
77
- jobs:
78
- reliability:
79
- strategy:
80
- fail-fast: false
81
- matrix:
82
- os: [ubuntu-latest, macos-latest]
83
- runs-on: ${{ matrix.os }}
84
- steps:
85
- - uses: actions/checkout@v6
86
- - name: Reliability audit
87
- run: bash ./scripts/qa/reliability-audit.sh --with-integration
88
-
89
- examples-contract:
90
- runs-on: ubuntu-latest
91
- steps:
92
- - uses: actions/checkout@v6
93
- - name: Validate executable examples
94
- run: bash ./scripts/qa/validate-examples.sh
95
-
96
- wsl-contract:
97
- runs-on: ubuntu-latest
98
- steps:
99
- - uses: actions/checkout@v6
100
- - name: Validate WSL parity contract
101
- run: bash ./scripts/qa/wsl-contract.sh
102
-
103
- reliability-summary:
104
- needs: [reliability, examples-contract, wsl-contract]
105
- runs-on: ubuntu-latest
106
- ```
107
-
108
- ## Functional examples
109
-
110
- - `examples/example-test-suite.sh`: Runs a focused unit slice.
111
- - `examples/example-coverage-gate.sh`: Runs the module coverage contract.
112
- - `examples/example-git-hooks.sh`: Shows the local hook entrypoints.
113
- - `examples/example-platform-contract.sh`: Shows the platform and host contract across macOS, Linux, and WSL.
114
-
115
- ## Local guardrail
116
-
117
- `make test` is the canonical reliability command. It runs syntax checks, unit tests, module coverage, executable examples, and integration tests.
118
-
119
- For a lightweight repository-wide snapshot, run `bash ./scripts/qa/coverage-baseline.sh --with-module-coverage`.
120
-
121
- Core internal behaviors are traced through `bash ./scripts/qa/traceability-coverage.sh`.
122
- {% endraw %}
@@ -1,280 +0,0 @@
1
- ---
2
- title: "RFC: v0.2.503 Repository Reorganisation"
3
- status: Accepted — shipping incrementally in this PR
4
- authors: ['@sebastienrousseau']
5
- opened: 2026-05-17
6
- accepted: 2026-05-17
7
- target: v0.2.503
8
- ---
9
-
10
- # RFC: v0.2.503 Repository Reorganisation
11
-
12
- > **Status: Accepted.** This RFC was opened in this PR and
13
- > immediately accepted by the maintainer with explicit decision to
14
- > ship the reorganisation incrementally within v0.2.503 rather
15
- > than the originally-proposed two-version deprecation window.
16
- > Phases land as separate commits on `feat/v0.2.503`; each is
17
- > independently atomic and verified by `dot lint` + the existing
18
- > test matrix.
19
-
20
- ## Summary
21
-
22
- Split the current chezmoi-managed monorepo into a **framework layer**
23
- (distributable CLI + library) and a **defaults layer** (user-facing
24
- configuration), with the framework layer publishable as a
25
- standalone tarball to Homebrew, Scoop, and AUR. Maintain
26
- backwards-compatible behaviour for existing users via a one-shot
27
- migration script that runs on first apply after upgrade.
28
-
29
- ## Motivation
30
-
31
- R4 hard-audit identified the framework/user-config intermingling
32
- as the **highest-leverage structural gap** blocking de-facto-
33
- framework status (`HARD_AUDIT_2026.md` §8.5 Top-5 adoption gaps).
34
- Concrete symptoms:
35
-
36
- 1. **Distribution stuck at "curl-pipe-bash".** The Homebrew /
37
- Scoop / AUR manifests scaffolded in v0.2.503
38
- (`install/{homebrew,scoop,aur}/`) cannot publish until there's
39
- a single `bin/dot` tarball — chezmoi's `dot_*` / `executable_*`
40
- / `private_*` prefixes force the current layout. Until that's
41
- fixed, downstream distros have nothing to package.
42
-
43
- 2. **New contributor onboarding cost.** Even with the v0.2.503
44
- `STRUCTURE.md`, ~20 chezmoi-prefixed root paths require a
45
- concept (the chezmoi naming contract) to navigate. A
46
- `bin/` + `lib/` + `defaults/` layout is self-documenting.
47
-
48
- 3. **Framework forks are blocked.** Anyone wanting to fork the
49
- *CLI* without the maintainer's personal configs has to
50
- manually delete 80+ tool-specific directories under
51
- `dot_config/`. A clean separation makes "fork the framework,
52
- apply my own defaults" a one-command flow.
53
-
54
- 4. **Test surface bleed.** CI runs `chezmoi apply --dry-run` on
55
- every PR, exercising both framework templates AND the
56
- maintainer's personal defaults. A real consumer running the
57
- framework will not exercise the maintainer's `dot_config/aider/`
58
- etc. — and yet a regression there blocks CI.
59
-
60
- The reorganisation is **breaking** for existing user installs:
61
- chezmoi tracks deployed files by source path, so moving
62
- `bin/dot` to `bin/dot` means the old
63
- `~/.local/bin/dot` would be removed before the new path is
64
- installed. Mitigation: ship a `migrate-v0.2-to-v0.3.sh` script
65
- that runs before the first post-upgrade `chezmoi apply`.
66
-
67
- ## Detailed design
68
-
69
- ### Target layout
70
-
71
- Following the [Debian/aws-cli](https://github.com/Debian/aws-cli)
72
- discipline (every top-level path has a clear purpose; contributor
73
- orients in <30 seconds):
74
-
75
- ```
76
- .
77
- ├── bin/ # CLI entrypoints
78
- │ ├── dot # was bin/dot
79
- │ ├── dot-load-benchmark-pty # was bin/dot-load-benchmark-pty
80
- │ ├── dot-theme-sync # was bin/dot-theme-sync
81
- │ ├── dot-bootstrap # was bin/dot-bootstrap
82
- │ └── dot-update # was dot_local/bin/executable_update (renamed)
83
- ├── lib/ # Framework library (no chezmoi)
84
- │ ├── commands/ # was scripts/dot/commands/
85
- │ ├── ui.sh # was scripts/dot/lib/ui.sh
86
- │ ├── utils.sh # was scripts/dot/lib/utils.sh
87
- │ ├── platform.sh # was scripts/dot/lib/platform.sh
88
- │ ├── log.sh # was scripts/dot/lib/log.sh
89
- │ ├── bento.sh # was scripts/dot/lib/bento.sh
90
- │ └── secrets_provider.sh # was scripts/lib/secrets_provider.sh
91
- ├── share/ # OS-conventional resources
92
- │ ├── man/man1/dot.1 # was dot_local/share/man/man1/dot.1
93
- │ ├── completions/ # was dot_local/share/zsh/completions/
94
- │ └── docs/ # was docs/
95
- ├── defaults/ # User-facing default config (was dot_config/, etc.)
96
- │ ├── home/ # dotfiles deployed to $HOME (dot_X → .X)
97
- │ ├── config/ # dotfiles deployed to $XDG_CONFIG_HOME
98
- │ └── tools/ # per-tool configs (mise/, npmrc/, ...)
99
- ├── install/ # Distribution + bootstrap
100
- │ ├── install.sh # was install.sh (moved one level down)
101
- │ ├── homebrew/dot.rb # already at install/homebrew/ in v0.2.503
102
- │ ├── scoop/dot.json # already at install/scoop/ in v0.2.503
103
- │ ├── aur/PKGBUILD # already at install/aur/ in v0.2.503
104
- │ ├── provision/ # was install/provision/ (chezmoi run_onchange_ hooks)
105
- │ └── migrate/ # NEW: migrate-v0_2-to-v0_3.sh + rollback
106
- ├── tests/ # unchanged
107
- ├── examples/ # unchanged
108
- ├── tools/ # NEW: ops scripts not shipped to users
109
- │ ├── ci/ # was tools/ci/
110
- │ ├── release/ # was tools/release/
111
- │ ├── maintenance/ # was tools/maintenance/
112
- │ ├── docs/ # was tools/docs/
113
- │ └── version-sync.sh # was scripts/version-sync.sh
114
- ├── .chezmoiroot # NEW: points at defaults/
115
- ├── README.md
116
- ├── LICENSE
117
- ├── CHANGELOG.md
118
- ├── CLAUDE.md / AGENTS.md / per-harness renders
119
- └── (no more dot_X at root)
120
- ```
121
-
122
- ### chezmoi adaptation
123
-
124
- `.chezmoiroot` lets chezmoi treat a subdirectory as the source
125
- root. With `.chezmoiroot = "defaults"`, chezmoi will look for
126
- `defaults/home/dot_zshrc`, `defaults/config/dot_starship.toml`,
127
- etc. — and deploy to the normal `~/.zshrc` / `~/.config/starship.toml`
128
- paths.
129
-
130
- This means:
131
-
132
- - Repo top-level is no longer required to follow chezmoi naming.
133
- - `bin/dot` is a plain shell script, not `dot_local/bin/executable_dot`.
134
- - `share/man/man1/dot.1` is a plain file, not chezmoi-deployed.
135
- - A Homebrew formula can `bin.install 'bin/dot'` directly.
136
-
137
- ### Migration tool
138
-
139
- `install/migrate/migrate-v0.2-to-v0.3.sh`:
140
-
141
- 1. Detect existing chezmoi state at `~/.local/share/chezmoi` /
142
- `~/.config/chezmoi/chezmoi.toml`.
143
- 2. Read the user's pinned source repo from chezmoi.toml; if it's
144
- `sebastienrousseau/dotfiles@<v0.2.x>`, warn and confirm.
145
- 3. Run `chezmoi diff` and persist the per-file output to
146
- `~/.local/state/dotfiles/v0_2_to_v0_3_pre_diff.log` so the
147
- user has a record of pre-migration state.
148
- 4. Run `chezmoi forget` for paths that are moving (no destructive
149
- delete — chezmoi forget only un-tracks).
150
- 5. Update `~/.config/chezmoi/chezmoi.toml` to point at the new
151
- sourceDir with `.chezmoiroot` honoured.
152
- 6. Run `chezmoi apply` — picks up the new layout and re-creates
153
- the user's files at their canonical paths.
154
- 7. Run `dot doctor` and `dot lint` to verify.
155
-
156
- The migration is **idempotent** and **safe to abort**: at step 4
157
- the chezmoi state is removed but no user data is deleted. At step
158
- 6 chezmoi notices "these files already exist on disk with content
159
- matching the source" and is a no-op.
160
-
161
- ### Library bash-source paths
162
-
163
- Today `scripts/dot/commands/<cmd>.sh` does:
164
-
165
- ```bash
166
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
167
- source "$SCRIPT_DIR/../lib/utils.sh"
168
- ```
169
-
170
- After reorganisation:
171
-
172
- ```bash
173
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
174
- source "$SCRIPT_DIR/../utils.sh" # commands/<cmd>.sh → lib/utils.sh
175
- ```
176
-
177
- Or, more robustly, drive lookup from a single env var set by `bin/dot`:
178
-
179
- ```bash
180
- : "${DOT_LIB:=$(dirname "$(realpath "$0")")/../lib}"
181
- source "$DOT_LIB/utils.sh"
182
- ```
183
-
184
- The Homebrew formula sets `$DOT_LIB` to `${libexec}/lib` so
185
- `bin/dot` finds its library wherever the package manager installed
186
- it.
187
-
188
- ### Distribution surface
189
-
190
- Once `bin/dot` is standalone:
191
-
192
- | Channel | Artefact | Verify command |
193
- |---------|----------|----------------|
194
- | Homebrew tap | `dot-${VERSION}-${OS}-${ARCH}.tar.gz` | `brew install sebastienrousseau/tap/dot && dot version` |
195
- | Scoop bucket | `dot.json` → `dot-${VERSION}-windows-${ARCH}.zip` | `scoop install dot && dot version` |
196
- | AUR | `dotfiles-git` PKGBUILD building from source | `paru -S dotfiles-git && dot version` |
197
- | `install.sh` | Same SHA256-verified path as today | `bash install.sh` |
198
- | Direct tarball | Cosign-signed + SLSA-attested release asset | per `docs/security/VERIFY_RELEASE.md` |
199
-
200
- The chezmoi-managed `defaults/` subtree is **only** consumed when
201
- a user wants the maintainer's opinionated config layer. It's a
202
- strict superset: install `dot` standalone for the CLI; layer
203
- `defaults/` on top if you want the wallpaper-theming +
204
- multi-shell setup.
205
-
206
- ## Backwards compatibility
207
-
208
- | Surface | v0.2.x behaviour | v0.2.503 behaviour | Breaking? |
209
- |---------|------------------|------------------|-----------|
210
- | `~/.local/bin/dot` | Deployed by chezmoi | Replaced by Homebrew/Scoop install, OR symlinked by chezmoi from the new source | Yes — path may move; migration script handles it |
211
- | `~/.zshrc` etc | Source-pinned at `dot_zshrc` | Source-pinned at `defaults/home/dot_zshrc`, chezmoi reads via `.chezmoiroot` | No — destination path unchanged |
212
- | `dot <cmd>` API | All subcommands work as documented | Same | No |
213
- | `scripts/dot/commands/*.sh` consumers | Direct source paths used in user customisations | Path moves to `lib/commands/*.sh` | Yes — affects any user who source'd these directly |
214
- | `.chezmoidata.toml` | Repo root | Repo root (unchanged for compatibility with old user `chezmoi init` flows) | No |
215
-
216
- ### Two-version deprecation window
217
-
218
- v0.2.503 ships with the migration script and a deprecation warning
219
- in `dot doctor`. v0.4.0 removes any v0.2.x shim code. Users who
220
- skip v0.2.503 entirely (v0.2.x → v0.4.0) hit a hard error and must
221
- run the migration tool from a v0.3.x release manually.
222
-
223
- ## Alternatives considered
224
-
225
- ### A) Keep the chezmoi monorepo as-is
226
-
227
- **Pros**: zero migration cost; works today.
228
- **Rejected**: blocks Homebrew/Scoop/AUR publication permanently. The
229
- Top-5 adoption gap remains. R4 audit's "9.0/10 internal · 7.5/10
230
- adoption" plateau persists.
231
-
232
- ### B) Two-repo split (framework + defaults)
233
-
234
- Publish `dot` framework at `sebastienrousseau/dot` and the
235
- maintainer's personal defaults at `sebastienrousseau/dotfiles`.
236
-
237
- **Pros**: cleanest possible separation. Framework forks trivial.
238
- **Rejected (for v0.3)**: requires a second repo, doubles the CI
239
- matrix, and forces users to install from two sources. Defer to
240
- v0.4 if v0.3 single-repo with `.chezmoiroot` proves insufficient.
241
-
242
- ### C) Rename current root files only (cosmetic)
243
-
244
- Just rename `bin/dot` → `bin/executable_dot`
245
- without `.chezmoiroot`.
246
-
247
- **Rejected**: chezmoi only resolves the `executable_` /
248
- `dot_` prefixes for files inside its source root, so moving the
249
- prefixed file outside breaks chezmoi-driven install entirely
250
- without giving us a standalone tarball.
251
-
252
- ## Unresolved questions
253
-
254
- 1. **How does the `defaults/` subtree behave when a user wants to override one default?** Today they edit `dot_config/X.tmpl` directly. Post-reorg, do they: (a) edit `defaults/config/X.tmpl` and live with merge conflicts on framework updates, or (b) use a chezmoi `data` override + template conditional, or (c) maintain a second repo layered atop `defaults/`?
255
- 2. **Should `install/migrate/` ship in the regular framework install, or only via a one-shot `https://...migrate.sh` URL?** Bundling it forever increases install size; URL-only requires the user to find and trust the right URL during a stressful upgrade moment.
256
- 3. **Does `.chezmoiroot` survive existing user customisations in `~/.config/chezmoi/chezmoi.toml`?** Needs verification on a real upgrade test.
257
- 4. **Windows-native `bin/dot`**: standalone PowerShell rewrite, or wrapper that shells to bash via WSL/git-bash? `POWERSHELL_PARITY.md` documents the current stub state.
258
-
259
- ## Implementation plan
260
-
261
- | Phase | Scope | Effort |
262
- |-------|-------|--------|
263
- | 1 | Draft + ratify this RFC. Get user OK. | Done (this PR's draft) |
264
- | 2 | Create `defaults/`, `bin/`, `lib/`, `share/`, `tools/` and copy files. Update bash source paths. Add `.chezmoiroot`. | 1 week |
265
- | 3 | Write `install/migrate/migrate-v0_2-to-v0_3.sh`. Test against a synthetic v0.2.503-installed environment. | 3 days |
266
- | 4 | Update CI: every workflow that references `scripts/`, `dot_local/`, `dot_config/` needs path updates. | 3 days |
267
- | 5 | Update every doc that references the old paths. Most are in `docs/manual/`. | 1 day |
268
- | 6 | Cut v0.2.999 RC as a deprecation-warning-only release; let real users dry-run the migration. | 1 day + 2-week soak |
269
- | 7 | Cut v0.2.503 with the actual reorg + migration tool. | 1 day |
270
- | 8 | Publish to Homebrew/Scoop/AUR using `install/{homebrew,scoop,aur}/` scaffolds. | 1 week |
271
- | **Total** | | **~5 weeks calendar time** |
272
-
273
- ## See also
274
-
275
- - `HARD_AUDIT_2026.md` §8.3 — cross-platform gap analysis.
276
- - `HARD_AUDIT_2026.md` §8.5 — Top-5 de-facto adoption gaps.
277
- - `STRUCTURE.md` — today's layout (honest about the chezmoi-prefix forcing function).
278
- - `GOVERNANCE.md` — RFC process this document follows.
279
- - `install/README.md` — distribution-channel publication checklist.
280
- - Reference: [Debian/aws-cli](https://github.com/Debian/aws-cli) — clean top-level discipline.
@@ -1,10 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Roadmap
6
-
7
- The canonical roadmap is [`../../ROADMAP.md`](../../ROADMAP.md).
8
-
9
- This file is retained only so existing documentation links continue to resolve.
10
- Do not add active planning content here.
@@ -1,7 +0,0 @@
1
- # 2026 Roadmap
2
-
3
- Historical content from this file has been consolidated into the canonical
4
- [`../../ROADMAP.md`](../../ROADMAP.md).
5
-
6
- This path is retained only for compatibility with older links. New roadmap work
7
- belongs in the root roadmap or in GitHub issues and milestones.
@@ -1,10 +0,0 @@
1
- ---
2
- title: "v0.2.503 Roadmap - Historical"
3
- ---
4
-
5
- # v0.2.503 Roadmap
6
-
7
- This v0.2.503 planning document is historical. Active roadmap content has been
8
- consolidated into [`../../ROADMAP.md`](../../ROADMAP.md).
9
-
10
- Release history remains in [`../../CHANGELOG.md`](../../CHANGELOG.md).