@sebastienrousseau/dotfiles 0.2.520 → 0.2.521
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -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
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Dotfiles Maintenance Runbook
|
|
6
|
-
|
|
7
|
-
This runbook captures recovery and release maintenance operations for this repository.
|
|
8
|
-
|
|
9
|
-
## Signed History Recovery (February 19, 2026)
|
|
10
|
-
|
|
11
|
-
**Purpose:** Recover from strict signature enforcement failures caused by legacy/non-compliant commit history.
|
|
12
|
-
|
|
13
|
-
**When to use:**
|
|
14
|
-
|
|
15
|
-
- Pushes are blocked by signature policy on historical commits.
|
|
16
|
-
- Merge ancestry contains commits that can't be validated by the current principal/key policy.
|
|
17
|
-
|
|
18
|
-
**Procedure:**
|
|
19
|
-
|
|
20
|
-
1. Create a backup ref for current `main`.
|
|
21
|
-
2. Build a rewritten signed baseline commit from the current tree.
|
|
22
|
-
3. Push the rewritten branch to remote.
|
|
23
|
-
4. Temporarily allow force-push on `main` protections/rulesets.
|
|
24
|
-
5. Force-update `main` to the rewritten signed baseline.
|
|
25
|
-
6. Disable force-push again immediately.
|
|
26
|
-
7. Re-run CI and verify required checks are green.
|
|
27
|
-
8. Repoint the release tag/target as needed.
|
|
28
|
-
|
|
29
|
-
**Verification commands:**
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
git verify-commit HEAD
|
|
33
|
-
gh run list --workflow ci.yml --branch main --limit 1
|
|
34
|
-
gh release view v0.2.501 --json tagName,targetCommitish,url
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Release Closeout Checklist
|
|
38
|
-
|
|
39
|
-
For every release update:
|
|
40
|
-
|
|
41
|
-
1. `main` branch is clean and synced.
|
|
42
|
-
2. CI is green on the release commit.
|
|
43
|
-
3. Annotated release tag points to the intended commit.
|
|
44
|
-
4. GitHub release target is correct (`main` or explicit commit).
|
|
45
|
-
5. Branch protections/rulesets are restored to strict state.
|
|
46
|
-
6. Local apply has completed:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
CHEZMOI_SOURCE_DIR="$HOME/.dotfiles" ./bin/dot apply
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Security Scan Guardrails
|
|
53
|
-
|
|
54
|
-
We prevent gitleaks historical-scan regressions with:
|
|
55
|
-
|
|
56
|
-
- Shallow checkout (`fetch-depth: 1`, `fetch-tags: false`) in gitleaks jobs.
|
|
57
|
-
- A workflow-dispatch guard script: `tools/ci/guard-gitleaks-checkout.sh`.
|
|
58
|
-
|
|
59
|
-
**Manual verification:**
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
bash tools/ci/guard-gitleaks-checkout.sh
|
|
63
|
-
```
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Workstation Environment Manifest"
|
|
3
|
-
date: 2026-05-17
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Workstation Environment Manifest
|
|
7
|
-
|
|
8
|
-
`dot env emit` produces a portable, schema-validated record of
|
|
9
|
-
"what is installed on this machine" — the canonical input that
|
|
10
|
-
downstream tooling consumes.
|
|
11
|
-
|
|
12
|
-
## Schema
|
|
13
|
-
|
|
14
|
-
[`docs/schema/dot-env-v1.json`](../schema/dot-env-v1.json) is a
|
|
15
|
-
JSON Schema 2020-12 file. Validate any manifest against it with:
|
|
16
|
-
|
|
17
|
-
```sh
|
|
18
|
-
dot env emit | jsonschema -i /dev/stdin docs/schema/dot-env-v1.json
|
|
19
|
-
# or
|
|
20
|
-
dot env emit | check-jsonschema --schemafile docs/schema/dot-env-v1.json /dev/stdin
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
(`jsonschema` from the `jsonschema` PyPI package; `check-jsonschema`
|
|
24
|
-
from `python-jsonschema/check-jsonschema`. Either works.)
|
|
25
|
-
|
|
26
|
-
## Quick reference
|
|
27
|
-
|
|
28
|
-
```sh
|
|
29
|
-
dot env emit # canonical JSON to stdout
|
|
30
|
-
dot env emit --format ndjson # one tool per line, greppable
|
|
31
|
-
dot env emit --output /tmp/env.json # atomic file write
|
|
32
|
-
dot env emit --compact # one-line JSON
|
|
33
|
-
dot env emit --help # flags + examples
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Example output (truncated):
|
|
37
|
-
|
|
38
|
-
```json
|
|
39
|
-
{
|
|
40
|
-
"schema_version": "https://sebastienrousseau.github.io/dotfiles/schema/dot-env-v1.json",
|
|
41
|
-
"manifest_version": "1.0.0",
|
|
42
|
-
"emitted_at": "2026-05-17T10:22:46Z",
|
|
43
|
-
"emitter": {
|
|
44
|
-
"name": "dot env emit",
|
|
45
|
-
"version": "0.2.503",
|
|
46
|
-
"repo": "github.com/sebastienrousseau/dotfiles"
|
|
47
|
-
},
|
|
48
|
-
"host": {
|
|
49
|
-
"hostname": "rousseau-mbp-m1",
|
|
50
|
-
"os": "Darwin",
|
|
51
|
-
"arch": "arm64"
|
|
52
|
-
},
|
|
53
|
-
"tools": [
|
|
54
|
-
{
|
|
55
|
-
"name": "node",
|
|
56
|
-
"version": "24.14.0",
|
|
57
|
-
"source": "/Users/seb/.dotfiles/mise.toml",
|
|
58
|
-
"source_type": "mise.toml",
|
|
59
|
-
"requested_version": "24.14.0",
|
|
60
|
-
"install_path": "/Users/seb/.local/share/mise/installs/node/24.14.0",
|
|
61
|
-
"active": true
|
|
62
|
-
},
|
|
63
|
-
...
|
|
64
|
-
]
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Why this exists
|
|
69
|
-
|
|
70
|
-
R3 §7.4 strategic-reversal call: **ship `dot env emit` BEFORE
|
|
71
|
-
`dot fleet apply --attest`**. Three independent forces converge on
|
|
72
|
-
a 2026-09-17 / 2026-09-11 window:
|
|
73
|
-
|
|
74
|
-
1. **AgentSpec / AAIF** public deadline at AGNTCon Amsterdam
|
|
75
|
-
2026-09-17. First-mover with the canonical "one signed
|
|
76
|
-
manifest → AGENTS.md, agent.yaml, devcontainer-feature.json,
|
|
77
|
-
mise.toml, Brewfile, flake.nix, in-toto subject list"
|
|
78
|
-
generator owns the reference implementation.
|
|
79
|
-
2. **EU CRA SBOM reporting** binding 2026-09-11. A v1 manifest
|
|
80
|
-
per workstation feeds the "demonstrate vulnerability response"
|
|
81
|
-
story for any EU procurement team.
|
|
82
|
-
3. **dotbot v3.5.0's `workflow.yaml`** is 80% of the way to
|
|
83
|
-
AgentEnv parity. The window before they generate the same
|
|
84
|
-
manifest is measured in weeks.
|
|
85
|
-
|
|
86
|
-
## Downstream consumers (planned)
|
|
87
|
-
|
|
88
|
-
The v1 manifest is the source-of-truth that subsequent emitters
|
|
89
|
-
will re-render. Each emitter is a single jq filter from the v1
|
|
90
|
-
shape:
|
|
91
|
-
|
|
92
|
-
| Target format | Use case | Status |
|
|
93
|
-
|---|---|---|
|
|
94
|
-
| `AGENTS.md` | Cross-harness AI agent context | shipped (`dot agents render`); will be re-pointed at the v1 manifest in v0.2.504 |
|
|
95
|
-
| `devcontainer-feature.json` | Reproducible cloud-IDE setup | planned (v0.2.504) |
|
|
96
|
-
| `mise.toml` | Round-trip: re-create the same install set on a fresh host | planned |
|
|
97
|
-
| `Brewfile` | Hand off to a Homebrew-managed Mac | planned |
|
|
98
|
-
| `flake.nix` | Nix reproducibility | planned (input to nix-shell) |
|
|
99
|
-
| `in-toto subject list` | SLSA attestation subject array | planned (`dot fleet apply --attest`) |
|
|
100
|
-
| `CycloneDX SBOM` | Compliance reporting (EU CRA) | planned (v0.2.504; per-artifact attestation closes R3-N7) |
|
|
101
|
-
|
|
102
|
-
The schema is intentionally minimal — `dot env emit` records *what
|
|
103
|
-
is installed*, not *what is desired* or *what is approved*. Downstream
|
|
104
|
-
emitters add policy / approval / risk-score columns as they need
|
|
105
|
-
them.
|
|
106
|
-
|
|
107
|
-
## CI usage
|
|
108
|
-
|
|
109
|
-
```yaml
|
|
110
|
-
- name: Snapshot environment manifest
|
|
111
|
-
run: |
|
|
112
|
-
dot env emit --output env.json
|
|
113
|
-
# Attest the manifest as part of the next release
|
|
114
|
-
cosign sign-blob --yes --output-signature env.json.sig \
|
|
115
|
-
--output-certificate env.json.pem env.json
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
The signed manifest goes into the release alongside the SBOM —
|
|
119
|
-
together they let any consumer answer "what software was on the
|
|
120
|
-
runner that produced this release" and verify it cryptographically.
|
|
121
|
-
|
|
122
|
-
## See also
|
|
123
|
-
|
|
124
|
-
- `docs/schema/dot-env-v1.json` — the JSON Schema authoritative spec.
|
|
125
|
-
- `docs/security/VERIFY_RELEASE.md` — three-attestation verification flow this manifest plugs into.
|
|
126
|
-
- `docs/operations/HARD_AUDIT_2026.md` §7.4 — strategic-reversal record.
|
|
127
|
-
- `docs/operations/ROADMAP_V0_2_503.md` — `dot env emit` was originally deferred to v0.2.504; pulled forward in this PR per user request.
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Migration and Upgrade Guide
|
|
6
|
-
|
|
7
|
-
## How to Upgrade
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
# 1. Pre-upgrade check
|
|
11
|
-
dot doctor
|
|
12
|
-
|
|
13
|
-
# 2. Pull latest changes
|
|
14
|
-
cd ~/.dotfiles && git pull
|
|
15
|
-
|
|
16
|
-
# 3. Apply with diagnostics
|
|
17
|
-
dot apply
|
|
18
|
-
|
|
19
|
-
# 4. Post-upgrade verification
|
|
20
|
-
dot doctor
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Version History
|
|
24
|
-
|
|
25
|
-
### v0.2.501 (Current)
|
|
26
|
-
|
|
27
|
-
- **Wallpaper-driven theme engine** — themes auto-generated from wallpapers via K-Means in CIELAB color space (no hand-crafted themes)
|
|
28
|
-
- **Dynamic HEIC support** — custom wallpapers ship as Apple-compatible single-file dynamic HEIC; macOS auto-switches dark/light
|
|
29
|
-
- **System wallpaper discovery** — pulls themes from `/System/Library/Desktop Pictures/` (macOS) and `/usr/share/backgrounds/` (Linux)
|
|
30
|
-
- **`dot theme rebuild`** — parallel K-Means generation (4 jobs), mtime-based caching, orphan cleanup
|
|
31
|
-
- **WCAG AAA enforcement** — all generated themes pass 7:1 contrast for fg/bg, accent_text/accent, c15/bg
|
|
32
|
-
- **macOS accent from wallpaper hue** — `dot-theme-sync` reads `macos_accent` from themes.toml and forces UI refresh
|
|
33
|
-
- **HEIC → PNG auto-conversion** on Linux for non-HEIC-aware desktops
|
|
34
|
-
- **Build artifact redirection** — Cargo, Go, pip, uv, Zig caches → `/tmp/builds/` (cleared on reboot)
|
|
35
|
-
- **CI dedup** — `ci-enforced.yml` reuses `reusable-shell-lint.yml` and `reusable-test-suite.yml`
|
|
36
|
-
|
|
37
|
-
### v0.2.500
|
|
38
|
-
|
|
39
|
-
- Added AI CLIs: Autohand Code, Mistral Vibe, Qwen Code, ZAI
|
|
40
|
-
- Removed Cline CLI (broken upstream dependency)
|
|
41
|
-
- Interactive mise installer for missing AI providers
|
|
42
|
-
- Mise-first provisioning for all AI tools
|
|
43
|
-
- User extension points: rc.d.local, modules.d, custom dot commands
|
|
44
|
-
- SSH config hardening template
|
|
45
|
-
- Ghostty and WezTerm terminal configs
|
|
46
|
-
- Modern CLI tools: delta, fd, dust, bottom, lazygit, lazydocker, tldr
|
|
47
|
-
- Auto-prewarm after dot apply
|
|
48
|
-
- Expanded Atuin history filters
|
|
49
|
-
|
|
50
|
-
### v0.2.497
|
|
51
|
-
|
|
52
|
-
- Theme system with Catppuccin integration
|
|
53
|
-
- Linux desktop parity (Niri, Waybar, Fuzzel)
|
|
54
|
-
- AI tooling expansion (Kiro, OpenCode)
|
|
55
|
-
- Coverage contracts and QA docs
|
|
56
|
-
|
|
57
|
-
### v0.2.496
|
|
58
|
-
|
|
59
|
-
- Verified chezmoi installer
|
|
60
|
-
- Shell startup optimization
|
|
61
|
-
- Property-based tests
|
|
62
|
-
|
|
63
|
-
## Breaking Changes
|
|
64
|
-
|
|
65
|
-
If you are upgrading from v0.2.501 or earlier, note these changes:
|
|
66
|
-
|
|
67
|
-
1. **`themes.toml` is now generated** — do not hand-edit. Run `dot theme rebuild` to regenerate from wallpapers
|
|
68
|
-
2. **Theme names changed** — old hand-crafted names (e.g. `catppuccin-mocha`, `macos-tahoe-dark` with hardcoded palettes) are replaced by wallpaper-derived names. The picker only shows paired wallpaper themes.
|
|
69
|
-
3. **Wallpaper format** — custom wallpapers should be dynamic HEIC (single file, both appearances). Use `bash scripts/theme/merge-wallpaper.sh` to merge separate dark/light pairs.
|
|
70
|
-
4. **Build caches relocated** — Cargo/Go/pip/uv/Zig now write to `/tmp/builds/`. Restart your shell after upgrade so `mise [env]` picks up the new paths.
|
|
71
|
-
|
|
72
|
-
If you are upgrading from v0.2.501 or earlier:
|
|
73
|
-
|
|
74
|
-
1. **Cline CLI removed** — if you used `dot cline`, switch to a different AI CLI
|
|
75
|
-
2. **AI tools now install through mise** — run `mise install` to set up AI providers
|
|
76
|
-
3. **SSH config hardening** — check `~/.ssh/config` after apply, as it may change your current settings
|
|
77
|
-
|
|
78
|
-
## Rollback
|
|
79
|
-
|
|
80
|
-
If something goes wrong after an upgrade:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
# Quick rollback to previous state
|
|
84
|
-
dot rollback
|
|
85
|
-
|
|
86
|
-
# Rollback to specific backup
|
|
87
|
-
dot rollback status # List available backups
|
|
88
|
-
dot rollback rollback-to 3 # Restore backup #3
|
|
89
|
-
|
|
90
|
-
# Git-based rollback
|
|
91
|
-
cd ~/.dotfiles
|
|
92
|
-
git log --oneline -10 # Find last good commit
|
|
93
|
-
git reset --hard HEAD~1 # Reset to previous commit
|
|
94
|
-
dot apply # Re-apply
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Before You Upgrade
|
|
98
|
-
|
|
99
|
-
- [ ] Run `dot doctor` — make sure everything is healthy
|
|
100
|
-
- [ ] Run `dot diff` — review any pending changes
|
|
101
|
-
- [ ] Back up custom configs: `dot rollback backup`
|
|
102
|
-
- [ ] Read CHANGELOG.md for breaking changes
|
|
103
|
-
|
|
104
|
-
## After You Upgrade
|
|
105
|
-
|
|
106
|
-
- [ ] Run `dot doctor` — make sure the upgrade worked
|
|
107
|
-
- [ ] Run `dot prewarm` — rebuild shell caches
|
|
108
|
-
- [ ] Restart your shell: `exec zsh`
|
|
109
|
-
- [ ] Test AI tools: `dot ai`
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Operations
|
|
6
|
-
|
|
7
|
-
Core workflows for keeping your dotfiles running across platforms.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Platforms
|
|
12
|
-
|
|
13
|
-
### macOS
|
|
14
|
-
|
|
15
|
-
**Primary manager**: `Homebrew`
|
|
16
|
-
|
|
17
|
-
- **Update**:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
chezmoi update
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
This runs `brew bundle install` behind the scenes to reconcile against the declared Brewfiles.
|
|
24
|
-
- **Permission issues**: `sudo chown -R $(whoami) $(brew --prefix)/*`
|
|
25
|
-
- **Drift**: Run `brew bundle cleanup` to remove unmanaged packages.
|
|
26
|
-
|
|
27
|
-
### Linux (Debian, Ubuntu, Kali)
|
|
28
|
-
|
|
29
|
-
**Primary manager**: `apt-get` / `snap`
|
|
30
|
-
|
|
31
|
-
- **Update**:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
sudo apt update && sudo apt upgrade -y
|
|
35
|
-
chezmoi update
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
On Linux, `chezmoi` focuses on configuration. Package updates work best through the OS package manager to avoid `sudo` conflicts.
|
|
39
|
-
- **Font issues**: If icons are missing, run `./install/provision/run_onchange_50-install-fonts.sh.tmpl` manually via `chezmoi apply` or source directly with `bash`.
|
|
40
|
-
|
|
41
|
-
### Windows (WSL2)
|
|
42
|
-
|
|
43
|
-
**Primary manager**: `apt-get` (inside WSL)
|
|
44
|
-
|
|
45
|
-
- **Update**: Same as Linux.
|
|
46
|
-
- **Clipboard**: Dotfiles configures `win32yank.exe` automatically for clipboard sharing.
|
|
47
|
-
- **Performance**: Keep project files inside the Linux filesystem (`~/projects`), not in `/mnt/c/`, for dramatically better IO.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Workflows
|
|
52
|
-
|
|
53
|
-
### Apply changes
|
|
54
|
-
|
|
55
|
-
After editing any config file:
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
dot apply
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Triggers `dot_zshrc` reload and audit logging.
|
|
62
|
-
|
|
63
|
-
### Upgrade-safe apply (recommended)
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
git pull
|
|
67
|
-
DOTFILES_NONINTERACTIVE=1 dot apply --force
|
|
68
|
-
dot doctor
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
`dot apply` includes post-apply checks that:
|
|
72
|
-
|
|
73
|
-
- Remove stale read-only zsh cache files (`~/.config/shell/*.zwc`, `~/.config/zsh/**/*.zwc`)
|
|
74
|
-
- Validate that `dot` resolves to `~/.local/bin/dot` in a fresh login shell
|
|
75
|
-
|
|
76
|
-
Finish by reloading your session (`exec zsh`) or restarting the terminal.
|
|
77
|
-
|
|
78
|
-
### Async updates
|
|
79
|
-
|
|
80
|
-
Run updates in the background; you'll get a status banner on the next shell launch:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
dot update --async
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Roll back
|
|
87
|
-
|
|
88
|
-
If an update breaks your setup:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
cd ~/.dotfiles
|
|
92
|
-
git reset --hard HEAD@{1}
|
|
93
|
-
chezmoi apply
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### Offline / air-gapped mode
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
# 1. On a connected machine, bundle your setup:
|
|
100
|
-
dot bundle ~/Downloads
|
|
101
|
-
|
|
102
|
-
# 2. Transfer the archive to the offline machine, then:
|
|
103
|
-
tar --zstd -xf dotfiles_offline_bundle_*.tar.zst -P
|
|
104
|
-
cd ~/.dotfiles
|
|
105
|
-
./install.sh --force
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Pre-warm caches
|
|
109
|
-
|
|
110
|
-
Regenerate all tool caches to eliminate shell startup latency:
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
dot prewarm
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### Debug
|
|
117
|
-
|
|
118
|
-
If something's slow or broken:
|
|
119
|
-
|
|
120
|
-
1. **Check health**:
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
dot doctor
|
|
124
|
-
dot health --fix
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
2. **Smoke test**:
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
dot smoke-test
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
3. **Scorecard**:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
dot scorecard
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
4. **Chaos testing (self-healing)**:
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
dot chaos --force
|
|
143
|
-
dot heal --force
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
5. **Startup profiling**:
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
dot perf --profile
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
6. **Post-merge verification**:
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
dot verify
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
7. **Inspect alias behavior**:
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
dot aliases list
|
|
162
|
-
dot aliases why dprune
|
|
163
|
-
DOTFILES_ALIAS_POLICY=strict bash ~/.dotfiles/scripts/diagnostics/alias-governance.sh
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
8. **Verbose mode**:
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
DOTFILES_DEBUG=1 dot apply
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Safety flags
|
|
173
|
-
|
|
174
|
-
Destructive aliases are disabled by default. Enable only when needed:
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
export DOTFILES_ENABLE_DANGEROUS_ALIASES=1
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Tiered alias loading
|
|
181
|
-
|
|
182
|
-
Core aliases load eagerly. Ecosystem aliases are lazy-loaded and can be filtered:
|
|
183
|
-
|
|
184
|
-
```bash
|
|
185
|
-
export DOTFILES_ALIAS_ECOSYSTEMS=python,node
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
Valid ecosystem tags: `python`, `node`, `rust`, `network`, `legacy`.
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Performance — Budgets, Baselines, Regression Detection
|
|
6
|
-
|
|
7
|
-
This page documents the per-shell startup budget, the baseline
|
|
8
|
-
lifecycle, and the regression-alert pipeline. Managed under
|
|
9
|
-
[#863](https://github.com/sebastienrousseau/dotfiles/issues/863).
|
|
10
|
-
|
|
11
|
-
## Targets
|
|
12
|
-
|
|
13
|
-
| Shell | Target (mean ms) | Override env var |
|
|
14
|
-
|---|---|---|
|
|
15
|
-
| **zsh** | 250 | `DOTFILES_PERF_TARGET_ZSH_MS` |
|
|
16
|
-
| **bash** | 60 | `DOTFILES_PERF_TARGET_BASH_MS` |
|
|
17
|
-
| **fish** | 200 | `DOTFILES_PERF_TARGET_FISH_MS` |
|
|
18
|
-
| **nu** | 500 | `DOTFILES_PERF_TARGET_NU_MS` |
|
|
19
|
-
| **pwsh** | 600 | `DOTFILES_PERF_TARGET_PWSH_MS` |
|
|
20
|
-
|
|
21
|
-
`dot perf` measures every installed shell and flags any whose mean
|
|
22
|
-
exceeds its target. The numbers come from
|
|
23
|
-
[`scripts/diagnostics/perf.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/scripts/diagnostics/perf.sh) —
|
|
24
|
-
warm-up + 3 runs by default.
|
|
25
|
-
|
|
26
|
-
## The baseline
|
|
27
|
-
|
|
28
|
-
`$XDG_CACHE_HOME/dotfiles/perf-baseline.json` records the per-shell
|
|
29
|
-
means at a known-good point in time. The file is a JSON object:
|
|
30
|
-
|
|
31
|
-
```json
|
|
32
|
-
{
|
|
33
|
-
"recorded_at": "2026-05-13T00:00:00Z",
|
|
34
|
-
"regression_pct": 10,
|
|
35
|
-
"shells": {
|
|
36
|
-
"zsh": 41,
|
|
37
|
-
"bash": 28,
|
|
38
|
-
"fish": 190
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Recording a baseline
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
dot perf --baseline # all installed shells
|
|
47
|
-
dot perf --baseline --shell zsh # just one shell
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Do this after:
|
|
51
|
-
|
|
52
|
-
- A fresh chezmoi apply on a new machine.
|
|
53
|
-
- Any deliberate startup-cost change (deferred-load PRs, new plugin).
|
|
54
|
-
- A `mise install` that bumps a hot-path tool's version.
|
|
55
|
-
|
|
56
|
-
### Regression detection
|
|
57
|
-
|
|
58
|
-
Every subsequent `dot perf` invocation compares the current
|
|
59
|
-
measurement against the baseline. When any shell exceeds the
|
|
60
|
-
baseline by more than `DOTFILES_PERF_REGRESSION_PCT` (default 10%),
|
|
61
|
-
the run reports under a "Baseline regressions" section. JSON output
|
|
62
|
-
includes a `regressions: [...]` array and a `regression_count`
|
|
63
|
-
counter so dashboards can alert.
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
dot perf # warns on regression
|
|
67
|
-
dot perf --no-baseline-check # skip the comparison entirely
|
|
68
|
-
DOTFILES_PERF_REGRESSION_PCT=5 dot perf # tighter threshold
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Per-tool timings
|
|
72
|
-
|
|
73
|
-
`_cached_eval` (the zsh/fish primitive that caches expensive tool
|
|
74
|
-
init like `starship init zsh`) writes one JSONL row per call to
|
|
75
|
-
`$XDG_STATE_HOME/dotfiles/eval-timings.jsonl` when
|
|
76
|
-
`EVALCACHE_TIMING=1` is set in the environment. Aggregating that log
|
|
77
|
-
gives a per-tool breakdown of where startup time goes.
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
EVALCACHE_TIMING=1 zsh -i -c exit # generate data
|
|
81
|
-
dot perf --by-tool # see the aggregation
|
|
82
|
-
dot perf --reset # clear the log
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
The aggregator reports `count / total / mean / p50 / p95 / p99`
|
|
86
|
-
per `_cached_eval` label. P95 + P99 surface the tail-latency cases
|
|
87
|
-
that mean alone misses (e.g. a cache miss after a tool upgrade
|
|
88
|
-
spiking from 5ms steady-state to 200ms once).
|
|
89
|
-
|
|
90
|
-
## `dot doctor` Performance section
|
|
91
|
-
|
|
92
|
-
`dot doctor` surfaces (when each data source is available):
|
|
93
|
-
|
|
94
|
-
- Whether `_cached_eval`'s on-disk tool caches are fresh vs stale
|
|
95
|
-
for mise, starship, zoxide, atuin, fzf, direnv.
|
|
96
|
-
- Any installed slow-init tools NOT yet wrapped in `_cached_eval`
|
|
97
|
-
(nvm, fnm, pyenv, pnpm, …).
|
|
98
|
-
- Hyperfine-measured startup latency vs target.
|
|
99
|
-
- Baseline age + top-3 slowest tools from the EVALCACHE_TIMING log.
|
|
100
|
-
|
|
101
|
-
## CI workflow
|
|
102
|
-
|
|
103
|
-
[`.github/workflows/perf-baseline.yml`](https://github.com/sebastienrousseau/dotfiles/blob/main/.github/workflows/perf-baseline.yml)
|
|
104
|
-
runs weekly on Sunday at 03:00 UTC on `ubuntu-latest`. It:
|
|
105
|
-
|
|
106
|
-
1. Restores the previous week's baseline from a workflow artifact.
|
|
107
|
-
2. Runs `dot perf --json` against the freshly-applied dotfiles.
|
|
108
|
-
3. Compares current vs restored baseline; opens (or comments on) a
|
|
109
|
-
tracking issue if any shell regressed by >10%.
|
|
110
|
-
4. Uploads the new measurement as the next week's restore source.
|
|
111
|
-
|
|
112
|
-
The CI workflow always runs against the same `ubuntu-latest` image
|
|
113
|
-
so the comparison is machine-stable; per-developer baselines live on
|
|
114
|
-
each developer's box and aren't synced.
|
|
115
|
-
|
|
116
|
-
## Adjusting the budget
|
|
117
|
-
|
|
118
|
-
Per-shell targets live in
|
|
119
|
-
[`scripts/diagnostics/perf.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/scripts/diagnostics/perf.sh)
|
|
120
|
-
under `shell_target_for()`. Bumping a target should always come with:
|
|
121
|
-
|
|
122
|
-
- A commit-message rationale explaining why slower is acceptable
|
|
123
|
-
(e.g. "added a required Carapace completion at startup").
|
|
124
|
-
- A new baseline recording (`dot perf --baseline`).
|
|
125
|
-
- A note here under "Targets" with the new value.
|
|
126
|
-
|
|
127
|
-
## References
|
|
128
|
-
|
|
129
|
-
- [`scripts/diagnostics/perf.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/scripts/diagnostics/perf.sh)
|
|
130
|
-
- [`tests/unit/diagnostics/test_perf_percentiles.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/tests/unit/diagnostics/test_perf_percentiles.sh) — percentile math contract
|
|
131
|
-
- [`.github/workflows/perf-baseline.yml`](https://github.com/sebastienrousseau/dotfiles/blob/main/.github/workflows/perf-baseline.yml)
|
|
132
|
-
- ADR-002 (Shell Performance Optimization)
|
|
133
|
-
- Issue [#863](https://github.com/sebastienrousseau/dotfiles/issues/863)
|