@sebastienrousseau/dotfiles 0.2.499 → 0.2.500
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 +375 -0
- package/LICENSE +1283 -0
- package/README.md +284 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
- package/docs/AI.md +102 -0
- package/docs/COPYRIGHT +4 -3
- package/docs/NAMING_CONVENTIONS.md +95 -0
- package/docs/README.md +78 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +101 -0
- package/docs/adr/ADR-002-shell-performance.md +121 -0
- package/docs/adr/ADR-003-security-first.md +140 -0
- package/docs/adr/ADR-004-cli-architecture.md +157 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +89 -0
- package/docs/adr/ADR-006-shell-selection.md +115 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
- package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
- package/docs/adr/README.md +32 -0
- package/docs/architecture/ARCHITECTURE.md +113 -0
- package/docs/architecture/INTEROP.md +36 -0
- package/docs/architecture/REPO_LAYOUT.md +237 -0
- package/docs/architecture/WALKTHROUGH.md +82 -0
- package/docs/architecture/fleet-deployment.md +73 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
- package/docs/archive/LEGACY_ROADMAP.md +142 -0
- package/docs/archive/MILESTONE_v0.2.493.md +43 -0
- package/docs/{PLAN.md → archive/PLAN.md} +4 -4
- package/docs/archive/REPO_AUDIT.md +23 -0
- package/docs/guides/INSTALL.md +140 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +52 -0
- package/docs/guides/THEMING.md +222 -0
- package/docs/guides/TROUBLESHOOTING.md +148 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +723 -0
- package/docs/index.md +39 -0
- package/docs/interop/A2A.md +32 -0
- package/docs/manual/00-introduction.md +85 -0
- package/docs/manual/01-concepts/01-architecture.md +134 -0
- package/docs/manual/01-concepts/02-trust-model.md +178 -0
- package/docs/manual/01-concepts/03-theme-engine.md +182 -0
- package/docs/manual/01-concepts/04-fleet.md +142 -0
- package/docs/manual/01-concepts/05-self-healing.md +197 -0
- package/docs/manual/02-tutorials/01-first-install.md +192 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
- package/docs/manual/02-tutorials/03-create-profile.md +238 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
- package/docs/manual/03-reference/01-dot-cli.md +413 -0
- package/docs/manual/03-reference/02-config-files.md +259 -0
- package/docs/manual/03-reference/03-environment.md +120 -0
- package/docs/manual/03-reference/04-templates.md +184 -0
- package/docs/manual/03-reference/05-feature-flags.md +118 -0
- package/docs/manual/04-cookbook/01-recipes.md +281 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
- package/docs/manual/04-cookbook/03-faq.md +167 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
- package/docs/manual/05-appendices/B-security-checklist.md +78 -0
- package/docs/manual/05-appendices/C-glossary.md +36 -0
- package/docs/manual/05-appendices/D-bibliography.md +54 -0
- package/docs/manual/05-appendices/E-license.md +34 -0
- package/docs/manual/_toc.yml +58 -0
- package/docs/manual/command-index.md +58 -0
- package/docs/manual/concept-index.md +164 -0
- package/docs/operations/ATTESTATION.md +39 -0
- package/docs/operations/MAINTENANCE.md +59 -0
- package/docs/operations/MIGRATION.md +101 -0
- package/docs/operations/OPERATIONS.md +164 -0
- package/docs/operations/RELIABILITY.md +116 -0
- package/docs/{ROADMAP.md → operations/ROADMAP.md} +22 -22
- package/docs/operations/TESTING.md +195 -0
- package/docs/operations/TRACEABILITY.md +31 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
- package/docs/operations/VERSION_SYNC.md +344 -0
- package/docs/reference/ALIASES.md +124 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
- package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
- package/docs/reference/FEATURES.md +62 -0
- package/docs/reference/FONTS.md +108 -0
- package/docs/reference/PROFILES.md +65 -0
- package/docs/reference/SCREENSHOTS.md +117 -0
- package/docs/reference/SCRIPTS.md +67 -0
- package/docs/reference/SUPPORT_MATRIX.md +74 -0
- package/docs/reference/THEMES.md +113 -0
- package/docs/reference/TOOLS.md +105 -0
- package/docs/reference/UTILS.md +151 -0
- package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
- package/docs/security/AUTOMATION_SECRETS.md +22 -0
- package/docs/security/COMPLIANCE.md +453 -0
- package/docs/security/ENCRYPTION.md +52 -0
- package/docs/security/FMEA.md +155 -0
- package/docs/security/INCIDENT_RESPONSE.md +575 -0
- package/docs/security/KEYS.md +45 -0
- package/docs/security/KEY_ROTATION.md +219 -0
- package/docs/security/MCP_POLICY.md +69 -0
- package/docs/security/POLICY_RELEASES.md +33 -0
- package/docs/security/README.md +24 -0
- package/docs/security/SECRETS.md +146 -0
- package/docs/security/SECURITY.md +41 -0
- package/docs/security/SECURITY_CHECKLIST.md +44 -0
- package/docs/security/SOUP_REGISTER.md +32 -0
- package/docs/security/THREAT_MODEL.md +120 -0
- package/docs/security/VERIFICATION_VALIDATION.md +224 -0
- package/docs/themes/README.md +6 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
- package/docs/themes/hero-shot.svg +78 -0
- package/dot_config/.module-manifest.json +69 -0
- package/dot_config/ai/identity.md +20 -0
- package/dot_config/ai/patterns/architect.md +14 -0
- package/dot_config/ai/patterns/hardener.md +13 -0
- package/dot_config/ai/patterns/refactor.md +13 -0
- package/dot_config/aider/aider.conf.yml +32 -0
- package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
- package/dot_config/ansible/ansible.cfg +11 -0
- package/dot_config/atuin/config.toml +40 -0
- package/dot_config/bat/config +23 -0
- package/dot_config/brave-flags.conf.tmpl +7 -0
- package/dot_config/btop/btop.conf +16 -0
- package/dot_config/btop/themes/tokyonight.theme +34 -0
- package/dot_config/bun/bunfig.toml.tmpl +33 -0
- package/dot_config/claude/mcp_servers.json +20 -0
- package/dot_config/containers/containers.conf +14 -0
- package/dot_config/curl/dot_curlrc +18 -0
- package/dot_config/dlv/config.yml +39 -0
- package/dot_config/docker/config.json +15 -0
- package/dot_config/dotfiles/agent-card.json +29 -0
- package/dot_config/dotfiles/agent-profiles.json +92 -0
- package/dot_config/dotfiles/boot/README.md +11 -0
- package/dot_config/dotfiles/grub/README.md +11 -0
- package/dot_config/dotfiles/lock/README.md +11 -0
- package/dot_config/dotfiles/mcp-lock.json +33 -0
- package/dot_config/dotfiles/mcp-policy.json +52 -0
- package/dot_config/dotfiles/mcp-registry.json +47 -0
- package/dot_config/dotfiles/model-registry.json +20 -0
- package/dot_config/dotfiles/policy-bundles.json +38 -0
- package/dot_config/dotfiles/prompt-registry.json +16 -0
- package/dot_config/dotfiles/versions.env +18 -0
- package/dot_config/duf/duf.conf +6 -0
- package/dot_config/duti/defaults.duti +5 -0
- package/dot_config/emoji/emoji.txt +34 -0
- package/dot_config/environment.d/50-ssh-agent.conf +2 -0
- package/dot_config/environment.d/90-wayland.conf +19 -0
- package/dot_config/fastfetch/config.jsonc +28 -0
- package/dot_config/firefox/user.js.tmpl +58 -0
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
- package/dot_config/fish/completions/dot.fish.tmpl +115 -0
- package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
- package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
- package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
- package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
- package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
- package/dot_config/fish/config.fish.tmpl +44 -0
- package/dot_config/fish/fish_plugins +1 -0
- package/dot_config/fish/functions/_.fish +3 -0
- package/dot_config/fish/functions/_cached_eval.fish +58 -0
- package/dot_config/fish/functions/als.fish +46 -0
- package/dot_config/fish/functions/bg-upgrade.fish +7 -0
- package/dot_config/fish/functions/c.fish +3 -0
- package/dot_config/fish/functions/cat.fish +9 -0
- package/dot_config/fish/functions/d.fish +7 -0
- package/dot_config/fish/functions/dot.fish +34 -0
- package/dot_config/fish/functions/h.fish +3 -0
- package/dot_config/fish/functions/l.fish +7 -0
- package/dot_config/fish/functions/la.fish +7 -0
- package/dot_config/fish/functions/ll.fish +7 -0
- package/dot_config/fish/functions/log_error.fish +13 -0
- package/dot_config/fish/functions/log_info.fish +13 -0
- package/dot_config/fish/functions/lr.fish +7 -0
- package/dot_config/fish/functions/lra.fish +7 -0
- package/dot_config/fish/functions/ls.fish +7 -0
- package/dot_config/fish/functions/lt.fish +7 -0
- package/dot_config/fish/functions/lta.fish +7 -0
- package/dot_config/fish/functions/notify-run.fish +11 -0
- package/dot_config/fish/functions/q.fish +3 -0
- package/dot_config/fish/functions/silent-run.fish +7 -0
- package/dot_config/fish/functions/yy.fish +8 -0
- package/dot_config/flatpak/flatpak.list +4 -0
- package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
- package/dot_config/foot/foot.ini.tmpl +33 -0
- package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
- package/dot_config/fzf/fzf.zsh +48 -0
- package/dot_config/gem/gemrc +9 -0
- package/dot_config/gh/config.yml +12 -0
- package/dot_config/ghostty/config.tmpl +165 -0
- package/dot_config/git/allowed_signers.tmpl +18 -0
- package/dot_config/git/attributes +12 -0
- package/dot_config/git/commit-template +10 -0
- package/dot_config/git/ignore +27 -0
- package/dot_config/gnupg/gpg-agent.conf +11 -0
- package/dot_config/go/golangci.yml +118 -0
- package/dot_config/go/gopls.json +30 -0
- package/dot_config/goose/config.yaml +29 -0
- package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
- package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
- package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
- package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
- package/dot_config/htop/htoprc +20 -0
- package/dot_config/inputrc +2 -0
- package/dot_config/ipython/profile_default/ipython_config.py +19 -0
- package/dot_config/just/justfile +122 -0
- package/dot_config/k9s/config.yaml +65 -0
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
- package/dot_config/kanshi/config.tmpl +22 -0
- package/dot_config/karabiner/karabiner.json +14 -0
- package/dot_config/kitty/kitty.conf.tmpl +53 -0
- package/dot_config/lazydocker/config.yml +186 -0
- package/dot_config/lazygit/config.yml +35 -0
- package/dot_config/mako/config +47 -0
- package/dot_config/mas/masapps.txt +5 -0
- package/dot_config/micro/settings.json +3 -0
- package/dot_config/mimeapps.list +77 -0
- package/dot_config/minikube/config.json +13 -0
- package/dot_config/mise/config.toml +99 -0
- package/dot_config/mongosh/mongoshrc.js +68 -0
- package/dot_config/mpv/input.conf +47 -0
- package/dot_config/mpv/mpv.conf +47 -0
- package/dot_config/mycli/myclirc +67 -0
- package/dot_config/nano/nanorc +28 -0
- package/dot_config/ncdu/config +12 -0
- package/dot_config/niri/config.kdl.tmpl +327 -0
- package/dot_config/nushell/aliases.nu +18 -0
- package/dot_config/nushell/completions.nu.tmpl +52 -0
- package/dot_config/nushell/config.nu.tmpl +86 -0
- package/dot_config/nushell/env.nu.tmpl +94 -0
- package/dot_config/nushell/functions.nu.tmpl +17 -0
- package/dot_config/nvim/init.lua +18 -0
- package/dot_config/nvim/lazy-lock.json +58 -0
- package/dot_config/nvim/lua/config/autocmds.lua +107 -0
- package/dot_config/nvim/lua/config/keymaps.lua +92 -0
- package/dot_config/nvim/lua/config/lazy.lua +44 -0
- package/dot_config/nvim/lua/config/options.lua +49 -0
- package/dot_config/nvim/lua/plugins/ai.lua +75 -0
- package/dot_config/nvim/lua/plugins/coding.lua +216 -0
- package/dot_config/nvim/lua/plugins/completion.lua +60 -0
- package/dot_config/nvim/lua/plugins/dap.lua +412 -0
- package/dot_config/nvim/lua/plugins/editor.lua +55 -0
- package/dot_config/nvim/lua/plugins/git.lua +10 -0
- package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
- package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
- package/dot_config/nvim/lua/plugins/rust.lua +34 -0
- package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
- package/dot_config/nvim/lua/plugins/ui.lua +509 -0
- package/dot_config/paru/paru.conf +10 -0
- package/dot_config/pip/pip.conf.tmpl +32 -0
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
- package/dot_config/pueue/pueue.yml +34 -0
- package/dot_config/pypoetry/config.toml +6 -0
- package/dot_config/pyrightconfig.json +5 -0
- package/dot_config/raycast/README.md +13 -0
- package/dot_config/redis/redisclirc +41 -0
- package/dot_config/ripgrep/ripgreprc +21 -0
- package/dot_config/shell/00-core-paths.sh.tmpl +133 -0
- package/dot_config/shell/05-core-safety.sh +47 -0
- package/dot_config/shell/10-secrets.sh +40 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
- package/dot_config/shell/40-ls-colors.sh +48 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +10 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +120 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +54 -0
- package/dot_config/shell/Brewfile +207 -0
- package/dot_config/shell/Brewfile.cask +92 -0
- package/dot_config/shell/Brewfile.cli +127 -0
- package/dot_config/shell/README.md +267 -0
- package/dot_config/shell/als_data.txt.tmpl +65 -0
- package/dot_config/shell/custom/auto_ls.zsh +20 -0
- package/dot_config/shell/custom/context_suggest.zsh +68 -0
- package/dot_config/shell/custom/error_analysis.zsh +45 -0
- package/dot_config/sops/dot_sops.yaml +23 -0
- package/dot_config/starship.toml.tmpl +202 -0
- package/dot_config/swaylock/config +43 -0
- package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
- package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
- package/dot_config/systemd/user/pueued.service +12 -0
- package/dot_config/systemd/user/ssh-agent.service +12 -0
- package/dot_config/task/Taskfile.yml +86 -0
- package/dot_config/tflint/tflint.hcl +9 -0
- package/dot_config/tmux/tmux.conf.tmpl +223 -0
- package/dot_config/topgrade.toml.tmpl +54 -0
- package/dot_config/user-dirs.dirs +9 -0
- package/dot_config/vscode/extensions.txt +11 -0
- package/dot_config/vscode/settings.json.tmpl +82 -0
- package/dot_config/waybar/config.jsonc.tmpl +90 -0
- package/dot_config/waybar/style.css.tmpl +211 -0
- package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
- package/dot_config/wget/wgetrc +12 -0
- package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
- package/dot_config/yarn/yarnrc.yml +36 -0
- package/dot_config/yazi/keymap.toml +67 -0
- package/dot_config/yazi/theme.toml +102 -0
- package/dot_config/yazi/yazi.toml +40 -0
- package/dot_config/zathura/zathurarc +52 -0
- package/dot_config/zellij/config.kdl.tmpl +79 -0
- package/dot_config/zsh/dot_zprofile +7 -0
- package/dot_config/zsh/dot_zshenv +5 -0
- package/dot_config/zsh/dot_zshrc.tmpl +498 -0
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
- package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +194 -0
- package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
- package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
- package/dot_local/bin/executable_ai-update +195 -0
- package/dot_local/bin/executable_ai_core +152 -0
- package/dot_local/bin/executable_antigravity +11 -0
- package/dot_local/bin/executable_b64 +84 -0
- package/dot_local/bin/executable_bm +77 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +589 -0
- package/dot_local/bin/executable_dot-ai +36 -0
- package/dot_local/bin/executable_dot-bootstrap +77 -0
- package/dot_local/bin/executable_dot-launch-or-focus +52 -0
- package/dot_local/bin/executable_dot-load-benchmark +31 -0
- package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
- package/dot_local/bin/executable_dot-theme-sync +952 -0
- package/dot_local/bin/executable_dot_completion +57 -0
- package/dot_local/bin/executable_dtags +28 -0
- package/dot_local/bin/executable_epoch +67 -0
- package/dot_local/bin/executable_extract +41 -0
- package/dot_local/bin/executable_gbd +52 -0
- package/dot_local/bin/executable_gd +42 -0
- package/dot_local/bin/executable_git-ai-commit +175 -0
- package/dot_local/bin/executable_git-ai-diff +169 -0
- package/dot_local/bin/executable_gl +101 -0
- package/dot_local/bin/executable_hash +161 -0
- package/dot_local/bin/executable_hashsum +160 -0
- package/dot_local/bin/executable_hex +115 -0
- package/dot_local/bin/executable_jsonv +78 -0
- package/dot_local/bin/executable_jwt +94 -0
- package/dot_local/bin/executable_kill-port +75 -0
- package/dot_local/bin/executable_lorem +118 -0
- package/dot_local/bin/executable_mkscript +35 -0
- package/dot_local/bin/executable_monitor +56 -0
- package/dot_local/bin/executable_myip +51 -0
- package/dot_local/bin/executable_notify +22 -0
- package/dot_local/bin/executable_open +36 -0
- package/dot_local/bin/executable_pw +27 -0
- package/dot_local/bin/executable_rec-start +46 -0
- package/dot_local/bin/executable_rec-stop +35 -0
- package/dot_local/bin/executable_regex +132 -0
- package/dot_local/bin/executable_start-niri +8 -0
- package/dot_local/bin/executable_tmux-sessionizer +314 -0
- package/dot_local/bin/executable_tour +175 -0
- package/dot_local/bin/executable_up +21 -0
- package/dot_local/bin/executable_update +142 -0
- package/dot_local/bin/executable_uuid +87 -0
- package/dot_local/bin/executable_win +32 -0
- package/dot_local/bin/executable_yamlv +57 -0
- package/dot_local/share/bash-completion/completions/dot +72 -0
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +149 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +283 -0
- package/install.sh +342 -0
- package/package.json +1 -1
- package/scripts/ci/check-copyright-headers.sh +96 -0
- package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
- package/scripts/ci/install-chezmoi-verified.sh +64 -0
- package/scripts/ci/validate-ci-config.sh +224 -0
- package/scripts/demo/record.sh +42 -0
- package/scripts/diagnostics/a2a-conformance.sh +162 -0
- package/scripts/diagnostics/alias-governance.sh +137 -0
- package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
- package/scripts/diagnostics/aliases-manifest.sh +31 -0
- package/scripts/diagnostics/benchmark.sh +381 -0
- package/scripts/diagnostics/conflicts.sh +72 -0
- package/scripts/diagnostics/doctor-unified.sh +38 -0
- package/scripts/diagnostics/doctor.sh +541 -0
- package/scripts/diagnostics/drift-dashboard.sh +37 -0
- package/scripts/diagnostics/health.sh +597 -0
- package/scripts/diagnostics/history-analysis.sh +85 -0
- package/scripts/diagnostics/mcp-doctor.sh +575 -0
- package/scripts/diagnostics/perf.sh +225 -0
- package/scripts/diagnostics/scorecard.sh +118 -0
- package/scripts/diagnostics/secret-governance.sh +58 -0
- package/scripts/diagnostics/security-score.sh +438 -0
- package/scripts/diagnostics/smoke-test.sh +87 -0
- package/scripts/diagnostics/snapshot.sh +89 -0
- package/scripts/diagnostics/verify.sh +107 -0
- package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
- package/scripts/diagnostics/version-locks.sh +79 -0
- package/scripts/diagnostics/workstation-attestation.sh +181 -0
- package/scripts/docs/build-manual.sh +883 -0
- package/scripts/docs/check-manual.sh +213 -0
- package/scripts/dot/commands/agent.sh +465 -0
- package/scripts/dot/commands/ai.sh +416 -0
- package/scripts/dot/commands/aliases.sh +250 -0
- package/scripts/dot/commands/appearance.sh +80 -0
- package/scripts/dot/commands/core.sh +185 -0
- package/scripts/dot/commands/diagnostics.sh +229 -0
- package/scripts/dot/commands/fleet.sh +399 -0
- package/scripts/dot/commands/lint.sh +177 -0
- package/scripts/dot/commands/manual.sh +168 -0
- package/scripts/dot/commands/meta.sh +248 -0
- package/scripts/dot/commands/patterns.sh +54 -0
- package/scripts/dot/commands/restore.sh +231 -0
- package/scripts/dot/commands/secrets.sh +223 -0
- package/scripts/dot/commands/security.sh +76 -0
- package/scripts/dot/commands/tools.sh +469 -0
- package/scripts/dot/data/alias-deprecations.tsv +2 -0
- package/scripts/dot/lib/bento.sh +49 -0
- package/scripts/dot/lib/log.sh +194 -0
- package/scripts/dot/lib/platform.sh +98 -0
- package/scripts/dot/lib/ui.sh +507 -0
- package/scripts/dot/lib/utils.sh +372 -0
- package/scripts/fonts/install-nerd-fonts.sh +68 -0
- package/scripts/fonts/patch-fonts.sh +35 -0
- package/scripts/git-hooks/install.sh +11 -0
- package/scripts/git-hooks/pre-commit +12 -0
- package/scripts/git-hooks/pre-commit-audit.sh +145 -0
- package/scripts/git-hooks/pre-push +29 -0
- package/scripts/git-hooks/prepare-commit-msg +29 -0
- package/scripts/lib/secrets_provider.sh +158 -0
- package/scripts/maintenance/check-updates.sh +131 -0
- package/scripts/ops/ai-setup.sh +55 -0
- package/scripts/ops/bundle.sh +77 -0
- package/scripts/ops/chaos.sh +49 -0
- package/scripts/ops/chezmoi-apply.sh +270 -0
- package/scripts/ops/chezmoi-diff.sh +15 -0
- package/scripts/ops/chezmoi-remove.sh +45 -0
- package/scripts/ops/chezmoi-update.sh +48 -0
- package/scripts/ops/heal-chezmoi.sh +51 -0
- package/scripts/ops/heal-system.sh +128 -0
- package/scripts/ops/heal-tools.sh +340 -0
- package/scripts/ops/heal.sh +222 -0
- package/scripts/ops/post-apply-repair.sh +106 -0
- package/scripts/ops/prewarm.sh +127 -0
- package/scripts/ops/release.sh +252 -0
- package/scripts/ops/rollback.sh +589 -0
- package/scripts/ops/setup.sh +137 -0
- package/scripts/ops/teleport.sh +33 -0
- package/scripts/qa/coverage-baseline.sh +60 -0
- package/scripts/qa/docs-coverage.sh +111 -0
- package/scripts/qa/reliability-audit.sh +138 -0
- package/scripts/qa/traceability-coverage.sh +116 -0
- package/scripts/qa/validate-examples.sh +26 -0
- package/scripts/qa/wsl-contract.sh +11 -0
- package/scripts/release/package-policy-bundles.sh +125 -0
- package/scripts/secrets/age-init.sh +70 -0
- package/scripts/secrets/create-secrets-file.sh +45 -0
- package/scripts/secrets/encrypt-ssh-key.sh +43 -0
- package/scripts/security/backup.sh +57 -0
- package/scripts/security/dns-doh.sh +51 -0
- package/scripts/security/encryption-check.sh +54 -0
- package/scripts/security/enforce-policies.sh +334 -0
- package/scripts/security/firewall.sh +90 -0
- package/scripts/security/lock-configs.sh +57 -0
- package/scripts/security/lock-screen.sh +55 -0
- package/scripts/security/manage-secrets.sh +428 -0
- package/scripts/security/ssh-cert.sh +203 -0
- package/scripts/security/telemetry-kill.sh +50 -0
- package/scripts/security/usb-safety.sh +51 -0
- package/scripts/theme/apply-gnome-theme.sh +328 -0
- package/scripts/theme/extract-theme.py +677 -0
- package/scripts/theme/install-boot-logo.sh +62 -0
- package/scripts/theme/install-catppuccin-themes.sh +370 -0
- package/scripts/theme/install-cursors.sh +25 -0
- package/scripts/theme/install-file-icons.sh +26 -0
- package/scripts/theme/install-grub-theme.sh +61 -0
- package/scripts/theme/install-lock-icon.sh +30 -0
- package/scripts/theme/merge-wallpaper.sh +141 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +421 -0
- package/scripts/theme/wallpaper-rotate.sh +136 -0
- package/scripts/theme/wallpaper-sync.sh +397 -0
- package/scripts/tools/cmatrix.sh +21 -0
- package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
- package/scripts/tools/emoji-picker.sh +48 -0
- package/scripts/tools/figlet-banner.sh +18 -0
- package/scripts/tools/log-rotate.sh +30 -0
- package/scripts/tools/lolcat-wrap.sh +19 -0
- package/scripts/tools/pipes.sh +48 -0
- package/scripts/tuning/linux.sh +185 -0
- package/scripts/tuning/macos.sh +55 -0
- package/scripts/uninstall.sh +85 -0
- package/scripts/version-sync.sh +487 -0
- package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
- package/templates/chezmoi-data/mac-m1.toml.example +16 -0
- package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
- package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
- package/templates/projects/go/.github/workflows/ci.yml +31 -0
- package/templates/projects/go/README.md +4 -0
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +7 -0
- package/templates/projects/molecule/converge.yml +7 -0
- package/templates/projects/molecule/molecule.yml +16 -0
- package/templates/projects/node/.github/workflows/ci.yml +30 -0
- package/templates/projects/node/README.md +4 -0
- package/templates/projects/node/package-lock.json +12 -0
- package/templates/projects/node/src/index.js +1 -0
- package/templates/projects/packer/README.md +15 -0
- package/templates/projects/packer/main.pkr.hcl +15 -0
- package/templates/projects/python/.github/workflows/ci.yml +34 -0
- package/templates/projects/python/README.md +4 -0
- package/templates/projects/python/pyproject.toml +15 -0
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
- package/templates/projects/python/tests/test_basic.py +1 -0
- package/docs/ARCHITECTURE.md +0 -62
- package/docs/COMPLIANCE.md +0 -47
- package/docs/OPERATIONS.md +0 -103
- package/docs/PR_DESCRIPTION.md +0 -150
- package/docs/ROADMAP_legacy.md +0 -556
- package/docs/SECURITY_CHECKLIST.md +0 -25
- package/docs/TASK.md +0 -99
- package/docs/WALKTHROUGH.md +0 -46
- package/scripts/backup.sh +0 -142
- package/scripts/banner.sh +0 -20
- package/scripts/benchmark.sh +0 -20
- package/scripts/build.sh +0 -41
- package/scripts/clean.sh +0 -31
- package/scripts/compile.sh +0 -54
- package/scripts/copy.sh +0 -108
- package/scripts/doctor.sh +0 -79
- package/scripts/dotfiles.sh +0 -63
- package/scripts/download.sh +0 -35
- package/scripts/help.sh +0 -57
- package/scripts/lock-configs.sh +0 -57
- package/scripts/package.sh +0 -46
- package/scripts/ssh.sh +0 -55
- package/scripts/teleport.sh +0 -23
- package/scripts/test-aliases.sh +0 -25
- package/scripts/test_smoke.sh +0 -88
- package/scripts/unpack.sh +0 -28
package/docs/index.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# .dotfiles
|
|
2
|
+
|
|
3
|
+
Cross-platform, signed, local-first dotfiles for macOS, Linux, and WSL.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/sebastienrousseau/dotfiles/actions)
|
|
6
|
+
[](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.500)
|
|
7
|
+
[](https://github.com/sebastienrousseau/dotfiles/releases)
|
|
8
|
+
|
|
9
|
+
This site is published from the `docs/` directory on `master` and tracks the current workstation baseline, operational guidance, and security material for the repository.
|
|
10
|
+
|
|
11
|
+
## Start Here
|
|
12
|
+
|
|
13
|
+
- [Repository README](https://github.com/sebastienrousseau/dotfiles#readme)
|
|
14
|
+
- [Install guide](guides/INSTALL.md)
|
|
15
|
+
- [Troubleshooting](guides/TROUBLESHOOTING.md)
|
|
16
|
+
- [Support matrix](reference/SUPPORT_MATRIX.md)
|
|
17
|
+
|
|
18
|
+
## Workstation Operations
|
|
19
|
+
|
|
20
|
+
- [Utilities and `dot` CLI](reference/UTILS.md)
|
|
21
|
+
- [Trusted agent workstation](operations/TRUSTED_AGENT_WORKSTATION.md)
|
|
22
|
+
- [Workstation attestation](operations/ATTESTATION.md)
|
|
23
|
+
- [Operations runbooks](operations/OPERATIONS.md)
|
|
24
|
+
- [Architecture overview](architecture/ARCHITECTURE.md)
|
|
25
|
+
- [Repository layout](architecture/REPO_LAYOUT.md)
|
|
26
|
+
|
|
27
|
+
## Security and Governance
|
|
28
|
+
|
|
29
|
+
- [Security overview](security/SECURITY.md)
|
|
30
|
+
- [Security checklist](security/SECURITY_CHECKLIST.md)
|
|
31
|
+
- [Compliance](security/COMPLIANCE.md)
|
|
32
|
+
- [Policy bundle releases](security/POLICY_RELEASES.md)
|
|
33
|
+
- [Threat model](security/THREAT_MODEL.md)
|
|
34
|
+
|
|
35
|
+
## Current Release
|
|
36
|
+
|
|
37
|
+
- Current tagged release: [`v0.2.500`](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.500)
|
|
38
|
+
- Latest release feed: [GitHub releases](https://github.com/sebastienrousseau/dotfiles/releases/latest)
|
|
39
|
+
- Source repository: [sebastienrousseau/dotfiles](https://github.com/sebastienrousseau/dotfiles)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Agent Interop
|
|
2
|
+
|
|
3
|
+
The repository now ships an agent card and an A2A-ready discovery document.
|
|
4
|
+
|
|
5
|
+
Artifacts:
|
|
6
|
+
- [agent-card.json](/home/seb/.dotfiles/dot_config/dotfiles/agent-card.json)
|
|
7
|
+
- [agent.json](/home/seb/.dotfiles/.well-known/agent.json)
|
|
8
|
+
|
|
9
|
+
Core properties:
|
|
10
|
+
- bounded profiles: `ask`, `plan`, `apply`, `audit`
|
|
11
|
+
- MCP-governed execution
|
|
12
|
+
- workstation attestation export
|
|
13
|
+
- persistent agent session logs
|
|
14
|
+
- replayable checkpoints
|
|
15
|
+
- fleet attestation export
|
|
16
|
+
|
|
17
|
+
Tracked governance artifacts:
|
|
18
|
+
- policy bundles
|
|
19
|
+
- prompt registry
|
|
20
|
+
- model registry
|
|
21
|
+
|
|
22
|
+
Session logs are stored in `~/.local/state/dotfiles/agent-sessions.jsonl`.
|
|
23
|
+
Checkpoints are stored in `~/.local/state/dotfiles/checkpoints/`.
|
|
24
|
+
|
|
25
|
+
Validate conformance with:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
dot agent conformance
|
|
29
|
+
dot agent conformance --strict --json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The current posture is A2A-ready with tracked conformance checks. It exposes identity, governance, checkpoints, and local evidence.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Introduction
|
|
2
|
+
|
|
3
|
+
This manual describes `.dotfiles` v0.2.500 — a trusted agent workstation baseline for macOS, Linux, and WSL.
|
|
4
|
+
|
|
5
|
+
The repository is more than a personal dotfiles collection. It ships as workstation infrastructure: signed, attested, multi-platform, AI-aware, and self-healing. Chezmoi handles templating and platform differences. The `dot` CLI sits on top and coordinates lifecycle operations.
|
|
6
|
+
|
|
7
|
+
## Who This Manual Is For
|
|
8
|
+
|
|
9
|
+
- **Developers** who want a reproducible, signed development environment across machines
|
|
10
|
+
- **Security engineers** who require cryptographic attestation, SBOM, and policy gates
|
|
11
|
+
- **AI agent operators** running Claude Code, Codex, GitHub Copilot, or MCP-aware tooling
|
|
12
|
+
- **Team leads** deploying standardized workstations across a fleet
|
|
13
|
+
|
|
14
|
+
The content assumes basic familiarity with Git, shell environments, and chezmoi. No prior knowledge of the specific tools used (Mise, Nix, Age, SOPS, MCP) is required.
|
|
15
|
+
|
|
16
|
+
## What the Manual Covers
|
|
17
|
+
|
|
18
|
+
- **Concepts** — the mental model behind the theme engine, trust model, fleet architecture, and self-healing
|
|
19
|
+
- **Tutorials** — step-by-step walkthroughs for common tasks
|
|
20
|
+
- **Reference** — every `dot` command, every config file, every template variable, every feature flag
|
|
21
|
+
- **Cookbook** — 30+ specific recipes for day-to-day tasks and troubleshooting
|
|
22
|
+
- **Appendices** — platform support matrix, security checklist, glossary, bibliography
|
|
23
|
+
|
|
24
|
+
## Getting the Manual
|
|
25
|
+
|
|
26
|
+
The manual is published in nine formats — all generated from the same Markdown source on every release:
|
|
27
|
+
|
|
28
|
+
| Format | Size | Use case |
|
|
29
|
+
|:---|---:|:---|
|
|
30
|
+
| HTML (single page) | ~200K | Offline browsing |
|
|
31
|
+
| HTML (multi-page) | — | Web reading |
|
|
32
|
+
| HTML gzipped (single) | ~50K | Fast download |
|
|
33
|
+
| EPUB | ~150K | E-readers |
|
|
34
|
+
| PDF | ~400K | Printing |
|
|
35
|
+
| ASCII text | ~120K | Terminal pagers |
|
|
36
|
+
| Markdown source | ~80K | Re-processing |
|
|
37
|
+
|
|
38
|
+
Published at: `https://sebastienrousseau.github.io/dotfiles/manual/`
|
|
39
|
+
|
|
40
|
+
Fetch from the CLI:
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
dot manual # open in browser
|
|
44
|
+
dot manual pdf # download and open PDF
|
|
45
|
+
dot manual text # pipe plain text to pager
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Quick Install
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)"
|
|
52
|
+
dot doctor
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Requires `git` and `curl`. Supported on macOS 14+, Ubuntu/Debian, Arch, Fedora, openSUSE, and WSL2.
|
|
56
|
+
|
|
57
|
+
## Conventions Used in This Manual
|
|
58
|
+
|
|
59
|
+
| Convention | Meaning |
|
|
60
|
+
|:---|:---|
|
|
61
|
+
| `fixed-width` | Commands, file paths, environment variables |
|
|
62
|
+
| **Bold** | Important terms introduced for the first time |
|
|
63
|
+
| > Note: | Supplementary information |
|
|
64
|
+
| > Warning: | Actions with potentially destructive effects |
|
|
65
|
+
|
|
66
|
+
Command placeholders use `<angle-brackets>`. Optional arguments use `[brackets]`. Repeated arguments end with `...`.
|
|
67
|
+
|
|
68
|
+
## How to Read This Manual
|
|
69
|
+
|
|
70
|
+
- **First-time users** — read [Introduction](#introduction), [First Install](02-tutorials/01-first-install.md), then browse the [Cookbook](04-cookbook/01-recipes.md).
|
|
71
|
+
- **Upgrading** — read the [Migration section](../operations/MIGRATION.md) for your version delta.
|
|
72
|
+
- **Deep diving** — the [Concepts](01-concepts/) chapters explain the architecture and rationale.
|
|
73
|
+
- **Looking something up** — use the [Command Index](command-index.md) or [Concept Index](concept-index.md).
|
|
74
|
+
|
|
75
|
+
## Licensing
|
|
76
|
+
|
|
77
|
+
The `.dotfiles` repository is licensed under the MIT License. See [Appendix E](05-appendices/E-license.md) for the full text.
|
|
78
|
+
|
|
79
|
+
Individual tools packaged, referenced, or templated by this repository retain their original licenses.
|
|
80
|
+
|
|
81
|
+
## Reporting Issues
|
|
82
|
+
|
|
83
|
+
- **Bugs and feature requests** — <https://github.com/sebastienrousseau/dotfiles/issues>
|
|
84
|
+
- **Security vulnerabilities** — see [Security Policy](../security/SECURITY.md); do not open public issues for unpatched vulnerabilities
|
|
85
|
+
- **Documentation corrections** — open a pull request against `docs/manual/` on the `master` branch
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
`.dotfiles` is composed of four loosely coupled subsystems, coordinated by a single command-line interface.
|
|
4
|
+
|
|
5
|
+
## The Four Subsystems
|
|
6
|
+
|
|
7
|
+
### 1. Templating Engine — Chezmoi
|
|
8
|
+
|
|
9
|
+
[Chezmoi](https://chezmoi.io) reads the source directory (`~/.dotfiles/` or `~/.local/share/chezmoi/`), renders templates using data from `.chezmoidata.toml`, and writes the results to the target paths in `$HOME`.
|
|
10
|
+
|
|
11
|
+
Every file in the source directory follows chezmoi naming conventions:
|
|
12
|
+
|
|
13
|
+
| Prefix / Suffix | Effect |
|
|
14
|
+
|:---|:---|
|
|
15
|
+
| `dot_` | Deployed with leading `.` (`dot_zshrc` → `~/.zshrc`) |
|
|
16
|
+
| `executable_` | Sets `+x` permission on the destination |
|
|
17
|
+
| `private_` | Sets `0600` permission on the destination |
|
|
18
|
+
| `.tmpl` | Processed as a Go template with chezmoi data |
|
|
19
|
+
| `run_onchange_` | Script runs when the target changes |
|
|
20
|
+
| `run_before_` | Script runs before apply |
|
|
21
|
+
| `run_after_` | Script runs after apply |
|
|
22
|
+
|
|
23
|
+
### 2. Runtime Management — Mise and Nix
|
|
24
|
+
|
|
25
|
+
**Mise** ([mise.jdx.dev](https://mise.jdx.dev)) manages per-user language runtimes and CLI tools. All entries in `~/.config/mise/config.toml` are installed to `~/.local/share/mise/installs/`, activated by PATH shimming. No system-level packages are touched.
|
|
26
|
+
|
|
27
|
+
**Nix Flakes** (`nix/flake.nix`) provide strictly reproducible builds when Mise's approximate semver-pinning is insufficient — for example, for declaring an entire system via Home Manager.
|
|
28
|
+
|
|
29
|
+
### 3. The `dot` CLI
|
|
30
|
+
|
|
31
|
+
`dot` is the entry point for all lifecycle operations. It is a pure Bash script (no runtime dependencies) that dispatches to command handlers in `scripts/dot/commands/`.
|
|
32
|
+
|
|
33
|
+
Each command is self-contained — any command can be invoked directly as a script if needed:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
bash ~/.dotfiles/scripts/dot/commands/diagnostics.sh doctor
|
|
37
|
+
# equivalent to:
|
|
38
|
+
dot doctor
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The CLI follows a grouping convention (see [dot CLI Reference](../03-reference/01-dot-cli.md)):
|
|
42
|
+
|
|
43
|
+
- **Lifecycle** — `sync`, `apply`, `rollback`, `heal`, `bundle`
|
|
44
|
+
- **Diagnostics** — `doctor`, `drift`, `benchmark`, `score`, `metrics`
|
|
45
|
+
- **AI & Agents** — `ai`, `mcp`, `agent`, `mode`
|
|
46
|
+
- **Configuration** — `theme`, `env`, `profile`, `secrets`
|
|
47
|
+
- **Fleet** — `fleet`, `attest`
|
|
48
|
+
- **Reference** — `help`, `search`, `version`, `manual`
|
|
49
|
+
|
|
50
|
+
### 4. Secrets and Attestation
|
|
51
|
+
|
|
52
|
+
Secrets are encrypted at rest using **Age** (modern file encryption) with **SOPS** (YAML-aware envelope) or `chezmoi encrypt`. The private key never leaves `~/.config/age/keys.txt` (or the user's password manager).
|
|
53
|
+
|
|
54
|
+
Attestation produces signed, machine-readable JSON recording:
|
|
55
|
+
|
|
56
|
+
- Host identity (kernel, arch, hostname hash)
|
|
57
|
+
- Policy hash (MCP policy, agent profiles)
|
|
58
|
+
- Tool versions (mise, nix, key binaries)
|
|
59
|
+
- Git HEAD and signature status
|
|
60
|
+
- Timestamp and verification hash
|
|
61
|
+
|
|
62
|
+
See [Trust Model](02-trust-model.md) for the full threat model.
|
|
63
|
+
|
|
64
|
+
## Data Flow
|
|
65
|
+
|
|
66
|
+
```mermaid
|
|
67
|
+
graph TD
|
|
68
|
+
User[User Shell] --> CLI{dot CLI}
|
|
69
|
+
|
|
70
|
+
CLI --> L[Lifecycle Commands]
|
|
71
|
+
CLI --> D[Diagnostics Commands]
|
|
72
|
+
CLI --> A[AI Commands]
|
|
73
|
+
CLI --> C[Config Commands]
|
|
74
|
+
CLI --> F[Fleet Commands]
|
|
75
|
+
|
|
76
|
+
L --> Chezmoi[Chezmoi Engine]
|
|
77
|
+
C --> Chezmoi
|
|
78
|
+
|
|
79
|
+
Chezmoi --> Source[~/.dotfiles source]
|
|
80
|
+
Source --> Data[.chezmoidata.toml + themes.toml]
|
|
81
|
+
Source --> Tmpl[.tmpl files]
|
|
82
|
+
|
|
83
|
+
Data --> Render[Template render]
|
|
84
|
+
Tmpl --> Render
|
|
85
|
+
Render --> Target[~ target paths]
|
|
86
|
+
|
|
87
|
+
Target --> Shells[Zsh / Fish / Bash / Nushell]
|
|
88
|
+
Target --> Apps[Ghostty / Neovim / VS Code / etc.]
|
|
89
|
+
|
|
90
|
+
Wallpapers[~/Pictures/Wallpapers/ + System] --> KMeans[K-Means CIELAB engine]
|
|
91
|
+
KMeans --> ThemesT[themes.toml generated]
|
|
92
|
+
ThemesT --> Data
|
|
93
|
+
|
|
94
|
+
A --> MCP[MCP Policy + Registry]
|
|
95
|
+
F --> Attest[Signed Attestation Logs]
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Startup Performance Model
|
|
99
|
+
|
|
100
|
+
Shell startup is optimized via a three-tier caching strategy:
|
|
101
|
+
|
|
102
|
+
1. **Bake-at-apply-time** — values computed once during `chezmoi apply` (HOSTNAME, platform, OS version) are written directly into config files, avoiding subshells at startup.
|
|
103
|
+
2. **`_cached_eval` pattern** — slow initializers (mise, zoxide, atuin, starship) write their output to `~/.cache/shell/<tool>-init.sh`. Subsequent shells `source` the cache. Cache is invalidated when the binary's mtime changes.
|
|
104
|
+
3. **Lazy loading** — heavy layers (nvm, rbenv, direnv) are loaded on first invocation via shell function stubs.
|
|
105
|
+
|
|
106
|
+
Target: ≤500ms cold shell startup, ≤100ms per component. Enforced by CI benchmark (see [Performance Reference](../03-reference/01-dot-cli.md#benchmark)).
|
|
107
|
+
|
|
108
|
+
## Per-Machine Profiles
|
|
109
|
+
|
|
110
|
+
The `machine` key in `.chezmoidata.toml` (or the per-host override in `~/.config/chezmoi/chezmoi.toml`) selects a hardware preset from `.chezmoidata/hardware.toml`. Presets define:
|
|
111
|
+
|
|
112
|
+
- Display scale (1.0, 1.5, 2.0)
|
|
113
|
+
- Keyboard modifier hierarchy
|
|
114
|
+
- Performance profile (desktop, laptop, low-power)
|
|
115
|
+
- Feature flags (e.g. `features.dms = true` for Niri on Wayland)
|
|
116
|
+
|
|
117
|
+
A single source tree deploys correctly to a MacBook, a Surface, a Linux desktop, and a WSL2 session — each rendering a platform-appropriate config.
|
|
118
|
+
|
|
119
|
+
## Trust Boundaries
|
|
120
|
+
|
|
121
|
+
| Boundary | Trusted | Untrusted |
|
|
122
|
+
|:---|:---|:---|
|
|
123
|
+
| Source tree | Your Git history, signed commits | Unverified pull requests |
|
|
124
|
+
| Secret store | `~/.config/age/keys.txt` | Environment variables, cloud storage |
|
|
125
|
+
| Attestation logs | Signed by SSH ED25519 key | Unsigned JSON reports |
|
|
126
|
+
| Template data | `.chezmoidata.toml` | User-provided template input |
|
|
127
|
+
|
|
128
|
+
Every boundary is enforced: unsigned commits fail CI gates, secrets never appear in plaintext git history, attestation logs are hash-chained.
|
|
129
|
+
|
|
130
|
+
## Next
|
|
131
|
+
|
|
132
|
+
- [Trust Model](02-trust-model.md) — detailed threat model and verification procedures
|
|
133
|
+
- [Theme Engine](03-theme-engine.md) — K-Means CIELAB pipeline
|
|
134
|
+
- [Fleet Architecture](04-fleet.md) — multi-host deployment model
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Trust Model
|
|
2
|
+
|
|
3
|
+
The trust model combines cryptographic signing, local-first secrets, policy-gated agent operations, and machine-verifiable attestation.
|
|
4
|
+
|
|
5
|
+
## Threat Model Summary
|
|
6
|
+
|
|
7
|
+
| Threat | Mitigation |
|
|
8
|
+
|:---|:---|
|
|
9
|
+
| Unauthorized code execution on the workstation | Signed commits, shellcheck gates, no `curl | sh` in install path |
|
|
10
|
+
| Secret leakage into Git history | Age/SOPS encryption, gitleaks in CI, `detect-secrets` baseline |
|
|
11
|
+
| Tampered upstream tool | SHA256-pinned chezmoi installer, SBOM + Grype CVE scan |
|
|
12
|
+
| Malicious agent behavior | MCP policy enforcement, agent profile allowlists, attestation logs |
|
|
13
|
+
| Compromised fleet host | Per-host signing keys, attestation comparison, `dot chaos` self-tests |
|
|
14
|
+
| Downgrade attacks | Version-sync enforcement, signed release tags |
|
|
15
|
+
|
|
16
|
+
## Identity and Signing
|
|
17
|
+
|
|
18
|
+
### SSH ED25519 for Git
|
|
19
|
+
|
|
20
|
+
Every commit on `master` is signed with SSH ED25519:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
git verify-commit HEAD
|
|
24
|
+
# Good "git" signature for you@example.com with ED25519 key SHA256:...
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The trust anchor is the signer's public key published in `~/.ssh/allowed_signers`. CI enforces signature verification on every PR.
|
|
28
|
+
|
|
29
|
+
### Verified Chezmoi Installer
|
|
30
|
+
|
|
31
|
+
The `install.sh` script prefers `scripts/ci/install-chezmoi-verified.sh`, which:
|
|
32
|
+
|
|
33
|
+
1. Downloads chezmoi from the upstream release URL
|
|
34
|
+
2. Verifies the SHA256 checksum against a hardcoded, version-pinned value
|
|
35
|
+
3. Falls back to `get.chezmoi.io` only if the verified path is unavailable
|
|
36
|
+
|
|
37
|
+
No unverified binary is ever executed.
|
|
38
|
+
|
|
39
|
+
## Secrets
|
|
40
|
+
|
|
41
|
+
### Three Layers
|
|
42
|
+
|
|
43
|
+
1. **Repository-managed config** (`dot_config/**/*.tmpl`) — checked into Git, no secrets
|
|
44
|
+
2. **Local-only config** (`~/.config/*.local`) — gitignored, user-edited
|
|
45
|
+
3. **Encrypted secrets** (Age-encrypted `private_*` files, SOPS YAML) — checked in, decrypted on apply
|
|
46
|
+
|
|
47
|
+
Example encrypted file:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
dot_config/api-keys.yaml.sops.yaml # SOPS-encrypted, safe to commit
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Decryption uses the user's Age private key at `~/.config/age/keys.txt`. Chezmoi invokes `age` or `sops` automatically during apply.
|
|
54
|
+
|
|
55
|
+
### Secret Scanning
|
|
56
|
+
|
|
57
|
+
CI runs three independent scanners:
|
|
58
|
+
|
|
59
|
+
| Scanner | Purpose | Threshold |
|
|
60
|
+
|:---|:---|:---|
|
|
61
|
+
| `gitleaks` | Pattern-based secret detection | Zero leaks on `master` |
|
|
62
|
+
| `detect-secrets` | Baseline-comparing scanner | Zero new secrets vs `.secrets.baseline` |
|
|
63
|
+
| `trufflehog` | Verified-secret scanner (API-tested) | Zero verified secrets |
|
|
64
|
+
|
|
65
|
+
All three must pass for a commit to be merged.
|
|
66
|
+
|
|
67
|
+
## Agent Policy Enforcement
|
|
68
|
+
|
|
69
|
+
AI agent operations (Claude Code, Codex, Copilot, Gemini, etc.) are governed by the **Model Context Protocol (MCP)** policy in `dot_config/dotfiles/mcp.json` and validated by `dot mcp`.
|
|
70
|
+
|
|
71
|
+
### Policy Structure
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"policy_version": "2026-01",
|
|
76
|
+
"allowed_servers": ["fs", "shell", "github"],
|
|
77
|
+
"denied_tools": ["network.raw", "fs.write:/etc"],
|
|
78
|
+
"attestation_required": true,
|
|
79
|
+
"signature": "<ed25519-signature>"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Enforcement Points
|
|
84
|
+
|
|
85
|
+
1. **On agent start** — `dot mcp --strict` validates the registry matches the policy hash
|
|
86
|
+
2. **Per-tool call** — MCP-aware agents check the policy before invoking a tool
|
|
87
|
+
3. **On commit** — `dot attest` records the active policy hash in the attestation log
|
|
88
|
+
|
|
89
|
+
Violations are logged to `~/.local/state/dotfiles/mcp-violations.log` and reported by `dot doctor`.
|
|
90
|
+
|
|
91
|
+
## Attestation
|
|
92
|
+
|
|
93
|
+
`dot attest` generates a signed JSON document containing:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"version": "0.2.500",
|
|
98
|
+
"timestamp": "2026-04-16T09:00:00Z",
|
|
99
|
+
"host": {
|
|
100
|
+
"hostname_sha256": "...",
|
|
101
|
+
"kernel": "Darwin 25.4.0",
|
|
102
|
+
"arch": "arm64"
|
|
103
|
+
},
|
|
104
|
+
"identity": {
|
|
105
|
+
"ssh_key_sha256": "...",
|
|
106
|
+
"git_signer": "you@example.com"
|
|
107
|
+
},
|
|
108
|
+
"policy": {
|
|
109
|
+
"mcp_policy_sha256": "...",
|
|
110
|
+
"agent_profile": "architect"
|
|
111
|
+
},
|
|
112
|
+
"tools": {
|
|
113
|
+
"chezmoi": "2.47.1",
|
|
114
|
+
"mise": "2026.4.0"
|
|
115
|
+
},
|
|
116
|
+
"git": {
|
|
117
|
+
"head": "abc123...",
|
|
118
|
+
"branch": "master",
|
|
119
|
+
"signed": true,
|
|
120
|
+
"verified": true
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The document is:
|
|
126
|
+
|
|
127
|
+
- Signed with the user's SSH ED25519 key
|
|
128
|
+
- Stored at `~/.local/state/dotfiles/attestation/YYYY-MM-DD-HHMMSS.json`
|
|
129
|
+
- Optionally published to `~/.dotfiles/docs/attestations/` for team review
|
|
130
|
+
|
|
131
|
+
### Verifying Someone Else's Attestation
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
dot verify --attestation <path>
|
|
135
|
+
# ✓ Signature valid (ED25519)
|
|
136
|
+
# ✓ Policy hash matches repository
|
|
137
|
+
# ✓ Tool versions within supported range
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Fleet Trust Propagation
|
|
141
|
+
|
|
142
|
+
Across multiple hosts, trust is established by:
|
|
143
|
+
|
|
144
|
+
1. Each host generates its own SSH key pair
|
|
145
|
+
2. Each host's public key is added to `~/.ssh/allowed_signers` on every other host
|
|
146
|
+
3. Attestations from any host can be verified by any other host
|
|
147
|
+
4. `dot fleet` compares attestations across the fleet and flags drift
|
|
148
|
+
|
|
149
|
+
See [Fleet Architecture](04-fleet.md) for the full model.
|
|
150
|
+
|
|
151
|
+
## CI-Level Gates
|
|
152
|
+
|
|
153
|
+
| Gate | Workflow | Blocks Merge |
|
|
154
|
+
|:---|:---|:---|
|
|
155
|
+
| Signed commits | `ci-enforced.yml` | Yes |
|
|
156
|
+
| Shellcheck zero-warnings | `ci.yml` | Yes |
|
|
157
|
+
| Gitleaks scan | `ci.yml` | Yes |
|
|
158
|
+
| Copyright headers | `ci-enforced.yml` | Yes |
|
|
159
|
+
| 100% unit test coverage | `ci-enforced.yml` | Yes |
|
|
160
|
+
| Reliability (macOS + Linux) | `ci-enforced.yml` | Yes |
|
|
161
|
+
| Checkov infrastructure scan | `ci-enforced.yml` | On severity MEDIUM+ |
|
|
162
|
+
| SBOM (CycloneDX) | `ci.yml` | No (informational) |
|
|
163
|
+
| Grype CVE scan | `ci.yml` | On severity CRITICAL |
|
|
164
|
+
| Lychee link check | `ci.yml` (nightly) | No |
|
|
165
|
+
|
|
166
|
+
## Principles
|
|
167
|
+
|
|
168
|
+
- **Local-first** — nothing leaves the workstation unless the user opts in
|
|
169
|
+
- **Zero trust in transit** — every network-fetched artifact is checksum-verified
|
|
170
|
+
- **Machine-readable evidence** — human-readable summaries are backed by signed JSON
|
|
171
|
+
- **Reversible** — `dot rollback` undoes any change with a single command
|
|
172
|
+
|
|
173
|
+
## See Also
|
|
174
|
+
|
|
175
|
+
- [Security Policy](../../security/SECURITY.md)
|
|
176
|
+
- [Threat Model](../../security/THREAT_MODEL.md)
|
|
177
|
+
- [MCP Policy Reference](../../security/MCP_POLICY.md)
|
|
178
|
+
- [Attestation Operations](../../operations/ATTESTATION.md)
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# The Theme Engine
|
|
2
|
+
|
|
3
|
+
`.dotfiles` generates terminal color palettes directly from wallpaper images. There are no hand-crafted themes — dominant colors are extracted via K-Means clustering in CIELAB color space, mapped to ANSI slots, and enforced to WCAG AAA contrast.
|
|
4
|
+
|
|
5
|
+
This chapter explains the pipeline end to end.
|
|
6
|
+
|
|
7
|
+
## The Why
|
|
8
|
+
|
|
9
|
+
Hand-crafted themes are expensive to maintain and constrain the user to a fixed palette. Wallpaper-driven themes:
|
|
10
|
+
|
|
11
|
+
- **Adapt to any wallpaper** — drop a new image, run `dot theme rebuild`, get a new theme
|
|
12
|
+
- **Guarantee contrast** — WCAG AAA is enforced algorithmically, not by taste
|
|
13
|
+
- **Avoid IP issues** — the engine never redistributes Apple/Microsoft wallpapers; it works with whatever is already on the user's system
|
|
14
|
+
- **Produce matched pairs** — every wallpaper yields a dark and light variant with a golden-ratio brightness relationship
|
|
15
|
+
|
|
16
|
+
## The Pipeline
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
graph LR
|
|
20
|
+
A[Wallpaper image<br/>any format] --> B[ImageMagick<br/>downsample + RGB extract]
|
|
21
|
+
B --> C[Random subsample<br/>2000 pixels]
|
|
22
|
+
C --> D[sRGB → CIE XYZ → CIELAB]
|
|
23
|
+
D --> E[K-Means++ clustering<br/>k=8, 3 runs, best inertia]
|
|
24
|
+
E --> F[Map clusters to<br/>ANSI hue slots]
|
|
25
|
+
F --> G[Enforce WCAG AAA<br/>contrast adjustments]
|
|
26
|
+
G --> H[Generate theme TOML<br/>16 ANSI + UI + app mappings]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Stage 1 — Pixel Extraction
|
|
30
|
+
|
|
31
|
+
`ImageMagick` resizes the wallpaper to 80×80 maximum dimension (preserving aspect ratio) and emits pixel-by-pixel text output:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
magick input.heic -resize 80x80\> -depth 8 txt:-
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
At 80×80 the image has ~6,400 pixels. For dynamic HEIC files (`image.heic[0]`, `image.heic[1]`), each frame is processed independently.
|
|
38
|
+
|
|
39
|
+
### Stage 2 — Subsampling
|
|
40
|
+
|
|
41
|
+
2,000 pixels are sampled uniformly from the downsampled image using a seeded PRNG (`random.Random(42)`). This gives a reproducible run and keeps K-Means iteration fast.
|
|
42
|
+
|
|
43
|
+
### Stage 3 — Color Space Conversion
|
|
44
|
+
|
|
45
|
+
Each RGB triplet is converted:
|
|
46
|
+
|
|
47
|
+
1. **sRGB → linear RGB** — gamma correction using the sRGB companding curve
|
|
48
|
+
2. **Linear RGB → CIE XYZ** — D65 illuminant, matrix multiplication
|
|
49
|
+
3. **CIE XYZ → CIELAB** — nonlinear transform; distances in Lab approximate human perception
|
|
50
|
+
|
|
51
|
+
Why CIELAB? In RGB, a "distance" of 30 between two colors might look identical to one eye and drastically different to another. In CIELAB, Δ*E* distances are perceptually uniform — a Δ*E* of 2 is the threshold for "just noticeable different" regardless of which axis moves.
|
|
52
|
+
|
|
53
|
+
### Stage 4 — K-Means Clustering
|
|
54
|
+
|
|
55
|
+
**K-Means++** initialization places initial centroids spread across the color space (reducing "bad seed" failures). The algorithm:
|
|
56
|
+
|
|
57
|
+
1. Pick one random pixel as centroid 1
|
|
58
|
+
2. For centroids 2..k, pick a pixel with probability proportional to D(x)² (squared distance to nearest existing centroid)
|
|
59
|
+
3. Iterate: assign each pixel to its nearest centroid, recompute centroid as mean of assigned pixels
|
|
60
|
+
4. Stop when assignments stabilize or max iterations reached
|
|
61
|
+
|
|
62
|
+
We run the algorithm 3 times with different seeds and keep the clustering with lowest inertia (sum of squared distances from each pixel to its centroid). This avoids local minima without the cost of more runs.
|
|
63
|
+
|
|
64
|
+
### Stage 5 — ANSI Hue Mapping
|
|
65
|
+
|
|
66
|
+
The 6 chromatic ANSI slots (red, green, yellow, blue, magenta, cyan) are assigned target hue angles:
|
|
67
|
+
|
|
68
|
+
| ANSI Slot | Target Hue (degrees) |
|
|
69
|
+
|:---|---:|
|
|
70
|
+
| red | 30 |
|
|
71
|
+
| yellow | 95 |
|
|
72
|
+
| green | 145 |
|
|
73
|
+
| cyan | 210 |
|
|
74
|
+
| blue | 275 |
|
|
75
|
+
| magenta | 330 |
|
|
76
|
+
|
|
77
|
+
For each slot, the engine picks the most chromatic cluster whose hue is nearest to the target. If no cluster is close enough, the color is synthesized by projecting the accent chroma onto the target hue angle.
|
|
78
|
+
|
|
79
|
+
Structural slots (`c0`/black, `c7`/white, `c8`, `c15`) are computed from the background Lab with fixed lightness offsets — they exist to provide the required contrast ratios, not to carry hue information.
|
|
80
|
+
|
|
81
|
+
### Stage 6 — WCAG AAA Contrast Enforcement
|
|
82
|
+
|
|
83
|
+
Every color pair is checked and adjusted:
|
|
84
|
+
|
|
85
|
+
| Pair | Minimum Ratio |
|
|
86
|
+
|:---|---:|
|
|
87
|
+
| `fg` / `bg` | 7:1 |
|
|
88
|
+
| `accent_text` / `accent` | 7:1 |
|
|
89
|
+
| `c15` / `bg` | 7:1 |
|
|
90
|
+
| `fg` / `sel_bg` | 4.5:1 |
|
|
91
|
+
| `c8` / `bg` | 2.5:1 |
|
|
92
|
+
| `c0` / `bg` | 1.5:1 |
|
|
93
|
+
| `panel` / `bg` | 1.03-2.0 (bounded) |
|
|
94
|
+
| `border` / `bg` | 1.08-3.5 (bounded) |
|
|
95
|
+
|
|
96
|
+
For the accent, the engine darkens in Lab space until white text has 7:1 contrast. For fg and bright ANSI colors, lightness is adjusted until the target ratio is met. The output is guaranteed AAA on launch — the `test_themes_toml.sh` unit test verifies this for every generated theme.
|
|
97
|
+
|
|
98
|
+
## Wallpaper Discovery
|
|
99
|
+
|
|
100
|
+
`rebuild-themes.sh` scans two tiers of wallpapers:
|
|
101
|
+
|
|
102
|
+
### System Wallpapers
|
|
103
|
+
|
|
104
|
+
- **macOS** — `/System/Library/Desktop Pictures/*.heic` and `/System/Library/Desktop Pictures/.thumbnails/*.heic`
|
|
105
|
+
- **Linux** — `/usr/share/backgrounds/` and `/usr/share/wallpapers/` (recursive)
|
|
106
|
+
|
|
107
|
+
### Custom Wallpapers
|
|
108
|
+
|
|
109
|
+
- `~/Pictures/Wallpapers/*.{heic,jpg,png}` (or `$DOTFILES_WALLPAPER_DIR`)
|
|
110
|
+
|
|
111
|
+
### Deduplication
|
|
112
|
+
|
|
113
|
+
Custom wallpapers override system wallpapers on name collision. For Apple's dynamic HEIC files that contain multiple appearances in one file, the engine extracts each frame (`file.heic[0]`, `file.heic[1]`) and generates one theme per appearance.
|
|
114
|
+
|
|
115
|
+
If a base wallpaper has explicit `-dark` and `-light` variants (e.g. `Big Sur Graphic.heic` + `Big Sur Graphic Dark.heic` + `Big Sur Graphic Light.heic`), the base is skipped to avoid duplicate theme names.
|
|
116
|
+
|
|
117
|
+
## Dynamic HEIC (Apple Appearance Metadata)
|
|
118
|
+
|
|
119
|
+
macOS dynamic wallpapers embed the `apple_desktop:apr` XMP metadata — a base64-encoded plist mapping image indices to appearance modes:
|
|
120
|
+
|
|
121
|
+
```xml
|
|
122
|
+
<rdf:Description rdf:about=""
|
|
123
|
+
xmlns:apple_desktop="http://ns.apple.com/namespace/1.0/"
|
|
124
|
+
apple_desktop:apr="YnBsaXN0MDDSAQIDBFFsUWQQABABCA0PERMAAAAAAAABAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAFQ=="/>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Decoded:
|
|
128
|
+
|
|
129
|
+
```xml
|
|
130
|
+
<dict>
|
|
131
|
+
<key>l</key><integer>0</integer> <!-- light = image 0 -->
|
|
132
|
+
<key>d</key><integer>1</integer> <!-- dark = image 1 -->
|
|
133
|
+
</dict>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
`scripts/theme/merge-wallpaper.sh` combines separate dark+light files into a single dynamic HEIC with this metadata:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
bash scripts/theme/merge-wallpaper.sh # merge all pairs
|
|
140
|
+
bash scripts/theme/merge-wallpaper.sh tahoe # merge a specific family
|
|
141
|
+
bash scripts/theme/merge-wallpaper.sh --dry-run # preview
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
macOS then auto-switches the displayed image based on the current Light/Dark mode — no application-level logic required.
|
|
145
|
+
|
|
146
|
+
## Caching
|
|
147
|
+
|
|
148
|
+
Per-wallpaper themes are cached in `~/.cache/dotfiles/themes/<name>.toml`. The cache is invalidated when the wallpaper's mtime is newer than the cached TOML. `dot theme rebuild --force` skips the cache.
|
|
149
|
+
|
|
150
|
+
Full parallel rebuild of ~150 wallpapers takes ~3-5 minutes on modern hardware (4 parallel jobs, ~4 seconds per wallpaper). Incremental rebuilds (after adding 1-2 new wallpapers) take ~10 seconds.
|
|
151
|
+
|
|
152
|
+
## Theme Application
|
|
153
|
+
|
|
154
|
+
`dot-theme-sync` orchestrates the switch across every managed surface:
|
|
155
|
+
|
|
156
|
+
| Surface | Mechanism |
|
|
157
|
+
|:---|:---|
|
|
158
|
+
| Ghostty | `chezmoi apply config.tmpl` + DBus reload or SIGUSR2 |
|
|
159
|
+
| Alacritty | `chezmoi apply alacritty.toml.tmpl` |
|
|
160
|
+
| Kitty | `chezmoi apply kitty.conf.tmpl` + SIGUSR1 |
|
|
161
|
+
| WezTerm | `chezmoi apply wezterm.lua.tmpl` |
|
|
162
|
+
| Tmux | `chezmoi apply tmux.conf.tmpl` + `source-file` |
|
|
163
|
+
| Neovim | `chezmoi apply` + `--remote-expr` colorscheme switch over socket |
|
|
164
|
+
| VS Code | `chezmoi apply settings.json.tmpl` |
|
|
165
|
+
| GTK | `chezmoi apply gtk.css.tmpl` + `gsettings set gtk-theme` |
|
|
166
|
+
| macOS accent | `defaults write -g AppleAccentColor` + `killall cfprefsd SystemUIServer Dock` |
|
|
167
|
+
| Desktop wallpaper | `osascript` (macOS) or `gsettings picture-uri` (Linux) |
|
|
168
|
+
|
|
169
|
+
See [Theming Reference](../03-reference/01-dot-cli.md#theme) for the exact command surface.
|
|
170
|
+
|
|
171
|
+
## Bibliography
|
|
172
|
+
|
|
173
|
+
- MacQueen, J. (1967). *Some methods for classification and analysis of multivariate observations.* Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability.
|
|
174
|
+
- Arthur, D. & Vassilvitskii, S. (2007). *K-Means++: The advantages of careful seeding.* ACM-SIAM Symposium on Discrete Algorithms.
|
|
175
|
+
- CIE (1976). *Recommendations on uniform color spaces, color-difference equations, psychometric color terms.* Supplement No. 2 to CIE Publication No. 15.
|
|
176
|
+
- W3C (2023). *Web Content Accessibility Guidelines (WCAG) 2.2.* <https://www.w3.org/TR/WCAG22/>
|
|
177
|
+
|
|
178
|
+
## See Also
|
|
179
|
+
|
|
180
|
+
- [Theming Guide](../../guides/THEMING.md) — quick-start and troubleshooting
|
|
181
|
+
- [Theme Reference](../../reference/THEMES.md) — data schema and runtime behaviour
|
|
182
|
+
- [Tutorial: Add a Wallpaper](../02-tutorials/02-add-wallpaper.md)
|