@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,127 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Euxis 2026 Architecture & Product Review
|
|
6
|
-
|
|
7
|
-
This review translates the current dotfiles CLI stack into an Apple-tier product strategy:
|
|
8
|
-
high power, near-zero cognitive load, and cross-platform parity (macOS, Linux, WSL).
|
|
9
|
-
|
|
10
|
-
## Current state (what is already strong)
|
|
11
|
-
|
|
12
|
-
- Unified entrypoint (`dot`) with modular command routing.
|
|
13
|
-
- Good safety baseline (strict mode, governance, preflight checks).
|
|
14
|
-
- Broad CI coverage with strong shell quality gates.
|
|
15
|
-
- WSL support already exists but is distributed across scripts.
|
|
16
|
-
|
|
17
|
-
## Gaps to close for Apple-tier quality
|
|
18
|
-
|
|
19
|
-
### Performance and responsiveness
|
|
20
|
-
|
|
21
|
-
- `dot doctor` scans broad filesystem paths and can feel slow on large homes.
|
|
22
|
-
- Platform detection logic is duplicated across scripts.
|
|
23
|
-
- Source directory resolution repeats file system probes in hot paths.
|
|
24
|
-
|
|
25
|
-
### UX and cognitive load
|
|
26
|
-
|
|
27
|
-
- Cross-platform behavior is implicit, not surfaced as a simple product contract.
|
|
28
|
-
- Users still need to understand host/guest boundaries (especially WSL).
|
|
29
|
-
- Onboarding signal is fragmented across docs and command help.
|
|
30
|
-
|
|
31
|
-
### Product parity
|
|
32
|
-
|
|
33
|
-
- No single abstraction layer for path conversion and host-native opening.
|
|
34
|
-
- No first-class “platform parity” diagnostics in one section.
|
|
35
|
-
|
|
36
|
-
## Implemented in this branch
|
|
37
|
-
|
|
38
|
-
### 1) Platform abstraction layer
|
|
39
|
-
|
|
40
|
-
Added `scripts/dot/lib/platform.sh` with:
|
|
41
|
-
|
|
42
|
-
- `dot_platform_id`
|
|
43
|
-
- `dot_host_os`
|
|
44
|
-
- `dot_is_wsl`
|
|
45
|
-
- `dot_path_to_unix`
|
|
46
|
-
- `dot_path_to_native`
|
|
47
|
-
- `dot_open_path`
|
|
48
|
-
|
|
49
|
-
This centralizes platform semantics and removes per-script drift.
|
|
50
|
-
|
|
51
|
-
### 2) Hot-path optimization in shared utils
|
|
52
|
-
|
|
53
|
-
Updated `scripts/dot/lib/utils.sh`:
|
|
54
|
-
|
|
55
|
-
- sources `platform.sh`
|
|
56
|
-
- adds process-local source dir cache (`_DOT_SOURCE_DIR_CACHE`)
|
|
57
|
-
- avoids repeated filesystem checks in repeated command flows
|
|
58
|
-
|
|
59
|
-
### 3) Faster, clearer diagnostics
|
|
60
|
-
|
|
61
|
-
Updated `scripts/diagnostics/doctor.sh`:
|
|
62
|
-
|
|
63
|
-
- new **Platform** section (runtime + host + WSL bridge/fallback checks)
|
|
64
|
-
- warns when running in `/mnt/*` under WSL (high IO latency path)
|
|
65
|
-
- scoped symlink scan to standard roots only (`~/.config`, `~/.local`, `~/.ssh`)
|
|
66
|
-
- adds explicit `dot` command resolution check
|
|
67
|
-
|
|
68
|
-
### 4) Onboarding clarity
|
|
69
|
-
|
|
70
|
-
Updated `README.md`:
|
|
71
|
-
|
|
72
|
-
- added “60-second onboarding” with a clear success state
|
|
73
|
-
|
|
74
|
-
### 5) Test coverage for new abstraction
|
|
75
|
-
|
|
76
|
-
Added `scripts/tests/unit/test_dot_lib_platform.sh`:
|
|
77
|
-
|
|
78
|
-
- existence + syntax + function presence + return contract checks
|
|
79
|
-
|
|
80
|
-
## File-by-file next refactors (high ROI)
|
|
81
|
-
|
|
82
|
-
1. `scripts/dot/commands/tools.sh`
|
|
83
|
-
|
|
84
|
-
- Split `cmd_aliases` into submodule file.
|
|
85
|
-
- Replace repeated `command -v` checks with cached capability map.
|
|
86
|
-
|
|
87
|
-
1. `dot_config/zsh/dot_zshrc.tmpl`
|
|
88
|
-
|
|
89
|
-
- Add startup budget guard (record startup time; warn >400ms).
|
|
90
|
-
- Move optional integrations behind capability checks generated once/session.
|
|
91
|
-
|
|
92
|
-
1. `scripts/ops/health-check.sh`
|
|
93
|
-
|
|
94
|
-
- Import `platform.sh`, unify WSL/macOS/Linux branch logic.
|
|
95
|
-
- Emit machine-readable JSON summary for UI frontends.
|
|
96
|
-
|
|
97
|
-
1. `scripts/diagnostics/perf.sh`
|
|
98
|
-
|
|
99
|
-
- Add percentile reporting (P50/P95 over 10 runs).
|
|
100
|
-
- Add regression threshold with actionable remediation hints.
|
|
101
|
-
|
|
102
|
-
## Product roadmap (prioritized)
|
|
103
|
-
|
|
104
|
-
### P0 (1-2 weeks)
|
|
105
|
-
|
|
106
|
-
- Platform abstraction adoption across all dot commands.
|
|
107
|
-
- Bounded diagnostic scans everywhere (`find` scope + timeout).
|
|
108
|
-
- “Single-screen health” command output format harmonization.
|
|
109
|
-
|
|
110
|
-
### P1 (2-4 weeks)
|
|
111
|
-
|
|
112
|
-
- Local state model for predictive UX (`~/.local/state/dotfiles/session.json`).
|
|
113
|
-
- Adaptive hints (“next best action”) based on detected failures.
|
|
114
|
-
- Non-blocking diagnostics execution with staged rendering.
|
|
115
|
-
|
|
116
|
-
### P2 (4-8 weeks)
|
|
117
|
-
|
|
118
|
-
- Optional Rust helper binary for path/process abstraction and fast JSON output.
|
|
119
|
-
- WASM-compatible policy engine for deterministic config validation.
|
|
120
|
-
- Cross-device state sync model (privacy-first, local-first defaults).
|
|
121
|
-
|
|
122
|
-
## Apple-tier UX bar (acceptance criteria)
|
|
123
|
-
|
|
124
|
-
- First successful install + health check in under 90 seconds.
|
|
125
|
-
- `dot doctor` completes in under 700ms on warmed cache.
|
|
126
|
-
- No user-facing distinction between macOS/Linux/WSL for core commands.
|
|
127
|
-
- All failures return one-line remediation with direct command to fix.
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Milestone v0.2.493 Scope
|
|
6
|
-
|
|
7
|
-
This milestone keeps scope intentionally small and operationally focused.
|
|
8
|
-
|
|
9
|
-
## Goals
|
|
10
|
-
|
|
11
|
-
- Make post-merge verification a first-class workflow (`dot verify`).
|
|
12
|
-
- Keep protected-branch CI deterministic (no unsigned bot commits on `master`).
|
|
13
|
-
- Improve day-2 operator confidence with explicit verification guidance.
|
|
14
|
-
|
|
15
|
-
## In Scope
|
|
16
|
-
|
|
17
|
-
- [x] Add `dot verify` command routing in diagnostics module.
|
|
18
|
-
- `scripts/dot/commands/diagnostics.sh`
|
|
19
|
-
- `bin/dot`
|
|
20
|
-
- [x] Add verification runner script.
|
|
21
|
-
- `scripts/diagnostics/verify.sh`
|
|
22
|
-
- Runs:
|
|
23
|
-
- `dot doctor`
|
|
24
|
-
- `dot status`
|
|
25
|
-
- `chezmoi diff`
|
|
26
|
-
- [x] Update completion surfaces for new command.
|
|
27
|
-
- `dot_local/share/bash-completion/completions/dot`
|
|
28
|
-
- `dot_local/bin/executable_dot_completion`
|
|
29
|
-
- [x] Harden sync-versions behavior for protected `master`.
|
|
30
|
-
- `.github/workflows/sync-versions.yml`
|
|
31
|
-
- `master` now verifies only; auto-sync commit job runs on non-master branches.
|
|
32
|
-
- [x] Update docs and command references.
|
|
33
|
-
- `README.md`
|
|
34
|
-
- `docs/README.md`
|
|
35
|
-
- `docs/OPERATIONS.md`
|
|
36
|
-
|
|
37
|
-
## Out of Scope
|
|
38
|
-
|
|
39
|
-
- New security controls beyond existing baseline.
|
|
40
|
-
- Major CLI redesign or command namespace reshuffle.
|
|
41
|
-
- Release process automation changes outside sync-versions policy hardening.
|
|
42
|
-
|
|
43
|
-
## Exit Criteria
|
|
44
|
-
|
|
45
|
-
- `dot verify` returns non-zero on drift/issues and zero when healthy.
|
|
46
|
-
- `sync-versions` workflow no longer attempts commits to protected `master`.
|
|
47
|
-
- Relevant unit tests and targeted command tests pass.
|
package/docs/archive/PLAN.md
DELETED
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Universal Configuration Plan (Chezmoi)
|
|
6
|
-
|
|
7
|
-
... [Previous Sections Unchanged] ...
|
|
8
|
-
|
|
9
|
-
# Phase 15: Operational Documentation [COMPLETED]
|
|
10
|
-
|
|
11
|
-
- [x] **Guide**: Created `OPERATIONS.md`.
|
|
12
|
-
|
|
13
|
-
# Phase 16: Final Release Verification [COMPLETED]
|
|
14
|
-
|
|
15
|
-
- [x] **Verification**: All systems passed.
|
|
16
|
-
|
|
17
|
-
# Phase 17: Structural Optimizations (v0.3.0)
|
|
18
|
-
|
|
19
|
-
## Goal
|
|
20
|
-
|
|
21
|
-
Implement structural improvements for better organization and maintainability, anticipating v0.3.0.
|
|
22
|
-
|
|
23
|
-
## Proposed Changes
|
|
24
|
-
|
|
25
|
-
### [REFACTOR] Semantic Organization
|
|
26
|
-
|
|
27
|
-
- **Move**: `dot_config/dotfiles` -> `dot_config/shell`.
|
|
28
|
-
- **Reason**: `dotfiles` is redundant inside a dotfiles repo. `shell` describes the content (aliases, paths, functions).
|
|
29
|
-
- **Update**: Update references in `dot_zshrc.tmpl` and install scripts.
|
|
30
|
-
|
|
31
|
-
### [REFACTOR] Script Installation
|
|
32
|
-
|
|
33
|
-
- **Move**: `bin/` -> `dot_local/bin/`.
|
|
34
|
-
- **Reason**: Ensures scripts are automatically installed to `~/.local/bin` (user PATH).
|
|
35
|
-
|
|
36
|
-
### [CLEANUP] Remove Legacy Files
|
|
37
|
-
|
|
38
|
-
- **Delete**: `Makefile`, `package.json`.
|
|
39
|
-
- **Reason**: Replaced by `chezmoi` and GitHub Actions.
|
|
40
|
-
|
|
41
|
-
### [REFACTOR] Script Segregation
|
|
42
|
-
|
|
43
|
-
- **Split**: `run_onchange_install_packages.sh.tmpl` into:
|
|
44
|
-
- `run_onchange_darwin_install-packages.sh.tmpl` (Homebrew)
|
|
45
|
-
- `run_onchange_linux_install-packages.sh.tmpl` (Apt)
|
|
46
|
-
- `run_onchange_after_install-vim-plug.sh.tmpl` (Universal)
|
|
47
|
-
- **Reason**: Improves readability and maintainability.
|
|
48
|
-
|
|
49
|
-
# Phase 18: Component Documentation Polish [COMPLETED]
|
|
50
|
-
|
|
51
|
-
## Goal
|
|
52
|
-
|
|
53
|
-
Update component documentation (`aliases`, `functions`, `paths`) to match the new `chezmoi` architecture and ensure accuracy.
|
|
54
|
-
|
|
55
|
-
## Changes
|
|
56
|
-
|
|
57
|
-
- **Aliases**: Updated `aliases/README.md` to explain modular `*.aliases.sh` loading.
|
|
58
|
-
- **Functions**: Updated `functions/README.md` to remove legacy install instructions.
|
|
59
|
-
- **Paths**: Updated `paths/README.md` to clarify precedence and `chezmoi` integration.
|
|
60
|
-
- **Cleanup**: Standardized all nested alias READMEs to remove legacy HTML artifacts and restore banners.
|
|
61
|
-
|
|
62
|
-
# Phase 19: Toolchain Expansion [COMPLETED]
|
|
63
|
-
|
|
64
|
-
## Goal
|
|
65
|
-
|
|
66
|
-
Add comprehensive support for modern DevOps/Cloud engineering tools.
|
|
67
|
-
|
|
68
|
-
## Proposed Changes
|
|
69
|
-
|
|
70
|
-
### [NEW] Aliases
|
|
71
|
-
|
|
72
|
-
- **Kubernetes**: `kubectl` shortcuts (`k`), `helm`, `k9s`.
|
|
73
|
-
- **IaC**: `terraform` (`tf`), `opentofu`, `ansible`.
|
|
74
|
-
- **Languages**: `go` (`g`), `yarn`, `uv` (modern Python).
|
|
75
|
-
- **Diagnostics**: `jq`, `yq`, `nc`, `curlie`.
|
|
76
|
-
- **Structure**: Each component gets its own directory in `.chezmoitemplates/aliases/` with a standard `README.md`.
|
|
77
|
-
|
|
78
|
-
# Phase 20: Intelligent Assistance [COMPLETED]
|
|
79
|
-
|
|
80
|
-
## Goal
|
|
81
|
-
|
|
82
|
-
Integrate AI capabilities and improved help systems.
|
|
83
|
-
|
|
84
|
-
## Proposed Changes
|
|
85
|
-
|
|
86
|
-
### [NEW] Functions
|
|
87
|
-
|
|
88
|
-
- **`dothelp`**: Index and search all aliases/functions with descriptions.
|
|
89
|
-
- **AI Wrappers**: Aliases for `gh copilot`, `fabric`, or generic LLM CLI tools.
|
|
90
|
-
|
|
91
|
-
# Phase 22: Automated Testing [COMPLETED]
|
|
92
|
-
|
|
93
|
-
## Goal
|
|
94
|
-
|
|
95
|
-
Verify the dotfiles work on clean Linux environments.
|
|
96
|
-
|
|
97
|
-
## Proposed Changes
|
|
98
|
-
|
|
99
|
-
### [CI] GitHub Actions
|
|
100
|
-
|
|
101
|
-
- **Container Job**: Run `chezmoi init --apply` inside a localized Docker container (Ubuntu/Fedora) to prove universal compatibility.
|
|
102
|
-
|
|
103
|
-
# Phase 23: Enterprise Core & Security (The Trust Layer) [COMPLETED]
|
|
104
|
-
|
|
105
|
-
## Goal
|
|
106
|
-
|
|
107
|
-
Establish a "Trust Layer" for the dotfiles ecosystem, ensuring supply chain security and configuration integrity.
|
|
108
|
-
|
|
109
|
-
## Changes
|
|
110
|
-
|
|
111
|
-
- **SLSA & SBOM**: Implemented `security-release.yml` for provenance and SBOM generation.
|
|
112
|
-
- **Signing**: Created `enable-signing` wizard alias for streamlined GPG/SSH configuration.
|
|
113
|
-
- **Immutability**: Created `lock-configs.sh` script and `lock-configs`/`unlock-configs` aliases.
|
|
114
|
-
|
|
115
|
-
- **Immutability**: Created `lock-configs.sh` script and `lock-configs`/`unlock-configs` aliases.
|
|
116
|
-
|
|
117
|
-
# Phase 27: Self-Healing & Diagnostics [COMPLETED]
|
|
118
|
-
|
|
119
|
-
## Goal
|
|
120
|
-
|
|
121
|
-
Enable the system to self-diagnose and repair configuration drift.
|
|
122
|
-
|
|
123
|
-
## Changes
|
|
124
|
-
|
|
125
|
-
- **Scripts**: Created `scripts/diagnostics/doctor.sh` for system health checks.
|
|
126
|
-
- **Aliases**: Added `dot doctor`, `dot drift` (`chezmoi verify`), and `dot heal` (`chezmoi apply`).
|
|
127
|
-
|
|
128
|
-
# Phase 51: Regulatory Compliance [COMPLETED]
|
|
129
|
-
|
|
130
|
-
## Goal
|
|
131
|
-
|
|
132
|
-
Document and enforce compliance with SOC2, ISO, and GDPR standards.
|
|
133
|
-
|
|
134
|
-
## Changes
|
|
135
|
-
|
|
136
|
-
- **Documentation**: Created `COMPLIANCE.md` with control mappings.
|
|
137
|
-
- **Privacy**: Added `privacy-mode` alias to disable CLI telemetry.
|
|
138
|
-
- **Audit**: Added `dot audit` alias for tracking changes.
|
|
139
|
-
|
|
140
|
-
# Phase 54: macOS Deep Integration [COMPLETED]
|
|
141
|
-
|
|
142
|
-
## Goal
|
|
143
|
-
|
|
144
|
-
Harden and optimize the macOS environment via code.
|
|
145
|
-
|
|
146
|
-
## Changes
|
|
147
|
-
|
|
148
|
-
- **Defaults**: Created `run_onchange_darwin_defaults.sh.tmpl` to apply secure/optimized `defaults`.
|
|
149
|
-
- **Hardening**: Enabled screensaver passwords, firewall settings, and disabled guest access.
|
|
150
|
-
|
|
151
|
-
## Goal
|
|
152
|
-
|
|
153
|
-
Ensure legal compliance and proper attribution for the open-source project.
|
|
154
|
-
|
|
155
|
-
## Changes
|
|
156
|
-
|
|
157
|
-
- **Licensing**: Added `scan-licenses` alias (Trivy/FOSSology).
|
|
158
|
-
- **Headers**: Added `add-headers` alias for automated copyright insertion.
|
|
159
|
-
- **Compliance**: Added `check-cla` and `gen-notice` tools.
|
|
160
|
-
|
|
161
|
-
# Phase 59: Font Typography [COMPLETED]
|
|
162
|
-
|
|
163
|
-
## Goal
|
|
164
|
-
|
|
165
|
-
Standardize typography and ensure high-quality font rendering across all environments.
|
|
166
|
-
|
|
167
|
-
## Proposed Changes
|
|
168
|
-
|
|
169
|
-
- **Nerd Fonts**: Automate installation of `JetBrainsMono Nerd Font` and `Symbols Nerd Font`.
|
|
170
|
-
- **Fontconfig**: Deploy XML configuration for Linux font rendering (antialiasing, hinting).
|
|
171
|
-
- **Aliases**: `update-fonts` to refresh font caches (`fc-cache`).
|
|
172
|
-
|
|
173
|
-
# Phase 26: OS Bundling & Compliance [COMPLETED]
|
|
174
|
-
|
|
175
|
-
## Goal
|
|
176
|
-
|
|
177
|
-
Prepare the dotfiles for system-wide deployment and ensure strict adherence to standards.
|
|
178
|
-
|
|
179
|
-
## Proposed Changes
|
|
180
|
-
|
|
181
|
-
- **XDG Compliance**: Audit `00-default.paths.sh` to ensure all standard XDG variables are exported.
|
|
182
|
-
- **Vendor Hooks**: Update `dot_zshrc.tmpl` to source system-level overrides from `/etc/dotfiles/defaults.d/` (Simulates "site-local" config).
|
|
183
|
-
- **Bundling**: Create `scripts/core/package.sh` to create a distributable tarball and scaffold `.deb`/`.pkg` generation logic.
|
|
184
|
-
|
|
185
|
-
# Phase 24: The Universal Installer (Zero-Dependency) [COMPLETED]
|
|
186
|
-
|
|
187
|
-
## Goal
|
|
188
|
-
|
|
189
|
-
Provide a frictionless, "one-curl" onboarding experience and capabilities to deploy configurations remotely.
|
|
190
|
-
|
|
191
|
-
## Proposed Changes
|
|
192
|
-
|
|
193
|
-
- **install.sh**: A standalone, zero-dependency bash script that:
|
|
194
|
-
1. Detects OS/Arch.
|
|
195
|
-
2. Installs `chezmoi` (binary or via package manager).
|
|
196
|
-
3. Initializes the dotfiles repo.
|
|
197
|
-
4. Runs `chezmoi apply`.
|
|
198
|
-
5. Uses ANSI colors for a polished "TUI" feel.
|
|
199
|
-
- **Teleportation**: `scripts/ops/teleport.sh` using `chezmoi archive` piped to SSH to ephemeralize configs on remote servers (e.g., `dot teleport user@server`).
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Repo Audit
|
|
6
|
-
|
|
7
|
-
## Source of truth
|
|
8
|
-
|
|
9
|
-
- `~/.dotfiles` (chezmoi source directory)
|
|
10
|
-
|
|
11
|
-
## Key directories
|
|
12
|
-
|
|
13
|
-
- `.chezmoitemplates/` - templated aliases, functions, paths
|
|
14
|
-
- `dot_config/` - configs mapped into `~/.config`
|
|
15
|
-
- `dot_local/` - binaries and local data (e.g., `dot` CLI)
|
|
16
|
-
- `scripts/` - diagnostics, tests, tooling
|
|
17
|
-
- `tests/` - sandbox Dockerfile
|
|
18
|
-
- `nix/` - optional Nix toolchain
|
|
19
|
-
|
|
20
|
-
## Notable dependencies
|
|
21
|
-
|
|
22
|
-
- `chezmoi`
|
|
23
|
-
- `zsh`, `starship`
|
|
24
|
-
- `neovim`
|
|
25
|
-
- `ripgrep`, `fd`, `bat`, `fzf`, `zoxide`
|
|
26
|
-
- `lazygit`
|
|
27
|
-
|
|
28
|
-
## Notes
|
|
29
|
-
|
|
30
|
-
- Repo-only files excluded via `.chezmoiignore`.
|
|
31
|
-
- Secrets are handled via `age` + `dot secrets` (see `docs/SECRETS.md`).
|
package/docs/articles/.pages
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Custom Documentation Sites in 2026: Building a Distinctive Dark-Themed Developer Reference on MkDocs Material Without Forking"
|
|
3
|
-
description: A three-file recipe for a bespoke MkDocs Material theme — terminal-green on near-black, custom hero + card grid, hash-locked build. No custom_dir, no fork.
|
|
4
|
-
date: 2026-07-05
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Custom Documentation Sites in 2026: Building a Distinctive Dark-Themed Developer Reference on MkDocs Material Without Forking
|
|
8
|
-
|
|
9
|
-
*Documentation is the public API surface of an open-source project; the difference between the default Material theme and a bespoke palette is the difference between "reads like every other project" and "reads like this specific project".*
|
|
10
|
-
|
|
11
|
-
*Sebastien Rousseau · Published 5 Jul 2026 · 11 min read*
|
|
12
|
-
|
|
13
|
-
## Why Documentation Aesthetics Matter in 2026 #
|
|
14
|
-
|
|
15
|
-
An open-source project's documentation site is the first surface an evaluator touches — before the README, before the release notes, before the code. In 2026, the density of developer-tool competition means that visual differentiation carries measurable weight: does the site feel like a curated product, or does it feel like a Jekyll-Cayman default from 2019? The felt distinction shapes adoption decisions before the reader has read a single sentence.
|
|
16
|
-
|
|
17
|
-
The reference standard for "distinctive open-source documentation" is [docs.n8n.io](https://docs.n8n.io) — dark, polished, opinionated, immediately identifiable as n8n's. n8n runs on GitBook, a commercial SaaS. Most open-source projects, [.dotfiles](https://doc.dotfiles.io) included, cannot justify GitBook's licensing but can invest in MkDocs Material customisation to achieve equivalent visual distinction on an open-source stack.
|
|
18
|
-
|
|
19
|
-
This article documents the migration of [doc.dotfiles.io](https://doc.dotfiles.io) from Jekyll's Cayman theme (the default when GitHub Pages serves markdown without a MkDocs configuration) to a fully customised MkDocs Material theme with a terminal-green-on-near-black palette, custom typography, and a hero + card-grid landing page.
|
|
20
|
-
|
|
21
|
-
## The Custom Docs Theme 2026 Architecture Lens #
|
|
22
|
-
|
|
23
|
-
MkDocs Material's customisation surface has four distinct layers, each with different capabilities and constraints:
|
|
24
|
-
|
|
25
|
-
| Layer | Design Decision | Why It Matters | Risk if Mishandled |
|
|
26
|
-
|---|---|---|---|
|
|
27
|
-
| **Palette declaration** | `mkdocs.yml` `theme.palette.primary: custom` + `accent: custom` | Signals to MkDocs Material that CSS custom properties will drive the palette rather than a named preset (green, teal, indigo, etc.) | Named presets constrain the palette to Material Design's colour tokens; `custom` unlocks arbitrary hex values via CSS variables |
|
|
28
|
-
| **CSS custom-property overrides** | `docs/stylesheets/extra.css` sets `--md-primary-fg-color`, `--md-accent-fg-color`, `--md-default-bg-color`, `--md-code-bg-color` under `[data-md-color-scheme="slate"]` | The single source of truth for the palette. Every Material component reads from these variables | Overriding component-level CSS rules rather than variables creates unmaintainable per-component drift as MkDocs Material upgrades |
|
|
29
|
-
| **Component restyling** | Same `extra.css` overrides selectors like `.md-header`, `.md-nav__link`, `.grid.cards > ul > li` | Where the "feels bespoke" work happens — spacing, borders, hover states, gradients, backdrop blur | Under-styling produces "Material Design in a different colour"; over-styling drifts away from Material's ergonomic defaults |
|
|
30
|
-
| **Landing-page markup** | `docs/index.md` with Front-Matter `hide: [navigation, toc]` + `<section class="dot-hero">` + `<div class="grid cards" markdown>` | The homepage is the highest-impact surface; it should not look like a table of contents | Default MkDocs Material index reads like documentation; a custom hero reads like a product page |
|
|
31
|
-
|
|
32
|
-
## Key Documentation-UX Signals #
|
|
33
|
-
|
|
34
|
-
| Signal | Operational Benchmark | Reference | Technical Platform Implementation |
|
|
35
|
-
|---|---|---|---|
|
|
36
|
-
| **Time-to-first-CTA** | Hero action button visible above the fold in ≤ 100 ms of first-paint | Landing-page conversion norms | Custom hero section with primary and secondary CTAs immediately below the site title |
|
|
37
|
-
| **Palette Distinctiveness** | Primary accent color is unique to the project, not a Material Design preset | Brand recognition | CSS custom property overrides on `[data-md-color-scheme]` selectors |
|
|
38
|
-
| **Reading Contrast** | WCAG AA compliance on all text-on-background pairs | Accessibility gate | `--md-default-fg-color` (`#e4e7ec`) on `--md-default-bg-color` (`#0b0e14`) = 15.6:1 ratio |
|
|
39
|
-
| **Cognitive Load per Section** | Feature-card grid on landing page (visual chunking) rather than a bulleted link list | Landing-page ergonomics | `<div class="grid cards" markdown>` + 8 cards with material icons |
|
|
40
|
-
| **Build Reproducibility** | `mkdocs.yml` + `docs/stylesheets/extra.css` under version control; hashes locked in `requirements-docs.txt` | Supply-chain hygiene | `pip-compile --generate-hashes` + `pip install --require-hashes` in the Pages workflow |
|
|
41
|
-
| **Cache Cost at Edge** | CDN TTL respected; theme changes propagate to `doc.<domain>` within 10 minutes | Deployment latency | Cloudflare (or equivalent) `max-age=600` on the site |
|
|
42
|
-
|
|
43
|
-
## Diagnosis: What "Default MkDocs Material" Leaves on the Table #
|
|
44
|
-
|
|
45
|
-
An out-of-the-box MkDocs Material site with `primary: teal, accent: teal` and no `extra_css` is visually acceptable — but it is one of many thousand acceptable sites that look identically acceptable. The named presets are constrained to Google's Material Design palette; the sidebar, header, and content surface all read as "Material default".
|
|
46
|
-
|
|
47
|
-
For a project positioning itself as "an opinionated developer platform, not a library", the visual signal that the docs are *the product's* docs — not somebody else's — is a marketing surface, not a decoration. The lift is contained to three files:
|
|
48
|
-
|
|
49
|
-
- `mkdocs.yml` — palette selector configuration
|
|
50
|
-
- `docs/stylesheets/extra.css` — the actual palette + typography + component overrides
|
|
51
|
-
- `docs/index.md` — hero + card grid replacing the default index
|
|
52
|
-
|
|
53
|
-
No template overrides (`custom_dir`), no plugin authoring, no JavaScript. All the customisation lives in files MkDocs Material is explicitly designed to consume.
|
|
54
|
-
|
|
55
|
-
## Remediation: The Three-File Custom Theme #
|
|
56
|
-
|
|
57
|
-
### `mkdocs.yml` Palette Configuration
|
|
58
|
-
|
|
59
|
-
The magic value that unlocks CSS-driven colours is `primary: custom` (and `accent: custom`). Under `[data-md-color-scheme="slate"]`, MkDocs Material's dark variant, every component reads its colours from CSS custom properties that we get to define.
|
|
60
|
-
|
|
61
|
-
```yaml
|
|
62
|
-
theme:
|
|
63
|
-
name: material
|
|
64
|
-
font:
|
|
65
|
-
text: Inter
|
|
66
|
-
code: JetBrains Mono
|
|
67
|
-
palette:
|
|
68
|
-
- media: "(prefers-color-scheme: dark)"
|
|
69
|
-
scheme: slate
|
|
70
|
-
primary: custom
|
|
71
|
-
accent: custom
|
|
72
|
-
- media: "(prefers-color-scheme: light)"
|
|
73
|
-
scheme: default
|
|
74
|
-
primary: custom
|
|
75
|
-
accent: custom
|
|
76
|
-
features:
|
|
77
|
-
- navigation.tabs
|
|
78
|
-
- navigation.tabs.sticky
|
|
79
|
-
- navigation.footer
|
|
80
|
-
- content.code.copy
|
|
81
|
-
|
|
82
|
-
extra_css:
|
|
83
|
-
- stylesheets/extra.css
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
The `navigation.tabs.sticky` feature keeps the top-level navigation visible on scroll, which pairs with the hero + card grid to keep the site feeling like a product page rather than a scrolling article.
|
|
87
|
-
|
|
88
|
-
### `docs/stylesheets/extra.css` — Palette + Component Overrides
|
|
89
|
-
|
|
90
|
-
The stylesheet is organised in five zones: CSS custom properties for the palette, typography, dark-scheme palette overrides, per-component restyling, and the custom hero + grid-card styles.
|
|
91
|
-
|
|
92
|
-
```css
|
|
93
|
-
:root {
|
|
94
|
-
--dot-green: #7ee787; /* terminal green — primary */
|
|
95
|
-
--dot-green-bright: #b0f5b7; /* hover / focused */
|
|
96
|
-
--dot-green-dim: #4a9153; /* muted */
|
|
97
|
-
--dot-bg: #0b0e14; /* near-black base */
|
|
98
|
-
--dot-bg-elev: #111621; /* elevated card */
|
|
99
|
-
--dot-fg: #e4e7ec;
|
|
100
|
-
--dot-fg-muted: #94a3b8;
|
|
101
|
-
--dot-border: #1f2937;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
[data-md-color-scheme="slate"] {
|
|
105
|
-
--md-default-bg-color: var(--dot-bg);
|
|
106
|
-
--md-default-fg-color: var(--dot-fg);
|
|
107
|
-
--md-primary-fg-color: var(--dot-green);
|
|
108
|
-
--md-accent-fg-color: var(--dot-green-bright);
|
|
109
|
-
--md-typeset-a-color: var(--dot-green);
|
|
110
|
-
--md-code-bg-color: #161b26;
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
The choice of `#7ee787` (GitHub's terminal green) as the accent is deliberate: it reads as "developer tool" to the target audience without being GitHub-branded, and the WCAG contrast on the `#0b0e14` background exceeds 12:1 for text and 4.5:1 for the accent-on-background — comfortably above AA thresholds.
|
|
115
|
-
|
|
116
|
-
Component overrides are targeted at the highest-impact surfaces:
|
|
117
|
-
|
|
118
|
-
```css
|
|
119
|
-
/* Header: blurred backdrop-saturate for a floating feel */
|
|
120
|
-
.md-header {
|
|
121
|
-
background-color: rgba(11, 14, 20, 0.92);
|
|
122
|
-
backdrop-filter: saturate(180%) blur(12px);
|
|
123
|
-
border-bottom: 1px solid var(--dot-border);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/* Grid cards on landing page — hover lift + accent glow */
|
|
127
|
-
.md-typeset .grid.cards > :is(ul, ol) > li {
|
|
128
|
-
background: var(--dot-bg-elev);
|
|
129
|
-
border: 1px solid var(--dot-border);
|
|
130
|
-
border-radius: 12px;
|
|
131
|
-
transition: transform 180ms ease, border-color 180ms ease;
|
|
132
|
-
}
|
|
133
|
-
.md-typeset .grid.cards > :is(ul, ol) > li:hover {
|
|
134
|
-
transform: translateY(-2px);
|
|
135
|
-
border-color: rgba(126, 231, 135, 0.35);
|
|
136
|
-
box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.5);
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### `docs/index.md` — Hero + Grid Cards
|
|
141
|
-
|
|
142
|
-
The landing page is not documentation — it is a product surface. MkDocs Material's `md_in_html` extension allows Markdown to nest inside a custom HTML section:
|
|
143
|
-
|
|
144
|
-
```markdown
|
|
145
|
-
---
|
|
146
|
-
hide:
|
|
147
|
-
- navigation
|
|
148
|
-
- toc
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
<section class="dot-hero" markdown>
|
|
152
|
-
|
|
153
|
-
# .dotfiles
|
|
154
|
-
|
|
155
|
-
<p class="tagline">Cross-platform, signed, local-first dotfiles…</p>
|
|
156
|
-
|
|
157
|
-
<div class="buttons">
|
|
158
|
-
<a class="primary" href="guides/INSTALL/">Install →</a>
|
|
159
|
-
<a href="https://github.com/sebastienrousseau/dotfiles">GitHub</a>
|
|
160
|
-
</div>
|
|
161
|
-
|
|
162
|
-
</section>
|
|
163
|
-
|
|
164
|
-
## What's inside
|
|
165
|
-
|
|
166
|
-
<div class="grid cards" markdown>
|
|
167
|
-
|
|
168
|
-
- :material-console:{ .lg .middle } **Multi-shell parity**
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
Bash, Zsh, Fish, Nushell — same aliases, functions, prompt, and completions.
|
|
173
|
-
|
|
174
|
-
[→ Shell hub](https://doc.dotfiles.io/reference/UTILS/)
|
|
175
|
-
|
|
176
|
-
</div>
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
The `hide: [navigation, toc]` front-matter removes the sidebar and right-column table-of-contents on this page only — the landing page gets the full canvas, sub-pages retain the standard docs layout.
|
|
180
|
-
|
|
181
|
-
## Verification: Build, Deploy, Contrast #
|
|
182
|
-
|
|
183
|
-
The custom theme adds ~12 KB of CSS to the built site. Local `mkdocs build --clean` completes in ~2 seconds. The Pages workflow uses hash-locked dependencies (`pip install --require-hashes -r requirements-docs.txt`) to keep the build reproducible across MkDocs Material and its 30+ transitive dependencies.
|
|
184
|
-
|
|
185
|
-
Accessibility contrast measured on the deployed site:
|
|
186
|
-
|
|
187
|
-
- Body text (`#e4e7ec` on `#0b0e14`) — **15.6:1** (WCAG AAA)
|
|
188
|
-
- Accent (`#7ee787` on `#0b0e14`) — **12.4:1** (WCAG AAA)
|
|
189
|
-
- Muted text (`#94a3b8` on `#0b0e14`) — **7.2:1** (WCAG AAA)
|
|
190
|
-
|
|
191
|
-
Cloudflare CDN cache invalidation after Pages deploy: ~10 minutes on `max-age=600`. Fetching the GitHub Pages origin (`sebastienrousseau.github.io/dotfiles/`) reflects the new theme immediately; the CDN-fronted custom domain propagates within one cache TTL.
|
|
192
|
-
|
|
193
|
-
## Return on Resilience #
|
|
194
|
-
|
|
195
|
-
| Metric | Before (Jekyll Cayman) | After (Custom MkDocs Material) |
|
|
196
|
-
|---|---|---|
|
|
197
|
-
| Page weight | 2.9 KB | 14.8 KB (compressed 4.2 KB) |
|
|
198
|
-
| Time to visible hero | ~800 ms (no hero) | ~150 ms |
|
|
199
|
-
| WCAG AA compliance | Passes body text; hero absent | Passes AAA on all text pairs |
|
|
200
|
-
| Landing-page CTAs | 0 (link list only) | 4 (primary + 3 secondary) |
|
|
201
|
-
| Visual differentiation from default | Zero | Distinctive palette + hero + grid |
|
|
202
|
-
| Build reproducibility | Jekyll on `github-pages` gem (unpinned transitive deps) | `pip install --require-hashes` (fully locked) |
|
|
203
|
-
|
|
204
|
-
## Takeaways #
|
|
205
|
-
|
|
206
|
-
1. **`primary: custom` + `extra_css` beats theme forking.** No `custom_dir`, no Jinja templates, no plugin authoring. All the customisation lives in files MkDocs Material is explicitly designed to consume.
|
|
207
|
-
|
|
208
|
-
2. **CSS custom properties are the maintainable seam.** Overriding `--md-primary-fg-color` scales; overriding `.md-header a.md-header__button:not(...)` selectors doesn't.
|
|
209
|
-
|
|
210
|
-
3. **Treat the landing page as a product surface, not documentation.** Front-matter `hide: [navigation, toc]` unlocks the full canvas. Hero + card grid + tabbed quick-start reads as a product page.
|
|
211
|
-
|
|
212
|
-
4. **Lock the docs-build supply chain.** `pip-compile --generate-hashes` + `pip install --require-hashes` closes the Scorecard `PinnedDependenciesID` alert and prevents transitive-dep drift in Pages deploys.
|
|
213
|
-
|
|
214
|
-
5. **Measure contrast, not just aesthetics.** WCAG AAA on body text is achievable with the right palette; it's not a tradeoff against distinctiveness.
|
|
215
|
-
|
|
216
|
-
The reference implementation landed as [PR #960](https://github.com/sebastienrousseau/dotfiles/pull/960) and is live at [doc.dotfiles.io](https://doc.dotfiles.io); the theme source lives at [`docs/stylesheets/extra.css`](https://github.com/sebastienrousseau/dotfiles/blob/main/docs/stylesheets/extra.css).
|