@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
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Fleet Architecture
|
|
2
|
+
|
|
3
|
+
A "fleet" is two or more workstations sharing a single `.dotfiles` source repository. The fleet model handles per-host customization, drift detection, and cross-host trust propagation.
|
|
4
|
+
|
|
5
|
+
## Single Source, Many Hosts
|
|
6
|
+
|
|
7
|
+
All hosts clone the same repository. Platform and per-host differences are resolved at `chezmoi apply` time using three sources of data:
|
|
8
|
+
|
|
9
|
+
1. **`.chezmoidata.toml`** — defaults for all hosts
|
|
10
|
+
2. **`.chezmoidata/hardware.toml`** — machine presets (MacBook T2, Surface Pro, Geekom, etc.)
|
|
11
|
+
3. **`~/.config/chezmoi/chezmoi.toml`** — per-host overrides, generated by `chezmoi init`
|
|
12
|
+
|
|
13
|
+
The `machine` key in `chezmoi.toml` selects which preset applies:
|
|
14
|
+
|
|
15
|
+
```toml
|
|
16
|
+
# ~/.config/chezmoi/chezmoi.toml on a MacBook
|
|
17
|
+
[data]
|
|
18
|
+
machine = "macbook-t2"
|
|
19
|
+
theme = "tahoe-dark"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Templates read `.chezmoi.hardware` to get the resolved preset:
|
|
23
|
+
|
|
24
|
+
```go
|
|
25
|
+
{{- $hw := index .hardware .machine }}
|
|
26
|
+
display_scale = {{ $hw.display_scale }} // 2.0 for MacBook, 1.5 for Surface
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Hardware Presets
|
|
30
|
+
|
|
31
|
+
`.chezmoidata/hardware.toml` ships with ~12 presets covering common laptop/desktop/NUC configurations. Each preset defines:
|
|
32
|
+
|
|
33
|
+
| Field | Purpose |
|
|
34
|
+
|:---|:---|
|
|
35
|
+
| `display_scale` | 1.0, 1.25, 1.5, 1.75, 2.0 |
|
|
36
|
+
| `kbd_layout` | colemak-dh, qwerty, dvorak |
|
|
37
|
+
| `modifier_mode` | left-cmd-control, fn-swap, standard |
|
|
38
|
+
| `perf_profile` | laptop, desktop, low-power |
|
|
39
|
+
| `wm` | aerospace, niri, gnome, kde |
|
|
40
|
+
| `features.X` | per-preset feature toggles |
|
|
41
|
+
|
|
42
|
+
Add a new preset by appending to `hardware.toml` — no code changes needed.
|
|
43
|
+
|
|
44
|
+
## Drift Detection
|
|
45
|
+
|
|
46
|
+
`dot drift` compares the current machine state against the rendered template output and reports:
|
|
47
|
+
|
|
48
|
+
| Drift Type | Example |
|
|
49
|
+
|:---|:---|
|
|
50
|
+
| **Added** | File exists locally but not in source |
|
|
51
|
+
| **Removed** | Source deletes a file still present locally |
|
|
52
|
+
| **Modified** | Local edit to a managed file |
|
|
53
|
+
| **Permission** | Chmod/chown changes |
|
|
54
|
+
| **Symlink target** | Link retargeted |
|
|
55
|
+
|
|
56
|
+
Drift is normal during development. `dot heal` reconciles the source → local direction. `dot apply` overwrites drift; `dot diff` previews the change without applying.
|
|
57
|
+
|
|
58
|
+
## Fleet Attestation
|
|
59
|
+
|
|
60
|
+
`dot fleet attest` runs `dot attest` locally and collects signed attestations from every known host (via SSH). The combined report shows:
|
|
61
|
+
|
|
62
|
+
- Whether all hosts are on the same Git SHA
|
|
63
|
+
- Whether policy hashes match
|
|
64
|
+
- Which hosts have drift
|
|
65
|
+
- Which hosts have verified signatures
|
|
66
|
+
|
|
67
|
+
A typical output:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Fleet Attestation — v0.2.500
|
|
71
|
+
|
|
72
|
+
Host Git SHA Policy Tools OK Drift Verified
|
|
73
|
+
-------------- ---------- --------- ---------- ------- --------
|
|
74
|
+
macbook-t2 abc123d 0x7f2a… ✓ 0 ✓
|
|
75
|
+
surface-pro abc123d 0x7f2a… ✓ 2 ✓
|
|
76
|
+
geekom-a9 def456e 0x7f2a… ✗ (chezmoi 2.45) ✗
|
|
77
|
+
-------------- ---------- --------- ---------- ------- --------
|
|
78
|
+
FLEET STATUS: 2/3 aligned; drift on geekom-a9
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This becomes an auditable artifact — useful for compliance reporting, incident response, and post-upgrade validation.
|
|
82
|
+
|
|
83
|
+
## Fleet Deployment Workflow
|
|
84
|
+
|
|
85
|
+
Recommended rollout procedure for fleet-wide changes:
|
|
86
|
+
|
|
87
|
+
1. **Develop on one host** — make the change, test locally with `dot apply --dry-run` then `dot apply`
|
|
88
|
+
2. **Open a PR** — CI validates shellcheck, tests, security scanners
|
|
89
|
+
3. **Merge to master** — signed commit required
|
|
90
|
+
4. **Per-host pull** — on each fleet host: `dot update` (git pull + apply)
|
|
91
|
+
5. **Verify alignment** — run `dot fleet attest` from any host
|
|
92
|
+
|
|
93
|
+
For urgent rollback: every host can independently run `dot rollback` to return to the previous known-good state (stored in `~/.local/state/dotfiles/snapshots/`).
|
|
94
|
+
|
|
95
|
+
## Cross-Host Trust
|
|
96
|
+
|
|
97
|
+
Each host has its own SSH ED25519 signing key. To establish mutual trust:
|
|
98
|
+
|
|
99
|
+
1. On each host: `cat ~/.ssh/id_ed25519.pub` — capture the public key
|
|
100
|
+
2. Add every host's public key to `~/.ssh/allowed_signers` on every other host
|
|
101
|
+
3. Commit `allowed_signers` to the source repository (it's public-key material, safe to share)
|
|
102
|
+
4. After `dot apply`, any host can verify commits and attestations from any other host
|
|
103
|
+
|
|
104
|
+
This creates a **web-of-trust** among your own fleet. No central CA, no external service — just SSH keys.
|
|
105
|
+
|
|
106
|
+
## Machine-Scoped Secrets
|
|
107
|
+
|
|
108
|
+
Some secrets must decrypt only on specific hosts (e.g. a work VPN config that doesn't belong on a personal laptop). The SOPS approach:
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
# dot_config/vpn.sops.yaml
|
|
112
|
+
vpn_key: ENC[AES256_GCM,data:...]
|
|
113
|
+
sops:
|
|
114
|
+
age:
|
|
115
|
+
- recipient: age1... # work laptop only
|
|
116
|
+
enc: |
|
|
117
|
+
-----BEGIN AGE ENCRYPTED FILE-----
|
|
118
|
+
...
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Only the host with the matching Age private key can decrypt. Other hosts see the encrypted file but cannot read the content.
|
|
122
|
+
|
|
123
|
+
## Fleet Operational Commands
|
|
124
|
+
|
|
125
|
+
| Command | Purpose |
|
|
126
|
+
|:---|:---|
|
|
127
|
+
| `dot fleet` | Show all known hosts and their last-seen status |
|
|
128
|
+
| `dot fleet attest` | Collect signed attestations from every host |
|
|
129
|
+
| `dot fleet diff` | Compare rendered config across hosts |
|
|
130
|
+
| `dot fleet sync` | Run `dot update` on every host (requires SSH access) |
|
|
131
|
+
|
|
132
|
+
## Limitations
|
|
133
|
+
|
|
134
|
+
- Fleet commands assume SSH connectivity between hosts (or a dedicated orchestration agent — see [Roadmap](../../operations/ROADMAP.md))
|
|
135
|
+
- Secret rotation requires re-encrypting for all recipients; automated with `dot secrets rotate`
|
|
136
|
+
- There is no central policy store — policy is versioned in the Git repository itself
|
|
137
|
+
|
|
138
|
+
## See Also
|
|
139
|
+
|
|
140
|
+
- [Fleet Deployment Architecture](../../architecture/fleet-deployment.md) — diagrams
|
|
141
|
+
- [Trust Model](02-trust-model.md)
|
|
142
|
+
- [Tutorial: Deploy to a Fleet](../02-tutorials/05-deploy-fleet.md)
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Self-Healing
|
|
2
|
+
|
|
3
|
+
`.dotfiles` detects, diagnoses, and repairs configuration drift, missing tools, broken symlinks, and environmental damage — often without user intervention.
|
|
4
|
+
|
|
5
|
+
## The Self-Healing Loop
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
9
|
+
│ dot doctor │ ──► │ detect │ ──► │ report │
|
|
10
|
+
└─────────────┘ └─────────────┘ └─────────────┘
|
|
11
|
+
│
|
|
12
|
+
▼
|
|
13
|
+
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
14
|
+
│ dot heal │ ──► │ repair │ ──► │ verify │
|
|
15
|
+
└─────────────┘ └─────────────┘ └─────────────┘
|
|
16
|
+
│
|
|
17
|
+
▼ (on failure)
|
|
18
|
+
┌─────────────┐ ┌─────────────┐
|
|
19
|
+
│dot rollback │ ──► │ revert │
|
|
20
|
+
└─────────────┘ └─────────────┘
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## `dot doctor` — Detection
|
|
24
|
+
|
|
25
|
+
`dot doctor` runs ~40 health checks grouped into categories:
|
|
26
|
+
|
|
27
|
+
| Category | Checks |
|
|
28
|
+
|:---|:---|
|
|
29
|
+
| **Paths** | `~/.local/bin`, `~/.cargo/bin`, Mise shim order, Homebrew prefix |
|
|
30
|
+
| **Tools** | Required: git, chezmoi. Optional: mise, nix, age, sops, pandoc |
|
|
31
|
+
| **Chezmoi** | Source dir exists, data file valid, no uncommitted drift |
|
|
32
|
+
| **Shell** | Default shell matches profile, startup time <500ms |
|
|
33
|
+
| **Security** | SSH keys present, Age key present, gitleaks baseline |
|
|
34
|
+
| **Portability** | Git user.email set, LC_ALL sane, TERM recognized |
|
|
35
|
+
|
|
36
|
+
Exit codes:
|
|
37
|
+
|
|
38
|
+
| Code | Meaning |
|
|
39
|
+
|:---|:---|
|
|
40
|
+
| 0 | All checks passed |
|
|
41
|
+
| 1 | Warnings (non-blocking) |
|
|
42
|
+
| 2 | Critical failures (tool missing, config broken) |
|
|
43
|
+
|
|
44
|
+
Flags:
|
|
45
|
+
|
|
46
|
+
- `--score` / `-s` — numeric health score (0-100)
|
|
47
|
+
- `--heal` / `-H` — auto-fix detected issues (equivalent to `dot doctor && dot heal`)
|
|
48
|
+
- `--json` / `-j` — machine-readable output for CI/monitoring
|
|
49
|
+
- `--verbose` / `-v` — show every check (default shows only failures)
|
|
50
|
+
|
|
51
|
+
## `dot heal` — Repair
|
|
52
|
+
|
|
53
|
+
`dot heal` addresses three common failure modes:
|
|
54
|
+
|
|
55
|
+
### 1. Missing Tools
|
|
56
|
+
|
|
57
|
+
Reinstalls tools listed in `.chezmoidata.toml` that aren't on PATH:
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
dot heal
|
|
61
|
+
# [heal] jq not found, installing via mise
|
|
62
|
+
# [heal] age not found, installing via homebrew
|
|
63
|
+
# [heal] ✓ 2 tools installed
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Priority order: mise → homebrew (macOS) → apt/dnf (Linux) → nix → manual install script.
|
|
67
|
+
|
|
68
|
+
### 2. Chezmoi Drift
|
|
69
|
+
|
|
70
|
+
Runs `chezmoi apply --force` to reconcile local files back to the source state. Skipped files (excluded via `.chezmoiignore`) are left alone.
|
|
71
|
+
|
|
72
|
+
### 3. Broken Symlinks & Missing Files
|
|
73
|
+
|
|
74
|
+
Detects dangling symlinks (target doesn't exist) and re-applies chezmoi to recreate them. Missing critical files (e.g. `~/.zshrc`) trigger a targeted re-render.
|
|
75
|
+
|
|
76
|
+
### Flags
|
|
77
|
+
|
|
78
|
+
- `--dry-run` / `-n` — show what would be fixed, don't change anything
|
|
79
|
+
- `--force` / `-f` — skip confirmation prompts
|
|
80
|
+
- `--tool <name>` — heal only a specific tool
|
|
81
|
+
|
|
82
|
+
### Exit Codes
|
|
83
|
+
|
|
84
|
+
- 0 — nothing to heal or all fixes succeeded
|
|
85
|
+
- 1 — some repairs failed, manual intervention required
|
|
86
|
+
|
|
87
|
+
## `dot chaos` — Self-Test
|
|
88
|
+
|
|
89
|
+
`dot chaos` intentionally corrupts the local installation to verify `dot heal` can recover it. This is **destructive** — run only in ephemeral environments (containers, VMs, fresh installs).
|
|
90
|
+
|
|
91
|
+
Corruption scenarios:
|
|
92
|
+
|
|
93
|
+
| Scenario | What it breaks |
|
|
94
|
+
|:---|:---|
|
|
95
|
+
| `symlink` | Delete 3 random managed symlinks |
|
|
96
|
+
| `config` | Rewrite `~/.gitconfig` with garbage |
|
|
97
|
+
| `tool` | `mv` a critical binary out of PATH |
|
|
98
|
+
| `permission` | `chmod 000` on a dotfile |
|
|
99
|
+
| `all` | Run all scenarios sequentially |
|
|
100
|
+
|
|
101
|
+
Typical workflow:
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
docker run --rm -it ubuntu bash
|
|
105
|
+
# inside container:
|
|
106
|
+
bash -c "$(curl -fsSL https://.../install.sh)"
|
|
107
|
+
dot doctor # baseline
|
|
108
|
+
dot chaos all # break things
|
|
109
|
+
dot heal # fix
|
|
110
|
+
dot doctor # verify
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
This is part of CI: every PR runs `dot chaos` in a Docker container and validates `dot heal` restores a healthy state.
|
|
114
|
+
|
|
115
|
+
## `dot rollback` — Revert
|
|
116
|
+
|
|
117
|
+
Before every `dot apply`, chezmoi writes a snapshot to `~/.local/state/dotfiles/snapshots/YYYY-MM-DD-HHMMSS/`. `dot rollback` restores the most recent snapshot:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
dot rollback # revert to the most recent snapshot
|
|
121
|
+
dot rollback status # list available snapshots
|
|
122
|
+
dot rollback restore 3 # restore snapshot #3
|
|
123
|
+
dot rollback clean # delete snapshots older than 30 days
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Snapshots include:
|
|
127
|
+
- Every file chezmoi would have overwritten
|
|
128
|
+
- The previous `.chezmoidata.toml` and `chezmoi.toml`
|
|
129
|
+
- A pointer to the Git SHA at apply time
|
|
130
|
+
|
|
131
|
+
They do **not** include:
|
|
132
|
+
- Generated caches (`~/.cache/`)
|
|
133
|
+
- Tool binaries (Mise-managed)
|
|
134
|
+
- External state (databases, remote repos)
|
|
135
|
+
|
|
136
|
+
## `dot bundle` — Offline Recovery
|
|
137
|
+
|
|
138
|
+
`dot bundle` creates a self-contained archive that can restore the workstation without network access:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
dotfiles-bundle-v0.2.500-20260416.tar.zst
|
|
142
|
+
├── source/ # Full git clone at current HEAD
|
|
143
|
+
├── tools/ # Pre-built chezmoi binary + mise
|
|
144
|
+
├── secrets/ # Age-encrypted snapshot of ~/.config/age/
|
|
145
|
+
├── manual/ # Offline manual (HTML + PDF)
|
|
146
|
+
├── attestation.json # Signed state
|
|
147
|
+
├── install-offline.sh # Bootstrap script
|
|
148
|
+
└── SHA256SUMS # Integrity checksums
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Usage:
|
|
152
|
+
|
|
153
|
+
```sh
|
|
154
|
+
dot bundle # create bundle in ~/Downloads/
|
|
155
|
+
dot bundle --to /path/to/usb.img # write to external storage
|
|
156
|
+
dot bundle restore bundle.tar.zst # restore from bundle
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Recovery use case: you're stranded on a new machine with no internet. Copy the bundle over (USB, phone tether, Bluetooth). Run `bash install-offline.sh`. You have a working dotfiles environment in <60 seconds, no network required.
|
|
160
|
+
|
|
161
|
+
## Observability
|
|
162
|
+
|
|
163
|
+
### Health Score
|
|
164
|
+
|
|
165
|
+
`dot score` returns a 0-100 score combining:
|
|
166
|
+
|
|
167
|
+
| Dimension | Weight |
|
|
168
|
+
|:---|---:|
|
|
169
|
+
| Tool availability | 30 |
|
|
170
|
+
| Chezmoi drift | 20 |
|
|
171
|
+
| Security gates (sigs, secrets, Age key) | 20 |
|
|
172
|
+
| Performance (shell startup, cache health) | 15 |
|
|
173
|
+
| Compliance (policy hash match) | 15 |
|
|
174
|
+
|
|
175
|
+
Scores:
|
|
176
|
+
- 90-100 — healthy
|
|
177
|
+
- 70-89 — minor issues
|
|
178
|
+
- 50-69 — needs attention
|
|
179
|
+
- <50 — run `dot heal` immediately
|
|
180
|
+
|
|
181
|
+
### Metrics
|
|
182
|
+
|
|
183
|
+
`dot metrics` shows recent observations: shell startup time, last-apply duration, heal events, chaos self-tests, CVE counts from SBOM scan. Metrics are stored locally in `~/.local/state/dotfiles/metrics.jsonl` (append-only, one line per event).
|
|
184
|
+
|
|
185
|
+
## Design Principles
|
|
186
|
+
|
|
187
|
+
1. **Idempotent** — running `dot apply` or `dot heal` twice has the same effect as once
|
|
188
|
+
2. **Reversible** — every mutation creates a rollback point
|
|
189
|
+
3. **Observable** — failures produce actionable error messages with exit codes
|
|
190
|
+
4. **Offline-capable** — core flows (detect, heal, rollback) work without network
|
|
191
|
+
5. **Minimally invasive** — repairs are scoped to the smallest unit that fixes the problem
|
|
192
|
+
|
|
193
|
+
## See Also
|
|
194
|
+
|
|
195
|
+
- [Reliability Operations](../../operations/RELIABILITY.md)
|
|
196
|
+
- [Tutorial: First Install](../02-tutorials/01-first-install.md)
|
|
197
|
+
- [Cookbook: Troubleshooting](../04-cookbook/02-troubleshooting.md)
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Tutorial: First Install
|
|
2
|
+
|
|
3
|
+
End-to-end installation and verification, from zero to a fully-working environment in under 5 minutes.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- macOS 14+, Ubuntu/Debian 20.04+, Arch (rolling), Fedora 39+, or WSL2 on Windows 11
|
|
8
|
+
- `git` and `curl` installed
|
|
9
|
+
- Shell access (Zsh, Fish, or Bash)
|
|
10
|
+
- Optional but recommended: SSH key for signing commits
|
|
11
|
+
|
|
12
|
+
## Step 1: Run the Installer
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The installer:
|
|
19
|
+
1. Verifies prerequisites (`git`, `curl`, write access to `~`)
|
|
20
|
+
2. Downloads chezmoi via the SHA256-verified installer
|
|
21
|
+
3. Clones the dotfiles source to `~/.dotfiles`
|
|
22
|
+
4. Runs `chezmoi init` to prompt for per-machine settings
|
|
23
|
+
5. Runs `chezmoi apply` with progress output
|
|
24
|
+
|
|
25
|
+
Expected output:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
[install] Verifying prerequisites
|
|
29
|
+
[install] Installing chezmoi (verified SHA256)
|
|
30
|
+
[install] Cloning source to ~/.dotfiles
|
|
31
|
+
[install] Running chezmoi init (interactive)
|
|
32
|
+
Git email: you@example.com
|
|
33
|
+
Machine preset [macbook-t2]:
|
|
34
|
+
Default theme [tahoe-dark]:
|
|
35
|
+
Default shell [fish]:
|
|
36
|
+
[install] Applying configuration (180 files)
|
|
37
|
+
[install] ✓ Installation complete
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Step 2: Verify
|
|
41
|
+
|
|
42
|
+
Open a new shell and run:
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
dot doctor
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Expected output:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
◈ DOTFILES
|
|
52
|
+
Dot • Diagnostics
|
|
53
|
+
|
|
54
|
+
--- Health Check ---
|
|
55
|
+
✓ Paths ~/.local/bin, mise shims present
|
|
56
|
+
✓ Tools git, chezmoi, mise installed
|
|
57
|
+
✓ Chezmoi clean (no drift)
|
|
58
|
+
✓ Shell fish (500ms startup)
|
|
59
|
+
✓ Security SSH key present, Age key present
|
|
60
|
+
✓ Portability LC_ALL=en_US.UTF-8, TERM=xterm-256color
|
|
61
|
+
|
|
62
|
+
Score: 98/100
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Any warnings will be accompanied by a suggested fix.
|
|
66
|
+
|
|
67
|
+
## Step 3: Take the Tour
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
dot learn
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
An interactive walkthrough covering:
|
|
74
|
+
|
|
75
|
+
- Shell basics and aliases
|
|
76
|
+
- Secrets workflow
|
|
77
|
+
- Theme switching
|
|
78
|
+
- Performance tuning
|
|
79
|
+
- Security hardening
|
|
80
|
+
|
|
81
|
+
Each section takes 30-60 seconds. You can skip sections or exit at any time.
|
|
82
|
+
|
|
83
|
+
## Step 4: Customize
|
|
84
|
+
|
|
85
|
+
### Per-Machine Settings
|
|
86
|
+
|
|
87
|
+
Edit `~/.config/chezmoi/chezmoi.toml`:
|
|
88
|
+
|
|
89
|
+
```toml
|
|
90
|
+
[data]
|
|
91
|
+
machine = "macbook-t2" # see .chezmoidata/hardware.toml for presets
|
|
92
|
+
theme = "tahoe-dark" # see `dot theme list`
|
|
93
|
+
default_shell = "fish" # fish, zsh, bash
|
|
94
|
+
terminal_font_family = "JetBrainsMono Nerd Font"
|
|
95
|
+
terminal_font_size = 12
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Feature Flags
|
|
99
|
+
|
|
100
|
+
Edit `.chezmoidata.toml` in the source directory (`~/.dotfiles/.chezmoidata.toml`):
|
|
101
|
+
|
|
102
|
+
```toml
|
|
103
|
+
[features]
|
|
104
|
+
dms = false # Dank Material Shell (Niri)
|
|
105
|
+
linux_desktop = false # Linux-specific desktop configs
|
|
106
|
+
waybar = false # Waybar status bar
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
After editing, apply:
|
|
110
|
+
|
|
111
|
+
```sh
|
|
112
|
+
dot apply
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Step 5: Add Your Identity
|
|
116
|
+
|
|
117
|
+
If you have an SSH key, configure signed commits:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
git config --global user.signingkey ~/.ssh/id_ed25519.pub
|
|
121
|
+
git config --global commit.gpgsign true
|
|
122
|
+
git config --global gpg.format ssh
|
|
123
|
+
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Add your own key to `~/.ssh/allowed_signers`:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
you@example.com ssh-ed25519 AAAA...
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Test:
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
cd ~/.dotfiles
|
|
136
|
+
git commit --allow-empty -m "test: signature"
|
|
137
|
+
git verify-commit HEAD
|
|
138
|
+
# Good "git" signature for you@example.com
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Step 6: First Theme Switch
|
|
142
|
+
|
|
143
|
+
```sh
|
|
144
|
+
dot theme
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
A picker opens showing all paired wallpaper themes on your system. Select one and press Enter. The terminal, editor, desktop wallpaper, and macOS accent color update in about 3 seconds.
|
|
148
|
+
|
|
149
|
+
## Troubleshooting
|
|
150
|
+
|
|
151
|
+
If `dot doctor` shows failures:
|
|
152
|
+
|
|
153
|
+
```sh
|
|
154
|
+
dot heal # auto-fix common issues
|
|
155
|
+
dot heal -n # dry-run first to see what would change
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
If the installation is broken beyond repair:
|
|
159
|
+
|
|
160
|
+
```sh
|
|
161
|
+
dot rollback # restore the previous known-good state
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
If `dot doctor` still fails after heal + rollback, check:
|
|
165
|
+
|
|
166
|
+
- `~/.local/state/dotfiles/install.log` — installer log
|
|
167
|
+
- `~/.local/state/dotfiles/heal.log` — heal attempts
|
|
168
|
+
- `chezmoi doctor` — chezmoi-specific diagnostics
|
|
169
|
+
|
|
170
|
+
Still stuck? See [Cookbook: Troubleshooting](../04-cookbook/02-troubleshooting.md).
|
|
171
|
+
|
|
172
|
+
## What Got Installed
|
|
173
|
+
|
|
174
|
+
After `dot doctor` reports a healthy score, you have:
|
|
175
|
+
|
|
176
|
+
| Surface | What's There |
|
|
177
|
+
|:---|:---|
|
|
178
|
+
| **Shell** | Fish (default), Zsh, Nushell, Bash all configured with cached init |
|
|
179
|
+
| **Editor** | Neovim with lazy.nvim + LSP + theme-synced colorscheme |
|
|
180
|
+
| **Terminal** | Ghostty/Alacritty/Kitty/WezTerm configs (pick whichever is installed) |
|
|
181
|
+
| **Git** | Signed commits, delta diff, conventional commit template |
|
|
182
|
+
| **AI tooling** | Claude Code, Codex, Copilot CLI, Gemini CLI via mise |
|
|
183
|
+
| **Secret store** | Age key, SOPS config, `dot secrets` command ready |
|
|
184
|
+
| **Security** | Gitleaks, detect-secrets baseline, signed attestation log |
|
|
185
|
+
| **Theme engine** | K-Means wallpaper extractor, system + custom wallpaper discovery |
|
|
186
|
+
|
|
187
|
+
## Next
|
|
188
|
+
|
|
189
|
+
- [Tutorial: Add a Wallpaper → Theme](02-add-wallpaper.md)
|
|
190
|
+
- [Tutorial: Create a Machine Profile](03-create-profile.md)
|
|
191
|
+
- [Tutorial: Encrypt a Secret](04-encrypt-secret.md)
|
|
192
|
+
- [Cookbook: 30+ recipes](../04-cookbook/01-recipes.md)
|