@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,99 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
- {% raw %}
5
-
6
- # ADR-005: Chezmoi as Dotfiles Manager
7
-
8
- **Status**: Accepted
9
- **Date**: 2026-02-09
10
- **Authors**: @sebastienrousseau
11
-
12
- ## Context
13
-
14
- Managing dotfiles across multiple machines requires:
15
-
16
- - Version control for configuration files
17
- - Template support for machine-specific values
18
- - Cross-platform compatibility (macOS, Linux, WSL)
19
- - Encrypted secrets management
20
- - Easy installation and updates
21
-
22
- Several approaches were considered for dotfiles management.
23
-
24
- ## Decision
25
-
26
- Use **chezmoi** as the primary dotfiles management tool.
27
-
28
- ### Alternatives Considered
29
-
30
- | Tool | Pros | Cons |
31
- |------|------|------|
32
- | **GNU Stow** | Simple, no dependencies | No templating, symlink-only |
33
- | **yadm** | Git-based, encryption | Limited templating |
34
- | **Bare Git** | Simple, no tools | No templating, manual management |
35
- | **Ansible** | Powerful, idempotent | Heavy, complex for dotfiles |
36
- | **Nix Home Manager** | Declarative, reproducible | Steep learning curve, Nix dependency |
37
-
38
- ### Why Chezmoi
39
-
40
- 1. **Template Support**: Go text/template for machine-specific configuration
41
- 2. **Encryption**: Built-in age/gpg encryption for secrets
42
- 3. **Cross-Platform**: Native support for macOS, Linux, Windows
43
- 4. **Single Binary**: No runtime dependencies
44
- 5. **Git Integration**: Works with any Git host
45
- 6. **Dry-Run**: Preview changes before applying
46
- 7. **Active Development**: Well-maintained with responsive maintainer
47
-
48
- ## Implementation
49
-
50
- ```bash
51
- # Installation
52
- sh -c "$(curl -fsLS get.chezmoi.io)"
53
-
54
- # Initialize from repository
55
- chezmoi init https://github.com/user/dotfiles.git
56
-
57
- # Apply configuration
58
- chezmoi apply
59
- ```
60
-
61
- ### Template Example
62
-
63
- ```go
64
- {{- if eq .chezmoi.os "darwin" }}
65
- # macOS-specific configuration
66
- {{- else if eq .chezmoi.os "linux" }}
67
- # Linux-specific configuration
68
- {{- end }}
69
- ```
70
-
71
- ## Consequences
72
-
73
- ### Positive
74
-
75
- - Consistent configuration across all machines
76
- - Secure secrets management with age encryption
77
- - Easy to add new machines to the fleet
78
- - Template-driven configuration reduces duplication
79
- - Built-in diff and dry-run for safe updates
80
-
81
- ### Negative
82
-
83
- - Learning curve for Go templates
84
- - Additional abstraction layer over raw Git
85
- - Requires chezmoi binary installation
86
- - Some features (scripts) require careful ordering
87
-
88
- ### Neutral
89
-
90
- - Configuration stored in `~/.local/share/chezmoi` by default
91
- - Custom wrapper CLI (`dot`) provides simpler interface
92
- - Regular `git` commands still work in source directory
93
-
94
- ## References
95
-
96
- - [Chezmoi Documentation](https://www.chezmoi.io/)
97
- - [Chezmoi Quick Start](https://www.chezmoi.io/quick-start/)
98
- - [Comparison with Other Tools](https://www.chezmoi.io/comparison-table/)
99
- {% endraw %}
@@ -1,124 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-006: Zsh as Default Shell
6
-
7
- **Status**: Accepted
8
- **Date**: 2026-02-09
9
- **Authors**: @sebastienrousseau
10
-
11
- ## Context
12
-
13
- Choosing a default shell impacts:
14
-
15
- - Developer productivity and workflow
16
- - Plugin ecosystem and extensibility
17
- - Cross-platform compatibility
18
- - Startup performance
19
- - Learning curve for new users
20
-
21
- ## Decision
22
-
23
- Use **Zsh** as the default interactive shell with **Zinit** as the plugin manager.
24
-
25
- ### Alternatives Considered
26
-
27
- | Shell | Pros | Cons |
28
- |-------|------|------|
29
- | **Bash** | Universal, stable, POSIX | Limited interactive features |
30
- | **Zsh** | Rich features, great plugins | Slower than bash (mitigated) |
31
- | **Fish** | Modern, user-friendly | Not POSIX, less portable |
32
- | **Nushell** | Structured data, modern | Breaking changes, immature |
33
-
34
- ### Why Zsh
35
-
36
- 1. **Default on macOS**: Pre-installed since Catalina
37
- 2. **Plugin Ecosystem**: Massive library of plugins and themes
38
- 3. **Compatibility**: POSIX-compatible, smooth migration from bash
39
- 4. **Completion System**: Superior tab completion
40
- 5. **Customization**: Highly configurable prompt and behavior
41
- 6. **Community**: Large community, well-documented
42
-
43
- ### Why Zinit
44
-
45
- | Plugin Manager | Load Time | Features |
46
- |----------------|-----------|----------|
47
- | Oh-My-Zsh | ~800ms | Monolithic, many plugins |
48
- | Prezto | ~400ms | Faster, modular |
49
- | **Zinit** | ~200ms | Turbo mode, fine control |
50
- | Antibody | ~300ms | Simple, fast |
51
-
52
- Zinit provides:
53
-
54
- - **Turbo Mode**: Deferred loading after prompt
55
- - **Ice Modifiers**: Fine-grained control over plugin loading
56
- - **Binary Installation**: Install completions and binaries
57
- - **Profiling**: Built-in load time profiling
58
-
59
- ## Implementation
60
-
61
- ### Shell Layer System
62
-
63
- ```text
64
- dot_config/zsh/rc.d/
65
- ├── 00-10: Core (env, history, options)
66
- ├── 20-49: Middleware (zinit, completions)
67
- ├── 50-89: Toolchain (languages, tools)
68
- └── 90-99: UX (prompt, aliases, keybindings)
69
- ```
70
-
71
- ### Zinit Configuration
72
-
73
- ```zsh
74
- # Turbo mode: load after prompt displays
75
- zinit ice wait lucid
76
- zinit light zsh-users/zsh-autosuggestions
77
-
78
- # Synchronous: needed immediately
79
- zinit light zdharma-continuum/fast-syntax-highlighting
80
- ```
81
-
82
- ### Performance Targets
83
-
84
- | Metric | Target | Achieved |
85
- |--------|--------|----------|
86
- | Cold Start | <500ms | ~300ms |
87
- | Warm Start | <200ms | ~150ms |
88
- | Plugin Load | Async | Yes |
89
-
90
- ## Consequences
91
-
92
- ### Positive
93
-
94
- - Fast, responsive shell experience
95
- - Rich plugin ecosystem (autosuggestions, syntax highlighting)
96
- - Powerful completion system
97
- - Compatible with existing bash scripts
98
- - Modern prompt with Starship
99
-
100
- ### Negative
101
-
102
- - Requires zsh installation on some Linux distros
103
- - Plugin manager adds complexity
104
- - Some bash-isms need adjustment
105
- - Turbo mode can cause brief visual delay
106
-
107
- ### Neutral
108
-
109
- - Users can still use bash for scripts
110
- - Configuration more complex than vanilla shell
111
- - Performance monitoring needed
112
-
113
- ## Performance Optimizations
114
-
115
- 1. **Caching**: Compile zsh files to `.zwc` bytecode
116
- 2. **Lazy Loading**: Defer heavy tools (nvm, rvm) until first use
117
- 3. **Turbo Mode**: Load plugins after prompt displays
118
- 4. **Conditional Loading**: Skip unused features
119
-
120
- ## References
121
-
122
- - [Zsh Documentation](https://zsh.sourceforge.io/Doc/)
123
- - [Zinit Wiki](https://zdharma-continuum.github.io/zinit/wiki/)
124
- - [Starship Prompt](https://starship.rs/)
@@ -1,62 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-007: Multi-Shell Parity Strategy
6
-
7
- ## Status
8
-
9
- Accepted
10
-
11
- ## Date
12
-
13
- 2026-03-08
14
-
15
- ## Context
16
-
17
- The dotfiles distribution supports three shells: Zsh (default since macOS Catalina), Fish (modern interactive shell), and Nushell (structured data shell). The codebase has 98 alias files and 52+ functions written in POSIX/Bash. Without a parity strategy, each shell gets a fragmented subset of functionality.
18
-
19
- **Problem:** Fish had zero access to the alias/function library until v0.2.501 added bridge templates. Nushell had only 6 hardcoded aliases and no function access.
20
-
21
- **Constraints:**
22
-
23
- - Nushell's `source` is parse-time evaluated (no dynamic sourcing)
24
- - Fish syntax differs significantly from POSIX (no `$()`, different `if`, no `[[`)
25
- - Maintaining N copies of every alias/function is unsustainable
26
-
27
- ## Decision
28
-
29
- Adopt a **hub-and-spoke bridge architecture**:
30
-
31
- 1. **Hub:** Canonical definitions live in `.chezmoitemplates/aliases/` (Bash/POSIX) and `.chezmoitemplates/functions/` (Bash)
32
- 2. **Bash/Zsh spoke:** Direct inclusion via `90-ux-aliases.sh.tmpl` and `50-logic-functions.sh.tmpl`
33
- 3. **Fish spoke:** Runtime bash bridge with caching (`aliases.fish.tmpl`, `functions.fish.tmpl`)
34
- 4. **Nushell spoke:** Hybrid approach:
35
- - Aliases: Runtime bash extraction cached to `~/.cache/nushell/bash-aliases.nu` (in `env.nu.tmpl`), sourced by `aliases.nu.tmpl`
36
- - Functions: Chezmoi template-generated `def` wrappers delegating to bash (in `functions.nu.tmpl`)
37
-
38
- **Parity tiers:**
39
-
40
- - **Tier 1 (Full):** Zsh, Bash — all aliases, functions, lazy loading, cached eval
41
- - **Tier 2 (Bridged):** Fish — all simple aliases, all functions via wrappers, `_cached_eval` caching
42
- - **Tier 3 (Compatible):** Nushell — simple aliases (no complex bash syntax), all functions via bash delegation
43
-
44
- ## Consequences
45
-
46
- ### Positive
47
-
48
- - Single source of truth for aliases and functions
49
- - Adding a new alias/function automatically propagates to all shells
50
- - Nushell users get access to 40+ functions that were previously unavailable
51
- - Fish users get mtime-aware caching via `_cached_eval`
52
-
53
- ### Negative
54
-
55
- - Complex bash aliases (pipes, conditionals) are skipped for Nushell
56
- - Function calls in Fish/Nushell incur bash subprocess overhead (~5ms per call)
57
- - Cache invalidation requires shell restart or manual cache clear
58
-
59
- ### Risks
60
-
61
- - Nushell's rapid development may break bridge syntax in future versions
62
- - Very large alias sets may slow Nushell startup during cache generation
@@ -1,95 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-008: Alias System Architecture
6
-
7
- ## Status
8
-
9
- Accepted
10
-
11
- ## Date
12
-
13
- 2026-03-08
14
-
15
- ## Context
16
-
17
- The dotfiles manage 98 alias files across 30+ categories (git, docker, kubernetes, python, security, etc.). These need to load fast, support per-machine toggling, and work across Zsh, Bash, Fish, and Nushell.
18
-
19
- **Design questions:**
20
-
21
- 1. How to organize alias files for maintainability?
22
- 2. How to control which aliases load on which machines?
23
- 3. How to balance startup speed with alias availability?
24
- 4. How to bridge POSIX aliases to non-POSIX shells?
25
-
26
- ## Decision
27
-
28
- ### Organization
29
-
30
- Aliases are organized by tool/domain in `.chezmoitemplates/aliases/<category>/<name>.aliases.sh`:
31
-
32
- ```text
33
- aliases/
34
- git/git.aliases.sh, signing.aliases.sh
35
- docker/docker.aliases.sh
36
- kubernetes/kubernetes.aliases.sh
37
- security/crypto-utils.aliases.sh, ssh-keys.aliases.sh, ...
38
- default/default.aliases.sh
39
- ...
40
- ```
41
-
42
- ### Profile Tiers
43
-
44
- Three profiles control alias scope (set in `.chezmoidata.toml`):
45
-
46
- | Profile | Scope | Use Case |
47
- |---------|-------|----------|
48
- | `minimal` | Core only, excludes interactive/sudo | Servers, containers |
49
- | `standard` | All core + selected ecosystem | Laptops, workstations |
50
- | `full` | Everything including heavy/specialized | Dev machines |
51
-
52
- ### Bucket Toggles
53
-
54
- Per-category flags in `.chezmoidata.toml` under `[aliases.buckets]`:
55
-
56
- ```toml
57
- [aliases.buckets]
58
- system = true
59
- svn = false # disable on machines without SVN
60
- ```
61
-
62
- ### Two-Phase Loading
63
-
64
- 1. **Eager (90-ux-aliases.sh):** Core categories loaded at shell startup (~40KB). Includes: archives, cd, clear, configuration, default, diagnostics, disk-usage, editor, git, interactive, installer, mkdir, modern, ps, rsync, sudo, system.
65
-
66
- 2. **Lazy (91-ux-aliases-lazy.sh):** Ecosystem aliases deferred until first prompt via `precmd` hook. Includes: docker, kubernetes, terraform, gcloud, python, npm, rust, security, etc.
67
-
68
- ### Function Groups (groups.json)
69
-
70
- Functions use a parallel system with `groups.json` as a registry:
71
-
72
- - Groups: api, curl, text, system, files, interactive, nav, security, misc
73
- - Lazy-loaded per group on first invocation
74
- - Stub functions replaced with real implementations on first call
75
-
76
- ## Consequences
77
-
78
- ### Positive
79
-
80
- - Adding aliases is self-service: create a file in the right category
81
- - Per-machine customization without forking
82
- - Lazy loading keeps startup under 200ms even with 98 alias files
83
- - `groups.json` enables automated bridge generation for Fish/Nushell
84
-
85
- ### Negative
86
-
87
- - Alias definitions wrap in functions (`set_default_aliases()`) for sourcing safety, adding complexity
88
- - Two-phase loading means some aliases aren't available until after first prompt
89
- - Profile/bucket system requires understanding .chezmoidata.toml
90
-
91
- ### Trade-offs
92
-
93
- - Chose file-per-category over monolithic alias file for maintainability
94
- - Chose runtime extraction for Fish/Nushell over maintaining parallel definitions
95
- - Chose lazy loading over compile-time bundling for flexibility
@@ -1,131 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-009: Wallpaper-Driven Theming Engine
6
-
7
- ## Status
8
-
9
- Accepted
10
-
11
- ## Date
12
-
13
- 2026-05-12
14
-
15
- ## Context
16
-
17
- Most dotfiles distributions ship a small fixed palette (Solarized, Gruvbox,
18
- Tokyo Night) chosen once and recycled across every terminal, editor, and
19
- status bar. When the user changes wallpapers — a daily occurrence on macOS
20
- with HEIC dark/light variants and on Linux with `swww`/`hyprpaper` —
21
- terminal chrome stays static, creating visual incoherence between the
22
- chosen wallpaper and the surrounding tooling.
23
-
24
- Manual palette switching solves coherence but adds friction: it requires
25
- the user to (a) generate a palette, (b) regenerate config for every tool
26
- (`alacritty.toml`, `kitty.conf`, `wezterm.lua`, neovim themes, …), and
27
- (c) reload each tool. Tools like pywal/wal automate (a) and (b), but
28
- pywal palettes routinely fail WCAG contrast thresholds (especially for
29
- bright wallpapers) and lack support for many of the format files this
30
- project ships.
31
-
32
- **Problem:** Reuse the user's chosen wallpaper as the single source of
33
- truth for terminal + status-bar colors, with accessibility guaranteed and
34
- no manual regeneration step.
35
-
36
- **Constraints:**
37
-
38
- - Output must satisfy **WCAG 2.2 AAA contrast** (≥ 7:1 for normal text,
39
- ≥ 4.5:1 for large text) — non-negotiable, the dotfiles ship as
40
- workstation infrastructure.
41
- - Palette extraction must work offline on both macOS (HEIC, dynamic
42
- wallpapers with embedded dark/light variants) and Linux (PNG/JPEG via
43
- `swww`, `hyprpaper`, `feh`, GNOME).
44
- - Total time from "user changes wallpaper" → "all terminals retinted"
45
- must be ≤ 3 seconds (rebuild trigger + write of templated configs).
46
- - Targets include Warp, iTerm2, Alacritty, Ghostty, Kitty, Wezterm,
47
- Tmux, Neovim (multiple themes), VS Code, Firefox theme JSON, Niri
48
- borders, Waybar, GTK/Qt (matugen pipeline).
49
-
50
- ## Decision
51
-
52
- Build a self-contained theming engine — `dot theme rebuild` —
53
- implemented in `scripts/theme/` with the following pipeline:
54
-
55
- 1. **Source detection** — locate the active wallpaper across macOS
56
- (`defaults read … wallpaper`), GNOME/dconf, KDE, Niri, swww,
57
- hyprpaper. HEIC dynamic wallpapers decompose into dark and light
58
- variants; both feed the engine.
59
-
60
- 2. **Color extraction** — **K-Means clustering in CIELAB** (not RGB).
61
- CIELAB is perceptually uniform, so distances correlate with the way
62
- humans see color similarity. 8-cluster K-Means yields a 16-color
63
- ANSI palette (8 normal + 8 bright) plus 4 accent slots.
64
-
65
- 3. **Contrast enforcement** — compute WCAG 2.2 contrast against the
66
- chosen background; nudge each foreground hue along the lightness
67
- axis until the ratio passes AAA. The nudge stays within the cluster
68
- to preserve aesthetic intent. If AAA cannot be reached, fall back to
69
- AA with a logged warning (never silently regress).
70
-
71
- 4. **Format generation** — emit one canonical TOML palette to
72
- `.chezmoidata/themes.toml`, then run `chezmoi apply` so every
73
- theme-aware template (terminals, editors, status bars, browsers)
74
- regenerates from a single declarative source.
75
-
76
- 5. **Companion pipelines** — `dot-theme-sync` feeds the same accent
77
- colors to **matugen** for Material You-style GTK/Qt theming on
78
- Linux, keeping desktop chrome in lockstep with the terminal.
79
-
80
- The whole flow is idempotent (`chezmoi apply` is no-op if nothing
81
- changed), repeatable, and tested under `tests/unit/theme/`.
82
-
83
- ## Consequences
84
-
85
- ### Positive
86
-
87
- - Single source of truth: change the wallpaper, every tool retints in
88
- one keystroke.
89
- - Accessibility is structural, not opt-in — every shipped palette
90
- passes WCAG AAA before it touches a config file.
91
- - No competing "premium" dotfiles distribution (mathiasbynens, holman,
92
- paulirish, omakub) ships anything similar. The engine is a defining
93
- differentiator and surfaced in the README hero.
94
- - Reuses chezmoi's templating — no new templating layer to maintain.
95
-
96
- ### Negative
97
-
98
- - K-Means on a 4K wallpaper takes ~500–800 ms; cached after first run,
99
- but the cold path is non-trivial.
100
- - HEIC handling on Linux requires `libheif` (extra dep on Debian/Ubuntu
101
- before 24.04).
102
- - Contrast enforcement can produce slightly different palettes from the
103
- same wallpaper across major OS versions when system color profiles
104
- differ (mitigated by snapshot tests).
105
-
106
- ### Risks
107
-
108
- - Wallpapers with extreme dynamic range (pure-white backgrounds, deep
109
- monochrome) may fail to produce an aesthetically pleasing 16-color
110
- palette even when WCAG AAA is satisfied. Mitigation: maintainer
111
- curation of a fallback theme set in `.chezmoidata/themes.toml`.
112
- - Future Wayland compositors may not expose a stable wallpaper-detection
113
- API. The engine isolates source detection in a single module so the
114
- blast radius of compositor churn is one file.
115
-
116
- ## Alternatives Considered
117
-
118
- | Alternative | Why rejected |
119
- |---|---|
120
- | pywal/wal | RGB K-Means, no WCAG enforcement, limited target list. |
121
- | matugen alone | Excellent for GTK/Qt; not terminal-aware. We use it *in addition*, not instead. |
122
- | Static curated themes (Tokyo Night et al.) | Loses the "wallpaper coherence" property that motivates the whole project. |
123
- | Hand-roll per-terminal scripts | Doesn't compose with chezmoi; loses the single-source-of-truth invariant. |
124
-
125
- ## References
126
-
127
- - WCAG 2.2 contrast: <https://www.w3.org/TR/WCAG22/#contrast-minimum>
128
- - CIELAB color space: <https://en.wikipedia.org/wiki/CIELAB_color_space>
129
- - `scripts/theme/` — engine source
130
- - `.chezmoidata/themes.toml` — output palette schema
131
- - Issue #873 — captures this ADR alongside `llms.txt`
@@ -1,144 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-010: Enable Starship Transient Prompt in Zsh and Fish
6
-
7
- ## Status
8
-
9
- Accepted
10
-
11
- ## Date
12
-
13
- 2026-05-12
14
-
15
- ## Context
16
-
17
- Starship is the prompt renderer for both zsh and fish in this
18
- distribution (pinned via `mise.toml`: `starship = "1.24.2"`).
19
- A typical Starship prompt for this project renders 4–6 lines including
20
- the directory, git branch + dirty markers, language toolchain version,
21
- duration of the previous command, and a final `❯` line.
22
-
23
- By default Starship emits this multi-line prompt on **every** previous
24
- command as well as the current one. After 50 commands in a session, the
25
- terminal scrollback contains 200–300 lines of historical prompts — most
26
- of which only convey context that was relevant at the time the command
27
- ran. Search through scrollback (Ctrl-r history, copy-paste, screenshots,
28
- asciinema replay) is noisy.
29
-
30
- Starship 1.24+ supports a **transient prompt** feature: when a command
31
- finishes, the prompt that produced it is rewritten to a compact form
32
- (e.g., `❯`) and the full prompt is re-emitted only at the live editing
33
- line. The current command always shows the full prompt; history shows
34
- only the compact form.
35
-
36
- **Problem:** Reduce scrollback noise without sacrificing the live prompt's
37
- rich context, and apply it consistently across the two interactive
38
- shells we support as first-class.
39
-
40
- **Constraints:**
41
-
42
- - Must work in zsh and fish (the two Tier-1 shells per ADR-007).
43
- - Must not interfere with `_cached_eval`'s startup-cost optimization
44
- (the transient hook fires per-prompt, not per-shell-start).
45
- - Must not break copy-paste of previous commands: the compact line
46
- must still be `❯` (or similar) so `<Ctrl-shift-c>` over scrollback
47
- yields runnable shell content if the user includes the prompt.
48
-
49
- ## Decision
50
-
51
- Call Starship's `enable_transience` shell function after the cached
52
- `starship init` runs in each shell. We share one `starship.toml.tmpl`
53
- across both shells; the transient prompt content is the existing
54
- `[character]` block (no separate `[transient_*]` section needed).
55
-
56
- - **Fish**: `dot_config/fish/conf.d/init.fish.tmpl` calls
57
- `enable_transience` once the function is defined. `starship init
58
- fish` defines it via `--print-full-init`. Result: `$fish_transient_prompt`
59
- flips to `1` and the Enter handler is bound to
60
- `__starship_transient_execute`. The compact prompt collapses past
61
- scrollback as soon as the next command runs.
62
-
63
- - **Zsh**: `dot_config/zsh/dot_zshrc.tmpl` carries the same
64
- `enable_transience` call, guarded by
65
- `(( ${+functions[enable_transience]} ))`. **Upstream Starship does
66
- not ship a zsh-side `enable_transience` function yet** (tracked by
67
- [starship/starship#3522](https://github.com/starship/starship/issues/3522)).
68
- The guard returns 0, the block no-ops, and zsh keeps its full multi-
69
- line prompt in scrollback for now. The code is a forward-compatibility
70
- hook: when upstream ships the zsh function, the feature activates
71
- automatically on the next `mise upgrade starship` with no zshrc edit.
72
-
73
- Alternatives we rejected for zsh:
74
-
75
- - **Roll our own `zle` widget that rewrites `$PROMPT` on Enter.**
76
- Possible (the standard recipe overrides `accept-line` with a
77
- transient widget). Rejected because:
78
- (a) any hand-rolled implementation will conflict with upstream
79
- once they ship the official function, forcing a removal,
80
- (b) Starship's prompt is multi-line and ANSI-coloured; correctly
81
- rewriting it from a custom widget requires duplicating
82
- Starship's escape-code generation, which drifts with every
83
- Starship release,
84
- (c) it'd run inside `_cached_eval`'s eager-init path, complicating
85
- the cache-invalidation semantics we documented in ADR-002.
86
- - **Third-party zsh plugin (e.g. zsh-autocomplete's transient mode).**
87
- Rejected because the upstream Starship fix is in active discussion
88
- and a plugin adds a permanent dependency we'd then have to remove.
89
- - **Disable zsh transient until upstream lands.** The current state.
90
- Zsh users see the same scrollback density they had before this PR;
91
- the visible improvement is fish-only. Honest trade-off.
92
-
93
- - **Transient prompt content**: `❯` plus optional exit-code dot
94
- (red dot if `$status != 0`). Keep it 1–3 characters so scrollback
95
- density actually improves.
96
-
97
- The toggle is exposed in `.chezmoidata.toml` as
98
- `features.starship_transient = true`. Users on bandwidth-constrained
99
- terminals (slow SSH, serial console) can flip it off without editing
100
- the canonical config.
101
-
102
- ## Consequences
103
-
104
- ### Positive (fish only, until upstream lands zsh support)
105
-
106
- - Scrollback is 4–5× denser **in fish**. A 100-command session that previously
107
- filled the screen 20× over now fills it ~4×.
108
- - Asciinema recordings (relevant for the showcase commits in #874)
109
- read much more naturally — fewer screens of historical prompts
110
- between actions.
111
- - The live prompt still surfaces all the rich context Starship was
112
- configured for; only history is compacted.
113
-
114
- ### Negative
115
-
116
- - Slightly more complex Starship config; the maintainer must remember
117
- that `[character]` and `[transient_*]` are distinct modules.
118
- - Users who rely on visual scanning of historical prompts (e.g., "what
119
- branch was I on when I ran that?") lose that signal. Mitigation: the
120
- feature flag.
121
-
122
- ### Risks
123
-
124
- - Starship's transient API is stable since 1.16 (2023) but the exact
125
- config surface evolves. If Starship breaks the schema in a future
126
- major, the pinned version in `mise.toml` insulates us; we vet new
127
- releases through `dot upgrade --dry-run` before bumping.
128
-
129
- ## Alternatives Considered
130
-
131
- | Alternative | Why rejected |
132
- |---|---|
133
- | Single-line Starship prompt | Sacrifices live-prompt richness for the same scrollback-density goal. The transient feature gives both. |
134
- | Custom zsh `precmd` rewriter | Would have to be reimplemented in fish. Starship already solved it. |
135
- | Disable Starship entirely on history | Loses the whole reason we use Starship. |
136
-
137
- ## References
138
-
139
- - Starship transient prompt docs:
140
- <https://starship.rs/advanced-config/#transientprompt-and-transientrightprompt-in-zsh>
141
- - ADR-002 (Shell Performance Optimization) — establishes the
142
- `_cached_eval` constraint this ADR respects.
143
- - ADR-007 (Multi-Shell Parity) — establishes zsh + fish as Tier-1.
144
- - Issue #873 — captures this ADR alongside `llms.txt`.