@sebastienrousseau/dotfiles 0.2.501 → 0.2.502

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 (65) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +38 -8
  3. package/docs/COPYRIGHT +1 -1
  4. package/docs/index.md +2 -2
  5. package/docs/manual/00-introduction.md +1 -1
  6. package/docs/manual/03-reference/01-dot-cli.md +63 -45
  7. package/docs/manual/03-reference/02-config-files.md +2 -2
  8. package/docs/manual/03-reference/05-feature-flags.md +62 -3
  9. package/docs/manual/_toc.yml +1 -1
  10. package/docs/manual/command-index.md +12 -8
  11. package/docs/manual/index.md +66 -0
  12. package/docs/operations/COVERAGE.md +36 -2
  13. package/docs/operations/HARD_AUDIT_2026.md +631 -0
  14. package/docs/operations/REGISTRY.md +89 -0
  15. package/docs/operations/ROADMAP_2026.md +665 -0
  16. package/docs/operations/TRACEABILITY.md +3 -0
  17. package/docs/operations/VERSION_SYNC.md +4 -4
  18. package/docs/reference/POWERSHELL_PARITY.md +80 -0
  19. package/docs/registry.json +6 -0
  20. package/docs/security/CI_PINNING.md +113 -0
  21. package/docs/security/COMMIT_SIGNING.md +138 -0
  22. package/docs/security/DISCLOSURE.md +130 -0
  23. package/docs/security/KEY_ROTATION.md +81 -1
  24. package/docs/security/SCORECARD.md +74 -14
  25. package/docs/security/security-pubkey.asc +15 -0
  26. package/dot_config/fish/conf.d/direnv.fish +4 -0
  27. package/dot_config/fish/conf.d/mise-activate.fish +5 -0
  28. package/dot_config/git/hooks/executable_commit-msg +1 -1
  29. package/dot_config/shell/00-core-paths.sh.tmpl +8 -1
  30. package/dot_config/shell/README.md +1 -1
  31. package/dot_config/zsh/dot_zshrc.tmpl +57 -4
  32. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +1 -1
  33. package/dot_local/bin/executable_dot +49 -9
  34. package/dot_local/bin/executable_dot-bootstrap +0 -1
  35. package/dot_local/bin/executable_dot-theme-sync +8 -8
  36. package/dot_local/bin/executable_tour +2 -2
  37. package/dot_local/share/man/man1/dot.1 +1 -1
  38. package/dot_local/share/zsh/completions/_dot +4 -0
  39. package/install.sh +44 -37
  40. package/package.json +1 -1
  41. package/scripts/ci/dot-cli-startup-bench.sh +126 -0
  42. package/scripts/ci/install-chezmoi-verified.sh +4 -1
  43. package/scripts/ci/lint-reusable-pins.sh +78 -0
  44. package/scripts/ci/run-coverage.sh +89 -0
  45. package/scripts/ci/windows-smoke-test.ps1 +136 -0
  46. package/scripts/diagnostics/doctor.sh +39 -9
  47. package/scripts/dot/commands/agent.sh +19 -22
  48. package/scripts/dot/commands/agents.sh +325 -0
  49. package/scripts/dot/commands/aliases.sh +10 -8
  50. package/scripts/dot/commands/core.sh +10 -4
  51. package/scripts/dot/commands/fleet.sh +278 -3
  52. package/scripts/dot/commands/init.sh +184 -0
  53. package/scripts/dot/commands/meta.sh +7 -4
  54. package/scripts/dot/commands/registry.sh +263 -0
  55. package/scripts/dot/commands/tools.sh +49 -1
  56. package/scripts/dot/lib/bento.sh +1 -1
  57. package/scripts/dot/lib/platform.sh +21 -8
  58. package/scripts/dot/lib/ui.sh +134 -2
  59. package/scripts/dot/lib/utils.sh +1 -1
  60. package/scripts/git-hooks/pre-commit-audit.sh +1 -1
  61. package/scripts/lib/secrets_provider.sh +32 -6
  62. package/scripts/ops/rollback.sh +14 -0
  63. package/scripts/security/check-disclosure-key-expiry.sh +110 -0
  64. package/scripts/security/lock-configs.sh +11 -2
  65. package/scripts/version-sync.sh +3 -0
