@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,444 +0,0 @@
1
- /* ──────────────────────────────────────────────────────────────────────────
2
- * doc.dotfiles.io — custom theme
3
- * Dark + terminal-green palette on MkDocs Material.
4
- * Inspired by the polish of docs.n8n.io / GitHub docs dark, adapted to
5
- * Material's structure.
6
- * ────────────────────────────────────────────────────────────────────── */
7
-
8
- /* -- font stack ------------------------------------------------------------ */
9
- @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap");
10
-
11
- :root {
12
- --dot-font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
13
- "Helvetica Neue", Arial, sans-serif;
14
- --dot-font-code: "JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono",
15
- Menlo, Consolas, monospace;
16
-
17
- --dot-green: #7ee787; /* terminal green */
18
- --dot-green-bright: #b0f5b7; /* hover / focused */
19
- --dot-green-dim: #4a9153; /* muted / secondary */
20
- --dot-green-rgb: 126, 231, 135;
21
-
22
- --dot-bg: #0b0e14; /* base */
23
- --dot-bg-elev: #111621; /* elevated card */
24
- --dot-bg-elev-2: #161b26; /* higher elevation */
25
- --dot-border: #1f2937;
26
- --dot-border-strong: #2b3646;
27
-
28
- --dot-fg: #e4e7ec;
29
- --dot-fg-muted: #94a3b8;
30
- --dot-fg-subtle: #64748b;
31
- }
32
-
33
- /* -- global typography ----------------------------------------------------- */
34
- body,
35
- .md-typeset {
36
- font-family: var(--dot-font-body);
37
- font-feature-settings: "ss01", "cv11";
38
- -webkit-font-smoothing: antialiased;
39
- -moz-osx-font-smoothing: grayscale;
40
- }
41
-
42
- .md-typeset code,
43
- .md-typeset kbd,
44
- .md-typeset pre,
45
- code {
46
- font-family: var(--dot-font-code);
47
- font-feature-settings: "calt", "ss20";
48
- }
49
-
50
- /* -- dark palette override (slate) ---------------------------------------- */
51
- [data-md-color-scheme="slate"] {
52
- --md-hue: 210;
53
- --md-default-bg-color: var(--dot-bg);
54
- --md-default-fg-color: var(--dot-fg);
55
- --md-default-fg-color--light: var(--dot-fg-muted);
56
- --md-default-fg-color--lighter: var(--dot-fg-subtle);
57
- --md-default-fg-color--lightest: hsla(210, 20%, 40%, 0.3);
58
-
59
- --md-primary-fg-color: var(--dot-green);
60
- --md-primary-fg-color--light: var(--dot-green-bright);
61
- --md-primary-fg-color--dark: var(--dot-green-dim);
62
- --md-primary-bg-color: var(--dot-bg);
63
- --md-primary-bg-color--light: var(--dot-bg-elev);
64
-
65
- --md-accent-fg-color: var(--dot-green-bright);
66
- --md-accent-fg-color--transparent: rgba(126, 231, 135, 0.1);
67
- --md-accent-bg-color: var(--dot-bg);
68
- --md-accent-bg-color--light: var(--dot-bg-elev);
69
-
70
- --md-typeset-a-color: var(--dot-green);
71
-
72
- --md-code-bg-color: var(--dot-bg-elev-2);
73
- --md-code-fg-color: var(--dot-fg);
74
- --md-code-hl-color: rgba(126, 231, 135, 0.12);
75
- --md-code-hl-color--light: rgba(126, 231, 135, 0.08);
76
-
77
- /* Admonitions */
78
- --md-admonition-bg-color: var(--dot-bg-elev);
79
- --md-admonition-fg-color: var(--dot-fg);
80
-
81
- /* Footer */
82
- --md-footer-bg-color: #050710;
83
- --md-footer-bg-color--dark: #030509;
84
- }
85
-
86
- /* -- header --------------------------------------------------------------- */
87
- .md-header {
88
- background-color: rgba(11, 14, 20, 0.92);
89
- backdrop-filter: saturate(180%) blur(12px);
90
- -webkit-backdrop-filter: saturate(180%) blur(12px);
91
- border-bottom: 1px solid var(--dot-border);
92
- box-shadow: none;
93
- }
94
-
95
- .md-header[data-md-state="shadow"] {
96
- box-shadow: 0 1px 0 var(--dot-border);
97
- }
98
-
99
- .md-header__title {
100
- font-weight: 600;
101
- letter-spacing: -0.01em;
102
- }
103
-
104
- .md-header__button.md-logo :is(img, svg) {
105
- color: var(--dot-green);
106
- fill: var(--dot-green);
107
- height: 1.6rem;
108
- width: 1.6rem;
109
- }
110
-
111
- /* -- tabs --------------------------------------------------------------- */
112
- .md-tabs {
113
- background-color: rgba(11, 14, 20, 0.85);
114
- border-bottom: 1px solid var(--dot-border);
115
- }
116
-
117
- .md-tabs__link {
118
- color: var(--dot-fg-muted);
119
- opacity: 1;
120
- font-size: 0.75rem;
121
- font-weight: 500;
122
- transition: color 120ms ease;
123
- }
124
-
125
- .md-tabs__link:hover,
126
- .md-tabs__link--active {
127
- color: var(--dot-green-bright);
128
- }
129
-
130
- .md-tabs__link--active {
131
- position: relative;
132
- }
133
- .md-tabs__link--active::after {
134
- content: "";
135
- position: absolute;
136
- left: 0;
137
- right: 0;
138
- bottom: -2px;
139
- height: 2px;
140
- background: linear-gradient(90deg, transparent, var(--dot-green), transparent);
141
- }
142
-
143
- /* -- sidebar (left nav) --------------------------------------------------- */
144
- .md-nav__title {
145
- font-size: 0.68rem;
146
- font-weight: 700;
147
- text-transform: uppercase;
148
- letter-spacing: 0.05em;
149
- color: var(--dot-fg-subtle);
150
- padding-top: 1.2rem;
151
- }
152
-
153
- .md-nav__link {
154
- color: var(--dot-fg-muted);
155
- transition: color 120ms ease, background-color 120ms ease;
156
- border-radius: 6px;
157
- padding: 4px 8px;
158
- margin: 1px 0;
159
- }
160
- .md-nav__link:hover {
161
- color: var(--dot-fg);
162
- background: rgba(126, 231, 135, 0.06);
163
- }
164
- .md-nav__link--active,
165
- .md-nav__link.md-nav__link--active {
166
- color: var(--dot-green-bright);
167
- background: rgba(126, 231, 135, 0.1);
168
- font-weight: 500;
169
- }
170
-
171
- /* -- right TOC ------------------------------------------------------------ */
172
- .md-nav--secondary .md-nav__title {
173
- border-left: 2px solid var(--dot-border);
174
- background: transparent;
175
- }
176
- .md-nav--secondary .md-nav__link--active {
177
- border-left: 2px solid var(--dot-green);
178
- color: var(--dot-green-bright);
179
- background: transparent;
180
- }
181
-
182
- /* -- content -------------------------------------------------------------- */
183
- .md-typeset h1,
184
- .md-typeset h2,
185
- .md-typeset h3,
186
- .md-typeset h4 {
187
- font-family: var(--dot-font-body);
188
- letter-spacing: -0.02em;
189
- color: var(--dot-fg);
190
- }
191
-
192
- .md-typeset h1 {
193
- font-weight: 700;
194
- font-size: 2.2rem;
195
- line-height: 1.15;
196
- margin-bottom: 0.6em;
197
- background: linear-gradient(180deg, #ffffff 0%, #cbd5e1 100%);
198
- -webkit-background-clip: text;
199
- background-clip: text;
200
- color: transparent;
201
- }
202
-
203
- .md-typeset h2 {
204
- font-weight: 600;
205
- font-size: 1.6rem;
206
- margin-top: 2.4em;
207
- padding-top: 0.4em;
208
- border-top: 1px solid var(--dot-border);
209
- }
210
-
211
- .md-typeset h3 {
212
- font-weight: 600;
213
- font-size: 1.2rem;
214
- color: var(--dot-green-bright);
215
- }
216
-
217
- .md-typeset a {
218
- text-decoration: none;
219
- border-bottom: 1px solid transparent;
220
- transition: border-color 120ms ease, color 120ms ease;
221
- }
222
- .md-typeset a:hover {
223
- border-bottom-color: var(--dot-green-bright);
224
- color: var(--dot-green-bright);
225
- }
226
-
227
- /* -- code blocks ---------------------------------------------------------- */
228
- .md-typeset pre > code,
229
- .md-typeset .highlight pre {
230
- background-color: var(--dot-bg-elev-2);
231
- border: 1px solid var(--dot-border);
232
- border-radius: 8px;
233
- }
234
- .md-typeset code {
235
- background-color: rgba(126, 231, 135, 0.08);
236
- border: 1px solid rgba(126, 231, 135, 0.15);
237
- color: var(--dot-green-bright);
238
- border-radius: 4px;
239
- padding: 0.1em 0.35em;
240
- font-size: 0.88em;
241
- }
242
- .md-typeset pre > code {
243
- background: transparent;
244
- border: none;
245
- color: var(--dot-fg);
246
- padding: 0;
247
- }
248
-
249
- /* -- tables --------------------------------------------------------------- */
250
- .md-typeset table:not([class]) {
251
- border: 1px solid var(--dot-border);
252
- border-radius: 8px;
253
- overflow: hidden;
254
- font-size: 0.8rem;
255
- }
256
- .md-typeset table:not([class]) th {
257
- background: var(--dot-bg-elev);
258
- color: var(--dot-fg);
259
- font-weight: 600;
260
- border-bottom: 1px solid var(--dot-border-strong);
261
- }
262
- .md-typeset table:not([class]) tr:hover {
263
- background: rgba(126, 231, 135, 0.03);
264
- }
265
-
266
- /* -- admonitions ---------------------------------------------------------- */
267
- .md-typeset .admonition,
268
- .md-typeset details {
269
- background: var(--dot-bg-elev);
270
- border: 1px solid var(--dot-border);
271
- border-left: 3px solid var(--dot-green);
272
- border-radius: 8px;
273
- box-shadow: none;
274
- }
275
- .md-typeset .admonition-title,
276
- .md-typeset summary {
277
- background: transparent;
278
- border-bottom: 1px solid var(--dot-border);
279
- font-weight: 600;
280
- }
281
-
282
- /* -- grid cards ----------------------------------------------------------- */
283
- .md-typeset .grid.cards > :is(ul, ol) > li,
284
- .md-typeset .grid.cards > .card {
285
- background: var(--dot-bg-elev);
286
- border: 1px solid var(--dot-border);
287
- border-radius: 12px;
288
- padding: 1.2rem;
289
- transition: transform 180ms ease, border-color 180ms ease,
290
- box-shadow 180ms ease, background 180ms ease;
291
- position: relative;
292
- overflow: hidden;
293
- }
294
- .md-typeset .grid.cards > :is(ul, ol) > li::before {
295
- content: "";
296
- position: absolute;
297
- inset: 0;
298
- background: radial-gradient(
299
- circle at top left,
300
- rgba(126, 231, 135, 0.06),
301
- transparent 60%
302
- );
303
- opacity: 0;
304
- transition: opacity 220ms ease;
305
- pointer-events: none;
306
- }
307
- .md-typeset .grid.cards > :is(ul, ol) > li:hover {
308
- transform: translateY(-2px);
309
- border-color: rgba(126, 231, 135, 0.35);
310
- background: var(--dot-bg-elev-2);
311
- box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.5),
312
- 0 0 0 1px rgba(126, 231, 135, 0.08) inset;
313
- }
314
- .md-typeset .grid.cards > :is(ul, ol) > li:hover::before {
315
- opacity: 1;
316
- }
317
- .md-typeset .grid.cards > :is(ul, ol) > li > :first-child {
318
- margin-top: 0;
319
- }
320
- .md-typeset .grid.cards > :is(ul, ol) > li strong {
321
- color: var(--dot-green-bright);
322
- font-weight: 600;
323
- font-size: 1rem;
324
- display: block;
325
- margin-bottom: 0.4rem;
326
- }
327
- .md-typeset .grid.cards > :is(ul, ol) > li .twemoji,
328
- .md-typeset .grid.cards > :is(ul, ol) > li svg {
329
- color: var(--dot-green);
330
- fill: var(--dot-green);
331
- height: 1.4rem;
332
- width: 1.4rem;
333
- margin-bottom: 0.6rem;
334
- }
335
-
336
- /* -- hero banner (used by landing page) ----------------------------------- */
337
- .dot-hero {
338
- padding: 3rem 0 2.4rem;
339
- margin: -1.6rem -0.8rem 2.4rem;
340
- text-align: center;
341
- border-bottom: 1px solid var(--dot-border);
342
- position: relative;
343
- background: radial-gradient(
344
- ellipse 60% 100% at 50% 0%,
345
- rgba(126, 231, 135, 0.08),
346
- transparent 70%
347
- );
348
- }
349
- .dot-hero h1 {
350
- font-size: 3rem;
351
- line-height: 1.05;
352
- margin-bottom: 0.4em;
353
- padding: 0;
354
- border: none;
355
- }
356
- .dot-hero .tagline {
357
- font-size: 1.1rem;
358
- color: var(--dot-fg-muted);
359
- max-width: 40rem;
360
- margin: 0 auto 1.4rem;
361
- }
362
- .dot-hero .buttons {
363
- display: flex;
364
- gap: 0.6rem;
365
- justify-content: center;
366
- flex-wrap: wrap;
367
- }
368
- .dot-hero .buttons a {
369
- display: inline-flex;
370
- align-items: center;
371
- gap: 0.4rem;
372
- padding: 0.6rem 1.1rem;
373
- border-radius: 8px;
374
- font-weight: 500;
375
- font-size: 0.9rem;
376
- text-decoration: none;
377
- border: 1px solid var(--dot-border-strong);
378
- color: var(--dot-fg);
379
- transition: all 160ms ease;
380
- }
381
- .dot-hero .buttons a.primary {
382
- background: var(--dot-green);
383
- color: var(--dot-bg);
384
- border-color: var(--dot-green);
385
- font-weight: 600;
386
- }
387
- .dot-hero .buttons a.primary:hover {
388
- background: var(--dot-green-bright);
389
- border-color: var(--dot-green-bright);
390
- transform: translateY(-1px);
391
- }
392
- .dot-hero .buttons a:not(.primary):hover {
393
- border-color: var(--dot-green);
394
- color: var(--dot-green-bright);
395
- }
396
-
397
- /* -- search --------------------------------------------------------------- */
398
- .md-search__form {
399
- background: var(--dot-bg-elev);
400
- border: 1px solid var(--dot-border);
401
- border-radius: 8px;
402
- }
403
- .md-search__form:hover,
404
- .md-search__input:focus + .md-search__icon,
405
- .md-search__form:focus-within {
406
- border-color: var(--dot-green);
407
- background: var(--dot-bg-elev-2);
408
- }
409
- .md-search__input {
410
- color: var(--dot-fg);
411
- }
412
- .md-search__input::placeholder {
413
- color: var(--dot-fg-subtle);
414
- }
415
-
416
- /* -- footer --------------------------------------------------------------- */
417
- .md-footer {
418
- border-top: 1px solid var(--dot-border);
419
- }
420
- .md-footer-meta {
421
- background: var(--dot-bg);
422
- border-top: 1px solid var(--dot-border);
423
- }
424
- .md-copyright {
425
- color: var(--dot-fg-subtle);
426
- font-size: 0.72rem;
427
- }
428
-
429
- /* -- scrollbar (webkit) --------------------------------------------------- */
430
- ::-webkit-scrollbar {
431
- width: 10px;
432
- height: 10px;
433
- }
434
- ::-webkit-scrollbar-track {
435
- background: transparent;
436
- }
437
- ::-webkit-scrollbar-thumb {
438
- background: var(--dot-border-strong);
439
- border-radius: 8px;
440
- border: 2px solid var(--dot-bg);
441
- }
442
- ::-webkit-scrollbar-thumb:hover {
443
- background: var(--dot-green-dim);
444
- }
@@ -1,10 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Theme Gallery
6
-
7
- Themes are auto-generated from your wallpapers — the available set depends on what's present on your system. Run `dot theme list` to see what's discovered.
8
-
9
- See [Theme Reference](../reference/THEMES.md) for the wallpaper-driven engine.
10
- See [Theming Guide](../guides/THEMING.md) for setup, switching, and the K-Means CIELAB pipeline.
@@ -1,30 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Visual Integrity Report
6
-
7
- Generated: 2026-04-08
8
- Scope: terminal theme SSOT, shell first-paint path, font rendering, and cross-platform template intent.
9
-
10
- | Metric | Current | Target | Status |
11
- | :--- | :--- | :--- | :--- |
12
- | Contrast (APCA) | `macos-monterey-dark` body text `Lc 90+`, critical UI `Lc 95+` | `Lc 75+` body, `Lc 90+` critical | Pass |
13
- | Startup Time | `bash 25ms`, `zsh 35ms`, `fish 25ms` | `< 100ms` | Pass |
14
- | Color DeltaE | SSOT palette unified across Ghostty/Kitty/Alacritty/WezTerm; no runtime probe yet | `< 2.0` | Needs instrumentation |
15
-
16
- ## Findings
17
-
18
- - Theme colors are already centralized in `.chezmoidata/themes.toml`, but accessibility intent was implicit. The active theme now carries explicit OKLCH/APCA metadata.
19
- - First-prompt Fish initialization still performed live CLI work when cache artifacts were present. The prompt path now sources prewarmed cache files first and only regenerates on cache miss.
20
- - Terminal templates were palette-consistent, but rendering policy was inconsistent. macOS now prefers Display P3 and CoreText-friendly metrics; Linux/Wayland templates prefer more conservative opacity and FreeType-safe fallbacks.
21
-
22
- ## Edge Cases
23
-
24
- - Wayland fontconfig now sets `rgba` declaratively from feature flags to avoid color fringing on mixed-density Linux panels.
25
- - Ghostty, Kitty, Alacritty, and WezTerm now share the same terminal ramp while allowing platform-specific font fallback and window-compositor behavior.
26
- - WSL parity is still template-capable, but DeltaE validation is not yet automated against Windows Terminal serialization.
27
-
28
- ## Next Step
29
-
30
- Implement a small palette audit utility that computes APCA and DeltaE from `.chezmoidata/themes.toml` so the report can become test-backed rather than declarative.
@@ -1,78 +0,0 @@
1
- <svg width="800" height="450" viewBox="0 0 800 450" xmlns="http://www.w3.org/2000/svg">
2
- <!-- Background Shadow -->
3
- <rect x="10" y="10" width="780" height="430" rx="12" fill="rgba(0,0,0,0.3)" filter="blur(10px)" />
4
-
5
- <!-- Terminal Window -->
6
- <rect x="20" y="20" width="760" height="410" rx="10" fill="#1e1e2e" stroke="#313244" stroke-width="1" />
7
-
8
- <!-- Window Title Bar -->
9
- <path d="M20 30 a10 10 0 0 1 10 -10 h740 a10 10 0 0 1 10 10 v20 h-760 z" fill="#181825" />
10
-
11
- <!-- macOS Buttons -->
12
- <circle cx="40" cy="35" r="6" fill="#f38ba8" />
13
- <circle cx="60" cy="35" r="6" fill="#fab387" />
14
- <circle cx="80" cy="35" r="6" fill="#a6e3a1" />
15
-
16
- <!-- Title -->
17
- <text x="400" y="38" font-family="JetBrains Mono, monospace" font-size="12" fill="#bac2de" text-anchor="middle">~/.dotfiles — zsh</text>
18
-
19
- <!-- Mock Terminal Content -->
20
- <g font-family="JetBrains Mono, monospace" font-size="13">
21
- <!-- Prompt + command -->
22
- <text x="40" y="75" fill="#a6e3a1">&#10148;</text>
23
- <text x="60" y="75" fill="#cdd6f4">dot doctor</text>
24
-
25
- <!-- Section: Dotfiles Core -->
26
- <text x="40" y="105" fill="#89b4fa" font-weight="bold">Dotfiles Core</text>
27
- <text x="40" y="125" fill="#a6e3a1"> &#10003; chezmoi</text>
28
- <text x="220" y="125" fill="#585b70">2.47.1 (mise)</text>
29
- <text x="40" y="145" fill="#a6e3a1"> &#10003; git</text>
30
- <text x="220" y="145" fill="#585b70">2.49.0 (system)</text>
31
- <text x="40" y="165" fill="#a6e3a1"> &#10003; age encryption</text>
32
- <text x="220" y="165" fill="#585b70">key present</text>
33
-
34
- <!-- Section: Shell Environment -->
35
- <text x="40" y="195" fill="#89b4fa" font-weight="bold">Shell Environment</text>
36
- <text x="40" y="215" fill="#a6e3a1"> &#10003; zsh</text>
37
- <text x="220" y="215" fill="#585b70">5.9.0 (system)</text>
38
- <text x="40" y="235" fill="#a6e3a1"> &#10003; starship</text>
39
- <text x="220" y="235" fill="#585b70">1.22.1 (mise)</text>
40
- <text x="40" y="255" fill="#a6e3a1"> &#10003; zoxide</text>
41
- <text x="220" y="255" fill="#585b70">0.9.7 (mise)</text>
42
-
43
- <!-- Section: CLI Tools -->
44
- <text x="420" y="105" fill="#89b4fa" font-weight="bold">CLI Tools</text>
45
- <text x="420" y="125" fill="#a6e3a1"> &#10003; rg (ripgrep)</text>
46
- <text x="600" y="125" fill="#585b70">14.1.1</text>
47
- <text x="420" y="145" fill="#a6e3a1"> &#10003; bat</text>
48
- <text x="600" y="145" fill="#585b70">0.25.0</text>
49
- <text x="420" y="165" fill="#a6e3a1"> &#10003; fzf</text>
50
- <text x="600" y="165" fill="#585b70">0.60.3</text>
51
-
52
- <!-- Section: Security -->
53
- <text x="420" y="195" fill="#89b4fa" font-weight="bold">Security</text>
54
- <text x="420" y="215" fill="#a6e3a1"> &#10003; SSH keys</text>
55
- <text x="600" y="215" fill="#585b70">ed25519</text>
56
- <text x="420" y="235" fill="#a6e3a1"> &#10003; GPG signing</text>
57
- <text x="600" y="235" fill="#585b70">configured</text>
58
- <text x="420" y="255" fill="#a6e3a1"> &#10003; secrets (age)</text>
59
- <text x="600" y="255" fill="#585b70">encrypted</text>
60
-
61
- <!-- Performance line -->
62
- <text x="40" y="290" fill="#89b4fa" font-weight="bold">Performance</text>
63
- <text x="40" y="310" fill="#a6e3a1"> &#10003; zsh startup</text>
64
- <text x="220" y="310" fill="#585b70">12ms</text>
65
-
66
- <!-- Score -->
67
- <text x="40" y="350" fill="#a6e3a1" font-weight="bold">Score: 95/100 — Excellent</text>
68
- <text x="40" y="370" fill="#585b70">18 passed, 0 errors, 1 warning</text>
69
-
70
- <!-- New prompt -->
71
- <text x="40" y="405" fill="#a6e3a1">&#10148;</text>
72
- <text x="60" y="405" fill="#cdd6f4">~/.dotfiles</text>
73
- <text x="170" y="405" fill="#f5c2e7">on main</text>
74
- <rect x="275" y="393" width="8" height="16" fill="#cdd6f4">
75
- <animate attributeName="opacity" values="1;0;1" dur="1s" repeatCount="indefinite" />
76
- </rect>
77
- </g>
78
- </svg>
package/scripts/README.md DELETED
@@ -1,123 +0,0 @@
1
- # `scripts/` — Framework Code
2
-
3
- Everything in this directory is **framework code**. Nothing here
4
- deploys to `~/`; chezmoi ignores the whole tree (see
5
- `.chezmoiignore`). Scripts are invoked by the `dot` CLI, by CI
6
- workflows, by `chezmoi apply` hooks, or by hand.
7
-
8
- ## Subtree map
9
-
10
- Per the repository reorg (RFC `docs/operations/RFC_v0_2_503_reorganization.md`),
11
- **repo-only ops** (CI, release, maintenance, docs-generation) have
12
- moved to the top-level `tools/` tree. `scripts/` retains the
13
- **runtime-invoked** scripts that the `dot` CLI dispatches to plus a
14
- few specialised subtrees.
15
-
16
- ### `scripts/` (CLI dispatch + specialised subtrees)
17
-
18
- | Path | Purpose | Touched by |
19
- |---|---|---|
20
- | `scripts/dot/commands/` | Per-subcommand handlers for the `dot` CLI. Sources `lib/dot/*.sh` (moved out of this tree in the Phase 1 reorg). | Dispatched by `bin/dot` |
21
- | `scripts/dot/powershell/` | Native PowerShell module (`Dot.psm1`) exporting `Get-DotVersion` / `Invoke-DotHelp` / `Test-DotAgentsSync`. | `bin/dot.ps1` |
22
- | `scripts/dot/data/` | Per-command static data (registry seeds, palette tables). | `scripts/dot/commands/*` |
23
- | `scripts/lib/` | Cross-cutting library helpers reused across multiple scripts. Example: `secrets_provider.sh` (keychain / pass / age dispatch). | `scripts/dot/commands/*`, ops scripts |
24
- | `scripts/diagnostics/` | `doctor.sh` and its helpers — long-form environment health check. | `dot doctor` |
25
- | `scripts/security/` | Security-domain ops: `check-disclosure-key-expiry.sh`, `lock-configs.sh`, etc. | `dot security`, CI |
26
- | `scripts/secrets/` | Secret-bucket utilities (rotation, audit). | `dot secrets` subcommands |
27
- | `scripts/theme/` | Wallpaper-to-palette extraction logic. | `dot theme rebuild` |
28
- | `scripts/tools/` | Tool-helpers shipped via `dot tools` (e.g. `cmatrix.sh`, `emoji-picker.sh`, `figlet-banner.sh`, `log-rotate.sh`). Runtime-invoked. | `dot tools`, `dot env` |
29
- | `scripts/tuning/` | Opt-in OS tuning scripts (`macos.sh`, `linux.sh`). | `dot tune`, manual invocation |
30
- | `scripts/ops/` | Repo-wide ops: `rollback.sh`, etc. | `dot rollback`, maintenance |
31
- | `scripts/fonts/` | Nerd Font install helpers. | `dot fonts` |
32
- | `scripts/git-hooks/` | Git hooks not managed by chezmoi (kept here for portable install). | `install/provision/*` |
33
- | `scripts/qa/` | Quality-assurance helpers (PowerShell contract tests, version-consistency checks, scorecard snapshot, etc). | `.github/workflows/pr-signature.yml`, `powershell-contract.yml`, doc-drift |
34
- | `scripts/demo/` | Demonstration helpers (recordings, screenshots). | Manual |
35
- | `scripts/version-sync.sh` | Bulk version-string propagator (`scripts/qa/check-version-consistency.sh` is the verifier). | Release flow |
36
- | `scripts/uninstall.sh` | Reverse-of-`install.sh` — user-invoked. | Manual |
37
-
38
- ### `tools/` (repo-only ops, not distributable)
39
-
40
- | Path | Purpose | Touched by |
41
- |---|---|---|
42
- | `tools/ci/` | CI-only helpers: `dot-cli-startup-bench.sh`, `install-chezmoi-verified.sh`, `windows-smoke-test.ps1`, `run-coverage.sh`, etc. | `.github/workflows/*` |
43
- | `tools/release/` | Release-time tasks. | Release workflow |
44
- | `tools/maintenance/` | Recurring upkeep: `check-updates.sh`, etc. | Cron, manual |
45
- | `tools/docs/` | Documentation-generation helpers (manual builds, screenshot CI, `generate-command-index.sh`). | `manual-publish.yml`, `dot manual`, doc-drift |
46
-
47
- ## `scripts/dot/` breakdown
48
-
49
- The `dot` CLI is implemented as `bin/dot`
50
- (dispatcher) + `scripts/dot/commands/<cmd>.sh` (per-command
51
- handlers) + `lib/dot/*.sh` (shared helpers — moved out of
52
- `scripts/dot/lib/` in the Phase 1 reorg per the
53
- [reorganisation RFC](../docs/operations/RFC_v0_2_503_reorganization.md)).
54
-
55
- | Path | Purpose |
56
- |---|---|
57
- | `scripts/dot/commands/` | One file per `dot <cmd>` subcommand. Each defines a `cmd_<name>()` function the dispatcher calls. Sources the library via `$SCRIPT_DIR/../../../lib/dot/<X>.sh`. |
58
- | `scripts/dot/powershell/` | Native PowerShell module — see top-level table. |
59
- | **`lib/dot/utils.sh`** | Common helpers (resolve_source_dir, validate_name, die, run_script, etc.). |
60
- | **`lib/dot/ui.sh`** | Single source of truth for CLI output (ui_ok/warn/err/info, ui_header, ui_table_*, ui_spinner_*, ui_confirm, ...). |
61
- | **`lib/dot/platform.sh`** | OS / shell / WSL detection, path translation. |
62
- | **`lib/dot/log.sh`** | Structured logging (JSONL audit log when `DOTFILES_AUDIT_LOG=1`). |
63
- | **`lib/dot/bento.sh`** | The "bento box" layout primitive used by `dot health` and friends. |
64
-
65
- ## Adding a new subcommand
66
-
67
- 1. Create `scripts/dot/commands/<name>.sh`:
68
-
69
- ```bash
70
- #!/usr/bin/env bash
71
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
72
- set -euo pipefail
73
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
74
- # shellcheck source=../lib/utils.sh
75
- source "$SCRIPT_DIR/../lib/utils.sh"
76
-
77
- dot_ui_command_banner "<Title>" "${1:-}"
78
-
79
- cmd_<name>() {
80
- # ...
81
- }
82
-
83
- cmd_<name>_help() {
84
- cat <<-EOF
85
- Usage: dot <name> [args]
86
- # ...
87
- EOF
88
- }
89
- ```
90
-
91
- 2. Add a dispatch arm in `bin/dot`:
92
-
93
- ```bash
94
- <name>) load_commands "<name>"; cmd_<name> "$@" ;;
95
- ```
96
-
97
- 3. Document it in `docs/manual/03-reference/01-dot-cli.md` and add
98
- to `docs/manual/command-index.md`.
99
-
100
- 4. Add a help-table entry in `bin/dot`'s
101
- help renderer.
102
-
103
- 5. Add a unit test under `tests/unit/<domain>/test_<name>.sh`
104
- (run with `./tests/framework/test_runner.sh`).
105
-
106
- ## Conventions
107
-
108
- - **Shell style**: 2-space indent, `set -euo pipefail`, shellcheck-clean
109
- with the project's flags (`--severity=error -e SC1091 -e SC2030 -e SC2031`).
110
- - **Formatting**: `shfmt -i 2 -ci`.
111
- - **Output**: NEVER `printf` raw ANSI. Source `scripts/dot/lib/ui.sh`
112
- and use `ui_ok`, `ui_table_*`, etc.
113
- - **Exit codes**: 1 = bad usage, 2 = no provider / dependency missing,
114
- 3 = empty result / not found, ≥4 = provider-specific. Document
115
- per-command in the help text.
116
- - **Validation**: Always `validate_name "$arg" "tool name"` before
117
- passing user input to `mise`, `gh`, `ssh`, etc.
118
-
119
- ## See also
120
-
121
- - `../docs/STRUCTURE.md` — full repository map.
122
- - `docs/manual/03-reference/01-dot-cli.md` — every `dot <cmd>` documented.
123
- - `scripts/dot/lib/ui.sh` — the UI primitive library (always source this for output).