@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,130 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-002: Shell Performance Optimization Strategy
6
-
7
- **Status**: Accepted
8
- **Date**: 2026-02-09
9
- **Authors**: @sebastienrousseau
10
-
11
- ## Context
12
-
13
- Shell startup time directly impacts developer productivity. Every new terminal,
14
- tmux pane, or shell command execution incurs this cost. With rich shell
15
- configurations (completions, prompts, plugins), startup can easily exceed 1-2
16
- seconds.
17
-
18
- Goals:
19
-
20
- - Target startup time: <500ms for interactive shells
21
- - Maintain full functionality (completions, syntax highlighting, git info)
22
- - Support both zsh and bash
23
- - Work across macOS and Linux
24
-
25
- ## Decision
26
-
27
- Implement a **multi-layer performance optimization strategy**:
28
-
29
- ### Layer 1: Compilation and Caching
30
-
31
- ```bash
32
- # Compile zsh files to .zwc format
33
- _cached_eval() {
34
- local cache="$HOME/.cache/zsh/$1.zwc"
35
- if [[ ! -f "$cache" || "$2" -nt "$cache" ]]; then
36
- eval "$($2)" > "$cache.tmp"
37
- zcompile "$cache.tmp" "$cache"
38
- fi
39
- source "$cache"
40
- }
41
- ```
42
-
43
- - Compile frequently-sourced files to bytecode
44
- - Cache command output (brew shellenv, mise activate)
45
- - Invalidate cache when source files change
46
-
47
- ### Layer 2: Lazy Loading
48
-
49
- Defer loading of heavy components until first use:
50
-
51
- ```bash
52
- # Lazy load completions
53
- function kubectl() {
54
- unfunction kubectl
55
- source <(kubectl completion zsh)
56
- kubectl "$@"
57
- }
58
- ```
59
-
60
- - Completions loaded on first command use
61
- - NVM/RVM loaded only when node/ruby commands invoked
62
- - Heavy plugins deferred via zinit's `wait` modifier
63
-
64
- ### Layer 3: Zinit Turbo Mode
65
-
66
- ```zsh
67
- zinit ice wait lucid
68
- zinit light zsh-users/zsh-autosuggestions
69
- ```
70
-
71
- - Plugins load asynchronously after prompt
72
- - Critical plugins (syntax highlighting) load synchronously
73
- - Most plugins have 0ms impact on startup
74
-
75
- ### Layer 4: Conditional Loading
76
-
77
- ```bash
78
- # Only load if command exists
79
- [[ -x /opt/homebrew/bin/brew ]] && eval "$(/opt/homebrew/bin/brew shellenv)"
80
-
81
- # Skip in non-interactive shells
82
- [[ $- != *i* ]] && return
83
- ```
84
-
85
- - Platform-specific code guarded by OS detection
86
- - Heavy features opt-in via environment variables
87
- - Non-interactive shells get minimal config
88
-
89
- ### Monitoring
90
-
91
- Benchmark script to track startup time:
92
-
93
- ```bash
94
- hyperfine --warmup 3 --runs 10 "zsh -i -c exit"
95
- ```
96
-
97
- CI enforces 500ms threshold with warnings.
98
-
99
- ## Consequences
100
-
101
- ### Positive
102
-
103
- - Consistent <500ms startup across platforms
104
- - Full functionality preserved
105
- - Easy to add new tools without performance regression
106
- - Clear patterns for contributors to follow
107
-
108
- ### Negative
109
-
110
- - First invocation of lazy-loaded commands is slower
111
- - Cache invalidation bugs can cause stale behavior
112
- - Complexity in understanding load order
113
-
114
- ### Neutral
115
-
116
- - Profiling required when adding new plugins
117
- - Trade-off between convenience and performance explicit
118
-
119
- ## Measurements
120
-
121
- | Configuration | Startup Time |
122
- |---------------|--------------|
123
- | Vanilla zsh | ~50ms |
124
- | With oh-my-zsh | ~800ms |
125
- | This approach | ~200-400ms |
126
-
127
- ## References
128
-
129
- - [Zsh Startup Optimization](https://htr3n.github.io/2018/07/faster-zsh/)
130
- - [Zinit Turbo Mode](https://zdharma-continuum.github.io/zinit/wiki/INTRODUCTION/)
@@ -1,158 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-003: Security-First Approach
6
-
7
- **Status**: Accepted
8
- **Date**: 2026-02-09
9
- **Authors**: @sebastienrousseau
10
-
11
- ## Context
12
-
13
- Dotfiles repositories present unique security challenges:
14
-
15
- - They configure system behavior and permissions
16
- - They may contain or reference secrets (API keys, tokens)
17
- - They execute scripts with user privileges
18
- - They're often cloned to multiple machines
19
-
20
- A security breach in dotfiles can compromise all systems using them.
21
-
22
- ## Decision
23
-
24
- Implement a **defense-in-depth security model** with multiple layers:
25
-
26
- ### Layer 1: Secrets Protection
27
-
28
- **Never commit secrets:**
29
-
30
- ```bash
31
- # .gitleaks.toml - block common secret patterns
32
- [[rules]]
33
- id = "generic-api-key"
34
- regex = '''(?i)(api[_-]?key|apikey)\s*[:=]\s*['"]?([a-zA-Z0-9]{20,})'''
35
- ```
36
-
37
- **Encrypted secrets with age:**
38
-
39
- ```bash
40
- # Secrets stored encrypted, decrypted at apply time
41
- chezmoi.encryption = "age"
42
- chezmoi.age.identity = "~/.config/chezmoi/key.txt"
43
- ```
44
-
45
- **CI enforcement:**
46
-
47
- - Gitleaks runs on every PR
48
- - TruffleHog for verified secrets detection
49
- - Block merge if secrets detected
50
-
51
- ### Layer 2: Input Validation
52
-
53
- **Path traversal prevention:**
54
-
55
- ```bash
56
- # Validate all user inputs
57
- if [[ ! "$template_lang" =~ ^[a-zA-Z0-9_-]+$ ]]; then
58
- die "Invalid template name: $template_lang"
59
- fi
60
- ```
61
-
62
- **Safe file operations:**
63
-
64
- ```bash
65
- # Use absolute paths, validate before operations
66
- local real_path
67
- real_path="$(realpath -m "$user_input")"
68
- if [[ "$real_path" != "$allowed_base"/* ]]; then
69
- die "Path outside allowed directory"
70
- fi
71
- ```
72
-
73
- ### Layer 3: Opt-in System Modifications
74
-
75
- **Dangerous operations require explicit consent:**
76
-
77
- ```bash
78
- # Security scripts are opt-in
79
- if [ "${DOTFILES_SECURITY:-0}" != "1" ]; then
80
- echo "Security hardening is opt-in. Set DOTFILES_SECURITY=1 to enable."
81
- exit 0
82
- fi
83
- ```
84
-
85
- **Comprehensive logging:**
86
-
87
- ```bash
88
- # All system modifications logged
89
- log_security_change() {
90
- echo "[$(date -Iseconds)] $1" >> "$HOME/.local/share/dotfiles-security.log"
91
- }
92
- ```
93
-
94
- ### Layer 4: CI Security Scanning
95
-
96
- **Multi-tool approach:**
97
-
98
- - **Gitleaks**: Secrets in git history
99
- - **Shellcheck**: Shell script vulnerabilities
100
- - **Checkov**: Infrastructure misconfigurations
101
- - **Trivy**: Container vulnerabilities (when applicable)
102
- - **CodeQL**: Static analysis for Python/JavaScript
103
-
104
- **Weekly deep scans:**
105
-
106
- ```yaml
107
- schedule:
108
- - cron: '0 2 * * 0' # Weekly security audit
109
- ```
110
-
111
- ### Layer 5: Minimal Privileges
112
-
113
- **Scripts request only needed permissions:**
114
-
115
- ```bash
116
- # Don't run as root unless necessary
117
- if [ "$(id -u)" = "0" ]; then
118
- die "This script should not run as root"
119
- fi
120
-
121
- # Use sudo only for specific commands
122
- sudo sysctl -w net.ipv4.tcp_keepalive_time=60
123
- ```
124
-
125
- ## Consequences
126
-
127
- ### Positive
128
-
129
- - Secrets never enter git history
130
- - System modifications are auditable
131
- - Multiple layers catch different vulnerability types
132
- - Contributors have clear security patterns to follow
133
-
134
- ### Negative
135
-
136
- - Additional complexity in scripts
137
- - Encrypted secrets require key management
138
- - Some features disabled by default (friction)
139
-
140
- ### Neutral
141
-
142
- - Security vs convenience trade-offs explicit
143
- - Regular security audits via scheduled CI
144
-
145
- ## Security Checklist for Contributors
146
-
147
- - [ ] No hardcoded secrets (use environment variables or age encryption)
148
- - [ ] Validate all user inputs
149
- - [ ] Use absolute paths for file operations
150
- - [ ] Document any system modifications
151
- - [ ] Test scripts with shellcheck
152
- - [ ] Add appropriate permission checks
153
-
154
- ## References
155
-
156
- - [OWASP Secure Coding Practices](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/)
157
- - [Age Encryption](https://github.com/FiloSottile/age)
158
- - [Gitleaks](https://github.com/gitleaks/gitleaks)
@@ -1,171 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # ADR-004: Chezmoi + Custom CLI Wrapper Architecture
6
-
7
- **Status**: Accepted
8
- **Date**: 2026-02-09
9
- **Authors**: @sebastienrousseau
10
-
11
- ## Context
12
-
13
- Managing dotfiles requires:
14
-
15
- - Tracking file changes and applying them consistently
16
- - Handling platform-specific configurations
17
- - Supporting encrypted secrets
18
- - Providing a good developer experience
19
-
20
- Options considered:
21
-
22
- 1. **Bare git repository**: Simple but poor UX, no templating
23
- 2. **GNU Stow**: Symlink-based, limited features
24
- 3. **Chezmoi only**: Powerful but complex CLI
25
- 4. **Custom from scratch**: High maintenance burden
26
- 5. **Chezmoi + wrapper**: Best of both worlds
27
-
28
- ## Decision
29
-
30
- Use **Chezmoi as the core engine** with a **custom `dot` CLI wrapper** that:
31
-
32
- ### Architecture
33
-
34
- ```text
35
- ┌─────────────────────────────────────────────┐
36
- │ dot CLI │
37
- │ (User-friendly interface, custom commands) │
38
- ├─────────────────────────────────────────────┤
39
- │ Command Modules │
40
- │ core │ diagnostics │ tools │ appearance │
41
- │ secrets │ security │ meta │
42
- ├─────────────────────────────────────────────┤
43
- │ Shared Library │
44
- │ utils.sh (resolve_source_dir, run_script) │
45
- ├─────────────────────────────────────────────┤
46
- │ Chezmoi │
47
- │ (Template engine, state management, apply) │
48
- └─────────────────────────────────────────────┘
49
- ```
50
-
51
- ### Core Principles
52
-
53
- **1. Chezmoi handles complexity:**
54
-
55
- - Template rendering with Go text/template
56
- - Encrypted secrets with age
57
- - State tracking (what's applied vs source)
58
- - Cross-platform path handling
59
-
60
- **2. dot CLI handles UX:**
61
-
62
- - Memorable command names (`dot sync` vs `chezmoi apply`)
63
- - Domain-specific commands (`dot doctor`, `dot theme`)
64
- - Integration with external tools (Nix, Docker, Neovim)
65
- - Consistent help and error messages
66
-
67
- **3. Modular command structure:**
68
-
69
- ```text
70
- scripts/dot/
71
- ├── lib/
72
- │ └── utils.sh # Shared functions
73
- └── commands/
74
- ├── core.sh # apply, sync, update, add, diff
75
- ├── diagnostics.sh # doctor, heal, health, benchmark
76
- ├── tools.sh # tools, new, packages
77
- ├── appearance.sh # theme, wallpaper, fonts
78
- ├── secrets.sh # secrets-init, secrets
79
- ├── security.sh # firewall, backup, encrypt-check
80
- └── meta.sh # upgrade, docs, learn
81
- ```
82
-
83
- **4. Delegation pattern:**
84
-
85
- ```bash
86
- # Main dispatcher in dot CLI
87
- dispatch() {
88
- local module="$1" cmd="$2"
89
- shift 2
90
- exec bash "$src_dir/scripts/dot/commands/$module.sh" "$cmd" "$@"
91
- }
92
- ```
93
-
94
- ### Chezmoi Integration Points
95
-
96
- | Feature | Chezmoi | dot CLI |
97
- |---------|---------|---------|
98
- | Apply changes | `chezmoi apply` | `dot sync` |
99
- | View diff | `chezmoi diff` | `dot diff` |
100
- | Edit secrets | `chezmoi edit --encrypted` | `dot secrets` |
101
- | Source directory | `chezmoi source-path` | `dot cd` |
102
- | Health check | `chezmoi doctor` | `dot doctor` (extended) |
103
-
104
- ### Extension Points
105
-
106
- Custom commands can:
107
-
108
- 1. Wrap chezmoi commands with better defaults
109
- 2. Add entirely new functionality (benchmarks, themes)
110
- 3. Integrate with system tools (nix, docker, brew)
111
- 4. Provide interactive experiences (tour, learn)
112
-
113
- ## Consequences
114
-
115
- ### Positive
116
-
117
- - Leverage Chezmoi's battle-tested engine
118
- - User-friendly interface for common tasks
119
- - Easy to add domain-specific commands
120
- - Modular structure enables testing and maintenance
121
- - Single entry point (`dot`) for all operations
122
-
123
- ### Negative
124
-
125
- - Two layers to understand (chezmoi + dot)
126
- - Version coupling between chezmoi and scripts
127
- - Some chezmoi features not exposed via dot
128
-
129
- ### Neutral
130
-
131
- - Advanced users can still use chezmoi directly
132
- - Documentation needed for both layers
133
- - Upgrade path when chezmoi adds new features
134
-
135
- ## Implementation Notes
136
-
137
- ### Adding a New Command
138
-
139
- 1. Identify the appropriate module (or create new one)
140
- 2. Add function `cmd_<name>()` to module
141
- 3. Add case to module's dispatch
142
- 4. Add case to main dot CLI dispatcher
143
- 5. Update help text
144
- 6. Add tests if complex
145
-
146
- ### Module Template
147
-
148
- ```bash
149
- #!/usr/bin/env bash
150
- # Dotfiles CLI - <Category> Commands
151
-
152
- set -e
153
-
154
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
155
- source "$SCRIPT_DIR/../lib/utils.sh"
156
-
157
- cmd_example() {
158
- # Implementation
159
- }
160
-
161
- case "${1:-}" in
162
- example) shift; cmd_example "$@" ;;
163
- *) echo "Unknown command: ${1:-}" >&2; exit 1 ;;
164
- esac
165
- ```
166
-
167
- ## References
168
-
169
- - [Chezmoi Documentation](https://www.chezmoi.io/)
170
- - [Command Pattern](https://refactoring.guru/design-patterns/command)
171
- - [Unix Philosophy](https://en.wikipedia.org/wiki/Unix_philosophy)
@@ -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/)