@sebastienrousseau/dotfiles 0.2.520 → 0.2.522
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +43 -37
- package/install.sh +76 -10
- package/package.json +7 -7
- package/tools/README.md +49 -0
- package/tools/ci/install-chezmoi-verified.sh +68 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
- package/docs/AI.md +0 -179
- package/docs/ARCHITECTURE.md +0 -117
- package/docs/CNAME +0 -1
- package/docs/CONFIG_STRATEGY.md +0 -124
- package/docs/COPYRIGHT +0 -7
- package/docs/ECOSYSTEM.md +0 -220
- package/docs/GOLD-STANDARD-AUDIT.md +0 -352
- package/docs/GOVERNANCE.md +0 -98
- package/docs/MAINTAINERS.md +0 -41
- package/docs/MINIMUM-TOOLCHAIN.md +0 -100
- package/docs/NAMING_CONVENTIONS.md +0 -102
- package/docs/OPENCODE.md +0 -127
- package/docs/README.md +0 -84
- package/docs/STRUCTURE.md +0 -102
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
- package/docs/adr/ADR-002-shell-performance.md +0 -130
- package/docs/adr/ADR-003-security-first.md +0 -158
- package/docs/adr/ADR-004-cli-architecture.md +0 -171
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
- package/docs/adr/ADR-006-shell-selection.md +0 -124
- package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
- package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
- package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
- package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
- package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
- package/docs/adr/README.md +0 -40
- package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
- package/docs/architecture/ARCHITECTURE.md +0 -20
- package/docs/architecture/INTEROP.md +0 -44
- package/docs/architecture/REPO_LAYOUT.md +0 -241
- package/docs/architecture/WALKTHROUGH.md +0 -86
- package/docs/architecture/fleet-deployment.md +0 -77
- package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
- package/docs/archive/LEGACY_ROADMAP.md +0 -6
- package/docs/archive/MILESTONE_v0.2.493.md +0 -47
- package/docs/archive/PLAN.md +0 -199
- package/docs/archive/REPO_AUDIT.md +0 -31
- package/docs/articles/.pages +0 -6
- package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
- package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
- package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
- package/docs/articles/index.md +0 -36
- package/docs/guides/INSTALL.md +0 -144
- package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
- package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
- package/docs/guides/THEMING.md +0 -230
- package/docs/guides/TROUBLESHOOTING.md +0 -176
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
- package/docs/index.md +0 -132
- package/docs/interop/A2A.md +0 -39
- package/docs/interop/POWERSHELL.md +0 -102
- package/docs/manual/00-introduction.md +0 -89
- package/docs/manual/01-concepts/01-architecture.md +0 -138
- package/docs/manual/01-concepts/02-trust-model.md +0 -183
- package/docs/manual/01-concepts/03-theme-engine.md +0 -186
- package/docs/manual/01-concepts/04-fleet.md +0 -148
- package/docs/manual/01-concepts/05-self-healing.md +0 -204
- package/docs/manual/02-tutorials/01-first-install.md +0 -197
- package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
- package/docs/manual/02-tutorials/03-create-profile.md +0 -244
- package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
- package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
- package/docs/manual/03-reference/01-dot-cli.md +0 -475
- package/docs/manual/03-reference/02-config-files.md +0 -265
- package/docs/manual/03-reference/03-environment.md +0 -124
- package/docs/manual/03-reference/04-templates.md +0 -190
- package/docs/manual/03-reference/05-feature-flags.md +0 -187
- package/docs/manual/04-cookbook/01-recipes.md +0 -285
- package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
- package/docs/manual/04-cookbook/03-faq.md +0 -175
- package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
- package/docs/manual/05-appendices/B-security-checklist.md +0 -85
- package/docs/manual/05-appendices/C-glossary.md +0 -40
- package/docs/manual/05-appendices/D-bibliography.md +0 -58
- package/docs/manual/05-appendices/E-license.md +0 -38
- package/docs/manual/_toc.yml +0 -58
- package/docs/manual/command-index.md +0 -175
- package/docs/manual/concept-index.md +0 -170
- package/docs/manual/index.md +0 -66
- package/docs/migration/README.md +0 -81
- package/docs/migration/from-bare-git-repo.md +0 -156
- package/docs/migration/from-gnu-stow.md +0 -165
- package/docs/migration/from-plain-chezmoi.md +0 -148
- package/docs/migration/from-yadm.md +0 -187
- package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
- package/docs/operations/ATTESTATION.md +0 -44
- package/docs/operations/CI_CADENCE.md +0 -107
- package/docs/operations/CI_COMPOSITES.md +0 -156
- package/docs/operations/COMPLETIONS.md +0 -123
- package/docs/operations/COVERAGE.md +0 -204
- package/docs/operations/DRIFT.md +0 -107
- package/docs/operations/HARD_AUDIT_2026.md +0 -631
- package/docs/operations/MAINTENANCE.md +0 -63
- package/docs/operations/MANIFEST.md +0 -127
- package/docs/operations/MIGRATION.md +0 -109
- package/docs/operations/OPERATIONS.md +0 -188
- package/docs/operations/PERFORMANCE.md +0 -133
- package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
- package/docs/operations/REGISTRY.md +0 -90
- package/docs/operations/RELEASE_PIPELINE.md +0 -128
- package/docs/operations/RELIABILITY.md +0 -122
- package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
- package/docs/operations/ROADMAP.md +0 -10
- package/docs/operations/ROADMAP_2026.md +0 -7
- package/docs/operations/ROADMAP_V0_2_503.md +0 -10
- package/docs/operations/TESTING.md +0 -216
- package/docs/operations/TRACEABILITY.md +0 -44
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
- package/docs/operations/VERSION_SYNC.md +0 -393
- package/docs/packaging.md +0 -222
- package/docs/reference/ALIASES.md +0 -131
- package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
- package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
- package/docs/reference/FEATURE-MATRIX.md +0 -646
- package/docs/reference/FEATURES.md +0 -66
- package/docs/reference/FONTS.md +0 -112
- package/docs/reference/POWERSHELL_PARITY.md +0 -82
- package/docs/reference/PROFILES.md +0 -69
- package/docs/reference/SCREENSHOTS.md +0 -121
- package/docs/reference/SCRIPTS.md +0 -71
- package/docs/reference/SUPPORT_MATRIX.md +0 -80
- package/docs/reference/THEMES.md +0 -117
- package/docs/reference/TOOLS.md +0 -110
- package/docs/reference/UTILS.md +0 -243
- package/docs/registry.json +0 -6
- package/docs/schema/dot-env-v1.json +0 -110
- package/docs/schema/dot-registry-v1.json +0 -33
- package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
- package/docs/security/AUDIT_BYPASS.md +0 -103
- package/docs/security/AUTOMATION_SECRETS.md +0 -26
- package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
- package/docs/security/CI_PINNING.md +0 -129
- package/docs/security/COMMIT_SIGNING.md +0 -138
- package/docs/security/COMPLIANCE.md +0 -458
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
- package/docs/security/DISCLOSURE.md +0 -130
- package/docs/security/ENCRYPTION.md +0 -57
- package/docs/security/FMEA.md +0 -159
- package/docs/security/FUZZING.md +0 -209
- package/docs/security/HISTORY_FILTERING.md +0 -132
- package/docs/security/INCIDENT_RESPONSE.md +0 -579
- package/docs/security/INSTALL_VERIFICATION.md +0 -122
- package/docs/security/KEYS.md +0 -49
- package/docs/security/KEY_ROTATION.md +0 -303
- package/docs/security/MCP_POLICY.md +0 -78
- package/docs/security/POLICY_RELEASES.md +0 -37
- package/docs/security/README.md +0 -28
- package/docs/security/SCORECARD.md +0 -195
- package/docs/security/SECRETS.md +0 -158
- package/docs/security/SECURITY.md +0 -45
- package/docs/security/SECURITY_CHECKLIST.md +0 -55
- package/docs/security/SHELL_EXEMPTIONS.md +0 -145
- package/docs/security/SOUP_REGISTER.md +0 -36
- package/docs/security/THREAT_MODEL.md +0 -130
- package/docs/security/VERIFICATION_VALIDATION.md +0 -228
- package/docs/security/VERIFY_RELEASE.md +0 -201
- package/docs/security/security-pubkey.asc +0 -15
- package/docs/stylesheets/extra.css +0 -444
- package/docs/themes/README.md +0 -10
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
- package/docs/themes/hero-shot.svg +0 -78
- package/scripts/README.md +0 -123
- package/scripts/ci/check-copyright-headers.sh +0 -8
- package/scripts/ci/check-shell-preamble.sh +0 -8
- package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
- package/scripts/demo/record.sh +0 -43
- package/scripts/diagnostics/a2a-conformance.sh +0 -163
- package/scripts/diagnostics/alias-governance.sh +0 -165
- package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
- package/scripts/diagnostics/aliases-manifest.sh +0 -77
- package/scripts/diagnostics/attest-verify.sh +0 -147
- package/scripts/diagnostics/benchmark.sh +0 -408
- package/scripts/diagnostics/conflicts.sh +0 -73
- package/scripts/diagnostics/doctor-unified.sh +0 -43
- package/scripts/diagnostics/doctor.sh +0 -797
- package/scripts/diagnostics/drift-dashboard.sh +0 -203
- package/scripts/diagnostics/health.sh +0 -656
- package/scripts/diagnostics/history-analysis.sh +0 -86
- package/scripts/diagnostics/mcp-doctor.sh +0 -582
- package/scripts/diagnostics/perf.sh +0 -453
- package/scripts/diagnostics/scorecard.sh +0 -120
- package/scripts/diagnostics/secret-governance.sh +0 -65
- package/scripts/diagnostics/security-score.sh +0 -467
- package/scripts/diagnostics/smoke-test.sh +0 -88
- package/scripts/diagnostics/snapshot.sh +0 -90
- package/scripts/diagnostics/verify.sh +0 -108
- package/scripts/diagnostics/verify_state.sh +0 -73
- package/scripts/diagnostics/version-locks.sh +0 -94
- package/scripts/diagnostics/workstation-attestation.sh +0 -212
- package/scripts/dot/commands/agent.sh +0 -535
- package/scripts/dot/commands/agents.sh +0 -352
- package/scripts/dot/commands/ai.sh +0 -600
- package/scripts/dot/commands/aliases.sh +0 -277
- package/scripts/dot/commands/appearance.sh +0 -110
- package/scripts/dot/commands/completion.sh +0 -171
- package/scripts/dot/commands/core.sh +0 -217
- package/scripts/dot/commands/diagnostics.sh +0 -265
- package/scripts/dot/commands/env-emit.sh +0 -203
- package/scripts/dot/commands/fleet.sh +0 -711
- package/scripts/dot/commands/init.sh +0 -185
- package/scripts/dot/commands/lint.sh +0 -208
- package/scripts/dot/commands/manual.sh +0 -169
- package/scripts/dot/commands/meta.sh +0 -438
- package/scripts/dot/commands/patterns.sh +0 -55
- package/scripts/dot/commands/registry.sh +0 -455
- package/scripts/dot/commands/restore.sh +0 -232
- package/scripts/dot/commands/secrets.sh +0 -296
- package/scripts/dot/commands/security.sh +0 -102
- package/scripts/dot/commands/tools.sh +0 -570
- package/scripts/dot/data/alias-deprecations.tsv +0 -2
- package/scripts/dot/powershell/Dot.psm1 +0 -319
- package/scripts/fonts/install-nerd-fonts.sh +0 -75
- package/scripts/fonts/patch-fonts.sh +0 -36
- package/scripts/git-hooks/install.sh +0 -12
- package/scripts/git-hooks/pre-commit +0 -12
- package/scripts/git-hooks/pre-commit-audit.sh +0 -146
- package/scripts/git-hooks/pre-push +0 -105
- package/scripts/git-hooks/prepare-commit-msg +0 -29
- package/scripts/lib/secrets_provider.sh +0 -200
- package/scripts/nvim/headless-upgrade.lua +0 -81
- package/scripts/ops/ai-setup.sh +0 -71
- package/scripts/ops/bundle.sh +0 -104
- package/scripts/ops/chaos.sh +0 -50
- package/scripts/ops/chezmoi-apply.sh +0 -333
- package/scripts/ops/chezmoi-diff.sh +0 -16
- package/scripts/ops/chezmoi-remove.sh +0 -46
- package/scripts/ops/chezmoi-update.sh +0 -67
- package/scripts/ops/heal-chezmoi.sh +0 -87
- package/scripts/ops/heal-system.sh +0 -129
- package/scripts/ops/heal-tools.sh +0 -297
- package/scripts/ops/heal.sh +0 -223
- package/scripts/ops/post-apply-repair.sh +0 -107
- package/scripts/ops/prewarm.sh +0 -128
- package/scripts/ops/release.sh +0 -262
- package/scripts/ops/rollback.sh +0 -613
- package/scripts/ops/setup.sh +0 -138
- package/scripts/ops/teleport.sh +0 -34
- package/scripts/qa/check-feature-matrix.sh +0 -296
- package/scripts/qa/check-version-consistency.sh +0 -12
- package/scripts/qa/coverage-baseline.sh +0 -61
- package/scripts/qa/docs-coverage.sh +0 -118
- package/scripts/qa/examples-coverage.sh +0 -94
- package/scripts/qa/powershell-contract.ps1 +0 -95
- package/scripts/qa/reliability-audit.sh +0 -139
- package/scripts/qa/scorecard-snapshot.sh +0 -128
- package/scripts/qa/traceability-coverage.sh +0 -124
- package/scripts/qa/validate-examples.sh +0 -90
- package/scripts/qa/wsl-contract.sh +0 -12
- package/scripts/secrets/age-init.sh +0 -82
- package/scripts/secrets/create-secrets-file.sh +0 -46
- package/scripts/secrets/encrypt-ssh-key.sh +0 -44
- package/scripts/security/backup.sh +0 -58
- package/scripts/security/check-disclosure-key-expiry.sh +0 -111
- package/scripts/security/dns-doh.sh +0 -52
- package/scripts/security/encryption-check.sh +0 -55
- package/scripts/security/enforce-policies.sh +0 -552
- package/scripts/security/firewall.sh +0 -91
- package/scripts/security/lock-configs.sh +0 -67
- package/scripts/security/lock-screen.sh +0 -56
- package/scripts/security/manage-secrets.sh +0 -429
- package/scripts/security/ssh-cert.sh +0 -204
- package/scripts/security/telemetry-kill.sh +0 -51
- package/scripts/security/usb-safety.sh +0 -52
- package/scripts/theme/apply-gnome-theme.sh +0 -333
- package/scripts/theme/extract-heic-frames.sh +0 -115
- package/scripts/theme/extract-theme.py +0 -1020
- package/scripts/theme/install-boot-logo.sh +0 -63
- package/scripts/theme/install-catppuccin-themes.sh +0 -371
- package/scripts/theme/install-cursors.sh +0 -26
- package/scripts/theme/install-file-icons.sh +0 -27
- package/scripts/theme/install-grub-theme.sh +0 -62
- package/scripts/theme/install-lock-icon.sh +0 -31
- package/scripts/theme/merge-wallpaper.sh +0 -146
- package/scripts/theme/rebuild-themes.sh +0 -603
- package/scripts/theme/switch.sh +0 -476
- package/scripts/theme/wallpaper-rotate.sh +0 -137
- package/scripts/theme/wallpaper-sync.sh +0 -690
- package/scripts/tools/cmatrix.sh +0 -22
- package/scripts/tools/detect-collisions.py +0 -103
- package/scripts/tools/emoji-picker.sh +0 -49
- package/scripts/tools/figlet-banner.sh +0 -19
- package/scripts/tools/log-rotate.sh +0 -31
- package/scripts/tools/lolcat-wrap.sh +0 -20
- package/scripts/tools/pipes.sh +0 -49
- package/scripts/tuning/linux.sh +0 -186
- package/scripts/tuning/macos.sh +0 -56
- package/scripts/uninstall.sh +0 -86
- package/scripts/verify-release-versions +0 -156
- package/scripts/version-sync.sh +0 -714
- package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
- package/templates/chezmoi-data/mac-m1.toml.example +0 -16
- package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
- package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
- package/templates/projects/go/.github/workflows/ci.yml +0 -31
- package/templates/projects/go/README.md +0 -7
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
- package/templates/projects/go/go.mod +0 -3
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/node/.github/workflows/ci.yml +0 -30
- package/templates/projects/node/README.md +0 -7
- package/templates/projects/node/package-lock.json +0 -12
- package/templates/projects/node/package.json +0 -10
- package/templates/projects/node/src/index.js +0 -3
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
- package/templates/projects/python/.github/workflows/ci.yml +0 -34
- package/templates/projects/python/README.md +0 -7
- package/templates/projects/python/pyproject.toml +0 -25
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
- package/templates/projects/python/tests/test_basic.py +0 -3
package/docs/MAINTAINERS.md
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Maintainers
|
|
2
|
-
|
|
3
|
-
This project is maintained by a single primary maintainer with an
|
|
4
|
-
explicit, documented governance model (see [`GOVERNANCE.md`](GOVERNANCE.md)).
|
|
5
|
-
|
|
6
|
-
## Primary maintainer
|
|
7
|
-
|
|
8
|
-
- **Sebastien Rousseau** — <sebastian.rousseau@gmail.com>
|
|
9
|
-
- GitHub: [@sebastienrousseau](https://github.com/sebastienrousseau)
|
|
10
|
-
- Role: project owner, release manager, security disclosure contact
|
|
11
|
-
- Commit signing: SSH ED25519 (`SHA256:kIOPAavp1TCEauTr1tTIN3cv+tSs6F9m/4lZjuM9tqk`)
|
|
12
|
-
- GPG disclosure key fingerprint: `55AFAD364FD9DB3819E61F0C8D688FAFA9144693` (ed25519 + cv25519, expires 2029-05-15, published via WKD at `security@sebastienrousseau.com`)
|
|
13
|
-
|
|
14
|
-
## Active contributors
|
|
15
|
-
|
|
16
|
-
This is a solo-maintained project. Contributions are welcomed via
|
|
17
|
-
pull request (see `CONTRIBUTING.md`); the maintainer reviews and
|
|
18
|
-
merges. When the project gains additional regular committers their
|
|
19
|
-
names will land here with role and contact.
|
|
20
|
-
|
|
21
|
-
## Security contact
|
|
22
|
-
|
|
23
|
-
For coordinated vulnerability disclosure, follow `SECURITY.md`.
|
|
24
|
-
TL;DR: encrypt your report to the WKD-published GPG key above and
|
|
25
|
-
email `security@sebastienrousseau.com`. Acknowledgement SLA: 72 hours.
|
|
26
|
-
|
|
27
|
-
## Backup / continuity
|
|
28
|
-
|
|
29
|
-
In the event the primary maintainer becomes unable to maintain the
|
|
30
|
-
project, the repository is published under the MIT license and may
|
|
31
|
-
be forked. The `chezmoi`-based architecture means existing user
|
|
32
|
-
installs continue to work indefinitely without upstream activity.
|
|
33
|
-
|
|
34
|
-
## Releases
|
|
35
|
-
|
|
36
|
-
| Release author | Cadence | Signing |
|
|
37
|
-
|---|---|---|
|
|
38
|
-
| Primary maintainer | ~weekly | Signed annotated git tag + Cosign-signed SBOM + SLSA L3 provenance |
|
|
39
|
-
|
|
40
|
-
See `docs/operations/HARD_AUDIT_2026.md` Part 7 for the
|
|
41
|
-
disclosure-key generation + WKD publication record.
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
<!-- SPDX-License-Identifier: Apache-2.0 OR MIT -->
|
|
6
|
-
<!-- Copyright (c) 2015-2026 Sebastien Rousseau -->
|
|
7
|
-
|
|
8
|
-
# Minimum toolchain policy
|
|
9
|
-
|
|
10
|
-
This project has no compiler and therefore no MSRV. The equivalent
|
|
11
|
-
contract is the set of **interpreter and tool versions the framework
|
|
12
|
-
runs on**, and — more importantly — the policy for when those floors
|
|
13
|
-
may move.
|
|
14
|
-
|
|
15
|
-
The policy matters more than the numbers. A floor stated without a
|
|
16
|
-
policy is a number that drifts silently; a floor stated without CI
|
|
17
|
-
behind it is a claim, not a guarantee. Everything marked "enforced"
|
|
18
|
-
below is a job in `.github/workflows/`; everything else is labelled
|
|
19
|
-
as expectation.
|
|
20
|
-
|
|
21
|
-
## The floors
|
|
22
|
-
|
|
23
|
-
| Component | Floor | Why this floor | Enforced by |
|
|
24
|
-
|---|---|---|---|
|
|
25
|
-
| **bash** (running `dot`, `install.sh`, every script) | **3.2** | macOS still ships bash 3.2 as `/bin/bash` and always will (GPLv3). The CLI must work there or `dot` breaks on a stock Mac. No associative arrays, no `mapfile`/`readarray`, no `${var,,}`. | `cross-platform-test.yml` and `reliability-gate.yml` on `macos-latest` + `macos-14`, whose stock `/bin/bash` is 3.2.57 |
|
|
26
|
-
| **bash** (as an *interactive* shell with the full config) | **5.0** | The shell configuration (completions, prompt hooks) uses bash 5 features. This is a different, higher floor than the CLI's. | `reusable-test-suite.yml` on ubuntu-latest |
|
|
27
|
-
| **zsh** | **5.8** | The default interactive shell; `rc.d` ordering and the completion system assume 5.8. | `cross-platform-test.yml` (macOS stock zsh 5.9, Ubuntu 5.9) |
|
|
28
|
-
| **fish** | **4.0** | `dot`, the alias bridge, and the generated completions target the fish 4 syntax. | `ci.yml` job `Lint / Fish` |
|
|
29
|
-
| **nushell** | **0.98** | Tier-3 reference shell; see [ADR-011](adr/ADR-011-nushell-tier3-keep.md). | `ci.yml` job `Lint / Nushell` |
|
|
30
|
-
| **PowerShell** | **7.5** | The Windows parity surface. Note `windows-latest` currently ships 7.4 LTS, so CI proves 7.4 and the 7.5 claim covers features gated behind it. | `reliability-gate.yml` job `PowerShell Contract` on `windows-latest` |
|
|
31
|
-
| **git** | **2.34** | The oldest release with SSH commit/tag signing (`gpg.format = ssh`), which the signing and verification flow requires. | Not version-gated in CI; the signing workflows exercise it on runner git (≥ 2.40) |
|
|
32
|
-
| **chezmoi** | **2.47.1** | The pinned, checksum-verified version `install.sh` and CI install. Newer works; older is untested. | `install.sh` and `CHEZMOI_VERSION` in `ci.yml`, `ci-enforced.yml`, `perf-baseline.yml` |
|
|
33
|
-
| **Go** (fuzz harnesses and the two TUIs only — not needed to *use* the framework) | **1.23** | `fuzz/go.mod`. | `fuzz.yml`, `cockpit-test.yml`, `dot-ui-test.yml` |
|
|
34
|
-
| **Python** (pre-commit and the docs build only) | **3.12** | `pre-commit.yml`, `requirements-docs.txt`. | `pre-commit.yml`, `pages.yml` |
|
|
35
|
-
|
|
36
|
-
`make install` additionally needs GNU make or BSD make and a POSIX
|
|
37
|
-
`install(1)`; nothing else.
|
|
38
|
-
|
|
39
|
-
## Distro mapping — what is actually verified
|
|
40
|
-
|
|
41
|
-
The rule the repository standard sets is: **never claim distro-LTS
|
|
42
|
-
compatibility without a table mapping current distro toolchains to the
|
|
43
|
-
floor.** Here is that table, with an honest column for whether CI
|
|
44
|
-
proves it.
|
|
45
|
-
|
|
46
|
-
| Platform | Ships bash | Ships zsh | Ships git | Meets the CLI floor? | In CI? |
|
|
47
|
-
|---|---|---|---|---|---|
|
|
48
|
-
| Ubuntu 24.04 LTS (`ubuntu-latest`) | 5.2 | 5.9 | 2.43 | Yes | **Yes** — the primary Linux runner across ~20 workflows |
|
|
49
|
-
| Ubuntu 22.04 LTS | 5.1 | 5.8 | 2.34 | Yes | No — expected to work; not exercised since runners moved to 24.04 |
|
|
50
|
-
| Debian 12 (bookworm) | 5.2 | 5.9 | 2.39 | Yes | No — same package versions as Ubuntu 22.04/24.04; expected, unverified |
|
|
51
|
-
| Debian 13 (trixie) | 5.2 | 5.9 | 2.47 | Yes | No |
|
|
52
|
-
| RHEL 9 / Rocky 9 / Alma 9 | 5.1 | 5.8 | 2.43 | Yes | No — no RHEL-family runner or container in CI |
|
|
53
|
-
| RHEL 10 / Rocky 10 | 5.2 | 5.9 | 2.47 | Yes | No |
|
|
54
|
-
| Fedora 41+ | 5.2 | 5.9 | 2.47 | Yes | No |
|
|
55
|
-
| Arch Linux (rolling) | current | current | current | Yes | No — AUR package published, not CI-tested |
|
|
56
|
-
| Alpine (musl, busybox ash) | — | — | 2.45 | **No** — bash is not installed by default and `install.sh` requires it | No |
|
|
57
|
-
| macOS 14+, stock `/bin/bash` | **3.2.57** | 5.9 | 2.39+ (Xcode) | Yes — this is why the CLI floor is 3.2 | **Yes** — `macos-latest`, `macos-14` |
|
|
58
|
-
| macOS + Homebrew bash | 5.3 | 5.9 | 2.5x | Yes | Yes (same runners, Homebrew bash present) |
|
|
59
|
-
| Windows 11 + PowerShell 7.4 | n/a | n/a | 2.4x | Core CLI surface only | **Yes** — `windows-latest` PowerShell contract |
|
|
60
|
-
| WSL2 (Ubuntu) | 5.2 | 5.9 | 2.43 | Yes | Partially — `reliability-gate.yml` runs a WSL *contract* check on Linux, not a real WSL VM |
|
|
61
|
-
|
|
62
|
-
Read the last column as the honest one. "Expected, unverified" means
|
|
63
|
-
the package versions clear the floor by inspection but no job proves
|
|
64
|
-
it; a bug report from such a platform is legitimate and welcome.
|
|
65
|
-
|
|
66
|
-
## When a floor may rise
|
|
67
|
-
|
|
68
|
-
A floor is not a promise never to move — it is a promise about *how*
|
|
69
|
-
it moves.
|
|
70
|
-
|
|
71
|
-
1. **A raise is a breaking change** for the affected surface and gets
|
|
72
|
-
a minor-version bump (a major once this project reaches 1.0), never
|
|
73
|
-
a patch.
|
|
74
|
-
2. **A raise needs a reason recorded in the changelog entry**: the
|
|
75
|
-
specific feature or fix that requires it. "Newer is better" is not
|
|
76
|
-
a reason.
|
|
77
|
-
3. **The bash 3.2 floor for the CLI does not move while macOS ships
|
|
78
|
-
3.2 as `/bin/bash`.** This one is effectively permanent. Code that
|
|
79
|
-
needs bash 4+ goes in a script that is not on the `dot` startup
|
|
80
|
-
path, and says so in a comment.
|
|
81
|
-
4. **A raise must be enforced by CI in the same pull request** that
|
|
82
|
-
raises it. Bumping a documented number without moving the matrix
|
|
83
|
-
produces exactly the aspirational claim this policy exists to
|
|
84
|
-
prevent.
|
|
85
|
-
5. **Deprecation window**: one minor release announcing the intent in
|
|
86
|
-
the changelog before the floor actually rises, so a pinned consumer
|
|
87
|
-
sees it coming.
|
|
88
|
-
|
|
89
|
-
## Where the numbers live
|
|
90
|
-
|
|
91
|
-
| Number | Source of truth |
|
|
92
|
-
|---|---|
|
|
93
|
-
| chezmoi version | `CHEZMOI_VERSION` in `.github/workflows/ci.yml`, mirrored into `install.sh` |
|
|
94
|
-
| Go version | `fuzz/go.mod` |
|
|
95
|
-
| Every other pinned tool | `mise.toml` + `mise.lock` |
|
|
96
|
-
| Python docs deps | `requirements-docs.txt` (hash-pinned) |
|
|
97
|
-
| Platform/shell support tiers | [`reference/SUPPORT_MATRIX.md`](reference/SUPPORT_MATRIX.md) |
|
|
98
|
-
|
|
99
|
-
If this document and one of those files disagree, the file wins and
|
|
100
|
-
this document is the bug.
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
{% raw %}
|
|
5
|
-
|
|
6
|
-
# Naming Conventions & Standardization Guide
|
|
7
|
-
|
|
8
|
-
This document defines the naming conventions for all files in the dotfiles repository.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## File Naming
|
|
13
|
-
|
|
14
|
-
| Context | Convention | Example |
|
|
15
|
-
|---|---|---|
|
|
16
|
-
| Run scripts | `run_{type}_{NN}-{verb}-{noun}.sh.tmpl` | `run_onchange_10-install-packages.sh.tmpl` |
|
|
17
|
-
| Shell fragments | `{NN}-{domain}-{detail}.sh.tmpl` | `90-ux-aliases.sh.tmpl` |
|
|
18
|
-
| Alias files | `{tool}.aliases.sh` | `git.aliases.sh` |
|
|
19
|
-
| Function files | `{name}.sh` (lowercase) | `apihealth.sh` |
|
|
20
|
-
| Test files | `test_{domain}_{feature}.sh` | `test_aliases_git.sh` |
|
|
21
|
-
| Scripts | `{verb}-{noun}.sh` (hyphenated) | `install-nerd-fonts.sh` |
|
|
22
|
-
|
|
23
|
-
## Run Script Numbering Tiers
|
|
24
|
-
|
|
25
|
-
| Range | Category | Examples |
|
|
26
|
-
|---|---|---|
|
|
27
|
-
| 00-09 | Audit & pre-flight | `run_before_00-audit.sh` |
|
|
28
|
-
| 10-19 | Package installation | `run_onchange_10-linux-packages.sh.tmpl` |
|
|
29
|
-
| 20-29 | Config & languages | `run_onchange_20-ghostty-config.sh.tmpl` |
|
|
30
|
-
| 25-29 | Language toolchains | `run_onchange_25-python-tools.sh.tmpl` |
|
|
31
|
-
| 30-39 | Applications | `run_onchange_30-vscode-extensions.sh.tmpl` |
|
|
32
|
-
| 40-49 | System defaults | `run_onchange_40-darwin-default-apps.sh.tmpl` |
|
|
33
|
-
| 50-59 | Assets (fonts, themes) | `run_onchange_50-install-fonts.sh.tmpl` |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Adding New Modules
|
|
38
|
-
|
|
39
|
-
### New app config
|
|
40
|
-
|
|
41
|
-
1. Create `dot_config/<app>/` with chezmoi-compatible filenames
|
|
42
|
-
2. Add entry to `dot_config/.module-manifest.json`
|
|
43
|
-
3. Optionally gate with feature flag in `.chezmoidata.toml` + `.chezmoiignore.tmpl`
|
|
44
|
-
|
|
45
|
-
### New alias category
|
|
46
|
-
|
|
47
|
-
1. Create `.chezmoitemplates/aliases/<category>/<name>.aliases.sh`
|
|
48
|
-
2. The `**/*.aliases.sh` glob auto-discovers it
|
|
49
|
-
3. Add to `$coreCategories` list in `90-ux-aliases.sh.tmpl` for eager loading; otherwise it loads lazily
|
|
50
|
-
|
|
51
|
-
### New function
|
|
52
|
-
|
|
53
|
-
1. Create file in `.chezmoitemplates/functions/<group>/`
|
|
54
|
-
2. Add to `groups.json` with the `<group>/<filename>` path
|
|
55
|
-
3. It auto-registers for lazy loading via `51-logic-functions-extra.sh.tmpl`
|
|
56
|
-
|
|
57
|
-
### New provisioning script
|
|
58
|
-
|
|
59
|
-
1. Create `install/provision/run_onchange_{NN}-{name}.sh.tmpl`
|
|
60
|
-
2. Use the numbering tiers above
|
|
61
|
-
3. Source `install/lib/os_detection.sh` for platform detection
|
|
62
|
-
4. Guard OS-specific code with `{{ if eq .chezmoi.os "darwin" }}`
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Directory Structure Overview
|
|
67
|
-
|
|
68
|
-
```text
|
|
69
|
-
.chezmoitemplates/
|
|
70
|
-
aliases/ # 48 categories, auto-discovered
|
|
71
|
-
functions/ # Grouped by domain (api/, curl/, text/, system/, etc.)
|
|
72
|
-
paths/ # PATH construction templates
|
|
73
|
-
desktop/ # Desktop environment templates (dconf)
|
|
74
|
-
|
|
75
|
-
dot_config/ # Flat — chezmoi constraint, no intermediate grouping
|
|
76
|
-
|
|
77
|
-
install/
|
|
78
|
-
lib/ # Shared helpers (os_detection, logging, installers)
|
|
79
|
-
provision/ # run_onchange_* provisioning scripts
|
|
80
|
-
|
|
81
|
-
scripts/ # Repo-only scripts (not deployed)
|
|
82
|
-
dot/ # dot CLI subcommands
|
|
83
|
-
ops/ # Operations scripts
|
|
84
|
-
diagnostics/ # Health checks
|
|
85
|
-
security/ # Security tools
|
|
86
|
-
...
|
|
87
|
-
|
|
88
|
-
tests/ # Test suite (not deployed)
|
|
89
|
-
framework/ # Test runner, assertions, mocks
|
|
90
|
-
unit/ # Domain-organized unit tests
|
|
91
|
-
integration/ # End-to-end tests
|
|
92
|
-
performance/ # Benchmarks
|
|
93
|
-
|
|
94
|
-
docs/ # Documentation and GitHub Pages source
|
|
95
|
-
architecture/ # System design docs
|
|
96
|
-
guides/ # How-to guides
|
|
97
|
-
reference/ # Reference material
|
|
98
|
-
security/ # Security documentation
|
|
99
|
-
operations/ # Ops and maintenance docs
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
{% endraw %}
|
package/docs/OPENCODE.md
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
Role: Repo-scoped instructions for the OpenCode CLI when operating
|
|
3
|
-
inside this repository. Mirrors CLAUDE.md but targets OpenCode's
|
|
4
|
-
conventions/discovery.
|
|
5
|
-
Audience: OpenCode, this repo only.
|
|
6
|
-
|
|
7
|
-
Distinct from:
|
|
8
|
-
- CLAUDE.md — same intent, but for Claude Code.
|
|
9
|
-
- dot_claude/CLAUDE.md — PERSONAL cross-project Claude Code preferences,
|
|
10
|
-
deployed to ~/.claude/CLAUDE.md by chezmoi.
|
|
11
|
-
|
|
12
|
-
Keep CLAUDE.md and OPENCODE.md in sync on repo-level conventions (layout,
|
|
13
|
-
naming, CI, testing). If they drift, CLAUDE.md is the source of truth.
|
|
14
|
-
-->
|
|
15
|
-
|
|
16
|
-
# OPENCODE.md — AI Assistant Guidelines for Dotfiles Repository
|
|
17
|
-
|
|
18
|
-
## Chezmoi Source Directory Conventions
|
|
19
|
-
|
|
20
|
-
This is a **chezmoi-managed** dotfiles repository. Files here are *source templates*,
|
|
21
|
-
not the deployed config files. Understanding the naming conventions is critical.
|
|
22
|
-
|
|
23
|
-
### File Naming Rules
|
|
24
|
-
|
|
25
|
-
| Prefix/Suffix | Meaning |
|
|
26
|
-
|------------------|------------------------------------------------------|
|
|
27
|
-
| `dot_` | Deployed with a leading `.` (e.g., `dot_zshrc` -> `.zshrc`) |
|
|
28
|
-
| `executable_` | Deployed with `+x` permission |
|
|
29
|
-
| `private_` | Deployed with `0600` permissions |
|
|
30
|
-
| `.tmpl` | **Go template** — processed by chezmoi before deployment |
|
|
31
|
-
| `run_onchange_` | Script that runs when the target file changes |
|
|
32
|
-
| `encrypted_` | Age-encrypted file, decrypted at deploy time |
|
|
33
|
-
|
|
34
|
-
### Critical: Template vs Non-Template Files
|
|
35
|
-
|
|
36
|
-
Many shell config files exist **only** as `.tmpl` variants. When reading files:
|
|
37
|
-
|
|
38
|
-
- `dot_config/shell/00-core-paths.sh` does **NOT** exist
|
|
39
|
-
- `dot_config/shell/00-core-paths.sh.tmpl` **DOES** exist (this is the source)
|
|
40
|
-
|
|
41
|
-
**Rule**: If a `.sh` or `.zsh` file is not found, always try appending `.tmpl`.
|
|
42
|
-
|
|
43
|
-
Files that are templates (use Go template syntax like `{{ .variable }}`):
|
|
44
|
-
|
|
45
|
-
- `dot_config/shell/*.sh.tmpl` — all shell layer files
|
|
46
|
-
- `dot_config/zsh/dot_zshrc.tmpl` — main zsh config
|
|
47
|
-
- `dot_config/zsh/rc.d/*.tmpl` — zsh startup modules
|
|
48
|
-
- `dot_gitconfig.tmpl` — git configuration
|
|
49
|
-
- `private_dot_ssh/config.tmpl` — SSH configuration
|
|
50
|
-
- `dot_npmrc.tmpl` — npm configuration
|
|
51
|
-
- `private_dot_netrc.tmpl` — netrc credentials
|
|
52
|
-
|
|
53
|
-
Files that are **NOT** templates (plain files, no `.tmpl` suffix):
|
|
54
|
-
|
|
55
|
-
- `dot_config/shell/00-container-detect.sh` — plain shell script
|
|
56
|
-
- `dot_config/shell/90-theme-switch.sh` — plain shell script
|
|
57
|
-
- `dot_config/zsh/rc.d/00-alias-shims.zsh` — plain zsh
|
|
58
|
-
- `dot_config/zsh/rc.d/05-ssh-agent.zsh` — plain zsh
|
|
59
|
-
- Most files under `dot_config/nvim/`, `dot_config/starship.toml.tmpl`, etc.
|
|
60
|
-
|
|
61
|
-
### Reading Template Files
|
|
62
|
-
|
|
63
|
-
Template files contain Go template directives like:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
{{ if eq .chezmoi.os "darwin" }}
|
|
67
|
-
# macOS-specific config
|
|
68
|
-
{{ end }}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Data variables come from `.chezmoidata.toml` (profiles, features, theme, tools).
|
|
72
|
-
User-specific values (git identity, age keys) come from `~/.config/chezmoi/chezmoi.toml`.
|
|
73
|
-
|
|
74
|
-
### Repository Layout
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
.chezmoidata.toml # Feature flags, profiles, version
|
|
78
|
-
.chezmoitemplates/ # Reusable template partials (aliases, functions, paths)
|
|
79
|
-
dot_config/ # XDG configs (~/.config/*) — largest directory
|
|
80
|
-
zsh/ # Zsh configuration
|
|
81
|
-
dot_zshrc.tmpl # Main zsh orchestrator
|
|
82
|
-
rc.d/ # Startup modules (sourced in order)
|
|
83
|
-
shell/ # POSIX shell layers (paths, safety, aliases, functions)
|
|
84
|
-
nvim/ # Neovim configuration (Lua)
|
|
85
|
-
mise/ # mise version manager config
|
|
86
|
-
starship.toml.tmpl # Starship prompt config
|
|
87
|
-
atuin/ # Atuin shell history
|
|
88
|
-
bat/ # bat (cat replacement) config
|
|
89
|
-
ghostty/ # Ghostty terminal config
|
|
90
|
-
kitty/ # Kitty terminal config
|
|
91
|
-
alacritty/ # Alacritty terminal config
|
|
92
|
-
dot_local/bin/ # User scripts (~/.local/bin)
|
|
93
|
-
scripts/ # Repo-only scripts (tests, ops, security, diagnostics)
|
|
94
|
-
docs/ # Documentation (30+ files)
|
|
95
|
-
install.sh # Bootstrap installer
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Shell Startup Chain
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
~/.zshenv (dot_zshenv) → XDG vars, PATH, ZDOTDIR
|
|
102
|
-
~/.config/zsh/.zshrc (dot_zshrc.tmpl) → Main orchestrator
|
|
103
|
-
→ rc.d/00-alias-shims.zsh → Single-letter fallback commands
|
|
104
|
-
→ rc.d/05-ssh-agent.zsh → SSH agent + YubiKey
|
|
105
|
-
→ rc.d/10-env.zsh.tmpl → Environment variables
|
|
106
|
-
→ rc.d/20-zinit.zsh.tmpl → Plugin manager (deferred)
|
|
107
|
-
→ rc.d/30-options.zsh.tmpl → History, keybindings, completions
|
|
108
|
-
→ rc.d/40-bell.zsh.tmpl → Bell settings
|
|
109
|
-
→ rc.d/50-login-fortune.zsh.tmpl → Login greeting
|
|
110
|
-
→ shell/00-core-paths.sh.tmpl → Full PATH construction
|
|
111
|
-
→ shell/05-core-safety.sh.tmpl → Safety defaults
|
|
112
|
-
→ shell/90-ux-aliases.sh.tmpl → Core aliases (eager)
|
|
113
|
-
→ [deferred] mise, atuin, starship, zoxide, fzf
|
|
114
|
-
→ [lazy] shell/91-ux-aliases-lazy.sh.tmpl → Tool aliases
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### Key Data Files
|
|
118
|
-
|
|
119
|
-
- `.chezmoidata.toml` — All configuration: profiles, feature flags, tool settings
|
|
120
|
-
- `dot_config/mise/conf.d/00-dotfiles.toml` — mise tool versions (node, python, go, rust, etc.); the writable `~/.config/mise/config.toml` is mise-owned and not chezmoi-managed
|
|
121
|
-
- `dot_config/starship.toml.tmpl` — Prompt configuration
|
|
122
|
-
|
|
123
|
-
### Testing
|
|
124
|
-
|
|
125
|
-
- Test framework: `tests/framework/`
|
|
126
|
-
- Unit tests: `tests/unit/`
|
|
127
|
-
- Tests execute bash source files directly — they do NOT use Go template syntax
|
package/docs/README.md
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Documentation
|
|
6
|
-
|
|
7
|
-
Start here. Then go deeper.
|
|
8
|
-
|
|
9
|
-
## The Manual
|
|
10
|
-
|
|
11
|
-
The complete reference is the `.dotfiles` Manual — a multi-format book covering every concept, tutorial, reference, and recipe.
|
|
12
|
-
|
|
13
|
-
- Online: <https://sebastienrousseau.github.io/dotfiles/manual/> (HTML, PDF, EPUB, ASCII)
|
|
14
|
-
- Locally: `dot manual` opens the HTML in your browser
|
|
15
|
-
- Sources: [`docs/manual/`](manual/)
|
|
16
|
-
|
|
17
|
-
Quick jumps into the Manual:
|
|
18
|
-
|
|
19
|
-
- [Introduction](manual/00-introduction.md) — who, what, how
|
|
20
|
-
- [Concepts](manual/01-concepts/) — architecture, trust model, theme engine, fleet, self-healing
|
|
21
|
-
- [Tutorials](manual/02-tutorials/) — first install, wallpaper→theme, profiles, secrets, fleet
|
|
22
|
-
- [Reference](manual/03-reference/) — CLI, config files, environment, templates, feature flags
|
|
23
|
-
- [Cookbook](manual/04-cookbook/) — 40+ recipes, troubleshooting, FAQ
|
|
24
|
-
|
|
25
|
-
## Start
|
|
26
|
-
|
|
27
|
-
- [Install](guides/INSTALL.md)
|
|
28
|
-
- [Troubleshooting](guides/TROUBLESHOOTING.md)
|
|
29
|
-
- [Support matrix](reference/SUPPORT_MATRIX.md)
|
|
30
|
-
|
|
31
|
-
## Daily use
|
|
32
|
-
|
|
33
|
-
- [Utilities and `dot` CLI](reference/UTILS.md)
|
|
34
|
-
- [Operations](operations/OPERATIONS.md)
|
|
35
|
-
- [Trusted agent workstation](operations/TRUSTED_AGENT_WORKSTATION.md)
|
|
36
|
-
- [Workstation attestation](operations/ATTESTATION.md)
|
|
37
|
-
- [Interoperability](architecture/INTEROP.md)
|
|
38
|
-
- [Agent interoperability](interop/A2A.md)
|
|
39
|
-
- [AI integrations](AI.md)
|
|
40
|
-
|
|
41
|
-
## Security and trust
|
|
42
|
-
|
|
43
|
-
- [Security overview](security/SECURITY.md)
|
|
44
|
-
- [Security checklist](security/SECURITY_CHECKLIST.md)
|
|
45
|
-
- [Policy bundle releases](security/POLICY_RELEASES.md)
|
|
46
|
-
- [Secrets](security/SECRETS.md)
|
|
47
|
-
- [Compliance](security/COMPLIANCE.md)
|
|
48
|
-
- [Threat model](security/THREAT_MODEL.md)
|
|
49
|
-
|
|
50
|
-
## Build and maintain
|
|
51
|
-
|
|
52
|
-
- [Testing](operations/TESTING.md)
|
|
53
|
-
- [Reliability](operations/RELIABILITY.md)
|
|
54
|
-
- [Naming conventions](NAMING_CONVENTIONS.md)
|
|
55
|
-
- [Architecture](ARCHITECTURE.md)
|
|
56
|
-
- [Repository layout](architecture/REPO_LAYOUT.md)
|
|
57
|
-
- [AI cost optimization](architecture/AI_COST_OPTIMIZATION.md)
|
|
58
|
-
- [Release pipeline](operations/RELEASE_PIPELINE.md)
|
|
59
|
-
- [Architecture decisions](adr/README.md)
|
|
60
|
-
|
|
61
|
-
## Repository map
|
|
62
|
-
|
|
63
|
-
| Path | Purpose |
|
|
64
|
-
| :--- | :--- |
|
|
65
|
-
| `docs/` | Guides, reference, security, and architecture |
|
|
66
|
-
| `scripts/` | Repo-only scripts and `dot` command internals |
|
|
67
|
-
| `install/` | Installer and provisioning helpers |
|
|
68
|
-
| `dot_config/` | Managed user configuration files |
|
|
69
|
-
| `dot_local/` | Managed local executables |
|
|
70
|
-
| `examples/` | Executable examples |
|
|
71
|
-
| `tests/` | Unit, integration, and framework coverage |
|
|
72
|
-
|
|
73
|
-
## Platform guides
|
|
74
|
-
|
|
75
|
-
- [WSL2 and Nix](guides/WSL2_NIX_TROUBLESHOOTING.md)
|
|
76
|
-
- [Neovim IDE](guides/NEOVIM_IDE_GUIDE.md)
|
|
77
|
-
|
|
78
|
-
## Reference
|
|
79
|
-
|
|
80
|
-
- [Features](reference/FEATURES.md)
|
|
81
|
-
- [Tools](reference/TOOLS.md)
|
|
82
|
-
- [Aliases](reference/ALIASES.md)
|
|
83
|
-
- [Roadmap](operations/ROADMAP.md)
|
|
84
|
-
- [Version sync](operations/VERSION_SYNC.md)
|
package/docs/STRUCTURE.md
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# Repository Structure
|
|
2
|
-
|
|
3
|
-
This document maps every top-level path in the repository to its
|
|
4
|
-
purpose. Skim it once and you should be able to answer:
|
|
5
|
-
|
|
6
|
-
- **Where is the `dot` CLI?** → `bin/dot` (the source-of-truth file). At runtime it lives at `~/.local/bin/dot`.
|
|
7
|
-
- **Why are there 20+ `dot_*` files at root?** → chezmoi convention: a `dot_X` source file deploys to `~/.X` on apply. Same for `executable_*` (gains `+x`), `private_*` (`0600`), `run_onchange_*` (re-runs when source changes).
|
|
8
|
-
- **What's the framework vs. the maintainer's personal config?** → Everything under `scripts/`, `install/`, `tools/`, `lib/`, and `defaults/.chezmoitemplates/` is framework code. Everything under `defaults/dot_config/`, `defaults/dot_warp/`, `defaults/private_dot_ssh/` is user-facing default configuration (chezmoi auto-rebases via `.chezmoiroot`).
|
|
9
|
-
|
|
10
|
-
The Debian/aws-cli-style root layout shipped in **v0.2.503**:
|
|
11
|
-
`bin/` (dispatcher), `lib/` (shared bash libs), `defaults/`
|
|
12
|
-
(all chezmoi-tracked source files, rebased via
|
|
13
|
-
`.chezmoiroot`). Repo root now hosts only project/CI/docs paths.
|
|
14
|
-
See `docs/operations/ROADMAP_V0_2_503.md` for the full history.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Top-level paths
|
|
19
|
-
|
|
20
|
-
| Path | Kind | Purpose |
|
|
21
|
-
|------|------|---------|
|
|
22
|
-
| **CLI + framework** | | |
|
|
23
|
-
| `dot_local/bin/` | framework | `executable_dot` (CLI entrypoint) and helper scripts. Deploys to `~/.local/bin/`. |
|
|
24
|
-
| `dot_local/share/` | framework | Man pages, zsh completions. Deploys to `~/.local/share/`. |
|
|
25
|
-
| `scripts/` | framework | Runtime-invoked scripts (`dot` CLI dispatch + specialised subtrees). See `scripts/README.md`. |
|
|
26
|
-
| `tools/` | repo-ops | Repo-only ops: CI helpers, release, maintenance, docs-generation. Not distributable. See `tools/README.md`. |
|
|
27
|
-
| `lib/dot/` | framework | Shared bash library sourced by every `dot` subcommand and the dispatcher. Reorganised here from `scripts/dot/lib/` per RFC Phase 1. See `lib/dot/README.md`. |
|
|
28
|
-
| `lib/` | framework | Library tree (`lib/dot/` + the `dot-sys` Rust crate in `lib/wasm-tools/`, built for `wasm32-wasip1` and run under `wasmtime` by `dot attest --verify`). |
|
|
29
|
-
| `install/` | framework | Bootstrap logic + distribution-channel manifests (`homebrew/`, `scoop/`, `aur/`). See `install/README.md`. `install/provision/` runs on `chezmoi apply` via `run_onchange_*` triggers. |
|
|
30
|
-
| `install.sh` | framework | Top-level installer. SHA256-verified chezmoi fetch + initial apply. |
|
|
31
|
-
| `.chezmoitemplates/` | framework | Reusable Go-template partials (aliases, functions, paths). Sourced by `dot_*.tmpl` files. |
|
|
32
|
-
| **User-facing defaults** | | |
|
|
33
|
-
| `dot_bashrc`, `dot_zshrc`, `dot_zshenv`, `dot_zprofile`, `dot_profile`, `dot_vimrc`, etc. | defaults | Shell + editor rc files. Deploy to `~/.X`. |
|
|
34
|
-
| `dot_config/` | defaults | XDG config (`~/.config/*`). Largest tree — 80+ tool configs. |
|
|
35
|
-
| `dot_local/` (non-bin/share) | defaults | Per-user state files for tools (`dot_local/state/`, etc.). |
|
|
36
|
-
| `dot_cargo/`, `dot_etc/`, `dot_warp/` | defaults | Tool-specific roots (cargo, system etc, Warp terminal). |
|
|
37
|
-
| `private_dot_ssh/` | defaults | SSH config — chezmoi `private_` prefix forces 0600. Does NOT contain private keys. |
|
|
38
|
-
| `dot_claude/` | defaults | Claude Code per-user skills and config. |
|
|
39
|
-
| **Templates + data** | | |
|
|
40
|
-
| `templates/` | framework | Non-chezmoi templates (e.g. for `dot agents render`). |
|
|
41
|
-
| `.chezmoidata/` | data | Hardware presets (`macbook-t2`, `surface-pro`) read by templates. |
|
|
42
|
-
| `.chezmoidata.toml` | data | Feature flags + version. Single source-of-truth for `dotfiles_version`. |
|
|
43
|
-
| `.chezmoi.toml.tmpl` | framework | Per-host chezmoi config generated on first apply. |
|
|
44
|
-
| `.chezmoiignore` / `.chezmoiignore.tmpl` | framework | Tells chezmoi which paths NOT to deploy. |
|
|
45
|
-
| **Docs + tests** | | |
|
|
46
|
-
| `docs/` | docs | All documentation: `manual/` (user guide), `operations/` (audits, roadmaps), `reference/` (lookup tables), `security/`. |
|
|
47
|
-
| `tests/` | tests | Test suite: `framework/` (runner + assertions + mocks), `unit/`, `integration/`, `regression/`, `fuzz/`, `snapshots/`. |
|
|
48
|
-
| `examples/` | docs | Standalone examples (mise plugin, AI patterns, ops scripts). |
|
|
49
|
-
| **CI + release** | | |
|
|
50
|
-
| `.github/` | ci | GitHub Actions workflows + issue/PR templates + repo-level SECURITY/CODEOWNERS. |
|
|
51
|
-
| `.devcontainer/` | ci | Dev Container spec for reproducible contributor onboarding. |
|
|
52
|
-
| `Dockerfile.test` | ci | Container baseline for the CI test job. |
|
|
53
|
-
| `.pre-commit-config.yaml` → `config/pre-commit-config.yaml` | ci | Pre-commit hooks (shellcheck, shfmt, luacheck, gitleaks, typos, conventional-commits). |
|
|
54
|
-
| `flake.nix` / `flake.lock` | ci | Nix flake for reproducible dev shell. |
|
|
55
|
-
| `mise.toml` / `mise-versions.lock.json` | ci | Pinned tool versions (mise as the package manager). |
|
|
56
|
-
| **Misc + agents** | | |
|
|
57
|
-
| `AGENTS.md` | docs | Cross-harness AI agent context (the standard read by Codex/Cursor/etc.). |
|
|
58
|
-
| `.cursor/`, `.codex/`, `.windsurf/`, `.zed/`, `.roo/`, `.clinerules`, `.aider.conf.yml`, `.continuerc.json`, `.jules/`, `.agy/` | agents | Per-harness AGENTS.md renderings. Generated by `dot agents render`. Each one points back at `CLAUDE.md` as canonical. |
|
|
59
|
-
| `CLAUDE.md` | docs | Project guidelines (the canonical source — `dot agents render` propagates it). |
|
|
60
|
-
| `CONTRIBUTING.md` | docs | Contributor guide (must stay at root for GitHub auto-discovery). |
|
|
61
|
-
| `docs/CONFIG_STRATEGY.md`, `docs/OPENCODE.md` | docs | Strategy + OpenCode-CLI guidance. Moved out of root for cleanliness in v0.2.503. |
|
|
62
|
-
| `README.md` / `CHANGELOG.md` / `LICENSE` | docs | Standard project files. |
|
|
63
|
-
| `Justfile.tmpl` / `Makefile` | dev | Task runners. |
|
|
64
|
-
| `dist/` | build | Build artefacts directory. |
|
|
65
|
-
| `coverage/`, `nightly-reports/` | build | CI output directories (gitignored). |
|
|
66
|
-
| `nix/` | build | Nix flake source. |
|
|
67
|
-
| `.well-known/` | misc | RFC-compliant `.well-known/` content (currently used for WKD GPG key publication). |
|
|
68
|
-
| `.version-sync-backup/` | misc | Backup directory used by `scripts/version-sync.sh` during release prep. |
|
|
69
|
-
|
|
70
|
-
## Chezmoi naming contract
|
|
71
|
-
|
|
72
|
-
| Prefix / suffix | Effect on deployment |
|
|
73
|
-
|---|---|
|
|
74
|
-
| `dot_foo` | Deploys as `.foo` (the `dot_` is consumed). |
|
|
75
|
-
| `executable_foo` | Adds `+x` permission. |
|
|
76
|
-
| `private_foo` | Sets `0600` permission. |
|
|
77
|
-
| `run_onchange_foo.sh` | Script re-executes when its hash changes. |
|
|
78
|
-
| `*.tmpl` | Processed as a Go template with chezmoi data before deployment. |
|
|
79
|
-
|
|
80
|
-
**Critical gotcha:** `executable_dot_foo` deploys as `.foo` (not
|
|
81
|
-
`dot_foo`). The `dot_` prefix is consumed by chezmoi after the
|
|
82
|
-
`executable_` prefix. Renaming a deployed file silently can leave
|
|
83
|
-
stale state in `~/.config/chezmoi/`.
|
|
84
|
-
|
|
85
|
-
## Where to make changes
|
|
86
|
-
|
|
87
|
-
| Goal | File(s) to edit |
|
|
88
|
-
|------|----------------|
|
|
89
|
-
| Add a new `dot <subcommand>` | `scripts/dot/commands/<subcommand>.sh` + dispatch in `bin/dot` + entry in `docs/manual/03-reference/01-dot-cli.md` + entry in `docs/manual/command-index.md`. |
|
|
90
|
-
| Change an alias | `.chezmoitemplates/aliases/<file>.aliases.sh` (sourced by `dot_zshrc.tmpl`, etc.). |
|
|
91
|
-
| Add a feature flag | `[features]` block in `.chezmoidata.toml` + doc entry in `docs/manual/03-reference/05-feature-flags.md`. |
|
|
92
|
-
| Add a new file deployed to `~/.X` | Create `dot_X` at root (or under a chezmoi-managed subtree). |
|
|
93
|
-
| Add a new chezmoi template | `dot_X.tmpl` at root, then use `{{ }}` for chezmoi data. |
|
|
94
|
-
| Add a CI workflow | `.github/workflows/<name>.yml`. |
|
|
95
|
-
| Add a test | `tests/unit/<domain>/test_<name>.sh` or `tests/integration/test_<name>.sh`. |
|
|
96
|
-
|
|
97
|
-
## See also
|
|
98
|
-
|
|
99
|
-
- `scripts/README.md` — map of the `scripts/` subtree.
|
|
100
|
-
- `CONTRIBUTING.md` — code-style + commit-message + signing requirements.
|
|
101
|
-
- `CLAUDE.md` — AI-assistant guidelines (the canonical source for `dot agents render`).
|
|
102
|
-
- `docs/operations/ROADMAP_V0_2_503.md` — current release scope, including the v0.2.503 reorganisation plan.
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
{% raw %}
|
|
5
|
-
|
|
6
|
-
# ADR-001: Multi-stage CI/CD Pipeline Design
|
|
7
|
-
|
|
8
|
-
**Status**: Accepted
|
|
9
|
-
**Date**: 2026-02-09
|
|
10
|
-
**Authors**: @sebastienrousseau
|
|
11
|
-
|
|
12
|
-
## Context
|
|
13
|
-
|
|
14
|
-
The dotfiles repository requires a CI/CD pipeline that:
|
|
15
|
-
|
|
16
|
-
- Validates changes across multiple platforms (Linux, macOS)
|
|
17
|
-
- Runs security scans to detect secrets and vulnerabilities
|
|
18
|
-
- Tests shell scripts, Lua configurations, and Nix expressions
|
|
19
|
-
- Maintains fast feedback loops for developers
|
|
20
|
-
- Minimizes GitHub Actions costs (runner minutes)
|
|
21
|
-
|
|
22
|
-
Traditional approaches run all checks on every commit, leading to:
|
|
23
|
-
|
|
24
|
-
- Wasted compute on unrelated changes (e.g., running Lua linting when only docs change)
|
|
25
|
-
- High costs from macOS runners ($0.08/min vs $0.008/min for Linux)
|
|
26
|
-
- Long feedback times from sequential job execution
|
|
27
|
-
|
|
28
|
-
## Decision
|
|
29
|
-
|
|
30
|
-
Implement a **5-stage progressive CI pipeline** with path-based filtering:
|
|
31
|
-
|
|
32
|
-
### Stage 1: Change Detection
|
|
33
|
-
|
|
34
|
-
Use `dorny/paths-filter` to detect which file categories changed:
|
|
35
|
-
|
|
36
|
-
- `shell`: *.sh, scripts/**, install/**
|
|
37
|
-
- `lua`: dot_config/nvim/**, *.lua
|
|
38
|
-
- `nix`: nix/**, *.nix
|
|
39
|
-
- `config`: dot_*/**, .chezmoitemplates/**
|
|
40
|
-
|
|
41
|
-
### Stage 2: Lint (Parallel, Conditional)
|
|
42
|
-
|
|
43
|
-
- **lint-shell**: Only runs if shell files changed
|
|
44
|
-
- **lint-lua**: Only runs if Lua files changed
|
|
45
|
-
- Run in parallel to minimize wall-clock time
|
|
46
|
-
|
|
47
|
-
### Stage 3: Security (Always on PRs)
|
|
48
|
-
|
|
49
|
-
- **secrets-scan**: Gitleaks on every PR (critical)
|
|
50
|
-
- **link-check**: Only on schedule (expensive)
|
|
51
|
-
|
|
52
|
-
### Stage 4: Test (Conditional Matrix)
|
|
53
|
-
|
|
54
|
-
- Linux-only for PRs (cheapest)
|
|
55
|
-
- Full matrix (Linux + macOS) on schedule/manual trigger
|
|
56
|
-
- Docker container tests for installation validation
|
|
57
|
-
|
|
58
|
-
### Stage 5: Quality (Schedule/Manual Only)
|
|
59
|
-
|
|
60
|
-
- Idempotency verification
|
|
61
|
-
- Performance benchmarks
|
|
62
|
-
- Nix flake checks
|
|
63
|
-
|
|
64
|
-
### Cost Optimization Strategies
|
|
65
|
-
|
|
66
|
-
1. **Path filters**: Skip jobs when files don't match
|
|
67
|
-
2. **Concurrency groups**: Cancel in-progress runs on new pushes
|
|
68
|
-
3. **Conditional matrices**: Expensive OS testing only on schedule
|
|
69
|
-
4. **Aggressive caching**: Tools, dependencies, databases
|
|
70
|
-
|
|
71
|
-
## Consequences
|
|
72
|
-
|
|
73
|
-
### Positive
|
|
74
|
-
|
|
75
|
-
- ~50% reduction in GitHub Actions minutes
|
|
76
|
-
- Fast feedback for most changes (1-3 minutes)
|
|
77
|
-
- Comprehensive testing still available via schedule/manual
|
|
78
|
-
- Clear separation of concerns between stages
|
|
79
|
-
|
|
80
|
-
### Negative
|
|
81
|
-
|
|
82
|
-
- Complexity in workflow configuration
|
|
83
|
-
- Some bugs might only surface in scheduled runs
|
|
84
|
-
- Path filter maintenance required as repo structure evolves
|
|
85
|
-
|
|
86
|
-
### Neutral
|
|
87
|
-
|
|
88
|
-
- Developers can trigger full CI manually with `workflow_dispatch`
|
|
89
|
-
- Breaking changes to CI require testing across all stages
|
|
90
|
-
|
|
91
|
-
## Implementation
|
|
92
|
-
|
|
93
|
-
```yaml
|
|
94
|
-
# Key patterns used
|
|
95
|
-
on:
|
|
96
|
-
push:
|
|
97
|
-
paths:
|
|
98
|
-
- '**.sh' # Only trigger on shell changes
|
|
99
|
-
|
|
100
|
-
concurrency:
|
|
101
|
-
group: ${{ github.workflow }}-${{ github.ref }}
|
|
102
|
-
cancel-in-progress: true
|
|
103
|
-
|
|
104
|
-
jobs:
|
|
105
|
-
changes:
|
|
106
|
-
outputs:
|
|
107
|
-
shell: ${{ steps.filter.outputs.shell }}
|
|
108
|
-
|
|
109
|
-
lint-shell:
|
|
110
|
-
needs: changes
|
|
111
|
-
if: needs.changes.outputs.shell == 'true'
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## References
|
|
115
|
-
|
|
116
|
-
- [GitHub Actions Path Filtering](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)
|
|
117
|
-
- [dorny/paths-filter](https://github.com/dorny/paths-filter)
|
|
118
|
-
{% endraw %}
|