@sebastienrousseau/dotfiles 0.2.520 → 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 (323) hide show
  1. package/CHANGELOG.md +18 -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,158 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
- {% raw %}
5
-
6
- # Secrets Management
7
-
8
- Provider-agnostic secrets via `dot secrets`. Supports macOS Keychain, `pass`, and age-encrypted local storage.
9
-
10
- ## Providers
11
-
12
- Provider selection is controlled by `.chezmoidata.toml`:
13
-
14
- ```toml
15
- [secrets.policy]
16
- provider = "auto" # auto | macos-keychain | pass | plain-enc
17
- auto_load = true
18
-
19
- [secrets.buckets]
20
- ai = ["GEMINI_API_KEY", "CLAUDE_API_KEY", "OPENAI_API_KEY"]
21
- infra = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "GITHUB_TOKEN"]
22
- ```
23
-
24
- `auto` resolves in this order:
25
-
26
- 1. `macos-keychain` on macOS
27
- 2. `pass` when available
28
- 3. `plain-enc` fallback (age-encrypted local store)
29
-
30
- ## Commands
31
-
32
- ```bash
33
- # Bootstrap age key for chezmoi encrypted files
34
- dot secrets-init
35
-
36
- # Optional: create encrypted secrets file for chezmoi
37
- dot secrets-create
38
- dot secrets edit
39
-
40
- # Managed secret store
41
- dot secrets set GEMINI_API_KEY
42
- dot secrets get GEMINI_API_KEY --raw
43
- dot secrets list
44
- dot secrets provider
45
-
46
- # Emit export lines for a bucket
47
- dot secrets load ai
48
-
49
- # Load into current shell session
50
- eval "$(dot env load ai)"
51
- ```
52
-
53
- ## Shell Auto-Load
54
-
55
- When `auto_load = true`, shell startup can load configured buckets automatically via `dot env load <bucket>`.
56
-
57
- Environment toggles:
58
-
59
- - `DOTFILES_SECRETS_PROVIDER`
60
- - `DOTFILES_SECRETS_AUTO_LOAD`
61
- - `DOTFILES_SECRETS_BUCKET_NAMES`
62
-
63
- ## Governance
64
-
65
- A pre-commit hook runs:
66
-
67
- ```bash
68
- scripts/diagnostics/secret-governance.sh
69
- ```
70
-
71
- It blocks staged commits when likely secret patterns are found. In strict mode it also blocks exact matches against managed secret values.
72
-
73
- ## SSH Key Encryption
74
-
75
- ```bash
76
- dot ssh-key ~/.ssh/id_ed25519
77
- ```
78
-
79
- This creates a local encrypted file, which you can add to chezmoi with `chezmoi add --encrypt` if needed.
80
-
81
- ## External Secrets Backends
82
-
83
- Chezmoi natively supports external secret managers as template functions. Configure the backend in `.chezmoidata.toml`:
84
-
85
- ```toml
86
- secrets_backend = "age" # age, 1password, bitwarden, pass, vault
87
- ```
88
-
89
- ### 1Password
90
-
91
- Requires the [1Password CLI](https://developer.1password.com/docs/cli/) (`op`).
92
-
93
- ```toml
94
- # .chezmoidata.toml
95
- secrets_backend = "1password"
96
- ```
97
-
98
- Use in templates:
99
-
100
- ```text
101
- {{ onepassword "my-secret" "vault-name" }}
102
- {{ onepasswordRead "op://vault/item/field" }}
103
- ```
104
-
105
- ### Bitwarden
106
-
107
- Requires the [Bitwarden CLI](https://bitwarden.com/help/cli/) (`bw`).
108
-
109
- ```toml
110
- # .chezmoidata.toml
111
- secrets_backend = "bitwarden"
112
- ```
113
-
114
- Use in templates:
115
-
116
- ```text
117
- {{ bitwarden "item" "my-login" }}
118
- {{ bitwardenFields "item" "my-login" }}
119
- ```
120
-
121
- ### HashiCorp Vault
122
-
123
- Requires the [Vault CLI](https://developer.hashicorp.com/vault/docs/commands) (`vault`).
124
-
125
- ```toml
126
- # .chezmoidata.toml
127
- secrets_backend = "vault"
128
- ```
129
-
130
- Use in templates:
131
-
132
- ```text
133
- {{ vault "secret/data/my-secret" }}
134
- ```
135
-
136
- ### pass (Password Store)
137
-
138
- Requires [pass](https://www.passwordstore.org/).
139
-
140
- ```toml
141
- # .chezmoidata.toml
142
- secrets_backend = "pass"
143
- ```
144
-
145
- Use in templates:
146
-
147
- ```text
148
- {{ pass "my-secret" }}
149
- ```
150
-
151
- See the [chezmoi documentation](https://www.chezmoi.io/user-guide/password-managers/) for full details on each backend.
152
-
153
- ## Security Notes
154
-
155
- - **Never commit** `~/.config/chezmoi/key.txt` to version control.
156
- - **Avoid shell history exposure** — use `dot secrets set` which prompts securely.
157
- - **Rotate credentials** on a regular schedule.
158
- {% endraw %}
@@ -1,45 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Security
6
-
7
- How dotfiles handles security and system modifications.
8
-
9
- ## Core Principles
10
-
11
- - **Opt-In Only** — No hardening applies unless `DOTFILES_*` variables are set to `1`.
12
- - **Local Logging** — All actions log to `~/.local/share/dotfiles.log`. No telemetry.
13
- - **No Hidden Sudo** — Sudo requests only for package managers. Never cached indefinitely.
14
-
15
- ## Hardening
16
-
17
- | Feature | Env Var | Action (macOS) | Action (Linux) |
18
- |---|---|---|---|
19
- | Firewall | `DOTFILES_FIREWALL` | Enables `socketfilterfw` + Stealth Mode | Configures UFW |
20
- | Telemetry | `DOTFILES_TELEMETRY` | Disables Diagnostic plists | Disables `whoopsie`/`apport` |
21
- | DNS-over-HTTPS | `DOTFILES_DOH` | Browser-level settings | Configures `resolvectl` |
22
- | Idle Security | `DOTFILES_LOCK` | Sets screensaver idle time | Sets GNOME/KDE idle-delay |
23
-
24
- ## Secrets
25
-
26
- The dotfiles use **age** for encryption.
27
-
28
- - **Initialization**: `dot secrets-init` creates a key at `~/.config/chezmoi/key.txt`.
29
- - **Storage**: Secrets are stored as `.age` encrypted files.
30
- - **Protection**: Private keys aren't committed to the repo.
31
-
32
- ## SSH Certificates
33
-
34
- Short-lived SSH certificates reduce the blast radius of key compromise.
35
-
36
- - **Issue**: `dot ssh-cert issue [--ttl 16h] [--principal user]`
37
- - **Status**: `dot ssh-cert status` — checks certificate validity and expiry
38
- - **Revoke**: `dot ssh-cert revoke` — revokes active certificates
39
- - **Backends**: `step-ca` (Smallstep) and local CA key (`ssh-keygen`)
40
- - **Default TTL**: 16 hours (override via `SSH_CERT_TTL` environment variable)
41
- - **CA URL**: Set `SSH_CERT_CA_URL` for `step-ca` integration
42
-
43
- ## Reporting a Vulnerability
44
-
45
- If you discover a security vulnerability, don't open a public issue. Follow the instructions in the Security Policy.
@@ -1,55 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Security Release Checklist
6
-
7
- Use this checklist before cutting any new release (e.g., `v0.x.x`) to ensure supply-chain integrity.
8
-
9
- ## 1. Supply Chain & Installer
10
-
11
- - [ ] **Pinned Version**: Update `install.sh` `VERSION` variable to match the release tag.
12
- - [ ] **Docs Sync**: Ensure `README.md` and `.github/PULL_REQUEST_TEMPLATE.md` installer URLs point to the new tag (not `main`).
13
- - [ ] **Clean Build**: Verify `install.sh` does not curl random scripts from third parties without pinning.
14
- - [ ] **SOUP Register**: Review [SOUP_REGISTER.md](SOUP_REGISTER.md) and confirm all active external components have an owner and validation path.
15
-
16
- ## 2. Secrets & Leak Prevention
17
-
18
- - [ ] **SSH Keys**: Scan `dot_ssh/` to ensure no private keys (`id_rsa`, `id_ed25519`) are committed.
19
- - [ ] **Env Vars**: Check for hardcoded API tokens in `dot_config/` (use `age` encryption or environment variables instead).
20
- - [ ] **Git History**: Run `git secrets` or similar to scan for accidental commits of credentials.
21
-
22
- ## 3. Platform Safety
23
-
24
- - [ ] **WSL Check**: Verify `install.sh` detects WSL and does not try to install systemd services or macOS defaults.
25
- - [ ] **Root usage**: Ensure no script requires `sudo` unnecessarily (Principle of Least Privilege).
26
-
27
- ## 4. Toolchain
28
-
29
- - [ ] **Binary Integrity**: Check that `dot_local/bin/` scripts are pure shell/executable and match expected checksums (no binary blobs).
30
- - [ ] **Dependency Scan**: Run `npm audit` / `cargo audit` if applicable (currently Node.js legacy is removed).
31
-
32
- ## 5. MCP (Model Context Protocol) Hardening
33
-
34
- - [ ] **Launcher Policy**: Verify `dot mcp` shows only allowlisted launchers (`npx`, `node`, `uvx`).
35
- - [ ] **Filesystem Scope**: Ensure no MCP server has broad access (`/`, `/home`, `/Users`).
36
- - [ ] **Default Profile**: Confirm only the `strict-local` server set is enabled by default.
37
- - [ ] **Token Validation**: Confirm required API tokens are set (`GITHUB_TOKEN`, `BRAVE_API_KEY`).
38
- - [ ] **Arg Policy**: No wildcard (`*`) or `--unsafe` arguments in MCP server configs.
39
- - [ ] **Env Placeholders**: All `${VAR}` references in MCP config have corresponding environment variables.
40
-
41
- Run `dot mcp --strict --json` to validate all MCP server configurations and capture an audit artifact.
42
-
43
- ## 6. Release Attestation
44
-
45
- - [ ] **SBOM Generation**: Verify `dotfiles-sbom.spdx.json` is generated in release workflow.
46
- - [ ] **Attestation Signing**: Confirm `actions/attest-build-provenance` signs the release artifacts.
47
- - [ ] **Attestation Verification**: Verify with `gh attestation verify <artifact> --repo sebastienrousseau/dotfiles`.
48
- - [ ] **Branch Protection**: Ensure `security-attestation` is a required status check on main.
49
- - [ ] **Automation Keying**: Confirm `ACTIONS_BOT_SIGNING_KEY` exists and matches the signer in `dot_config/git/allowed_signers`.
50
-
51
- ## 7. Final Verification
52
-
53
- - [ ] **Docker Test**: Run `docker build -f Dockerfile.test .` to verify clean install.
54
- - [ ] **Doctor**: Run `dot doctor` locally.
55
- - [ ] **MCP Check**: Run `dot mcp` to verify MCP configuration.
@@ -1,145 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Shell Preamble Exemptions
6
-
7
- Every bash script in this repo must include `set -euo pipefail` (or
8
- `set -eu` for POSIX `sh`) within its first 50 lines. The rule is
9
- enforced by
10
- [`tools/ci/check-shell-preamble.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/tools/ci/check-shell-preamble.sh),
11
- wired into `pre-commit` and the `reusable-shell-lint.yml` CI job.
12
- Tests pin the contract under
13
- [`tests/unit/security/test_shell_preamble_lint.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/tests/unit/security/test_shell_preamble_lint.sh).
14
-
15
- ## Why the preamble is mandatory
16
-
17
- `set -e` fails the script on the first error. `set -u` rejects
18
- reads of unset variables. `set -o pipefail` propagates the exit
19
- code of the last failing command in a pipeline rather than only the
20
- final command's. Together they convert silent failures into loud
21
- ones — which is the only way to catch them.
22
-
23
- Real example from this repo's history: `executable_dot-load-benchmark`
24
- shipped with only `set -e`. A failing pipeline (e.g. `cmd | grep`)
25
- where `grep` succeeded would still report success even when `cmd`
26
- crashed. The full triple catches this. The benchmark was upgraded
27
- in commit 970b631d under #854.
28
-
29
- ## Exemption categories
30
-
31
- Two kinds of files legitimately can't enforce the preamble locally:
32
-
33
- ### 1. Sourced libraries
34
-
35
- Files loaded via `source` / `.` into a caller's shell context. The
36
- caller already has `set -euo pipefail`; the library inherits it.
37
- Adding `set -e` locally would persist after the library returns and
38
- break the caller's own error-handling logic.
39
-
40
- These files must carry a comment header in their first 15 lines:
41
-
42
- ```bash
43
- # Sourced by <parent>.sh; inherits set -euo pipefail.
44
- ```
45
-
46
- The lint accepts files with this marker regardless of preamble
47
- state. Current adopters:
48
-
49
- | Path | Sourced by |
50
- |---|---|
51
- | `dot_config/shell/00-core-paths.sh.tmpl` | shell init (zsh/bash/fish) |
52
- | `dot_config/shell/05-core-safety.sh` | shell init |
53
- | `dot_config/shell/10-secrets.sh` | shell init |
54
- | `dot_config/shell/40-fzf-defaults.sh.tmpl` | shell init |
55
- | `dot_config/shell/40-ls-colors.sh` | shell init |
56
- | `dot_config/shell/50-logic-functions-core.sh.tmpl` | shell init + fish bridge |
57
- | `dot_config/shell/50-logic-functions.sh.tmpl` | shell init + fish bridge |
58
- | `dot_config/shell/51-logic-functions-extra.sh.tmpl` | shell init (lazy) |
59
- | `dot_config/shell/90-ux-aliases.sh.tmpl` | shell init + fish bridge |
60
- | `dot_config/shell/91-ux-aliases-lazy.sh.tmpl` | shell init (lazy) |
61
- | `scripts/dot/lib/bento.sh` | dot CLI commands |
62
- | `scripts/dot/lib/log.sh` | dot CLI + diagnostics |
63
- | `scripts/dot/lib/platform.sh` | dot CLI commands |
64
- | `scripts/dot/lib/ui.sh` | dot CLI + diagnostics + ops |
65
- | `scripts/dot/lib/utils.sh` | dot CLI |
66
- | `scripts/ops/heal-chezmoi.sh` | `scripts/ops/heal.sh` |
67
- | `scripts/ops/heal-system.sh` | `scripts/ops/heal.sh` |
68
- | `scripts/ops/heal-tools.sh` | `scripts/ops/heal.sh` |
69
-
70
- ### 2. Bulk-sourced fragments (path-skipped)
71
-
72
- Three directories contain hundreds of alias / function / PATH
73
- snippets that are sourced into the shell. Annotating each one
74
- individually would be 300+ marker comments with no extra signal.
75
- The lint skips them by path:
76
-
77
- | Path | Contents |
78
- |---|---|
79
- | `.chezmoitemplates/aliases/**/*.aliases.sh` | alias definitions sourced into the user's shell. |
80
- | `.chezmoitemplates/functions/**` | shell-function definitions sourced into the user's shell. |
81
- | `.chezmoitemplates/paths/**` | `PATH=…:$PATH` snippets concatenated by the shell init. |
82
-
83
- ### 3. Test scripts (path-skipped)
84
-
85
- `tests/**` — every file under the test tree is invoked through
86
- `tests/framework/test_runner.sh` which manages shell options for its
87
- children. The runner itself has the full preamble; children that
88
- source the framework inherit it.
89
-
90
- ### 4. Explicit opt-outs
91
-
92
- Init fragments and completion scripts that must NOT carry their own
93
- preamble (e.g., `dot_local/bin/executable_dot_completion`, a zsh
94
- completion sourced into the interactive shell) can carry an
95
- explicit marker:
96
-
97
- ```bash
98
- # preamble:skip — opt-out for completion / init fragments.
99
- ```
100
-
101
- The lint accepts these. Use sparingly.
102
-
103
- ## Adding a new exemption
104
-
105
- When you need to mark a new file:
106
-
107
- 1. **Decide whether it's actually sourced or executed.** If a user
108
- ever invokes it directly (chmod +x + `./file.sh`), add the
109
- preamble. If it's only ever `source`d, mark it.
110
-
111
- 2. **Pick the right marker.**
112
- - Sourced library: `# Sourced by <caller>; inherits set -euo pipefail.`
113
- - Completion / init fragment: `# preamble:skip — <why>.`
114
-
115
- 3. **Run the checker:**
116
-
117
- ```bash
118
- ./tools/ci/check-shell-preamble.sh path/to/file.sh
119
- ```
120
-
121
- Exit 0 = lint passes.
122
-
123
- 4. **If you're adding a new entire directory of fragments**
124
- (rare — alias buckets, plugin trees), edit the path-skip rule
125
- in `tools/ci/check-shell-preamble.sh` and document it in this
126
- page's "Bulk-sourced fragments" table above.
127
-
128
- ## CI integration
129
-
130
- - **Pre-commit hook** (`config/pre-commit-config.yaml` →
131
- `shell-preamble-check`): blocks `git commit` if a staged shell
132
- file fails the lint.
133
- - **CI** (`.github/workflows/reusable-shell-lint.yml`): runs the
134
- full-repo scan on every PR.
135
-
136
- A change to either the checker or the marker convention must update
137
- this page in the same PR.
138
-
139
- ## References
140
-
141
- - `tools/ci/check-shell-preamble.sh` — the lint.
142
- - `tests/unit/security/test_shell_preamble_lint.sh` — contract test.
143
- - `config/pre-commit-config.yaml` (`shell-preamble-check` hook).
144
- - `.github/workflows/reusable-shell-lint.yml` — CI invocation.
145
- - Issue [#854](https://github.com/sebastienrousseau/dotfiles/issues/854).
@@ -1,36 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # SOUP Register
6
-
7
- ## Purpose
8
-
9
- Controlled inventory for software of unknown pedigree used by the dotfiles platform.
10
-
11
- ## Active components
12
-
13
- | Component | Source | Version control | Verification path | Owner | Status |
14
- | :--- | :--- | :--- | :--- | :--- | :--- |
15
- | Homebrew installer | `raw.githubusercontent.com/Homebrew/install` | Moving upstream script, gated by `HOMEBREW_INSTALLER_SHA256` | SHA-256 in [package_managers.sh](https://github.com/sebastienrousseau/dotfiles/blob/main/install/lib/package_managers.sh) | Repo maintainer | Conditional |
16
- | Chezmoi installer | `get.chezmoi.io` | Pinned by `CHEZMOI_INSTALLER_SHA256` when used | SHA-256 in `install/lib/chezmoi.sh` | Repo maintainer | Controlled |
17
- | GitHub Actions marketplace actions | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pins | Repo maintainer | Controlled |
18
- | Grype container | `anchore/grype` | Pinned tag in workflow | Container tag in [security-enhanced.yml](https://github.com/sebastienrousseau/dotfiles/blob/main/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
19
- | Trivy container | `aquasec/trivy` | Pinned tag in workflow | Container tag in [security-enhanced.yml](https://github.com/sebastienrousseau/dotfiles/blob/main/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
20
- | Checkov action | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pin | Repo maintainer | Controlled |
21
- | Nix inputs | GitHub flakes | Locked in [flake.lock](https://github.com/sebastienrousseau/dotfiles/blob/main/flake.lock) | `narHash` and revision lock | Repo maintainer | Controlled |
22
- | GitHub release metadata queries | GitHub API | Discovery only, not release validation | `update-deps.yml` query path | Repo maintainer | Monitored |
23
-
24
- ## Validation record
25
-
26
- 1. Record version or commit SHA.
27
- 2. Record checksum, signature, or attestation method.
28
- 3. Record workflow or script that consumes the component.
29
- 4. Record owner and review date.
30
- 5. Reject moving inputs in production or release paths unless checksum-gated.
31
-
32
- ## Exit criteria
33
-
34
- - No unsigned automation commits.
35
- - No unverified executable download in installer or release path.
36
- - Every SOUP item has owner, version control method, and validation record.
@@ -1,130 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Threat Model
6
-
7
- Security analysis of the dotfiles distribution. Covers trust boundaries, threat actors, attack surfaces, and mitigations.
8
-
9
- ## Trust Boundary
10
-
11
- The primary trust boundary is the **local machine**. Dotfiles are deployed to and executed on the user's own system. All configuration files, scripts, and templates run with the user's privileges.
12
-
13
- ```text
14
- ┌─────────────────────────────────────────────────┐
15
- │ Local Machine (trusted zone) │
16
- │ ┌─────────────────┐ ┌──────────────────────┐ │
17
- │ │ ~/.dotfiles/ │ │ ~/.config/ (deployed)│ │
18
- │ │ (source repo) │──│ Shell configs, nvim │ │
19
- │ └─────────────────┘ └──────────────────────┘ │
20
- │ │
21
- │ ┌─────────────────┐ ┌──────────────────────┐ │
22
- │ │ ~/.local/bin/ │ │ ~/.cache/shell/ │ │
23
- │ │ (user scripts) │ │ (cached eval output) │ │
24
- │ └─────────────────┘ └──────────────────────┘ │
25
- └─────────────────────────────────────────────────┘
26
-
27
- ─────┼──────── Trust boundary ────────
28
-
29
- ┌─────────────────────────────────────────────────┐
30
- │ External (untrusted zone) │
31
- │ GitHub (repo hosting), Homebrew, Nix, │
32
- │ Zinit plugins, Neovim plugins, npm, pip │
33
- └─────────────────────────────────────────────────┘
34
- ```
35
-
36
- ## Threat Actors
37
-
38
- | Actor | Motivation | Capability |
39
- |-------|-----------|------------|
40
- | Supply chain attacker | Inject malicious code via dependency | Compromise upstream packages (Homebrew, npm, Zinit plugins) |
41
- | Secrets harvester | Steal API keys, SSH keys, tokens | Scrape git history, shell history, env vars |
42
- | Privilege escalation | Gain root access | Exploit `sudo` aliases, writable scripts in PATH |
43
- | Network attacker | Intercept credentials | MITM on install scripts, curl-pipe-bash |
44
-
45
- ## Attack Surfaces
46
-
47
- ### 1. Shell Startup Scripts
48
-
49
- **Risk:** Malicious code in sourced files executes with user privileges on every shell start.
50
-
51
- **Mitigations:**
52
-
53
- - All shell scripts pass `shellcheck --severity=error`
54
- - `set -euo pipefail` enforced in all operational scripts
55
- - `eval` usage hardened with process substitution (`. /dev/stdin`)
56
- - Input validation on dynamic function generation
57
- - `DOTFILES_ULTRA_FAST=1` bypasses all non-core sourcing
58
-
59
- ### 2. Secrets Exposure
60
-
61
- **Risk:** API keys, tokens, and SSH keys leaked via git history, shell history, or environment.
62
-
63
- **Mitigations:**
64
-
65
- - [Gitleaks](https://github.com/gitleaks/gitleaks) pre-commit hook blocks secrets in commits
66
- - Atuin `history_filter` excludes sensitive patterns
67
- - Age encryption for local secret storage
68
- - `dot secrets set` uses secure prompts (no shell history)
69
- - `.gitignore` excludes `key.txt`, `.env`, credential files
70
-
71
- ### 3. Supply Chain Dependencies
72
-
73
- **Risk:** Compromised upstream packages injected into the toolchain.
74
-
75
- **Mitigations:**
76
-
77
- - Nix Flakes provide reproducible, pinned dependencies
78
- - Zinit plugin versions pinned (`ver"0.8.0"`)
79
- - Neovim plugin versions locked via `lazy-lock.json`
80
- - `install.sh` uses HTTPS for all downloads
81
- - Homebrew formula integrity via bottle checksums
82
-
83
- ### 4. Path Manipulation
84
-
85
- **Risk:** Attacker places malicious binary in a PATH directory that shadows legitimate tools.
86
-
87
- **Mitigations:**
88
-
89
- - PATH construction is deterministic (template-generated)
90
- - `~/.local/bin` is user-controlled and checked for writability
91
- - No world-writable directories in PATH
92
- - `prependpath` function validates directory existence
93
-
94
- ### 5. Template Injection
95
-
96
- **Risk:** Chezmoi template variables could inject shell code if not properly quoted.
97
-
98
- **Mitigations:**
99
-
100
- - Template variables come from `.chezmoidata.toml` (user-controlled)
101
- - No external/network data used in templates
102
- - Template validation via `chezmoi apply --dry-run` in CI
103
-
104
- ### 6. Cached Eval Files
105
-
106
- **Risk:** Stale or tampered cache files in `~/.cache/shell/` sourced at startup.
107
-
108
- **Mitigations:**
109
-
110
- - `_cached_eval` validates cache against binary mtime
111
- - Cache files are user-owned (0644)
112
- - Cache directory is under `$XDG_CACHE_HOME` (user-controlled)
113
- - Cache can be cleared with `rm -rf ~/.cache/shell/`
114
-
115
- ## Residual Risks
116
-
117
- | Risk | Likelihood | Impact | Status |
118
- |------|-----------|--------|--------|
119
- | Zinit plugin compromise | Low | High | Mitigated by version pinning |
120
- | Shell history leak | Medium | Medium | Mitigated by Atuin filter |
121
- | Stale Nix closure | Low | Low | Accepted (manual `nix flake update`) |
122
- | macOS Keychain access | Low | Medium | Accepted (OS-level protection) |
123
-
124
- ## Recommendations
125
-
126
- 1. Run `gitleaks detect` before every push (pre-commit hook enforced)
127
- 2. Rotate secrets on a 90-day schedule
128
- 3. Audit `lazy-lock.json` diffs when updating Neovim plugins
129
- 4. Pin Homebrew versions for security-critical tools
130
- 5. Use `DOTFILES_ULTRA_FAST=1` in CI to minimize attack surface