@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,81 +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
- # Migration guides
9
-
10
- Coming from another dotfiles manager. One guide per tool, each with
11
- real commands, a rollback path, and an honest section on what you lose
12
- by switching.
13
-
14
- | You use | Guide | Rough effort |
15
- |---|---|---|
16
- | [yadm](https://yadm.io/) | [`from-yadm.md`](from-yadm.md) | 30 min — closest model, both wrap git and template |
17
- | [GNU Stow](https://www.gnu.org/software/stow/) | [`from-gnu-stow.md`](from-gnu-stow.md) | 1–2 h — symlink farm to managed copies is a real change |
18
- | A bare git repo (`--git-dir=$HOME/.dotfiles`) | [`from-bare-git-repo.md`](from-bare-git-repo.md) | 45 min |
19
- | Plain chezmoi, no framework | [`from-plain-chezmoi.md`](from-plain-chezmoi.md) | 10 min — same engine underneath |
20
-
21
- Upgrading between versions of *this* project is a different document:
22
- [`../operations/MIGRATION.md`](../operations/MIGRATION.md).
23
-
24
- ## Read this first
25
-
26
- Three facts that apply to every guide.
27
-
28
- **chezmoi is the engine.** This project is a framework *over*
29
- [chezmoi](https://www.chezmoi.io/), not a replacement for it. Files
30
- live in a source tree, `chezmoi apply` renders them into `$HOME`, and
31
- `dot` is a control plane over that. If you already know chezmoi, you
32
- already know 80% of this.
33
-
34
- **Nothing is destroyed without asking.** `chezmoi apply` shows a diff
35
- first when you run `dot diff`, and `dot sync --check` previews without
36
- writing. Every guide below tells you to take a backup anyway, because
37
- "nothing is destroyed" is a claim about the tool, not about your typos.
38
-
39
- **You can leave.** `scripts/uninstall.sh --force` runs `chezmoi purge`
40
- and removes the repo, the chezmoi config and state, caches, and logs.
41
- Your files stay where they were applied; nothing phones home and
42
- nothing is left behind to reinstall itself. Each guide ends with the
43
- rollback for that specific migration.
44
-
45
- ## The shape of every migration
46
-
47
- ```sh
48
- # 1. Back up. Always.
49
- tar -czf ~/dotfiles-backup-$(date +%F).tar.gz -C "$HOME" \
50
- .bashrc .zshrc .config .gitconfig 2>/dev/null || true
51
-
52
- # 2. Install the framework (does not touch your files yet).
53
- bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/main/install.sh)"
54
-
55
- # 3. Bring your own files under management, one at a time.
56
- dot add ~/.gitconfig
57
- dot add ~/.config/nvim
58
-
59
- # 4. Preview, then apply.
60
- dot diff
61
- dot sync
62
-
63
- # 5. Check the result.
64
- dot doctor
65
- ```
66
-
67
- Step 3 is where the guides differ, because it depends on how your
68
- current tool stores things.
69
-
70
- ## Choosing not to switch
71
-
72
- Genuinely reasonable reasons to stay where you are:
73
-
74
- - **You only symlink a handful of files and never templated anything.**
75
- GNU Stow is simpler and does that job well.
76
- - **You need Windows-native support without WSL or PowerShell 7.**
77
- - **You do not want a CLI layer.** Plain chezmoi is a smaller surface.
78
-
79
- The case for switching is multi-machine fleets, per-host templating,
80
- multi-shell parity, and signed/attested releases. If none of those
81
- describe you, the migration cost may not repay itself.
@@ -1,156 +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
- # Migrating from a bare git repo
9
-
10
- The `git --git-dir=$HOME/.dotfiles --work-tree=$HOME` pattern, usually
11
- behind a `config` alias. No dependencies, no symlinks, no templating —
12
- and `$HOME` is the work tree, which is the part that has to change.
13
-
14
- ## Concept mapping
15
-
16
- | Bare repo | Here |
17
- |---|---|
18
- | `config add ~/.bashrc` | `dot add ~/.bashrc` |
19
- | `config commit` / `config push` | ordinary `git` inside `$(dot cd)` |
20
- | `config status` | `dot status` |
21
- | `config checkout` on a new machine | `dot init <user>` |
22
- | `.gitignore` with `*` at `$HOME` | not needed — `$HOME` is not a work tree |
23
- | `showUntrackedFiles = no` | not needed, same reason |
24
- | Per-host: branches | `.tmpl` files with `{{ if }}` |
25
- | Nothing | `dot doctor`, `dot heal`, `dot rollback`, secrets, provisioning |
26
-
27
- ## 1. Inventory and back up
28
-
29
- ```sh
30
- alias config='git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
31
-
32
- config ls-files > ~/bare-inventory.txt
33
- wc -l ~/bare-inventory.txt
34
- tar -czf ~/bare-backup-$(date +%F).tar.gz -C "$HOME" -T ~/bare-inventory.txt
35
- ```
36
-
37
- Push first if the repo has a remote — the safest rollback is a clone:
38
-
39
- ```sh
40
- config status
41
- config push
42
- ```
43
-
44
- ## 2. Note your branch layout
45
-
46
- Per-host branches are the one thing that needs a design decision. List
47
- them before you start:
48
-
49
- ```sh
50
- config branch -a
51
- config log --oneline --graph --all | head -20
52
- ```
53
-
54
- Every branch becomes conditional blocks in one file. Diff two branches
55
- now, while the context is fresh:
56
-
57
- ```sh
58
- config diff main work-laptop -- .bashrc
59
- ```
60
-
61
- ## 3. Install
62
-
63
- The bare repo is at `$HOME/.dotfiles`, which is also this project's
64
- default clone location. The installer detects and refuses to clobber
65
- it, but move it first to avoid the confusion entirely:
66
-
67
- ```sh
68
- mv "$HOME/.dotfiles" "$HOME/.dotfiles.bare.bak"
69
- alias config='git --git-dir=$HOME/.dotfiles.bare.bak --work-tree=$HOME'
70
-
71
- bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/main/install.sh)"
72
- ```
73
-
74
- Your files in `$HOME` are untouched by the move — only the git
75
- metadata directory changed name.
76
-
77
- ## 4. Import
78
-
79
- ```sh
80
- while read -r f; do
81
- [ -e "$HOME/$f" ] && dot add "$HOME/$f"
82
- done < ~/bare-inventory.txt
83
-
84
- dot status
85
- ```
86
-
87
- ## 5. Collapse branches into templates
88
-
89
- Take the differences you diffed in step 2 and express them as
90
- conditions in a single `.tmpl`:
91
-
92
- ```text
93
- export EDITOR=nvim
94
- {{ if eq .chezmoi.hostname "work-laptop" }}
95
- export HTTP_PROXY=http://proxy.corp:3128
96
- export NPM_CONFIG_REGISTRY=https://nexus.corp/repository/npm/
97
- {{ end }}
98
- {{ if eq .chezmoi.os "darwin" }}
99
- export HOMEBREW_NO_ANALYTICS=1
100
- {{ end }}
101
- ```
102
-
103
- Rendering is testable without applying:
104
-
105
- ```sh
106
- chezmoi execute-template < defaults/dot_bashrc.tmpl
107
- ```
108
-
109
- ## 6. Apply and verify
110
-
111
- ```sh
112
- dot diff
113
- dot sync
114
- dot doctor
115
-
116
- while read -r f; do
117
- [ -e "$HOME/$f" ] || echo "MISSING: $f"
118
- done < ~/bare-inventory.txt
119
- ```
120
-
121
- ## 7. Clean up
122
-
123
- ```sh
124
- # Only if you had the $HOME/.gitignore containing '*' trick:
125
- grep -q '^\*$' "$HOME/.gitignore" 2>/dev/null && $EDITOR "$HOME/.gitignore"
126
-
127
- # Remove the alias from your shell rc, then, once confident:
128
- rm -rf "$HOME/.dotfiles.bare.bak"
129
- ```
130
-
131
- Do not remove the backup until you have pushed the new source tree
132
- somewhere and used it for a while.
133
-
134
- ## Rolling back
135
-
136
- ```sh
137
- bash ~/.dotfiles/scripts/uninstall.sh --force
138
- mv "$HOME/.dotfiles.bare.bak" "$HOME/.dotfiles"
139
- git --git-dir=$HOME/.dotfiles --work-tree=$HOME checkout -- .
140
- ```
141
-
142
- Or, if you pushed in step 1, clone the remote bare again — which is
143
- why step 1 says to push.
144
-
145
- ## What you gain, what you lose
146
-
147
- **Gain:** templating instead of branch-per-host (the bare-repo
148
- pattern's real weakness: merging a change across five host branches);
149
- a CLI with diagnostics and repair; secrets; provisioning hooks;
150
- multi-shell parity; signed releases.
151
-
152
- **Lose:** zero dependencies. The bare-repo trick needs nothing but
153
- git, and that is a genuine virtue — especially on a locked-down host.
154
- You also lose `$HOME` as a work tree, so `git status` there no longer
155
- tells you what changed; `dot status` does. And the setup no longer
156
- fits in a three-line shell alias you can retype from memory.
@@ -1,165 +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
- # Migrating from GNU Stow
9
-
10
- Stow builds a symlink farm: `~/.bashrc` is a symlink into
11
- `~/dotfiles/bash/.bashrc`. This framework renders real files into
12
- `$HOME` from a source tree. That difference is the whole migration —
13
- everything else follows from it.
14
-
15
- Be honest about whether you want this. If your setup is "symlink a
16
- dozen files on one machine", Stow is doing that job well and the
17
- migration will not repay itself. The reason to move is templating,
18
- multiple machines, or the tooling around the files.
19
-
20
- ## Concept mapping
21
-
22
- | Stow | Here |
23
- |---|---|
24
- | `~/dotfiles/<package>/` | `defaults/` (one tree, not per-package) |
25
- | `stow bash` | `dot sync` (applies everything) |
26
- | `stow -D bash` | `chezmoi forget <file>`, then `dot sync` |
27
- | `stow -n` (simulate) | `dot diff` or `dot sync --check` |
28
- | `.stow-local-ignore` | `.chezmoiignore` |
29
- | Symlinks in `$HOME` | Real files in `$HOME` |
30
- | Per-host: separate packages or branches | `.tmpl` files with `{{ if }}` |
31
-
32
- ## 1. Record what Stow currently owns
33
-
34
- Symlinks are self-describing, which makes this the easiest inventory
35
- of any migration:
36
-
37
- ```sh
38
- find "$HOME" -maxdepth 3 -type l -lname "*dotfiles*" \
39
- -printf '%p -> %l\n' 2>/dev/null | tee ~/stow-inventory.txt
40
- ```
41
-
42
- On macOS (BSD `find` has no `-printf`):
43
-
44
- ```sh
45
- find "$HOME" -maxdepth 3 -type l | while read -r l; do
46
- case "$(readlink "$l")" in *dotfiles*) echo "$l -> $(readlink "$l")";; esac
47
- done | tee ~/stow-inventory.txt
48
- ```
49
-
50
- Back up the real content, following the links:
51
-
52
- ```sh
53
- tar -czhf ~/stow-backup-$(date +%F).tar.gz -C "$HOME" \
54
- $(sed 's| ->.*||; s|^'"$HOME"'/||' ~/stow-inventory.txt)
55
- ```
56
-
57
- `-h` is the important flag: it dereferences symlinks and archives the
58
- actual files.
59
-
60
- ## 2. Unstow before installing
61
-
62
- This is the step people skip, and it is the one that matters. If you
63
- install over a live symlink farm, `chezmoi apply` will try to replace
64
- symlinks with regular files and the result is confusing.
65
-
66
- ```sh
67
- cd ~/dotfiles
68
- stow -D */ # remove every package's links
69
- find "$HOME" -maxdepth 3 -type l -lname "*dotfiles*" 2>/dev/null # expect empty
70
- ```
71
-
72
- Your `~/dotfiles` directory still holds the real files. Nothing is lost.
73
-
74
- ## 3. Install
75
-
76
- ```sh
77
- bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/main/install.sh)"
78
- ```
79
-
80
- ## 4. Import your files
81
-
82
- Stow packages flatten into a single tree. Copy each package's contents
83
- into `$HOME` and add them:
84
-
85
- ```sh
86
- cd ~/dotfiles
87
- for pkg in */; do
88
- pkg="${pkg%/}"
89
- echo "== $pkg"
90
- ( cd "$pkg" && find . -type f -print0 ) | while IFS= read -r -d '' rel; do
91
- rel="${rel#./}"
92
- mkdir -p "$(dirname "$HOME/$rel")"
93
- cp "$pkg/$rel" "$HOME/$rel"
94
- dot add "$HOME/$rel"
95
- done
96
- done
97
- ```
98
-
99
- Review before committing anything — this is a good moment to drop the
100
- files you have not opened in three years:
101
-
102
- ```sh
103
- dot status
104
- cd "$(dot cd)" && git status
105
- ```
106
-
107
- ## 5. Replace per-host packages with templates
108
-
109
- If you had `bash-work/` and `bash-home/` packages, collapse them:
110
-
111
- ```text
112
- {{ if eq .chezmoi.hostname "work-laptop" }}
113
- export HTTP_PROXY=http://proxy.corp:3128
114
- {{ end }}
115
- ```
116
-
117
- Available variables: `.chezmoi.os`, `.chezmoi.arch`, `.chezmoi.hostname`,
118
- `.chezmoi.username`, `.chezmoi.osRelease.id`, plus this project's
119
- `.profile` and `.features.*` from `defaults/.chezmoidata.toml`.
120
-
121
- Test a template without applying:
122
-
123
- ```sh
124
- chezmoi execute-template < defaults/dot_bashrc.tmpl
125
- ```
126
-
127
- ## 6. Apply and verify
128
-
129
- ```sh
130
- dot diff
131
- dot sync
132
- dot doctor
133
-
134
- # Nothing should be a symlink into ~/dotfiles any more:
135
- find "$HOME" -maxdepth 3 -type l -lname "*dotfiles*" 2>/dev/null
136
- ```
137
-
138
- ## 7. Retire the old tree
139
-
140
- After a few days:
141
-
142
- ```sh
143
- mv ~/dotfiles ~/dotfiles.stow.bak # rename, do not delete
144
- # delete ~/dotfiles.stow.bak once you are sure
145
- ```
146
-
147
- ## Rolling back
148
-
149
- ```sh
150
- bash ~/.dotfiles/scripts/uninstall.sh --force
151
- mv ~/dotfiles.stow.bak ~/dotfiles # if you renamed it
152
- cd ~/dotfiles && stow */
153
- ```
154
-
155
- ## What you gain, what you lose
156
-
157
- **Gain:** templating (the thing Stow structurally cannot do); one tree
158
- instead of a package-per-tool layout; the `dot` CLI; multi-shell
159
- parity; secrets management; signed releases.
160
-
161
- **Lose:** the elegance of the symlink model — editing `~/.bashrc` no
162
- longer edits your repo directly, so you edit the source and run
163
- `dot sync` (or `dot add` after the fact). Stow is ~5k lines of Perl
164
- with essentially no runtime dependencies; this pulls in chezmoi. And
165
- Stow's mental model fits in a paragraph, which has real value.
@@ -1,148 +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
- # Migrating from plain chezmoi
9
-
10
- The shortest migration here, because there is no engine change: this
11
- framework *is* chezmoi, plus a source-tree layout, a CLI, and the
12
- tooling around them. Your templates, your `.chezmoidata`, and your
13
- muscle memory all carry over.
14
-
15
- You can also stop after step 2 and keep using `chezmoi` commands
16
- directly forever. Nothing here replaces chezmoi; `dot` shells out to it.
17
-
18
- ## What actually changes
19
-
20
- | Plain chezmoi | Here |
21
- |---|---|
22
- | Source at `~/.local/share/chezmoi` | Source at `~/.dotfiles`, with `.chezmoiroot` pointing chezmoi at `defaults/` |
23
- | Everything at the source root | `defaults/` = your files; `bin/`, `lib/`, `scripts/`, `docs/`, `tests/` = the framework |
24
- | `chezmoi apply` | `dot sync` (which runs `chezmoi apply` with sensible exclusions) |
25
- | `chezmoi diff` / `status` | `dot diff` / `dot status` — same thing, prettier |
26
- | — | `dot doctor`, `dot health`, `dot heal`, `dot rollback`, `dot attest` |
27
- | `chezmoi secret` | `dot secrets` (age + sops) |
28
- | `run_onchange_` scripts | same, plus `install/provision/` |
29
-
30
- **`.chezmoiroot` is the key idea.** It contains `defaults`, so chezmoi
31
- treats `~/.dotfiles/defaults/` as the source root. Framework code sits
32
- outside that directory and is therefore never deployed to `$HOME`.
33
-
34
- ## 1. Back up and record
35
-
36
- ```sh
37
- chezmoi source-path
38
- chezmoi managed > ~/chezmoi-managed.txt
39
- wc -l ~/chezmoi-managed.txt
40
-
41
- cp -a "$(chezmoi source-path)" ~/chezmoi-source-backup-$(date +%F)
42
- tar -czf ~/chezmoi-backup-$(date +%F).tar.gz -C "$HOME" -T ~/chezmoi-managed.txt
43
- ```
44
-
45
- Commit and push your existing source repo if it has a remote. That is
46
- the real backup.
47
-
48
- ## 2. Two paths
49
-
50
- **A. Keep your own repo** (you have a dotfiles repo you want to keep
51
- as the source of truth): install the framework, then move your files
52
- into `defaults/`.
53
-
54
- **B. Adopt this repo's defaults** and layer your changes on top:
55
-
56
- ```sh
57
- bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/main/install.sh)"
58
- ```
59
-
60
- Path A continues below.
61
-
62
- ## 3. Install and relocate your source tree
63
-
64
- ```sh
65
- old_source="$(chezmoi source-path)"
66
-
67
- bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/main/install.sh)"
68
-
69
- # Copy your source files under defaults/, preserving chezmoi's naming.
70
- rsync -av --exclude '.git' "$old_source/" ~/.dotfiles/defaults/
71
- ```
72
-
73
- Then reconcile the chezmoi-metadata files, which now exist in both
74
- places — merge yours into the framework's rather than overwriting:
75
-
76
- | File | What to do |
77
- |---|---|
78
- | `.chezmoidata.toml` | **Merge.** The framework's carries `dotfiles_version`, `profile`, and `features`; keep those and add your keys. |
79
- | `.chezmoiignore` | Merge; the framework's entries are feature-flag-gated. |
80
- | `.chezmoi.toml.tmpl` | Merge your prompts into the framework's. |
81
- | `.chezmoitemplates/` | Merge; name collisions are the only risk. |
82
- | `.chezmoiscripts/`, `run_*` | Copy across as-is. |
83
-
84
- Sanity-check the merge before applying anything:
85
-
86
- ```sh
87
- cd ~/.dotfiles
88
- chezmoi --source "$PWD" data | head -40
89
- chezmoi --source "$PWD" managed | head
90
- ```
91
-
92
- ## 4. Preview, then apply
93
-
94
- ```sh
95
- dot diff # or: chezmoi diff — identical underneath
96
- dot sync --check # dry run
97
- dot sync
98
- dot doctor
99
- ```
100
-
101
- Confirm nothing was dropped:
102
-
103
- ```sh
104
- while read -r f; do
105
- [ -e "$f" ] || echo "MISSING: $f"
106
- done < ~/chezmoi-managed.txt
107
- ```
108
-
109
- ## 5. Optional: adopt the extras
110
-
111
- None of these are required; adopt them when you want them.
112
-
113
- ```sh
114
- dot secrets-init # age-based secrets
115
- dot theme list # wallpaper-driven theming
116
- dot profile show # profiles and feature flags
117
- dot completion fish > ~/.config/fish/completions/dot.fish
118
- ```
119
-
120
- ## Rolling back
121
-
122
- The gentlest rollback of any of these guides, because chezmoi is still
123
- the engine:
124
-
125
- ```sh
126
- chezmoi --source ~/chezmoi-source-backup-<date> apply
127
- bash ~/.dotfiles/scripts/uninstall.sh --force
128
- ```
129
-
130
- Or simply point chezmoi back at your old source and carry on:
131
-
132
- ```sh
133
- chezmoi init --source ~/chezmoi-source-backup-<date>
134
- ```
135
-
136
- ## What you gain, what you lose
137
-
138
- **Gain:** the `dot` CLI (diagnostics, repair, rollback, attestation,
139
- fleet); a curated multi-shell configuration with parity across bash,
140
- zsh, fish, nushell and PowerShell; secrets, theming and provisioning
141
- already wired; a test suite and CI you can run against your own
142
- changes; signed, attested releases.
143
-
144
- **Lose:** simplicity. Plain chezmoi is one binary and your files;
145
- this adds a source-tree convention, a CLI layer, and opinions about
146
- shell configuration you may not share. If you already have a chezmoi
147
- setup you are happy with, "it works and I understand every line" is a
148
- perfectly good reason to stay.