@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.
- package/CHANGELOG.md +52 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +43 -37
- package/install.sh +76 -10
- package/package.json +7 -7
- package/tools/README.md +49 -0
- package/tools/ci/install-chezmoi-verified.sh +68 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
- package/docs/AI.md +0 -179
- package/docs/ARCHITECTURE.md +0 -117
- package/docs/CNAME +0 -1
- package/docs/CONFIG_STRATEGY.md +0 -124
- package/docs/COPYRIGHT +0 -7
- package/docs/ECOSYSTEM.md +0 -220
- package/docs/GOLD-STANDARD-AUDIT.md +0 -352
- package/docs/GOVERNANCE.md +0 -98
- package/docs/MAINTAINERS.md +0 -41
- package/docs/MINIMUM-TOOLCHAIN.md +0 -100
- package/docs/NAMING_CONVENTIONS.md +0 -102
- package/docs/OPENCODE.md +0 -127
- package/docs/README.md +0 -84
- package/docs/STRUCTURE.md +0 -102
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
- package/docs/adr/ADR-002-shell-performance.md +0 -130
- package/docs/adr/ADR-003-security-first.md +0 -158
- package/docs/adr/ADR-004-cli-architecture.md +0 -171
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
- package/docs/adr/ADR-006-shell-selection.md +0 -124
- package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
- package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
- package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
- package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
- package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
- package/docs/adr/README.md +0 -40
- package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
- package/docs/architecture/ARCHITECTURE.md +0 -20
- package/docs/architecture/INTEROP.md +0 -44
- package/docs/architecture/REPO_LAYOUT.md +0 -241
- package/docs/architecture/WALKTHROUGH.md +0 -86
- package/docs/architecture/fleet-deployment.md +0 -77
- package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
- package/docs/archive/LEGACY_ROADMAP.md +0 -6
- package/docs/archive/MILESTONE_v0.2.493.md +0 -47
- package/docs/archive/PLAN.md +0 -199
- package/docs/archive/REPO_AUDIT.md +0 -31
- package/docs/articles/.pages +0 -6
- package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
- package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
- package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
- package/docs/articles/index.md +0 -36
- package/docs/guides/INSTALL.md +0 -144
- package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
- package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
- package/docs/guides/THEMING.md +0 -230
- package/docs/guides/TROUBLESHOOTING.md +0 -176
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
- package/docs/index.md +0 -132
- package/docs/interop/A2A.md +0 -39
- package/docs/interop/POWERSHELL.md +0 -102
- package/docs/manual/00-introduction.md +0 -89
- package/docs/manual/01-concepts/01-architecture.md +0 -138
- package/docs/manual/01-concepts/02-trust-model.md +0 -183
- package/docs/manual/01-concepts/03-theme-engine.md +0 -186
- package/docs/manual/01-concepts/04-fleet.md +0 -148
- package/docs/manual/01-concepts/05-self-healing.md +0 -204
- package/docs/manual/02-tutorials/01-first-install.md +0 -197
- package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
- package/docs/manual/02-tutorials/03-create-profile.md +0 -244
- package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
- package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
- package/docs/manual/03-reference/01-dot-cli.md +0 -475
- package/docs/manual/03-reference/02-config-files.md +0 -265
- package/docs/manual/03-reference/03-environment.md +0 -124
- package/docs/manual/03-reference/04-templates.md +0 -190
- package/docs/manual/03-reference/05-feature-flags.md +0 -187
- package/docs/manual/04-cookbook/01-recipes.md +0 -285
- package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
- package/docs/manual/04-cookbook/03-faq.md +0 -175
- package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
- package/docs/manual/05-appendices/B-security-checklist.md +0 -85
- package/docs/manual/05-appendices/C-glossary.md +0 -40
- package/docs/manual/05-appendices/D-bibliography.md +0 -58
- package/docs/manual/05-appendices/E-license.md +0 -38
- package/docs/manual/_toc.yml +0 -58
- package/docs/manual/command-index.md +0 -175
- package/docs/manual/concept-index.md +0 -170
- package/docs/manual/index.md +0 -66
- package/docs/migration/README.md +0 -81
- package/docs/migration/from-bare-git-repo.md +0 -156
- package/docs/migration/from-gnu-stow.md +0 -165
- package/docs/migration/from-plain-chezmoi.md +0 -148
- package/docs/migration/from-yadm.md +0 -187
- package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
- package/docs/operations/ATTESTATION.md +0 -44
- package/docs/operations/CI_CADENCE.md +0 -107
- package/docs/operations/CI_COMPOSITES.md +0 -156
- package/docs/operations/COMPLETIONS.md +0 -123
- package/docs/operations/COVERAGE.md +0 -204
- package/docs/operations/DRIFT.md +0 -107
- package/docs/operations/HARD_AUDIT_2026.md +0 -631
- package/docs/operations/MAINTENANCE.md +0 -63
- package/docs/operations/MANIFEST.md +0 -127
- package/docs/operations/MIGRATION.md +0 -109
- package/docs/operations/OPERATIONS.md +0 -188
- package/docs/operations/PERFORMANCE.md +0 -133
- package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
- package/docs/operations/REGISTRY.md +0 -90
- package/docs/operations/RELEASE_PIPELINE.md +0 -128
- package/docs/operations/RELIABILITY.md +0 -122
- package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
- package/docs/operations/ROADMAP.md +0 -10
- package/docs/operations/ROADMAP_2026.md +0 -7
- package/docs/operations/ROADMAP_V0_2_503.md +0 -10
- package/docs/operations/TESTING.md +0 -216
- package/docs/operations/TRACEABILITY.md +0 -44
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
- package/docs/operations/VERSION_SYNC.md +0 -393
- package/docs/packaging.md +0 -222
- package/docs/reference/ALIASES.md +0 -131
- package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
- package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
- package/docs/reference/FEATURE-MATRIX.md +0 -646
- package/docs/reference/FEATURES.md +0 -66
- package/docs/reference/FONTS.md +0 -112
- package/docs/reference/POWERSHELL_PARITY.md +0 -82
- package/docs/reference/PROFILES.md +0 -69
- package/docs/reference/SCREENSHOTS.md +0 -121
- package/docs/reference/SCRIPTS.md +0 -71
- package/docs/reference/SUPPORT_MATRIX.md +0 -80
- package/docs/reference/THEMES.md +0 -117
- package/docs/reference/TOOLS.md +0 -110
- package/docs/reference/UTILS.md +0 -243
- package/docs/registry.json +0 -6
- package/docs/schema/dot-env-v1.json +0 -110
- package/docs/schema/dot-registry-v1.json +0 -33
- package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
- package/docs/security/AUDIT_BYPASS.md +0 -103
- package/docs/security/AUTOMATION_SECRETS.md +0 -26
- package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
- package/docs/security/CI_PINNING.md +0 -129
- package/docs/security/COMMIT_SIGNING.md +0 -138
- package/docs/security/COMPLIANCE.md +0 -458
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
- package/docs/security/DISCLOSURE.md +0 -130
- package/docs/security/ENCRYPTION.md +0 -57
- package/docs/security/FMEA.md +0 -159
- package/docs/security/FUZZING.md +0 -209
- package/docs/security/HISTORY_FILTERING.md +0 -132
- package/docs/security/INCIDENT_RESPONSE.md +0 -579
- package/docs/security/INSTALL_VERIFICATION.md +0 -122
- package/docs/security/KEYS.md +0 -49
- package/docs/security/KEY_ROTATION.md +0 -303
- package/docs/security/MCP_POLICY.md +0 -78
- package/docs/security/POLICY_RELEASES.md +0 -37
- package/docs/security/README.md +0 -28
- package/docs/security/SCORECARD.md +0 -195
- package/docs/security/SECRETS.md +0 -158
- package/docs/security/SECURITY.md +0 -45
- package/docs/security/SECURITY_CHECKLIST.md +0 -55
- package/docs/security/SHELL_EXEMPTIONS.md +0 -145
- package/docs/security/SOUP_REGISTER.md +0 -36
- package/docs/security/THREAT_MODEL.md +0 -130
- package/docs/security/VERIFICATION_VALIDATION.md +0 -228
- package/docs/security/VERIFY_RELEASE.md +0 -201
- package/docs/security/security-pubkey.asc +0 -15
- package/docs/stylesheets/extra.css +0 -444
- package/docs/themes/README.md +0 -10
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
- package/docs/themes/hero-shot.svg +0 -78
- package/scripts/README.md +0 -123
- package/scripts/ci/check-copyright-headers.sh +0 -8
- package/scripts/ci/check-shell-preamble.sh +0 -8
- package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
- package/scripts/demo/record.sh +0 -43
- package/scripts/diagnostics/a2a-conformance.sh +0 -163
- package/scripts/diagnostics/alias-governance.sh +0 -165
- package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
- package/scripts/diagnostics/aliases-manifest.sh +0 -77
- package/scripts/diagnostics/attest-verify.sh +0 -147
- package/scripts/diagnostics/benchmark.sh +0 -408
- package/scripts/diagnostics/conflicts.sh +0 -73
- package/scripts/diagnostics/doctor-unified.sh +0 -43
- package/scripts/diagnostics/doctor.sh +0 -797
- package/scripts/diagnostics/drift-dashboard.sh +0 -203
- package/scripts/diagnostics/health.sh +0 -656
- package/scripts/diagnostics/history-analysis.sh +0 -86
- package/scripts/diagnostics/mcp-doctor.sh +0 -582
- package/scripts/diagnostics/perf.sh +0 -453
- package/scripts/diagnostics/scorecard.sh +0 -120
- package/scripts/diagnostics/secret-governance.sh +0 -65
- package/scripts/diagnostics/security-score.sh +0 -467
- package/scripts/diagnostics/smoke-test.sh +0 -88
- package/scripts/diagnostics/snapshot.sh +0 -90
- package/scripts/diagnostics/verify.sh +0 -108
- package/scripts/diagnostics/verify_state.sh +0 -73
- package/scripts/diagnostics/version-locks.sh +0 -94
- package/scripts/diagnostics/workstation-attestation.sh +0 -212
- package/scripts/dot/commands/agent.sh +0 -535
- package/scripts/dot/commands/agents.sh +0 -352
- package/scripts/dot/commands/ai.sh +0 -600
- package/scripts/dot/commands/aliases.sh +0 -277
- package/scripts/dot/commands/appearance.sh +0 -110
- package/scripts/dot/commands/completion.sh +0 -171
- package/scripts/dot/commands/core.sh +0 -217
- package/scripts/dot/commands/diagnostics.sh +0 -265
- package/scripts/dot/commands/env-emit.sh +0 -203
- package/scripts/dot/commands/fleet.sh +0 -711
- package/scripts/dot/commands/init.sh +0 -185
- package/scripts/dot/commands/lint.sh +0 -208
- package/scripts/dot/commands/manual.sh +0 -169
- package/scripts/dot/commands/meta.sh +0 -438
- package/scripts/dot/commands/patterns.sh +0 -55
- package/scripts/dot/commands/registry.sh +0 -455
- package/scripts/dot/commands/restore.sh +0 -232
- package/scripts/dot/commands/secrets.sh +0 -296
- package/scripts/dot/commands/security.sh +0 -102
- package/scripts/dot/commands/tools.sh +0 -570
- package/scripts/dot/data/alias-deprecations.tsv +0 -2
- package/scripts/dot/powershell/Dot.psm1 +0 -319
- package/scripts/fonts/install-nerd-fonts.sh +0 -75
- package/scripts/fonts/patch-fonts.sh +0 -36
- package/scripts/git-hooks/install.sh +0 -12
- package/scripts/git-hooks/pre-commit +0 -12
- package/scripts/git-hooks/pre-commit-audit.sh +0 -146
- package/scripts/git-hooks/pre-push +0 -105
- package/scripts/git-hooks/prepare-commit-msg +0 -29
- package/scripts/lib/secrets_provider.sh +0 -200
- package/scripts/nvim/headless-upgrade.lua +0 -81
- package/scripts/ops/ai-setup.sh +0 -71
- package/scripts/ops/bundle.sh +0 -104
- package/scripts/ops/chaos.sh +0 -50
- package/scripts/ops/chezmoi-apply.sh +0 -333
- package/scripts/ops/chezmoi-diff.sh +0 -16
- package/scripts/ops/chezmoi-remove.sh +0 -46
- package/scripts/ops/chezmoi-update.sh +0 -67
- package/scripts/ops/heal-chezmoi.sh +0 -87
- package/scripts/ops/heal-system.sh +0 -129
- package/scripts/ops/heal-tools.sh +0 -297
- package/scripts/ops/heal.sh +0 -223
- package/scripts/ops/post-apply-repair.sh +0 -107
- package/scripts/ops/prewarm.sh +0 -128
- package/scripts/ops/release.sh +0 -262
- package/scripts/ops/rollback.sh +0 -613
- package/scripts/ops/setup.sh +0 -138
- package/scripts/ops/teleport.sh +0 -34
- package/scripts/qa/check-feature-matrix.sh +0 -296
- package/scripts/qa/check-version-consistency.sh +0 -12
- package/scripts/qa/coverage-baseline.sh +0 -61
- package/scripts/qa/docs-coverage.sh +0 -118
- package/scripts/qa/examples-coverage.sh +0 -94
- package/scripts/qa/powershell-contract.ps1 +0 -95
- package/scripts/qa/reliability-audit.sh +0 -139
- package/scripts/qa/scorecard-snapshot.sh +0 -128
- package/scripts/qa/traceability-coverage.sh +0 -124
- package/scripts/qa/validate-examples.sh +0 -90
- package/scripts/qa/wsl-contract.sh +0 -12
- package/scripts/secrets/age-init.sh +0 -82
- package/scripts/secrets/create-secrets-file.sh +0 -46
- package/scripts/secrets/encrypt-ssh-key.sh +0 -44
- package/scripts/security/backup.sh +0 -58
- package/scripts/security/check-disclosure-key-expiry.sh +0 -111
- package/scripts/security/dns-doh.sh +0 -52
- package/scripts/security/encryption-check.sh +0 -55
- package/scripts/security/enforce-policies.sh +0 -552
- package/scripts/security/firewall.sh +0 -91
- package/scripts/security/lock-configs.sh +0 -67
- package/scripts/security/lock-screen.sh +0 -56
- package/scripts/security/manage-secrets.sh +0 -429
- package/scripts/security/ssh-cert.sh +0 -204
- package/scripts/security/telemetry-kill.sh +0 -51
- package/scripts/security/usb-safety.sh +0 -52
- package/scripts/theme/apply-gnome-theme.sh +0 -333
- package/scripts/theme/extract-heic-frames.sh +0 -115
- package/scripts/theme/extract-theme.py +0 -1020
- package/scripts/theme/install-boot-logo.sh +0 -63
- package/scripts/theme/install-catppuccin-themes.sh +0 -371
- package/scripts/theme/install-cursors.sh +0 -26
- package/scripts/theme/install-file-icons.sh +0 -27
- package/scripts/theme/install-grub-theme.sh +0 -62
- package/scripts/theme/install-lock-icon.sh +0 -31
- package/scripts/theme/merge-wallpaper.sh +0 -146
- package/scripts/theme/rebuild-themes.sh +0 -603
- package/scripts/theme/switch.sh +0 -476
- package/scripts/theme/wallpaper-rotate.sh +0 -137
- package/scripts/theme/wallpaper-sync.sh +0 -690
- package/scripts/tools/cmatrix.sh +0 -22
- package/scripts/tools/detect-collisions.py +0 -103
- package/scripts/tools/emoji-picker.sh +0 -49
- package/scripts/tools/figlet-banner.sh +0 -19
- package/scripts/tools/log-rotate.sh +0 -31
- package/scripts/tools/lolcat-wrap.sh +0 -20
- package/scripts/tools/pipes.sh +0 -49
- package/scripts/tuning/linux.sh +0 -186
- package/scripts/tuning/macos.sh +0 -56
- package/scripts/uninstall.sh +0 -86
- package/scripts/verify-release-versions +0 -156
- package/scripts/version-sync.sh +0 -714
- package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
- package/templates/chezmoi-data/mac-m1.toml.example +0 -16
- package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
- package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
- package/templates/projects/go/.github/workflows/ci.yml +0 -31
- package/templates/projects/go/README.md +0 -7
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
- package/templates/projects/go/go.mod +0 -3
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/node/.github/workflows/ci.yml +0 -30
- package/templates/projects/node/README.md +0 -7
- package/templates/projects/node/package-lock.json +0 -12
- package/templates/projects/node/package.json +0 -10
- package/templates/projects/node/src/index.js +0 -3
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
- package/templates/projects/python/.github/workflows/ci.yml +0 -34
- package/templates/projects/python/README.md +0 -7
- package/templates/projects/python/pyproject.toml +0 -25
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
- package/templates/projects/python/tests/test_basic.py +0 -3
package/docs/migration/README.md
DELETED
|
@@ -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.
|