@sebastienrousseau/dotfiles 0.2.499 → 0.2.501
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 +452 -0
- package/LICENSE +1283 -0
- package/README.md +322 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
- package/docs/AI.md +108 -0
- package/docs/CNAME +1 -0
- package/docs/COPYRIGHT +4 -3
- package/docs/NAMING_CONVENTIONS.md +102 -0
- package/docs/README.md +82 -0
- package/docs/_config.yml +59 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
- package/docs/adr/ADR-002-shell-performance.md +130 -0
- package/docs/adr/ADR-003-security-first.md +158 -0
- package/docs/adr/ADR-004-cli-architecture.md +171 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
- package/docs/adr/ADR-006-shell-selection.md +124 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
- package/docs/adr/ADR-008-alias-system-architecture.md +95 -0
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
- package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
- package/docs/adr/README.md +39 -0
- package/docs/architecture/ARCHITECTURE.md +117 -0
- package/docs/architecture/INTEROP.md +44 -0
- package/docs/architecture/REPO_LAYOUT.md +241 -0
- package/docs/architecture/WALKTHROUGH.md +86 -0
- package/docs/architecture/fleet-deployment.md +77 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
- package/docs/archive/LEGACY_ROADMAP.md +160 -0
- package/docs/archive/MILESTONE_v0.2.493.md +47 -0
- package/docs/{PLAN.md → archive/PLAN.md} +50 -12
- package/docs/archive/REPO_AUDIT.md +31 -0
- package/docs/guides/INSTALL.md +144 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
- package/docs/guides/THEMING.md +230 -0
- package/docs/guides/TROUBLESHOOTING.md +176 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
- package/docs/index.md +43 -0
- package/docs/interop/A2A.md +39 -0
- package/docs/interop/POWERSHELL.md +102 -0
- package/docs/manual/00-introduction.md +89 -0
- package/docs/manual/01-concepts/01-architecture.md +138 -0
- package/docs/manual/01-concepts/02-trust-model.md +182 -0
- package/docs/manual/01-concepts/03-theme-engine.md +186 -0
- package/docs/manual/01-concepts/04-fleet.md +148 -0
- package/docs/manual/01-concepts/05-self-healing.md +204 -0
- package/docs/manual/02-tutorials/01-first-install.md +197 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
- package/docs/manual/02-tutorials/03-create-profile.md +244 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
- package/docs/manual/03-reference/01-dot-cli.md +417 -0
- package/docs/manual/03-reference/02-config-files.md +265 -0
- package/docs/manual/03-reference/03-environment.md +124 -0
- package/docs/manual/03-reference/04-templates.md +190 -0
- package/docs/manual/03-reference/05-feature-flags.md +128 -0
- package/docs/manual/04-cookbook/01-recipes.md +285 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
- package/docs/manual/04-cookbook/03-faq.md +175 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
- package/docs/manual/05-appendices/B-security-checklist.md +84 -0
- package/docs/manual/05-appendices/C-glossary.md +40 -0
- package/docs/manual/05-appendices/D-bibliography.md +58 -0
- package/docs/manual/05-appendices/E-license.md +38 -0
- package/docs/manual/_toc.yml +58 -0
- package/docs/manual/command-index.md +62 -0
- package/docs/manual/concept-index.md +168 -0
- package/docs/operations/ATTESTATION.md +44 -0
- package/docs/operations/CI_CADENCE.md +107 -0
- package/docs/operations/CI_COMPOSITES.md +156 -0
- package/docs/operations/COMPLETIONS.md +123 -0
- package/docs/operations/COVERAGE.md +148 -0
- package/docs/operations/DRIFT.md +107 -0
- package/docs/operations/MAINTENANCE.md +63 -0
- package/docs/operations/MIGRATION.md +109 -0
- package/docs/operations/OPERATIONS.md +188 -0
- package/docs/operations/PERFORMANCE.md +133 -0
- package/docs/operations/RELIABILITY.md +122 -0
- package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
- package/docs/operations/TESTING.md +199 -0
- package/docs/operations/TRACEABILITY.md +35 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
- package/docs/operations/VERSION_SYNC.md +393 -0
- package/docs/reference/ALIASES.md +131 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
- package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
- package/docs/reference/FEATURES.md +66 -0
- package/docs/reference/FONTS.md +112 -0
- package/docs/reference/PROFILES.md +69 -0
- package/docs/reference/SCREENSHOTS.md +121 -0
- package/docs/reference/SCRIPTS.md +71 -0
- package/docs/reference/SUPPORT_MATRIX.md +80 -0
- package/docs/reference/THEMES.md +117 -0
- package/docs/reference/TOOLS.md +109 -0
- package/docs/reference/UTILS.md +155 -0
- package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
- package/docs/security/AUDIT_BYPASS.md +103 -0
- package/docs/security/AUTOMATION_SECRETS.md +26 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
- package/docs/security/COMPLIANCE.md +458 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
- package/docs/security/ENCRYPTION.md +57 -0
- package/docs/security/FMEA.md +159 -0
- package/docs/security/HISTORY_FILTERING.md +132 -0
- package/docs/security/INCIDENT_RESPONSE.md +579 -0
- package/docs/security/INSTALL_VERIFICATION.md +122 -0
- package/docs/security/KEYS.md +49 -0
- package/docs/security/KEY_ROTATION.md +223 -0
- package/docs/security/MCP_POLICY.md +78 -0
- package/docs/security/POLICY_RELEASES.md +37 -0
- package/docs/security/README.md +28 -0
- package/docs/security/SCORECARD.md +80 -0
- package/docs/security/SECRETS.md +158 -0
- package/docs/security/SECURITY.md +45 -0
- package/docs/security/SECURITY_CHECKLIST.md +55 -0
- package/docs/security/SHELL_EXEMPTIONS.md +145 -0
- package/docs/security/SOUP_REGISTER.md +36 -0
- package/docs/security/THREAT_MODEL.md +130 -0
- package/docs/security/VERIFICATION_VALIDATION.md +228 -0
- package/docs/themes/README.md +10 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
- package/docs/themes/hero-shot.svg +78 -0
- package/dot_config/.module-manifest.json +69 -0
- package/dot_config/ai/identity.md +23 -0
- package/dot_config/ai/patterns/architect.md +16 -0
- package/dot_config/ai/patterns/hardener.md +15 -0
- package/dot_config/ai/patterns/refactor.md +15 -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.tmpl +47 -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 +13 -0
- package/dot_config/dotfiles/grub/README.md +13 -0
- package/dot_config/dotfiles/lock/README.md +13 -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 +172 -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 +131 -0
- package/dot_config/fish/functions/_cached_eval_clear.fish +17 -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/hooks/executable_commit-msg +146 -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/cached_eval.nu +80 -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 +102 -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 +134 -0
- package/dot_config/shell/05-core-safety.sh +48 -0
- package/dot_config/shell/10-secrets.sh +41 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
- package/dot_config/shell/40-ls-colors.sh +49 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -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 +284 -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 +10 -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 +635 -0
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -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 +214 -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/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 +79 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +596 -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 +24 -0
- package/dot_local/bin/executable_open +38 -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 +177 -0
- package/dot_local/bin/executable_up +23 -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 +350 -0
- package/package.json +1 -1
- package/scripts/ci/check-copyright-headers.sh +96 -0
- package/scripts/ci/check-dangerous-chmod.sh +19 -0
- package/scripts/ci/check-deps-dev.sh +236 -0
- package/scripts/ci/check-insecure-tls.sh +61 -0
- package/scripts/ci/check-regression-traceability.sh +67 -0
- package/scripts/ci/check-shell-preamble.sh +106 -0
- package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
- package/scripts/ci/install-chezmoi-verified.sh +64 -0
- package/scripts/ci/run-coverage.sh +362 -0
- package/scripts/ci/validate-chezmoidata.sh +25 -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 +709 -0
- package/scripts/diagnostics/drift-dashboard.sh +201 -0
- package/scripts/diagnostics/health.sh +614 -0
- package/scripts/diagnostics/history-analysis.sh +85 -0
- package/scripts/diagnostics/mcp-doctor.sh +575 -0
- package/scripts/diagnostics/perf.sh +452 -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 +186 -0
- package/scripts/docs/build-manual.sh +883 -0
- package/scripts/docs/check-manual.sh +213 -0
- package/scripts/dot/commands/agent.sh +474 -0
- package/scripts/dot/commands/ai.sh +481 -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 +50 -0
- package/scripts/dot/lib/log.sh +200 -0
- package/scripts/dot/lib/platform.sh +99 -0
- package/scripts/dot/lib/ui.sh +518 -0
- package/scripts/dot/lib/utils.sh +377 -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 +92 -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 +86 -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/powershell-contract.ps1 +95 -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 +145 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +431 -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,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Security Release Checklist
|
|
6
|
+
|
|
7
|
+
Use this checklist before cutting any new release (e.g., `v0.x.x`) to ensure supply-chain integrity.
|
|
8
|
+
|
|
9
|
+
## 1. Supply Chain & Installer
|
|
10
|
+
|
|
11
|
+
- [ ] **Pinned Version**: Update `install.sh` `VERSION` variable to match the release tag.
|
|
12
|
+
- [ ] **Docs Sync**: Ensure `README.md` and `.github/PULL_REQUEST_TEMPLATE.md` installer URLs point to the new tag (not `main`).
|
|
13
|
+
- [ ] **Clean Build**: Verify `install.sh` does not curl random scripts from third parties without pinning.
|
|
14
|
+
- [ ] **SOUP Register**: Review [SOUP_REGISTER.md](/home/seb/.dotfiles/docs/security/SOUP_REGISTER.md) and confirm all active external components have an owner and validation path.
|
|
15
|
+
|
|
16
|
+
## 2. Secrets & Leak Prevention
|
|
17
|
+
|
|
18
|
+
- [ ] **SSH Keys**: Scan `dot_ssh/` to ensure no private keys (`id_rsa`, `id_ed25519`) are committed.
|
|
19
|
+
- [ ] **Env Vars**: Check for hardcoded API tokens in `dot_config/` (use `age` encryption or environment variables instead).
|
|
20
|
+
- [ ] **Git History**: Run `git secrets` or similar to scan for accidental commits of credentials.
|
|
21
|
+
|
|
22
|
+
## 3. Platform Safety
|
|
23
|
+
|
|
24
|
+
- [ ] **WSL Check**: Verify `install.sh` detects WSL and does not try to install systemd services or macOS defaults.
|
|
25
|
+
- [ ] **Root usage**: Ensure no script requires `sudo` unnecessarily (Principle of Least Privilege).
|
|
26
|
+
|
|
27
|
+
## 4. Toolchain
|
|
28
|
+
|
|
29
|
+
- [ ] **Binary Integrity**: Check that `dot_local/bin/` scripts are pure shell/executable and match expected checksums (no binary blobs).
|
|
30
|
+
- [ ] **Dependency Scan**: Run `npm audit` / `cargo audit` if applicable (currently Node.js legacy is removed).
|
|
31
|
+
|
|
32
|
+
## 5. MCP (Model Context Protocol) Hardening
|
|
33
|
+
|
|
34
|
+
- [ ] **Launcher Policy**: Verify `dot mcp` shows only allowlisted launchers (`npx`, `node`, `uvx`).
|
|
35
|
+
- [ ] **Filesystem Scope**: Ensure no MCP server has broad access (`/`, `/home`, `/Users`).
|
|
36
|
+
- [ ] **Default Profile**: Confirm only the `strict-local` server set is enabled by default.
|
|
37
|
+
- [ ] **Token Validation**: Confirm required API tokens are set (`GITHUB_TOKEN`, `BRAVE_API_KEY`).
|
|
38
|
+
- [ ] **Arg Policy**: No wildcard (`*`) or `--unsafe` arguments in MCP server configs.
|
|
39
|
+
- [ ] **Env Placeholders**: All `${VAR}` references in MCP config have corresponding environment variables.
|
|
40
|
+
|
|
41
|
+
Run `dot mcp --strict --json` to validate all MCP server configurations and capture an audit artifact.
|
|
42
|
+
|
|
43
|
+
## 6. Release Attestation
|
|
44
|
+
|
|
45
|
+
- [ ] **SBOM Generation**: Verify `dotfiles-sbom.spdx.json` is generated in release workflow.
|
|
46
|
+
- [ ] **Attestation Signing**: Confirm `actions/attest-build-provenance` signs the release artifacts.
|
|
47
|
+
- [ ] **Attestation Verification**: Verify with `gh attestation verify <artifact> --repo sebastienrousseau/dotfiles`.
|
|
48
|
+
- [ ] **Branch Protection**: Ensure `security-attestation` is a required status check on master.
|
|
49
|
+
- [ ] **Automation Keying**: Confirm `ACTIONS_BOT_SIGNING_KEY` exists and matches the signer in `dot_config/git/allowed_signers`.
|
|
50
|
+
|
|
51
|
+
## 7. Final Verification
|
|
52
|
+
|
|
53
|
+
- [ ] **Docker Test**: Run `docker build -f Dockerfile.test .` to verify clean install.
|
|
54
|
+
- [ ] **Doctor**: Run `dot doctor` locally.
|
|
55
|
+
- [ ] **MCP Check**: Run `dot mcp` to verify MCP configuration.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Shell Preamble Exemptions
|
|
6
|
+
|
|
7
|
+
Every bash script in this repo must include `set -euo pipefail` (or
|
|
8
|
+
`set -eu` for POSIX `sh`) within its first 50 lines. The rule is
|
|
9
|
+
enforced by
|
|
10
|
+
[`scripts/ci/check-shell-preamble.sh`](../../scripts/ci/check-shell-preamble.sh),
|
|
11
|
+
wired into `pre-commit` and the `reusable-shell-lint.yml` CI job.
|
|
12
|
+
Tests pin the contract under
|
|
13
|
+
[`tests/unit/security/test_shell_preamble_lint.sh`](../../tests/unit/security/test_shell_preamble_lint.sh).
|
|
14
|
+
|
|
15
|
+
## Why the preamble is mandatory
|
|
16
|
+
|
|
17
|
+
`set -e` fails the script on the first error. `set -u` rejects
|
|
18
|
+
reads of unset variables. `set -o pipefail` propagates the exit
|
|
19
|
+
code of the last failing command in a pipeline rather than only the
|
|
20
|
+
final command's. Together they convert silent failures into loud
|
|
21
|
+
ones — which is the only way to catch them.
|
|
22
|
+
|
|
23
|
+
Real example from this repo's history: `executable_dot-load-benchmark`
|
|
24
|
+
shipped with only `set -e`. A failing pipeline (e.g. `cmd | grep`)
|
|
25
|
+
where `grep` succeeded would still report success even when `cmd`
|
|
26
|
+
crashed. The full triple catches this. The benchmark was upgraded
|
|
27
|
+
in commit 970b631d under #854.
|
|
28
|
+
|
|
29
|
+
## Exemption categories
|
|
30
|
+
|
|
31
|
+
Two kinds of files legitimately can't enforce the preamble locally:
|
|
32
|
+
|
|
33
|
+
### 1. Sourced libraries
|
|
34
|
+
|
|
35
|
+
Files loaded via `source` / `.` into a caller's shell context. The
|
|
36
|
+
caller already has `set -euo pipefail`; the library inherits it.
|
|
37
|
+
Adding `set -e` locally would persist after the library returns and
|
|
38
|
+
break the caller's own error-handling logic.
|
|
39
|
+
|
|
40
|
+
These files must carry a comment header in their first 15 lines:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Sourced by <parent>.sh; inherits set -euo pipefail.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The lint accepts files with this marker regardless of preamble
|
|
47
|
+
state. Current adopters:
|
|
48
|
+
|
|
49
|
+
| Path | Sourced by |
|
|
50
|
+
|---|---|
|
|
51
|
+
| `dot_config/shell/00-core-paths.sh.tmpl` | shell init (zsh/bash/fish) |
|
|
52
|
+
| `dot_config/shell/05-core-safety.sh` | shell init |
|
|
53
|
+
| `dot_config/shell/10-secrets.sh` | shell init |
|
|
54
|
+
| `dot_config/shell/40-fzf-defaults.sh.tmpl` | shell init |
|
|
55
|
+
| `dot_config/shell/40-ls-colors.sh` | shell init |
|
|
56
|
+
| `dot_config/shell/50-logic-functions-core.sh.tmpl` | shell init + fish bridge |
|
|
57
|
+
| `dot_config/shell/50-logic-functions.sh.tmpl` | shell init + fish bridge |
|
|
58
|
+
| `dot_config/shell/51-logic-functions-extra.sh.tmpl` | shell init (lazy) |
|
|
59
|
+
| `dot_config/shell/90-ux-aliases.sh.tmpl` | shell init + fish bridge |
|
|
60
|
+
| `dot_config/shell/91-ux-aliases-lazy.sh.tmpl` | shell init (lazy) |
|
|
61
|
+
| `scripts/dot/lib/bento.sh` | dot CLI commands |
|
|
62
|
+
| `scripts/dot/lib/log.sh` | dot CLI + diagnostics |
|
|
63
|
+
| `scripts/dot/lib/platform.sh` | dot CLI commands |
|
|
64
|
+
| `scripts/dot/lib/ui.sh` | dot CLI + diagnostics + ops |
|
|
65
|
+
| `scripts/dot/lib/utils.sh` | dot CLI |
|
|
66
|
+
| `scripts/ops/heal-chezmoi.sh` | `scripts/ops/heal.sh` |
|
|
67
|
+
| `scripts/ops/heal-system.sh` | `scripts/ops/heal.sh` |
|
|
68
|
+
| `scripts/ops/heal-tools.sh` | `scripts/ops/heal.sh` |
|
|
69
|
+
|
|
70
|
+
### 2. Bulk-sourced fragments (path-skipped)
|
|
71
|
+
|
|
72
|
+
Three directories contain hundreds of alias / function / PATH
|
|
73
|
+
snippets that are sourced into the shell. Annotating each one
|
|
74
|
+
individually would be 300+ marker comments with no extra signal.
|
|
75
|
+
The lint skips them by path:
|
|
76
|
+
|
|
77
|
+
| Path | Contents |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `.chezmoitemplates/aliases/**/*.aliases.sh` | alias definitions sourced into the user's shell. |
|
|
80
|
+
| `.chezmoitemplates/functions/**` | shell-function definitions sourced into the user's shell. |
|
|
81
|
+
| `.chezmoitemplates/paths/**` | `PATH=…:$PATH` snippets concatenated by the shell init. |
|
|
82
|
+
|
|
83
|
+
### 3. Test scripts (path-skipped)
|
|
84
|
+
|
|
85
|
+
`tests/**` — every file under the test tree is invoked through
|
|
86
|
+
`tests/framework/test_runner.sh` which manages shell options for its
|
|
87
|
+
children. The runner itself has the full preamble; children that
|
|
88
|
+
source the framework inherit it.
|
|
89
|
+
|
|
90
|
+
### 4. Explicit opt-outs
|
|
91
|
+
|
|
92
|
+
Init fragments and completion scripts that must NOT carry their own
|
|
93
|
+
preamble (e.g., `dot_local/bin/executable_dot_completion`, a zsh
|
|
94
|
+
completion sourced into the interactive shell) can carry an
|
|
95
|
+
explicit marker:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# preamble:skip — opt-out for completion / init fragments.
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The lint accepts these. Use sparingly.
|
|
102
|
+
|
|
103
|
+
## Adding a new exemption
|
|
104
|
+
|
|
105
|
+
When you need to mark a new file:
|
|
106
|
+
|
|
107
|
+
1. **Decide whether it's actually sourced or executed.** If a user
|
|
108
|
+
ever invokes it directly (chmod +x + `./file.sh`), add the
|
|
109
|
+
preamble. If it's only ever `source`d, mark it.
|
|
110
|
+
|
|
111
|
+
2. **Pick the right marker.**
|
|
112
|
+
- Sourced library: `# Sourced by <caller>; inherits set -euo pipefail.`
|
|
113
|
+
- Completion / init fragment: `# preamble:skip — <why>.`
|
|
114
|
+
|
|
115
|
+
3. **Run the checker:**
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
./scripts/ci/check-shell-preamble.sh path/to/file.sh
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Exit 0 = lint passes.
|
|
122
|
+
|
|
123
|
+
4. **If you're adding a new entire directory of fragments**
|
|
124
|
+
(rare — alias buckets, plugin trees), edit the path-skip rule
|
|
125
|
+
in `scripts/ci/check-shell-preamble.sh` and document it in this
|
|
126
|
+
page's "Bulk-sourced fragments" table above.
|
|
127
|
+
|
|
128
|
+
## CI integration
|
|
129
|
+
|
|
130
|
+
- **Pre-commit hook** (`config/pre-commit-config.yaml` →
|
|
131
|
+
`shell-preamble-check`): blocks `git commit` if a staged shell
|
|
132
|
+
file fails the lint.
|
|
133
|
+
- **CI** (`.github/workflows/reusable-shell-lint.yml`): runs the
|
|
134
|
+
full-repo scan on every PR.
|
|
135
|
+
|
|
136
|
+
A change to either the checker or the marker convention must update
|
|
137
|
+
this page in the same PR.
|
|
138
|
+
|
|
139
|
+
## References
|
|
140
|
+
|
|
141
|
+
- `scripts/ci/check-shell-preamble.sh` — the lint.
|
|
142
|
+
- `tests/unit/security/test_shell_preamble_lint.sh` — contract test.
|
|
143
|
+
- `config/pre-commit-config.yaml` (`shell-preamble-check` hook).
|
|
144
|
+
- `.github/workflows/reusable-shell-lint.yml` — CI invocation.
|
|
145
|
+
- Issue [#854](https://github.com/sebastienrousseau/dotfiles/issues/854).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# SOUP Register
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
Controlled inventory for software of unknown pedigree used by the dotfiles platform.
|
|
10
|
+
|
|
11
|
+
## Active components
|
|
12
|
+
|
|
13
|
+
| Component | Source | Version control | Verification path | Owner | Status |
|
|
14
|
+
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
15
|
+
| Homebrew installer | `raw.githubusercontent.com/Homebrew/install` | Moving upstream script, gated by `HOMEBREW_INSTALLER_SHA256` | SHA-256 in [package_managers.sh](/home/seb/.dotfiles/install/lib/package_managers.sh) | Repo maintainer | Conditional |
|
|
16
|
+
| Chezmoi installer | `get.chezmoi.io` | Pinned by `CHEZMOI_INSTALLER_SHA256` when used | SHA-256 in `install/lib/chezmoi.sh` | Repo maintainer | Controlled |
|
|
17
|
+
| GitHub Actions marketplace actions | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pins | Repo maintainer | Controlled |
|
|
18
|
+
| Grype container | `anchore/grype` | Pinned tag in workflow | Container tag in [security-enhanced.yml](/home/seb/.dotfiles/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
|
|
19
|
+
| Trivy container | `aquasec/trivy` | Pinned tag in workflow | Container tag in [security-enhanced.yml](/home/seb/.dotfiles/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
|
|
20
|
+
| Checkov action | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pin | Repo maintainer | Controlled |
|
|
21
|
+
| Nix inputs | GitHub flakes | Locked in [flake.lock](/home/seb/.dotfiles/flake.lock) | `narHash` and revision lock | Repo maintainer | Controlled |
|
|
22
|
+
| GitHub release metadata queries | GitHub API | Discovery only, not release validation | `update-deps.yml` query path | Repo maintainer | Monitored |
|
|
23
|
+
|
|
24
|
+
## Validation record
|
|
25
|
+
|
|
26
|
+
1. Record version or commit SHA.
|
|
27
|
+
2. Record checksum, signature, or attestation method.
|
|
28
|
+
3. Record workflow or script that consumes the component.
|
|
29
|
+
4. Record owner and review date.
|
|
30
|
+
5. Reject moving inputs in production or release paths unless checksum-gated.
|
|
31
|
+
|
|
32
|
+
## Exit criteria
|
|
33
|
+
|
|
34
|
+
- No unsigned automation commits.
|
|
35
|
+
- No unverified executable download in installer or release path.
|
|
36
|
+
- Every SOUP item has owner, version control method, and validation record.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Threat Model
|
|
6
|
+
|
|
7
|
+
Security analysis of the dotfiles distribution. Covers trust boundaries, threat actors, attack surfaces, and mitigations.
|
|
8
|
+
|
|
9
|
+
## Trust Boundary
|
|
10
|
+
|
|
11
|
+
The primary trust boundary is the **local machine**. Dotfiles are deployed to and executed on the user's own system. All configuration files, scripts, and templates run with the user's privileges.
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
┌─────────────────────────────────────────────────┐
|
|
15
|
+
│ Local Machine (trusted zone) │
|
|
16
|
+
│ ┌─────────────────┐ ┌──────────────────────┐ │
|
|
17
|
+
│ │ ~/.dotfiles/ │ │ ~/.config/ (deployed)│ │
|
|
18
|
+
│ │ (source repo) │──│ Shell configs, nvim │ │
|
|
19
|
+
│ └─────────────────┘ └──────────────────────┘ │
|
|
20
|
+
│ │
|
|
21
|
+
│ ┌─────────────────┐ ┌──────────────────────┐ │
|
|
22
|
+
│ │ ~/.local/bin/ │ │ ~/.cache/shell/ │ │
|
|
23
|
+
│ │ (user scripts) │ │ (cached eval output) │ │
|
|
24
|
+
│ └─────────────────┘ └──────────────────────┘ │
|
|
25
|
+
└─────────────────────────────────────────────────┘
|
|
26
|
+
│
|
|
27
|
+
─────┼──────── Trust boundary ────────
|
|
28
|
+
│
|
|
29
|
+
┌─────────────────────────────────────────────────┐
|
|
30
|
+
│ External (untrusted zone) │
|
|
31
|
+
│ GitHub (repo hosting), Homebrew, Nix, │
|
|
32
|
+
│ Zinit plugins, Neovim plugins, npm, pip │
|
|
33
|
+
└─────────────────────────────────────────────────┘
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Threat Actors
|
|
37
|
+
|
|
38
|
+
| Actor | Motivation | Capability |
|
|
39
|
+
|-------|-----------|------------|
|
|
40
|
+
| Supply chain attacker | Inject malicious code via dependency | Compromise upstream packages (Homebrew, npm, Zinit plugins) |
|
|
41
|
+
| Secrets harvester | Steal API keys, SSH keys, tokens | Scrape git history, shell history, env vars |
|
|
42
|
+
| Privilege escalation | Gain root access | Exploit `sudo` aliases, writable scripts in PATH |
|
|
43
|
+
| Network attacker | Intercept credentials | MITM on install scripts, curl-pipe-bash |
|
|
44
|
+
|
|
45
|
+
## Attack Surfaces
|
|
46
|
+
|
|
47
|
+
### 1. Shell Startup Scripts
|
|
48
|
+
|
|
49
|
+
**Risk:** Malicious code in sourced files executes with user privileges on every shell start.
|
|
50
|
+
|
|
51
|
+
**Mitigations:**
|
|
52
|
+
|
|
53
|
+
- All shell scripts pass `shellcheck --severity=error`
|
|
54
|
+
- `set -euo pipefail` enforced in all operational scripts
|
|
55
|
+
- `eval` usage hardened with process substitution (`. /dev/stdin`)
|
|
56
|
+
- Input validation on dynamic function generation
|
|
57
|
+
- `DOTFILES_ULTRA_FAST=1` bypasses all non-core sourcing
|
|
58
|
+
|
|
59
|
+
### 2. Secrets Exposure
|
|
60
|
+
|
|
61
|
+
**Risk:** API keys, tokens, and SSH keys leaked via git history, shell history, or environment.
|
|
62
|
+
|
|
63
|
+
**Mitigations:**
|
|
64
|
+
|
|
65
|
+
- [Gitleaks](https://github.com/gitleaks/gitleaks) pre-commit hook blocks secrets in commits
|
|
66
|
+
- Atuin `history_filter` excludes sensitive patterns
|
|
67
|
+
- Age encryption for local secret storage
|
|
68
|
+
- `dot secrets set` uses secure prompts (no shell history)
|
|
69
|
+
- `.gitignore` excludes `key.txt`, `.env`, credential files
|
|
70
|
+
|
|
71
|
+
### 3. Supply Chain Dependencies
|
|
72
|
+
|
|
73
|
+
**Risk:** Compromised upstream packages injected into the toolchain.
|
|
74
|
+
|
|
75
|
+
**Mitigations:**
|
|
76
|
+
|
|
77
|
+
- Nix Flakes provide reproducible, pinned dependencies
|
|
78
|
+
- Zinit plugin versions pinned (`ver"0.8.0"`)
|
|
79
|
+
- Neovim plugin versions locked via `lazy-lock.json`
|
|
80
|
+
- `install.sh` uses HTTPS for all downloads
|
|
81
|
+
- Homebrew formula integrity via bottle checksums
|
|
82
|
+
|
|
83
|
+
### 4. Path Manipulation
|
|
84
|
+
|
|
85
|
+
**Risk:** Attacker places malicious binary in a PATH directory that shadows legitimate tools.
|
|
86
|
+
|
|
87
|
+
**Mitigations:**
|
|
88
|
+
|
|
89
|
+
- PATH construction is deterministic (template-generated)
|
|
90
|
+
- `~/.local/bin` is user-controlled and checked for writability
|
|
91
|
+
- No world-writable directories in PATH
|
|
92
|
+
- `prependpath` function validates directory existence
|
|
93
|
+
|
|
94
|
+
### 5. Template Injection
|
|
95
|
+
|
|
96
|
+
**Risk:** Chezmoi template variables could inject shell code if not properly quoted.
|
|
97
|
+
|
|
98
|
+
**Mitigations:**
|
|
99
|
+
|
|
100
|
+
- Template variables come from `.chezmoidata.toml` (user-controlled)
|
|
101
|
+
- No external/network data used in templates
|
|
102
|
+
- Template validation via `chezmoi apply --dry-run` in CI
|
|
103
|
+
|
|
104
|
+
### 6. Cached Eval Files
|
|
105
|
+
|
|
106
|
+
**Risk:** Stale or tampered cache files in `~/.cache/shell/` sourced at startup.
|
|
107
|
+
|
|
108
|
+
**Mitigations:**
|
|
109
|
+
|
|
110
|
+
- `_cached_eval` validates cache against binary mtime
|
|
111
|
+
- Cache files are user-owned (0644)
|
|
112
|
+
- Cache directory is under `$XDG_CACHE_HOME` (user-controlled)
|
|
113
|
+
- Cache can be cleared with `rm -rf ~/.cache/shell/`
|
|
114
|
+
|
|
115
|
+
## Residual Risks
|
|
116
|
+
|
|
117
|
+
| Risk | Likelihood | Impact | Status |
|
|
118
|
+
|------|-----------|--------|--------|
|
|
119
|
+
| Zinit plugin compromise | Low | High | Mitigated by version pinning |
|
|
120
|
+
| Shell history leak | Medium | Medium | Mitigated by Atuin filter |
|
|
121
|
+
| Stale Nix closure | Low | Low | Accepted (manual `nix flake update`) |
|
|
122
|
+
| macOS Keychain access | Low | Medium | Accepted (OS-level protection) |
|
|
123
|
+
|
|
124
|
+
## Recommendations
|
|
125
|
+
|
|
126
|
+
1. Run `gitleaks detect` before every push (pre-commit hook enforced)
|
|
127
|
+
2. Rotate secrets on a 90-day schedule
|
|
128
|
+
3. Audit `lazy-lock.json` diffs when updating Neovim plugins
|
|
129
|
+
4. Pin Homebrew versions for security-critical tools
|
|
130
|
+
5. Use `DOTFILES_ULTRA_FAST=1` in CI to minimize attack surface
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Verification and Validation Report
|
|
6
|
+
|
|
7
|
+
## Document Control
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
|-------|-------|
|
|
11
|
+
| Document ID | VV-DOT-001 |
|
|
12
|
+
| Version | 0.2.501 |
|
|
13
|
+
| Date | 2026-03-20 |
|
|
14
|
+
| Author | Repository Maintainer |
|
|
15
|
+
| Status | Active |
|
|
16
|
+
| Classification | Internal |
|
|
17
|
+
| Standard | ISO 13485:2016 Sections 7.3.6 / 7.3.7 (adapted) |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Purpose
|
|
22
|
+
|
|
23
|
+
This document constitutes the formal Verification and Validation (V&V) report for the chezmoi-managed dotfiles repository, adapted from ISO 13485:2016 Sections 7.3.6 (Design and Development Verification) and 7.3.7 (Design and Development Validation) for infrastructure-as-code.
|
|
24
|
+
|
|
25
|
+
**Verification** confirms that each design output meets its corresponding design input requirement through inspection, analysis, and testing. **Validation** confirms that the deployed system satisfies its intended use under representative operating conditions (Linux, macOS, WSL).
|
|
26
|
+
|
|
27
|
+
All verification activities are executed through automated CI pipelines, pre-commit hooks, and the repository test framework. Evidence is retained in CI logs, test output, and this document.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Verification Matrix
|
|
32
|
+
|
|
33
|
+
| Req ID | Requirement | Verification Method | Test File(s) | Result |
|
|
34
|
+
|--------|-------------|---------------------|--------------|--------|
|
|
35
|
+
| VR-01 | Shell scripts pass ShellCheck (severity=error) | Static analysis via `shellcheck --severity=error -e SC1091 -e SC2030 -e SC2031` | `ci.yml`, `ci-enforced.yml`, pre-commit hook | Pass |
|
|
36
|
+
| VR-02 | All scripts have `set -euo pipefail` | Pattern scan across all `.sh` files; CI enforcement | `ci-enforced.yml`, `compliance-guard.yml` | Pass |
|
|
37
|
+
| VR-03 | No secrets in source control (gitleaks clean) | Gitleaks scan with `config/gitleaks.toml` ruleset | Pre-commit hook, `security-enhanced.yml` | Pass |
|
|
38
|
+
| VR-04 | Cross-platform compatibility (BSD + GNU) | Dual-platform CI matrix (ubuntu-latest, macos-latest) | `cross-platform-test.yml` | Pass |
|
|
39
|
+
| VR-05 | TLS enforcement (no insecure curl/wget) | Pattern blocking for `curl -k`, `--insecure`, `wget --no-check-certificate` | Pre-commit hook, `compliance-guard.yml` | Pass |
|
|
40
|
+
| VR-06 | Permission controls (no chmod 777/666) | CI pattern scan blocks world-writable permissions | Pre-commit hook, `compliance-guard.yml` | Pass |
|
|
41
|
+
| VR-07 | Signed commits enforced | Pre-push hook verifies `git verify-commit` for all commits in range | `scripts/git-hooks/pre-push`, `compliance-guard.yml` | Pass |
|
|
42
|
+
| VR-08 | Conventional commit format | Pre-commit hook validates `feat:`, `fix:`, `docs:` prefixes | Pre-commit hook (conventional-commits) | Pass |
|
|
43
|
+
| VR-09 | Template rendering correctness | `chezmoi apply --dry-run` on Linux and macOS CI runners | `ci.yml` (Linux + macOS matrix), `tests/unit/test_*.sh` | Pass |
|
|
44
|
+
| VR-10 | Alias system functional | Unit tests source alias files and verify command availability | `tests/unit/aliases/test_*.sh` (104 files) | Pass |
|
|
45
|
+
| VR-11 | Neovim config loads without errors | Headless Neovim launch with error detection | `tests/unit/neovim/test_*.sh` (15 files) | Pass |
|
|
46
|
+
| VR-12 | Fish/Zsh/Nushell configs valid | Syntax validation and functional tests per shell | `tests/unit/fish/` (33), `tests/unit/shell/` (12), `tests/unit/nushell/` (5) | Pass |
|
|
47
|
+
| VR-13 | CI pipelines execute successfully | GitHub Actions workflow status across all triggers | `ci.yml`, `ci-enforced.yml`, `compliance-guard.yml`, `cross-platform-test.yml`, `security-enhanced.yml`, `codeql.yml` | Pass |
|
|
48
|
+
| VR-14 | Pre-commit hooks functional | Hook execution via `pre-commit run --all-files` | `config/pre-commit-config.yaml` | Pass |
|
|
49
|
+
| VR-15 | Age encryption operational | Chezmoi age-encrypted file decryption during apply | `chezmoi apply --dry-run` (encrypted targets), integration tests | Pass |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Validation Summary
|
|
54
|
+
|
|
55
|
+
### Coverage Metrics
|
|
56
|
+
|
|
57
|
+
| Metric | Value | Threshold | Status |
|
|
58
|
+
|--------|-------|-----------|--------|
|
|
59
|
+
| Total test files | 430 | N/A | Measured |
|
|
60
|
+
| Total assertions | 2,217 | N/A | Measured |
|
|
61
|
+
| Pass rate | 100% | 100% | Pass |
|
|
62
|
+
| Module coverage | 100% | >= 95% | Pass |
|
|
63
|
+
|
|
64
|
+
### Category Breakdown
|
|
65
|
+
|
|
66
|
+
| Category | Test Files | Status |
|
|
67
|
+
|----------|-----------|--------|
|
|
68
|
+
| Alias files | 104 | Tested |
|
|
69
|
+
| Function files | 76 | Tested |
|
|
70
|
+
| Fish functions + conf.d | 33 | Tested |
|
|
71
|
+
| Misc / compliance | 34 | Tested |
|
|
72
|
+
| Dot CLI | 30 | Tested |
|
|
73
|
+
| Diagnostics | 28 | Tested |
|
|
74
|
+
| Shell configs | 20 | Tested |
|
|
75
|
+
| Ops | 18 | Tested |
|
|
76
|
+
| Install | 17 | Tested |
|
|
77
|
+
| Security | 16 | Tested |
|
|
78
|
+
| Neovim Lua configs | 15 | Tested |
|
|
79
|
+
| Theme | 11 | Tested |
|
|
80
|
+
| Tools | 7 | Tested |
|
|
81
|
+
| Nushell configs | 6 | Tested |
|
|
82
|
+
| Secrets | 5 | Tested |
|
|
83
|
+
| Integration tests | 10 | Tested |
|
|
84
|
+
| **Total** | **430** | **All pass** |
|
|
85
|
+
|
|
86
|
+
### Validation Environments
|
|
87
|
+
|
|
88
|
+
| Environment | OS | Shell | Bash Version | Status |
|
|
89
|
+
|-------------|-----|-------|--------------|--------|
|
|
90
|
+
| CI (Linux) | Ubuntu latest | Bash | 5.x | Validated |
|
|
91
|
+
| CI (macOS) | macOS latest | Zsh | 3.2 (system) | Validated |
|
|
92
|
+
| Local (Linux) | CachyOS / Arch | Fish, Zsh, Bash | 5.x | Validated |
|
|
93
|
+
| Local (WSL) | Ubuntu | Bash | 5.x | Validated |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Test Framework Architecture
|
|
98
|
+
|
|
99
|
+
### Directory Structure
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
tests/
|
|
103
|
+
├── framework/
|
|
104
|
+
│ ├── test_runner.sh # Test executor — discovers and runs all test_*.sh files
|
|
105
|
+
│ ├── assertions.sh # 16 assertion functions (assert_equals, assert_contains, etc.)
|
|
106
|
+
│ └── mocks.sh # Mock utilities for isolating external dependencies
|
|
107
|
+
├── unit/
|
|
108
|
+
│ ├── aliases/ # Alias and command-surface tests
|
|
109
|
+
│ ├── functions/ # Function behavior tests
|
|
110
|
+
│ ├── dot-cli/ # `dot` command workflow tests
|
|
111
|
+
│ ├── shell/ # Shell integration and completion tests
|
|
112
|
+
│ ├── fish/ # Fish function and completion tests
|
|
113
|
+
│ ├── nushell/ # Nushell configuration tests
|
|
114
|
+
│ ├── nvim/ # Neovim configuration tests
|
|
115
|
+
│ └── test_*.sh # 425 unit test files total
|
|
116
|
+
├── integration/
|
|
117
|
+
│ └── test_*.sh # 11 integration test files
|
|
118
|
+
└── performance/
|
|
119
|
+
└── benchmark_runner.sh # Performance regression benchmarks
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Execution Model
|
|
123
|
+
|
|
124
|
+
1. `test_runner.sh` recursively discovers all `test_*.sh` files under `tests/`.
|
|
125
|
+
2. Each test file is executed in a subshell with `assertions.sh` sourced.
|
|
126
|
+
3. Tests source bash files directly from the repository (not Go templates).
|
|
127
|
+
4. `mocks.sh` provides stubs for external tools (`chezmoi`, `git`, `brew`, etc.).
|
|
128
|
+
5. Exit codes and assertion counts are aggregated into a final report.
|
|
129
|
+
|
|
130
|
+
### Assertion Library
|
|
131
|
+
|
|
132
|
+
| Function | Purpose |
|
|
133
|
+
|----------|---------|
|
|
134
|
+
| `assert_equals` | Exact string equality |
|
|
135
|
+
| `assert_not_equals` | String inequality |
|
|
136
|
+
| `assert_contains` | Substring match |
|
|
137
|
+
| `assert_not_contains` | Substring absence |
|
|
138
|
+
| `assert_starts_with` | Prefix match |
|
|
139
|
+
| `assert_ends_with` | Suffix match |
|
|
140
|
+
| `assert_matches` | Regex match |
|
|
141
|
+
| `assert_file_exists` | File presence |
|
|
142
|
+
| `assert_file_not_exists` | File absence |
|
|
143
|
+
| `assert_directory_exists` | Directory presence |
|
|
144
|
+
| `assert_command_exists` | Command availability |
|
|
145
|
+
| `assert_exit_code` | Process exit code |
|
|
146
|
+
| `assert_empty` | Empty string |
|
|
147
|
+
| `assert_not_empty` | Non-empty string |
|
|
148
|
+
| `assert_true` | Boolean truth |
|
|
149
|
+
| `assert_false` | Boolean false |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Traceability Matrix
|
|
154
|
+
|
|
155
|
+
This matrix maps compliance controls from COMPLIANCE.md to verification requirements defined in this document.
|
|
156
|
+
|
|
157
|
+
### SOC 2 Type II Traceability
|
|
158
|
+
|
|
159
|
+
| SOC 2 Control | Description | Verification Requirement(s) |
|
|
160
|
+
|---------------|-------------|----------------------------|
|
|
161
|
+
| CC6.1 | Logical Access Security | VR-06 (Permission controls), VR-15 (Age encryption) |
|
|
162
|
+
| CC6.8 | Unauthorized Code Protection | VR-07 (Signed commits), VR-03 (No secrets) |
|
|
163
|
+
| CC7.1 | System Operations | VR-05 (TLS enforcement), VR-13 (CI pipelines) |
|
|
164
|
+
| CC7.2 | Change Detection | VR-14 (Pre-commit hooks), VR-08 (Conventional commits) |
|
|
165
|
+
| CC8.1 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits), VR-13 (CI pipelines) |
|
|
166
|
+
| A1.2 | Audit Logs | VR-13 (CI pipelines — logs retained in GitHub Actions) |
|
|
167
|
+
|
|
168
|
+
### ISO 27001 Traceability
|
|
169
|
+
|
|
170
|
+
| ISO Control | Description | Verification Requirement(s) |
|
|
171
|
+
|-------------|-------------|----------------------------|
|
|
172
|
+
| A.9.1.1 | Access Control Policy | VR-06 (Permission controls), VR-15 (Age encryption) |
|
|
173
|
+
| A.9.4.1 | Information Access Restriction | VR-06 (No chmod 777/666) |
|
|
174
|
+
| A.12.1.2 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits) |
|
|
175
|
+
| A.12.6.1 | Technical Vulnerability Management | VR-03 (Gitleaks), VR-05 (TLS enforcement) |
|
|
176
|
+
| A.13.1.1 | Network Controls | VR-05 (TLS enforcement) |
|
|
177
|
+
| A.14.2.5 | Secure Engineering | VR-01 (ShellCheck), VR-02 (set -euo pipefail), VR-04 (Cross-platform) |
|
|
178
|
+
| A.14.2.8 | System Security Testing | VR-09 (Template rendering), VR-10 (Aliases), VR-11 (Neovim), VR-12 (Shell configs) |
|
|
179
|
+
|
|
180
|
+
### GDPR / Privacy Traceability
|
|
181
|
+
|
|
182
|
+
| Requirement | Description | Verification Requirement(s) |
|
|
183
|
+
|-------------|-------------|----------------------------|
|
|
184
|
+
| Data Minimization | Limit data collection | VR-03 (No secrets in source) |
|
|
185
|
+
| Integrity | Protect against tampering | VR-07 (Signed commits), VR-14 (Pre-commit hooks) |
|
|
186
|
+
| Encryption | Protect data at rest | VR-15 (Age encryption operational) |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Acceptance Criteria
|
|
191
|
+
|
|
192
|
+
All of the following criteria must be satisfied for this V&V report to remain valid.
|
|
193
|
+
|
|
194
|
+
| Criterion | Verification Method | Required Outcome |
|
|
195
|
+
|-----------|---------------------|------------------|
|
|
196
|
+
| All unit and integration tests pass | `./tests/framework/test_runner.sh` | Exit code 0, 0 failures |
|
|
197
|
+
| ShellCheck clean | `shellcheck --severity=error` on all `.sh` files | Zero findings |
|
|
198
|
+
| Gitleaks clean | `gitleaks detect --config config/gitleaks.toml` | Zero findings |
|
|
199
|
+
| Chezmoi dry-run clean | `chezmoi apply --dry-run` on Linux and macOS | Exit code 0, no errors |
|
|
200
|
+
| Pre-commit hooks pass | `pre-commit run --all-files` | Exit code 0 |
|
|
201
|
+
| Cross-platform CI green | `cross-platform-test.yml` on ubuntu-latest and macos-latest | All jobs pass |
|
|
202
|
+
| Module coverage at threshold | Test runner coverage report | >= 95% (currently 100%) |
|
|
203
|
+
| No world-writable permissions | `compliance-guard.yml` pattern scan | Zero `chmod 777` or `chmod 666` matches |
|
|
204
|
+
| No insecure TLS patterns | `compliance-guard.yml` pattern scan | Zero `curl -k` or `wget --no-check-certificate` matches |
|
|
205
|
+
| All commits signed | `git verify-commit` on HEAD~50..HEAD range | All commits verified |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Sign-off
|
|
210
|
+
|
|
211
|
+
| Role | Name | Date | Signature |
|
|
212
|
+
|------|------|------|-----------|
|
|
213
|
+
| Repository Owner | | | |
|
|
214
|
+
| Security Reviewer | | | |
|
|
215
|
+
| Quality Assurance | | | |
|
|
216
|
+
| Release Manager | | | |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## References
|
|
221
|
+
|
|
222
|
+
- [ISO 13485:2016](https://www.iso.org/standard/59752.html) — Medical devices, Quality management systems
|
|
223
|
+
- [ISO 27001:2022](https://www.iso.org/standard/27001) — Information security management
|
|
224
|
+
- [SOC 2 Type II](https://www.aicpa.org/soc2) — Trust Services Criteria
|
|
225
|
+
- [SLSA Framework](https://slsa.dev/) — Supply chain Levels for Software Artifacts
|
|
226
|
+
- [ShellCheck](https://www.shellcheck.net/) — Static analysis for shell scripts
|
|
227
|
+
- [Gitleaks](https://gitleaks.io/) — Secrets detection
|
|
228
|
+
- [Chezmoi](https://www.chezmoi.io/) — Dotfiles manager
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Theme Gallery
|
|
6
|
+
|
|
7
|
+
Themes are auto-generated from your wallpapers — the available set depends on what's present on your system. Run `dot theme list` to see what's discovered.
|
|
8
|
+
|
|
9
|
+
See [Theme Reference](../reference/THEMES.md) for the wallpaper-driven engine.
|
|
10
|
+
See [Theming Guide](../guides/THEMING.md) for setup, switching, and the K-Means CIELAB pipeline.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Visual Integrity Report
|
|
6
|
+
|
|
7
|
+
Generated: 2026-04-08
|
|
8
|
+
Scope: terminal theme SSOT, shell first-paint path, font rendering, and cross-platform template intent.
|
|
9
|
+
|
|
10
|
+
| Metric | Current | Target | Status |
|
|
11
|
+
| :--- | :--- | :--- | :--- |
|
|
12
|
+
| Contrast (APCA) | `macos-monterey-dark` body text `Lc 90+`, critical UI `Lc 95+` | `Lc 75+` body, `Lc 90+` critical | Pass |
|
|
13
|
+
| Startup Time | `bash 25ms`, `zsh 35ms`, `fish 25ms` | `< 100ms` | Pass |
|
|
14
|
+
| Color DeltaE | SSOT palette unified across Ghostty/Kitty/Alacritty/WezTerm; no runtime probe yet | `< 2.0` | Needs instrumentation |
|
|
15
|
+
|
|
16
|
+
## Findings
|
|
17
|
+
|
|
18
|
+
- Theme colors are already centralized in `.chezmoidata/themes.toml`, but accessibility intent was implicit. The active theme now carries explicit OKLCH/APCA metadata.
|
|
19
|
+
- First-prompt Fish initialization still performed live CLI work when cache artifacts were present. The prompt path now sources prewarmed cache files first and only regenerates on cache miss.
|
|
20
|
+
- Terminal templates were palette-consistent, but rendering policy was inconsistent. macOS now prefers Display P3 and CoreText-friendly metrics; Linux/Wayland templates prefer more conservative opacity and FreeType-safe fallbacks.
|
|
21
|
+
|
|
22
|
+
## Edge Cases
|
|
23
|
+
|
|
24
|
+
- Wayland fontconfig now sets `rgba` declaratively from feature flags to avoid color fringing on mixed-density Linux panels.
|
|
25
|
+
- Ghostty, Kitty, Alacritty, and WezTerm now share the same terminal ramp while allowing platform-specific font fallback and window-compositor behavior.
|
|
26
|
+
- WSL parity is still template-capable, but DeltaE validation is not yet automated against Windows Terminal serialization.
|
|
27
|
+
|
|
28
|
+
## Next Step
|
|
29
|
+
|
|
30
|
+
Implement a small palette audit utility that computes APCA and DeltaE from `.chezmoidata/themes.toml` so the report can become test-backed rather than declarative.
|