@@ -0,0 +1,89 @@
1
+ ---
2
+ render_with_liquid: false
3
+ title: "Dot Module Registry"
4
+ description: "How to publish and consume reusable dotfile modules."
5
+ ---
6
+
7
+ # Dot Module Registry
8
+
9
+ The `dot registry` command discovers reusable dotfile modules from a JSON index published over HTTPS. The default registry is hosted by this repo at:
10
+
11
+ ```
12
+ https://sebastienrousseau.github.io/dotfiles/registry.json
13
+ ```
14
+
15
+ This page documents the JSON contract and the contribution flow. It is the §3 / Months 12-18 deliverable from [HARD_AUDIT_2026.md](./HARD_AUDIT_2026.md) — the registry is the network-effect feature that turns the framework into a category, not just one person's setup.
16
+
17
+ ## Quick start (consumer side)
18
+
19
+ ```sh
20
+ dot registry list # list every published module
21
+ dot registry search rust # filter by keyword
22
+ dot registry info rust-dev-setup # full metadata for one module
23
+ dot registry install rust-dev-setup # apply to this workstation (scaffold)
24
+ dot registry url # show active registry URL
25
+ dot registry set-url <url> # point at a different registry
26
+ ```
27
+
28
+ The registry index is cached locally at `${XDG_CACHE_HOME:-~/.cache}/dotfiles/registry/index.json` with a 6 hour TTL. Override the URL one-off via `DOTFILES_REGISTRY_URL=<url> dot registry list`.
29
+
30
+ ## JSON contract
31
+
32
+ A registry index is a single JSON document:
33
+
34
+ ```json
35
+ {
36
+ "version": 1,
37
+ "updated": "2026-05-15T16:30:00Z",
38
+ "registry": "sebastienrousseau/dotfiles",
39
+ "modules": [
40
+ {
41
+ "name": "rust-dev-setup",
42
+ "description": "Rust toolchain + cargo plugins + Helix/Neovim editor config",
43
+ "repo": "https://github.com/example/rust-dev-setup",
44
+ "version": "1.2.0",
45
+ "tags": ["rust", "language", "dev"],
46
+ "maintainer": "alice@example.com",
47
+ "sha256": "f9a2c1b…",
48
+ "license": "MIT"
49
+ }
50
+ ]
51
+ }
52
+ ```
53
+
54
+ Required keys: `name` (kebab-case, ≤ 32 chars), `description` (≤ 200 chars), `repo` (HTTPS clone URL), `version` (semver).
55
+
56
+ Recommended keys: `tags` (lower-case array), `maintainer`, `sha256` (pinned at publish time so installers can verify), `license` (SPDX identifier).
57
+
58
+ ## Contributing a module
59
+
60
+ 1. Build your module as a chezmoi-source-compatible directory at `https://github.com/<you>/<module>.git`. The contents are overlaid onto the consumer's chezmoi source dir during install.
61
+ 2. Open a PR against `sebastienrousseau/dotfiles` adding one entry to `docs/registry.json` (alphabetical by `name`).
62
+ 3. The PR runs CI checks for:
63
+ - Schema validity (`jq` against the JSON contract).
64
+ - `repo` URL resolves and is a public git repo.
65
+ - `sha256` matches the latest tag at `repo`.
66
+ 4. Once merged, the GitHub Pages workflow re-deploys the registry; `dot registry list` picks it up within 6 hours (or immediately if the consumer purges the cache).
67
+
68
+ ## Install pipeline (scaffold today, full in Phase 2)
69
+
70
+ `dot registry install <name>` currently prints what *would* happen. The full pipeline lands as follows:
71
+
72
+ 1. Resolve the module entry from the registry index.
73
+ 2. Clone the module to `$XDG_DATA_HOME/dotfiles/modules/<name>/<version>`.
74
+ 3. Verify the clone's HEAD matches `sha256` from the registry.
75
+ 4. Source the module's `module.toml` (if present) for declared profiles + feature flags.
76
+ 5. Merge the module's chezmoi source into the consumer's chezmoi source dir under a namespaced subtree (`/registry/<name>/...`).
77
+ 6. Run `chezmoi apply --include /registry/<name>/**` so only the module's files are written.
78
+
79
+ The sandboxed apply (point 6) requires changes to `dot sync` to accept an include filter — that is its own roadmap issue and tracked separately.
80
+
81
+ ## Security model
82
+
83
+ - Modules execute with the consumer's user privileges via chezmoi `run_onchange_*` scripts. The trust contract is identical to consuming any third-party dotfiles repo.
84
+ - Pinning `sha256` lets a consumer verify the registry entry hasn't been tampered with between publish and install.
85
+ - The registry index itself is fetched over HTTPS; the GitHub Pages cert chain provides transport integrity.
86
+
87
+ ## Why this lives in this repo (for now)
88
+
89
+ A vendor-neutral registry would be ideal but adds operations cost. Hosting `registry.json` under this repo's `docs/` directory and serving it via GitHub Pages keeps the maintenance burden near zero while the registry is small. If/when the registry outgrows GitHub Pages, the JSON contract is stable and the index can move to a dedicated subdomain.