@sebastienrousseau/dotfiles 0.2.481 → 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 +122 -32
- package/LICENSE +1 -1
- package/README.md +211 -242
- package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
- package/docs/AI.md +102 -0
- package/docs/COPYRIGHT +2 -2
- package/docs/NAMING_CONVENTIONS.md +95 -0
- package/docs/README.md +58 -249
- package/docs/adr/ADR-004-cli-architecture.md +2 -2
- package/docs/adr/ADR-006-shell-selection.md +2 -2
- 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 +2 -3
- 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/MILESTONE_v0.2.493.md +43 -0
- package/docs/{PLAN.md → archive/PLAN.md} +1 -1
- package/docs/guides/INSTALL.md +140 -0
- package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
- package/docs/guides/THEMING.md +222 -0
- package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
- package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
- 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} +11 -11
- 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/{ALIASES.md → reference/ALIASES.md} +2 -6
- 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/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
- 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/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 +3 -17
- 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 +1 -1
- package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
- package/dot_config/atuin/config.toml +18 -1
- package/dot_config/bat/config +16 -1
- package/dot_config/claude/mcp_servers.json +3 -32
- 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 +1 -1
- package/dot_config/dotfiles/grub/README.md +1 -1
- package/dot_config/dotfiles/lock/README.md +1 -1
- 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/environment.d/50-ssh-agent.conf +2 -0
- package/dot_config/environment.d/90-wayland.conf +19 -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/fontconfig/fonts.conf.tmpl +13 -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/ghostty/config.tmpl +69 -565
- package/dot_config/git/allowed_signers.tmpl +18 -0
- package/dot_config/git/commit-template +10 -0
- package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
- package/dot_config/goose/config.yaml +2 -2
- package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
- package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
- package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
- package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
- package/dot_config/ipython/profile_default/ipython_config.py +19 -0
- package/dot_config/just/justfile +18 -0
- package/dot_config/kanshi/config.tmpl +22 -0
- package/dot_config/kitty/kitty.conf.tmpl +44 -508
- package/dot_config/lazygit/config.yml +18 -6
- package/dot_config/mako/config +47 -0
- package/dot_config/micro/settings.json +3 -0
- package/dot_config/mimeapps.list +77 -0
- package/dot_config/mise/config.toml +63 -5
- package/dot_config/mongosh/mongoshrc.js +1 -0
- package/dot_config/mpv/input.conf +47 -0
- package/dot_config/mpv/mpv.conf +47 -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 +14 -0
- package/dot_config/nvim/lazy-lock.json +45 -14
- package/dot_config/nvim/lua/config/autocmds.lua +45 -1
- package/dot_config/nvim/lua/config/keymaps.lua +13 -8
- package/dot_config/nvim/lua/config/lazy.lua +22 -12
- package/dot_config/nvim/lua/config/options.lua +1 -0
- package/dot_config/nvim/lua/plugins/ai.lua +75 -0
- package/dot_config/nvim/lua/plugins/coding.lua +11 -29
- package/dot_config/nvim/lua/plugins/completion.lua +60 -0
- package/dot_config/nvim/lua/plugins/dap.lua +215 -4
- package/dot_config/nvim/lua/plugins/editor.lua +6 -10
- package/dot_config/nvim/lua/plugins/git.lua +1 -0
- package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
- package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
- package/dot_config/nvim/lua/plugins/rust.lua +1 -0
- package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
- package/dot_config/nvim/lua/plugins/ui.lua +23 -51
- package/dot_config/paru/paru.conf +10 -0
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
- package/dot_config/pueue/pueue.yml +34 -0
- package/dot_config/raycast/README.md +1 -1
- package/dot_config/ripgrep/ripgreprc +21 -0
- package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
- 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/51-logic-functions-extra.sh.tmpl +64 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
- package/dot_config/shell/Brewfile.cli +8 -0
- package/dot_config/shell/README.md +9 -9
- 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 +50 -50
- package/dot_config/shell/custom/error_analysis.zsh +29 -29
- package/dot_config/starship.toml.tmpl +85 -7
- 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/tmux/tmux.conf.tmpl +80 -38
- package/dot_config/topgrade.toml.tmpl +54 -0
- package/dot_config/user-dirs.dirs +9 -0
- package/dot_config/vscode/settings.json.tmpl +9 -50
- 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 +31 -203
- package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
- package/dot_config/yazi/keymap.toml +67 -0
- package/dot_config/yazi/theme.toml +102 -0
- package/dot_config/zathura/zathurarc +52 -0
- package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
- package/dot_config/zsh/dot_zprofile +1 -7
- package/dot_config/zsh/dot_zshenv +2 -3
- package/dot_config/zsh/dot_zshrc.tmpl +368 -69
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
- package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
- 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 +113 -91
- package/dot_local/bin/executable_antigravity +11 -0
- package/dot_local/bin/executable_b64 +61 -36
- package/dot_local/bin/executable_bm +77 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +543 -132
- 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 +2 -0
- package/dot_local/bin/executable_dtags +28 -0
- package/dot_local/bin/executable_epoch +43 -38
- package/dot_local/bin/executable_extract +32 -99
- package/dot_local/bin/executable_gbd +52 -0
- package/dot_local/bin/executable_gd +42 -0
- package/dot_local/bin/executable_git-ai-commit +35 -20
- package/dot_local/bin/executable_git-ai-diff +33 -18
- package/dot_local/bin/executable_gl +101 -0
- package/dot_local/bin/executable_hash +56 -18
- package/dot_local/bin/executable_hashsum +160 -0
- package/dot_local/bin/executable_hex +44 -8
- package/dot_local/bin/executable_jsonv +34 -10
- package/dot_local/bin/executable_jwt +22 -6
- package/dot_local/bin/executable_kill-port +18 -2
- package/dot_local/bin/executable_lorem +21 -6
- package/dot_local/bin/executable_mkscript +35 -0
- package/dot_local/bin/executable_monitor +56 -0
- package/dot_local/bin/{executable_ip → executable_myip} +16 -2
- 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 +49 -13
- package/dot_local/bin/executable_start-niri +8 -0
- package/dot_local/bin/executable_tmux-sessionizer +276 -149
- package/dot_local/bin/executable_tour +112 -74
- package/dot_local/bin/executable_up +21 -0
- package/dot_local/bin/executable_update +45 -11
- package/dot_local/bin/executable_uuid +37 -7
- package/dot_local/bin/executable_win +32 -0
- package/dot_local/bin/executable_yamlv +25 -7
- package/dot_local/share/bash-completion/completions/dot +62 -44
- 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/_dot +283 -0
- package/install.sh +297 -210
- package/package.json +17 -5
- 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 +41 -39
- package/scripts/demo/record.sh +3 -2
- 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 +209 -29
- package/scripts/diagnostics/conflicts.sh +72 -0
- package/scripts/diagnostics/doctor-unified.sh +38 -0
- package/scripts/diagnostics/doctor.sh +491 -65
- package/scripts/diagnostics/drift-dashboard.sh +17 -6
- package/scripts/diagnostics/health.sh +351 -110
- package/scripts/diagnostics/history-analysis.sh +12 -4
- 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 +139 -93
- package/scripts/diagnostics/smoke-test.sh +87 -0
- package/scripts/diagnostics/snapshot.sh +89 -0
- package/scripts/diagnostics/verify.sh +107 -0
- package/scripts/diagnostics/verify_state.sh +2 -2
- 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 +21 -4
- package/scripts/dot/commands/core.sh +59 -4
- package/scripts/dot/commands/diagnostics.sh +132 -3
- 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 +148 -17
- package/scripts/dot/commands/patterns.sh +54 -0
- package/scripts/dot/commands/restore.sh +57 -35
- package/scripts/dot/commands/secrets.sh +151 -9
- package/scripts/dot/commands/security.sh +3 -0
- package/scripts/dot/commands/tools.sh +268 -27
- 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 +318 -18
- package/scripts/fonts/install-nerd-fonts.sh +19 -10
- package/scripts/fonts/patch-fonts.sh +1 -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 +245 -17
- package/scripts/ops/chezmoi-diff.sh +1 -0
- package/scripts/ops/chezmoi-remove.sh +2 -0
- package/scripts/ops/chezmoi-update.sh +34 -2
- 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 +98 -342
- 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 +86 -28
- package/scripts/ops/setup.sh +137 -0
- package/scripts/ops/teleport.sh +2 -1
- 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 +1 -0
- package/scripts/secrets/create-secrets-file.sh +1 -0
- package/scripts/secrets/encrypt-ssh-key.sh +1 -0
- package/scripts/security/backup.sh +44 -4
- package/scripts/security/dns-doh.sh +36 -14
- package/scripts/security/encryption-check.sh +27 -12
- package/scripts/security/enforce-policies.sh +11 -16
- package/scripts/security/firewall.sh +76 -20
- package/scripts/security/lock-configs.sh +2 -2
- package/scripts/security/lock-screen.sh +40 -18
- package/scripts/security/manage-secrets.sh +42 -29
- package/scripts/security/ssh-cert.sh +203 -0
- package/scripts/security/telemetry-kill.sh +40 -18
- package/scripts/security/usb-safety.sh +37 -15
- package/scripts/theme/apply-gnome-theme.sh +87 -56
- package/scripts/theme/extract-theme.py +677 -0
- package/scripts/theme/install-boot-logo.sh +1 -0
- package/scripts/theme/install-catppuccin-themes.sh +57 -33
- package/scripts/theme/install-cursors.sh +1 -0
- package/scripts/theme/install-file-icons.sh +1 -0
- package/scripts/theme/install-grub-theme.sh +11 -1
- package/scripts/theme/install-lock-icon.sh +1 -0
- package/scripts/theme/merge-wallpaper.sh +141 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +308 -137
- package/scripts/theme/wallpaper-rotate.sh +66 -12
- package/scripts/theme/wallpaper-sync.sh +386 -31
- package/scripts/tools/cmatrix.sh +1 -0
- package/scripts/tools/detect-collisions.py +1 -1
- package/scripts/tools/emoji-picker.sh +4 -1
- package/scripts/tools/figlet-banner.sh +1 -0
- package/scripts/tools/log-rotate.sh +2 -1
- package/scripts/tools/lolcat-wrap.sh +1 -0
- package/scripts/tools/pipes.sh +1 -0
- package/scripts/tuning/linux.sh +23 -13
- package/scripts/tuning/macos.sh +13 -4
- 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 +1 -1
- 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 +1 -1
- package/templates/projects/node/.github/workflows/ci.yml +30 -0
- package/templates/projects/node/README.md +1 -1
- package/templates/projects/node/package-lock.json +12 -0
- package/templates/projects/node/src/index.js +1 -0
- package/templates/projects/packer/README.md +1 -1
- package/templates/projects/python/.github/workflows/ci.yml +34 -0
- package/templates/projects/python/README.md +1 -1
- 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 -229
- package/docs/COMPLIANCE.md +0 -47
- package/docs/FEATURES.md +0 -166
- package/docs/FONTS.md +0 -147
- package/docs/INSTALL.md +0 -119
- package/docs/KEYS.md +0 -40
- package/docs/OPERATIONS.md +0 -130
- package/docs/PR_DESCRIPTION.md +0 -149
- package/docs/SECRETS.md +0 -76
- package/docs/SECURITY.md +0 -30
- package/docs/SECURITY_CHECKLIST.md +0 -25
- package/docs/TASK.md +0 -99
- package/docs/TESTING.md +0 -190
- package/docs/TOOLS.md +0 -146
- package/docs/UTILS.md +0 -105
- package/docs/WALKTHROUGH.md +0 -165
- package/dot_config/clippy.toml +0 -55
- package/dot_config/dotfiles/versions.env.tmpl +0 -19
- package/dot_config/firefox/user.js +0 -8
- package/dot_config/git/config.tmpl +0 -77
- package/dot_config/go/aliases.sh +0 -61
- package/dot_config/go/env.sh +0 -24
- package/dot_config/ice/README.md +0 -13
- package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
- package/dot_config/lsd/config.yaml +0 -19
- package/dot_config/nvim/snippets/all.lua +0 -9
- package/dot_config/nvim/snippets/python.lua +0 -16
- package/dot_config/shell/00-container-detect.sh +0 -53
- package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
- package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
- package/dot_config/shell/90-theme-switch.sh +0 -70
- package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
- package/dot_config/waybar/style.css +0 -8
- package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
- package/dot_local/bin/executable_zig-install +0 -89
- package/dot_local/bin/voice_ops +0 -7
- package/scripts/ops/health-check.sh +0 -380
- package/scripts/tests/README.md +0 -241
- package/scripts/tests/benchmark.sh +0 -91
- package/scripts/tests/framework/assertions.sh +0 -283
- package/scripts/tests/framework/mocks.sh +0 -201
- package/scripts/tests/framework/test_runner.sh +0 -189
- package/scripts/tests/integration/test_install.sh +0 -237
- package/scripts/tests/performance/benchmark_runner.sh +0 -156
- package/scripts/tests/performance/regression_check.sh +0 -73
- package/scripts/tests/performance/stress_test.sh +0 -65
- package/scripts/tests/test-aliases.sh +0 -25
- package/scripts/tests/test-docker.sh +0 -48
- package/scripts/tests/unit/test_ai_aliases.sh +0 -158
- package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
- package/scripts/tests/unit/test_backup.sh +0 -227
- package/scripts/tests/unit/test_case_functions.sh +0 -238
- package/scripts/tests/unit/test_cd_aliases.sh +0 -367
- package/scripts/tests/unit/test_dot_cli.sh +0 -217
- package/scripts/tests/unit/test_encode64.sh +0 -67
- package/scripts/tests/unit/test_environment.sh +0 -78
- package/scripts/tests/unit/test_extract.sh +0 -163
- package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
- package/scripts/tests/unit/test_genpass.sh +0 -298
- package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
- package/scripts/tests/unit/test_installers.sh +0 -172
- package/scripts/tests/unit/test_keygen.sh +0 -68
- package/scripts/tests/unit/test_logging.sh +0 -96
- package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
- package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
- package/scripts/tests/unit/test_prependpath.sh +0 -66
- package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
- package/scripts/tests/unit/test_rd.sh +0 -230
- package/scripts/tests/unit/test_security_fixes.sh +0 -130
- package/scripts/tests/unit/test_security_scripts.sh +0 -87
- package/scripts/tests/unit/test_template_validation.sh +0 -238
- package/scripts/tests/unit/test_utility_functions.sh +0 -144
- package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
- package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
- package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
- package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
- package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
- package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
- package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
- package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
- package/scripts/tests/unit/test_zipf.sh +0 -76
- /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
- /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
- /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
- /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
- /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
- /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
- /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
- /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
- /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
- /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
- /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
- /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Policy Bundle Releases
|
|
2
|
+
|
|
3
|
+
Policy bundles are released as tracked governance artifacts.
|
|
4
|
+
|
|
5
|
+
They include:
|
|
6
|
+
|
|
7
|
+
- policy bundles
|
|
8
|
+
- model registry
|
|
9
|
+
- prompt registry
|
|
10
|
+
- agent profiles
|
|
11
|
+
- agent card
|
|
12
|
+
- MCP policy, registry, and lock
|
|
13
|
+
- A2A discovery metadata
|
|
14
|
+
|
|
15
|
+
## Local packaging
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
bash scripts/release/package-policy-bundles.sh --version 2026.03
|
|
19
|
+
bash scripts/release/package-policy-bundles.sh --json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Release workflow
|
|
23
|
+
|
|
24
|
+
Use the `Policy Bundle Release` workflow.
|
|
25
|
+
|
|
26
|
+
Release controls:
|
|
27
|
+
|
|
28
|
+
- source ref must be signed
|
|
29
|
+
- governance JSON must validate with `jq`
|
|
30
|
+
- bundle archive gets a SHA-256 checksum
|
|
31
|
+
- bundle archive gets GitHub provenance attestation
|
|
32
|
+
|
|
33
|
+
Signed commits remain mandatory for any policy change.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Security Documentation
|
|
2
|
+
|
|
3
|
+
This directory contains security documentation for the dotfiles project.
|
|
4
|
+
|
|
5
|
+
## Index
|
|
6
|
+
|
|
7
|
+
| Document | Description |
|
|
8
|
+
|----------|-------------|
|
|
9
|
+
| [SECURITY.md](SECURITY.md) | Core security model and opt-in hardening |
|
|
10
|
+
| [THREAT_MODEL.md](THREAT_MODEL.md) | Threat analysis with trust boundaries |
|
|
11
|
+
| [SECRETS.md](SECRETS.md) | Secrets management (Age, SOPS, Keychain) |
|
|
12
|
+
| [KEY_ROTATION.md](KEY_ROTATION.md) | Key rotation procedures |
|
|
13
|
+
| [KEYS.md](KEYS.md) | Keybindings reference |
|
|
14
|
+
| [COMPLIANCE.md](COMPLIANCE.md) | SOC 2, ISO 27001, GDPR, HIPAA mapping |
|
|
15
|
+
| [AI_ACT_COMPLIANCE.md](AI_ACT_COMPLIANCE.md) | EU AI Act risk classification and exemption analysis |
|
|
16
|
+
| [SECURITY_CHECKLIST.md](SECURITY_CHECKLIST.md) | Pre-release security verification |
|
|
17
|
+
|
|
18
|
+
## Quick Reference
|
|
19
|
+
|
|
20
|
+
- **Encryption:** Age + SOPS for secrets at rest
|
|
21
|
+
- **Signing:** SSH ED25519 commit signing enforced
|
|
22
|
+
- **Scanning:** Gitleaks pre-commit hook prevents credential leaks
|
|
23
|
+
- **Telemetry:** Disabled by default, no data leaves your machine
|
|
24
|
+
- **Hardening:** Opt-in firewall, DNS-over-HTTPS, lock-screen, USB safety
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Secrets Management
|
|
2
|
+
|
|
3
|
+
Provider-agnostic secrets via `dot secrets`. Supports macOS Keychain, `pass`, and age-encrypted local storage.
|
|
4
|
+
|
|
5
|
+
## Providers
|
|
6
|
+
|
|
7
|
+
Provider selection is controlled by `.chezmoidata.toml`:
|
|
8
|
+
|
|
9
|
+
```toml
|
|
10
|
+
[secrets.policy]
|
|
11
|
+
provider = "auto" # auto | macos-keychain | pass | plain-enc
|
|
12
|
+
auto_load = true
|
|
13
|
+
|
|
14
|
+
[secrets.buckets]
|
|
15
|
+
ai = ["GEMINI_API_KEY", "CLAUDE_API_KEY", "OPENAI_API_KEY"]
|
|
16
|
+
infra = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "GITHUB_TOKEN"]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`auto` resolves in this order:
|
|
20
|
+
1. `macos-keychain` on macOS
|
|
21
|
+
2. `pass` when available
|
|
22
|
+
3. `plain-enc` fallback (age-encrypted local store)
|
|
23
|
+
|
|
24
|
+
## Commands
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Bootstrap age key for chezmoi encrypted files
|
|
28
|
+
dot secrets-init
|
|
29
|
+
|
|
30
|
+
# Optional: create encrypted secrets file for chezmoi
|
|
31
|
+
dot secrets-create
|
|
32
|
+
dot secrets edit
|
|
33
|
+
|
|
34
|
+
# Managed secret store
|
|
35
|
+
dot secrets set GEMINI_API_KEY
|
|
36
|
+
dot secrets get GEMINI_API_KEY --raw
|
|
37
|
+
dot secrets list
|
|
38
|
+
dot secrets provider
|
|
39
|
+
|
|
40
|
+
# Emit export lines for a bucket
|
|
41
|
+
dot secrets load ai
|
|
42
|
+
|
|
43
|
+
# Load into current shell session
|
|
44
|
+
eval "$(dot env load ai)"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Shell Auto-Load
|
|
48
|
+
|
|
49
|
+
When `auto_load = true`, shell startup can load configured buckets automatically via `dot env load <bucket>`.
|
|
50
|
+
|
|
51
|
+
Environment toggles:
|
|
52
|
+
- `DOTFILES_SECRETS_PROVIDER`
|
|
53
|
+
- `DOTFILES_SECRETS_AUTO_LOAD`
|
|
54
|
+
- `DOTFILES_SECRETS_BUCKET_NAMES`
|
|
55
|
+
|
|
56
|
+
## Governance
|
|
57
|
+
|
|
58
|
+
A pre-commit hook runs:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
scripts/diagnostics/secret-governance.sh
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
It blocks staged commits when likely secret patterns are found. In strict mode it also blocks exact matches against managed secret values.
|
|
65
|
+
|
|
66
|
+
## SSH Key Encryption
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
dot ssh-key ~/.ssh/id_ed25519
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
This creates a local encrypted file, which you can add to chezmoi with `chezmoi add --encrypt` if needed.
|
|
73
|
+
|
|
74
|
+
## External Secrets Backends
|
|
75
|
+
|
|
76
|
+
Chezmoi natively supports external secret managers as template functions. Configure the backend in `.chezmoidata.toml`:
|
|
77
|
+
|
|
78
|
+
```toml
|
|
79
|
+
secrets_backend = "age" # age, 1password, bitwarden, pass, vault
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 1Password
|
|
83
|
+
|
|
84
|
+
Requires the [1Password CLI](https://developer.1password.com/docs/cli/) (`op`).
|
|
85
|
+
|
|
86
|
+
```toml
|
|
87
|
+
# .chezmoidata.toml
|
|
88
|
+
secrets_backend = "1password"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Use in templates:
|
|
92
|
+
```text
|
|
93
|
+
{{ onepassword "my-secret" "vault-name" }}
|
|
94
|
+
{{ onepasswordRead "op://vault/item/field" }}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Bitwarden
|
|
98
|
+
|
|
99
|
+
Requires the [Bitwarden CLI](https://bitwarden.com/help/cli/) (`bw`).
|
|
100
|
+
|
|
101
|
+
```toml
|
|
102
|
+
# .chezmoidata.toml
|
|
103
|
+
secrets_backend = "bitwarden"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Use in templates:
|
|
107
|
+
```text
|
|
108
|
+
{{ bitwarden "item" "my-login" }}
|
|
109
|
+
{{ bitwardenFields "item" "my-login" }}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### HashiCorp Vault
|
|
113
|
+
|
|
114
|
+
Requires the [Vault CLI](https://developer.hashicorp.com/vault/docs/commands) (`vault`).
|
|
115
|
+
|
|
116
|
+
```toml
|
|
117
|
+
# .chezmoidata.toml
|
|
118
|
+
secrets_backend = "vault"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Use in templates:
|
|
122
|
+
```text
|
|
123
|
+
{{ vault "secret/data/my-secret" }}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### pass (Password Store)
|
|
127
|
+
|
|
128
|
+
Requires [pass](https://www.passwordstore.org/).
|
|
129
|
+
|
|
130
|
+
```toml
|
|
131
|
+
# .chezmoidata.toml
|
|
132
|
+
secrets_backend = "pass"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Use in templates:
|
|
136
|
+
```text
|
|
137
|
+
{{ pass "my-secret" }}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
See the [chezmoi documentation](https://www.chezmoi.io/user-guide/password-managers/) for full details on each backend.
|
|
141
|
+
|
|
142
|
+
## Security Notes
|
|
143
|
+
|
|
144
|
+
- **Never commit** `~/.config/chezmoi/key.txt` to version control.
|
|
145
|
+
- **Avoid shell history exposure** — use `dot secrets set` which prompts securely.
|
|
146
|
+
- **Rotate credentials** on a regular schedule.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
How dotfiles handles security and system modifications.
|
|
4
|
+
|
|
5
|
+
## Core Principles
|
|
6
|
+
|
|
7
|
+
- **Opt-In Only** — No hardening applies unless `DOTFILES_*` variables are set to `1`.
|
|
8
|
+
- **Local Logging** — All actions log to `~/.local/share/dotfiles.log`. No telemetry.
|
|
9
|
+
- **No Hidden Sudo** — Sudo requests only for package managers. Never cached indefinitely.
|
|
10
|
+
|
|
11
|
+
## Hardening
|
|
12
|
+
|
|
13
|
+
| Feature | Env Var | Action (macOS) | Action (Linux) |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| Firewall | `DOTFILES_FIREWALL` | Enables `socketfilterfw` + Stealth Mode | Configures UFW |
|
|
16
|
+
| Telemetry | `DOTFILES_TELEMETRY` | Disables Diagnostic plists | Disables `whoopsie`/`apport` |
|
|
17
|
+
| DNS-over-HTTPS | `DOTFILES_DOH` | Browser-level settings | Configures `resolvectl` |
|
|
18
|
+
| Idle Security | `DOTFILES_LOCK` | Sets screensaver idle time | Sets GNOME/KDE idle-delay |
|
|
19
|
+
|
|
20
|
+
## Secrets
|
|
21
|
+
|
|
22
|
+
The dotfiles use **age** for encryption.
|
|
23
|
+
|
|
24
|
+
- **Initialization**: `dot secrets-init` creates a key at `~/.config/chezmoi/key.txt`.
|
|
25
|
+
- **Storage**: Secrets are stored as `.age` encrypted files.
|
|
26
|
+
- **Protection**: Private keys aren't committed to the repo.
|
|
27
|
+
|
|
28
|
+
## SSH Certificates
|
|
29
|
+
|
|
30
|
+
Short-lived SSH certificates reduce the blast radius of key compromise.
|
|
31
|
+
|
|
32
|
+
- **Issue**: `dot ssh-cert issue [--ttl 16h] [--principal user]`
|
|
33
|
+
- **Status**: `dot ssh-cert status` — checks certificate validity and expiry
|
|
34
|
+
- **Revoke**: `dot ssh-cert revoke` — revokes active certificates
|
|
35
|
+
- **Backends**: `step-ca` (Smallstep) and local CA key (`ssh-keygen`)
|
|
36
|
+
- **Default TTL**: 16 hours (override via `SSH_CERT_TTL` environment variable)
|
|
37
|
+
- **CA URL**: Set `SSH_CERT_CA_URL` for `step-ca` integration
|
|
38
|
+
|
|
39
|
+
## Reporting a Vulnerability
|
|
40
|
+
|
|
41
|
+
If you discover a security vulnerability, don't open a public issue. Follow the instructions in the Security Policy.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Security Release Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist before cutting any new release (e.g., `v0.x.x`) to ensure supply-chain integrity.
|
|
4
|
+
|
|
5
|
+
## 1. Supply Chain & Installer
|
|
6
|
+
- [ ] **Pinned Version**: Update `install.sh` `VERSION` variable to match the release tag.
|
|
7
|
+
- [ ] **Docs Sync**: Ensure `README.md` and `.github/PULL_REQUEST_TEMPLATE.md` installer URLs point to the new tag (not `main`).
|
|
8
|
+
- [ ] **Clean Build**: Verify `install.sh` does not curl random scripts from third parties without pinning.
|
|
9
|
+
- [ ] **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.
|
|
10
|
+
|
|
11
|
+
## 2. Secrets & Leak Prevention
|
|
12
|
+
- [ ] **SSH Keys**: Scan `dot_ssh/` to ensure no private keys (`id_rsa`, `id_ed25519`) are committed.
|
|
13
|
+
- [ ] **Env Vars**: Check for hardcoded API tokens in `dot_config/` (use `age` encryption or environment variables instead).
|
|
14
|
+
- [ ] **Git History**: Run `git secrets` or similar to scan for accidental commits of credentials.
|
|
15
|
+
|
|
16
|
+
## 3. Platform Safety
|
|
17
|
+
- [ ] **WSL Check**: Verify `install.sh` detects WSL and does not try to install systemd services or macOS defaults.
|
|
18
|
+
- [ ] **Root usage**: Ensure no script requires `sudo` unnecessarily (Principle of Least Privilege).
|
|
19
|
+
|
|
20
|
+
## 4. Toolchain
|
|
21
|
+
- [ ] **Binary Integrity**: Check that `dot_local/bin/` scripts are pure shell/executable and match expected checksums (no binary blobs).
|
|
22
|
+
- [ ] **Dependency Scan**: Run `npm audit` / `cargo audit` if applicable (currently Node.js legacy is removed).
|
|
23
|
+
|
|
24
|
+
## 5. MCP (Model Context Protocol) Hardening
|
|
25
|
+
- [ ] **Launcher Policy**: Verify `dot mcp` shows only allowlisted launchers (`npx`, `node`, `uvx`).
|
|
26
|
+
- [ ] **Filesystem Scope**: Ensure no MCP server has broad access (`/`, `/home`, `/Users`).
|
|
27
|
+
- [ ] **Default Profile**: Confirm only the `strict-local` server set is enabled by default.
|
|
28
|
+
- [ ] **Token Validation**: Confirm required API tokens are set (`GITHUB_TOKEN`, `BRAVE_API_KEY`).
|
|
29
|
+
- [ ] **Arg Policy**: No wildcard (`*`) or `--unsafe` arguments in MCP server configs.
|
|
30
|
+
- [ ] **Env Placeholders**: All `${VAR}` references in MCP config have corresponding environment variables.
|
|
31
|
+
|
|
32
|
+
Run `dot mcp --strict --json` to validate all MCP server configurations and capture an audit artifact.
|
|
33
|
+
|
|
34
|
+
## 6. Release Attestation
|
|
35
|
+
- [ ] **SBOM Generation**: Verify `dotfiles-sbom.spdx.json` is generated in release workflow.
|
|
36
|
+
- [ ] **Attestation Signing**: Confirm `actions/attest-build-provenance` signs the release artifacts.
|
|
37
|
+
- [ ] **Attestation Verification**: Verify with `gh attestation verify <artifact> --repo sebastienrousseau/dotfiles`.
|
|
38
|
+
- [ ] **Branch Protection**: Ensure `security-attestation` is a required status check on master.
|
|
39
|
+
- [ ] **Automation Keying**: Confirm `ACTIONS_BOT_SIGNING_KEY` exists and matches the signer in `dot_config/git/allowed_signers`.
|
|
40
|
+
|
|
41
|
+
## 7. Final Verification
|
|
42
|
+
- [ ] **Docker Test**: Run `docker build -f Dockerfile.test .` to verify clean install.
|
|
43
|
+
- [ ] **Doctor**: Run `dot doctor` locally.
|
|
44
|
+
- [ ] **MCP Check**: Run `dot mcp` to verify MCP configuration.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# SOUP Register
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Controlled inventory for software of unknown pedigree used by the dotfiles platform.
|
|
6
|
+
|
|
7
|
+
## Active components
|
|
8
|
+
|
|
9
|
+
| Component | Source | Version control | Verification path | Owner | Status |
|
|
10
|
+
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
11
|
+
| 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 |
|
|
12
|
+
| Chezmoi installer | `get.chezmoi.io` | Pinned by `CHEZMOI_INSTALLER_SHA256` when used | SHA-256 in `install/lib/chezmoi.sh` | Repo maintainer | Controlled |
|
|
13
|
+
| GitHub Actions marketplace actions | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pins | Repo maintainer | Controlled |
|
|
14
|
+
| 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 |
|
|
15
|
+
| 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 |
|
|
16
|
+
| Checkov action | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pin | Repo maintainer | Controlled |
|
|
17
|
+
| Nix inputs | GitHub flakes | Locked in [flake.lock](/home/seb/.dotfiles/flake.lock) | `narHash` and revision lock | Repo maintainer | Controlled |
|
|
18
|
+
| GitHub release metadata queries | GitHub API | Discovery only, not release validation | `update-deps.yml` query path | Repo maintainer | Monitored |
|
|
19
|
+
|
|
20
|
+
## Validation record
|
|
21
|
+
|
|
22
|
+
1. Record version or commit SHA.
|
|
23
|
+
2. Record checksum, signature, or attestation method.
|
|
24
|
+
3. Record workflow or script that consumes the component.
|
|
25
|
+
4. Record owner and review date.
|
|
26
|
+
5. Reject moving inputs in production or release paths unless checksum-gated.
|
|
27
|
+
|
|
28
|
+
## Exit criteria
|
|
29
|
+
|
|
30
|
+
- No unsigned automation commits.
|
|
31
|
+
- No unverified executable download in installer or release path.
|
|
32
|
+
- Every SOUP item has owner, version control method, and validation record.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Threat Model
|
|
2
|
+
|
|
3
|
+
Security analysis of the dotfiles distribution. Covers trust boundaries, threat actors, attack surfaces, and mitigations.
|
|
4
|
+
|
|
5
|
+
## Trust Boundary
|
|
6
|
+
|
|
7
|
+
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.
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
┌─────────────────────────────────────────────────┐
|
|
11
|
+
│ Local Machine (trusted zone) │
|
|
12
|
+
│ ┌─────────────────┐ ┌──────────────────────┐ │
|
|
13
|
+
│ │ ~/.dotfiles/ │ │ ~/.config/ (deployed)│ │
|
|
14
|
+
│ │ (source repo) │──│ Shell configs, nvim │ │
|
|
15
|
+
│ └─────────────────┘ └──────────────────────┘ │
|
|
16
|
+
│ │
|
|
17
|
+
│ ┌─────────────────┐ ┌──────────────────────┐ │
|
|
18
|
+
│ │ ~/.local/bin/ │ │ ~/.cache/shell/ │ │
|
|
19
|
+
│ │ (user scripts) │ │ (cached eval output) │ │
|
|
20
|
+
│ └─────────────────┘ └──────────────────────┘ │
|
|
21
|
+
└─────────────────────────────────────────────────┘
|
|
22
|
+
│
|
|
23
|
+
─────┼──────── Trust boundary ────────
|
|
24
|
+
│
|
|
25
|
+
┌─────────────────────────────────────────────────┐
|
|
26
|
+
│ External (untrusted zone) │
|
|
27
|
+
│ GitHub (repo hosting), Homebrew, Nix, │
|
|
28
|
+
│ Zinit plugins, Neovim plugins, npm, pip │
|
|
29
|
+
└─────────────────────────────────────────────────┘
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Threat Actors
|
|
33
|
+
|
|
34
|
+
| Actor | Motivation | Capability |
|
|
35
|
+
|-------|-----------|------------|
|
|
36
|
+
| Supply chain attacker | Inject malicious code via dependency | Compromise upstream packages (Homebrew, npm, Zinit plugins) |
|
|
37
|
+
| Secrets harvester | Steal API keys, SSH keys, tokens | Scrape git history, shell history, env vars |
|
|
38
|
+
| Privilege escalation | Gain root access | Exploit `sudo` aliases, writable scripts in PATH |
|
|
39
|
+
| Network attacker | Intercept credentials | MITM on install scripts, curl-pipe-bash |
|
|
40
|
+
|
|
41
|
+
## Attack Surfaces
|
|
42
|
+
|
|
43
|
+
### 1. Shell Startup Scripts
|
|
44
|
+
|
|
45
|
+
**Risk:** Malicious code in sourced files executes with user privileges on every shell start.
|
|
46
|
+
|
|
47
|
+
**Mitigations:**
|
|
48
|
+
- All shell scripts pass `shellcheck --severity=error`
|
|
49
|
+
- `set -euo pipefail` enforced in all operational scripts
|
|
50
|
+
- `eval` usage hardened with process substitution (`. /dev/stdin`)
|
|
51
|
+
- Input validation on dynamic function generation
|
|
52
|
+
- `DOTFILES_ULTRA_FAST=1` bypasses all non-core sourcing
|
|
53
|
+
|
|
54
|
+
### 2. Secrets Exposure
|
|
55
|
+
|
|
56
|
+
**Risk:** API keys, tokens, and SSH keys leaked via git history, shell history, or environment.
|
|
57
|
+
|
|
58
|
+
**Mitigations:**
|
|
59
|
+
- [Gitleaks](https://github.com/gitleaks/gitleaks) pre-commit hook blocks secrets in commits
|
|
60
|
+
- Atuin `history_filter` excludes sensitive patterns
|
|
61
|
+
- Age encryption for local secret storage
|
|
62
|
+
- `dot secrets set` uses secure prompts (no shell history)
|
|
63
|
+
- `.gitignore` excludes `key.txt`, `.env`, credential files
|
|
64
|
+
|
|
65
|
+
### 3. Supply Chain Dependencies
|
|
66
|
+
|
|
67
|
+
**Risk:** Compromised upstream packages injected into the toolchain.
|
|
68
|
+
|
|
69
|
+
**Mitigations:**
|
|
70
|
+
- Nix Flakes provide reproducible, pinned dependencies
|
|
71
|
+
- Zinit plugin versions pinned (`ver"0.8.0"`)
|
|
72
|
+
- Neovim plugin versions locked via `lazy-lock.json`
|
|
73
|
+
- `install.sh` uses HTTPS for all downloads
|
|
74
|
+
- Homebrew formula integrity via bottle checksums
|
|
75
|
+
|
|
76
|
+
### 4. Path Manipulation
|
|
77
|
+
|
|
78
|
+
**Risk:** Attacker places malicious binary in a PATH directory that shadows legitimate tools.
|
|
79
|
+
|
|
80
|
+
**Mitigations:**
|
|
81
|
+
- PATH construction is deterministic (template-generated)
|
|
82
|
+
- `~/.local/bin` is user-controlled and checked for writability
|
|
83
|
+
- No world-writable directories in PATH
|
|
84
|
+
- `prependpath` function validates directory existence
|
|
85
|
+
|
|
86
|
+
### 5. Template Injection
|
|
87
|
+
|
|
88
|
+
**Risk:** Chezmoi template variables could inject shell code if not properly quoted.
|
|
89
|
+
|
|
90
|
+
**Mitigations:**
|
|
91
|
+
- Template variables come from `.chezmoidata.toml` (user-controlled)
|
|
92
|
+
- No external/network data used in templates
|
|
93
|
+
- Template validation via `chezmoi apply --dry-run` in CI
|
|
94
|
+
|
|
95
|
+
### 6. Cached Eval Files
|
|
96
|
+
|
|
97
|
+
**Risk:** Stale or tampered cache files in `~/.cache/shell/` sourced at startup.
|
|
98
|
+
|
|
99
|
+
**Mitigations:**
|
|
100
|
+
- `_cached_eval` validates cache against binary mtime
|
|
101
|
+
- Cache files are user-owned (0644)
|
|
102
|
+
- Cache directory is under `$XDG_CACHE_HOME` (user-controlled)
|
|
103
|
+
- Cache can be cleared with `rm -rf ~/.cache/shell/`
|
|
104
|
+
|
|
105
|
+
## Residual Risks
|
|
106
|
+
|
|
107
|
+
| Risk | Likelihood | Impact | Status |
|
|
108
|
+
|------|-----------|--------|--------|
|
|
109
|
+
| Zinit plugin compromise | Low | High | Mitigated by version pinning |
|
|
110
|
+
| Shell history leak | Medium | Medium | Mitigated by Atuin filter |
|
|
111
|
+
| Stale Nix closure | Low | Low | Accepted (manual `nix flake update`) |
|
|
112
|
+
| macOS Keychain access | Low | Medium | Accepted (OS-level protection) |
|
|
113
|
+
|
|
114
|
+
## Recommendations
|
|
115
|
+
|
|
116
|
+
1. Run `gitleaks detect` before every push (pre-commit hook enforced)
|
|
117
|
+
2. Rotate secrets on a 90-day schedule
|
|
118
|
+
3. Audit `lazy-lock.json` diffs when updating Neovim plugins
|
|
119
|
+
4. Pin Homebrew versions for security-critical tools
|
|
120
|
+
5. Use `DOTFILES_ULTRA_FAST=1` in CI to minimize attack surface
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Verification and Validation Report
|
|
2
|
+
|
|
3
|
+
## Document Control
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| Document ID | VV-DOT-001 |
|
|
8
|
+
| Version | 0.2.500 |
|
|
9
|
+
| Date | 2026-03-20 |
|
|
10
|
+
| Author | Repository Maintainer |
|
|
11
|
+
| Status | Active |
|
|
12
|
+
| Classification | Internal |
|
|
13
|
+
| Standard | ISO 13485:2016 Sections 7.3.6 / 7.3.7 (adapted) |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Purpose
|
|
18
|
+
|
|
19
|
+
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.
|
|
20
|
+
|
|
21
|
+
**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).
|
|
22
|
+
|
|
23
|
+
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.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Verification Matrix
|
|
28
|
+
|
|
29
|
+
| Req ID | Requirement | Verification Method | Test File(s) | Result |
|
|
30
|
+
|--------|-------------|---------------------|--------------|--------|
|
|
31
|
+
| 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 |
|
|
32
|
+
| VR-02 | All scripts have `set -euo pipefail` | Pattern scan across all `.sh` files; CI enforcement | `ci-enforced.yml`, `compliance-guard.yml` | Pass |
|
|
33
|
+
| VR-03 | No secrets in source control (gitleaks clean) | Gitleaks scan with `config/gitleaks.toml` ruleset | Pre-commit hook, `security-enhanced.yml` | Pass |
|
|
34
|
+
| VR-04 | Cross-platform compatibility (BSD + GNU) | Dual-platform CI matrix (ubuntu-latest, macos-latest) | `cross-platform-test.yml` | Pass |
|
|
35
|
+
| 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 |
|
|
36
|
+
| VR-06 | Permission controls (no chmod 777/666) | CI pattern scan blocks world-writable permissions | Pre-commit hook, `compliance-guard.yml` | Pass |
|
|
37
|
+
| 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 |
|
|
38
|
+
| VR-08 | Conventional commit format | Pre-commit hook validates `feat:`, `fix:`, `docs:` prefixes | Pre-commit hook (conventional-commits) | Pass |
|
|
39
|
+
| 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 |
|
|
40
|
+
| VR-10 | Alias system functional | Unit tests source alias files and verify command availability | `tests/unit/aliases/test_*.sh` (104 files) | Pass |
|
|
41
|
+
| VR-11 | Neovim config loads without errors | Headless Neovim launch with error detection | `tests/unit/neovim/test_*.sh` (15 files) | Pass |
|
|
42
|
+
| 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 |
|
|
43
|
+
| 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 |
|
|
44
|
+
| VR-14 | Pre-commit hooks functional | Hook execution via `pre-commit run --all-files` | `config/pre-commit-config.yaml` | Pass |
|
|
45
|
+
| VR-15 | Age encryption operational | Chezmoi age-encrypted file decryption during apply | `chezmoi apply --dry-run` (encrypted targets), integration tests | Pass |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Validation Summary
|
|
50
|
+
|
|
51
|
+
### Coverage Metrics
|
|
52
|
+
|
|
53
|
+
| Metric | Value | Threshold | Status |
|
|
54
|
+
|--------|-------|-----------|--------|
|
|
55
|
+
| Total test files | 430 | N/A | Measured |
|
|
56
|
+
| Total assertions | 2,217 | N/A | Measured |
|
|
57
|
+
| Pass rate | 100% | 100% | Pass |
|
|
58
|
+
| Module coverage | 100% | >= 95% | Pass |
|
|
59
|
+
|
|
60
|
+
### Category Breakdown
|
|
61
|
+
|
|
62
|
+
| Category | Test Files | Status |
|
|
63
|
+
|----------|-----------|--------|
|
|
64
|
+
| Alias files | 104 | Tested |
|
|
65
|
+
| Function files | 76 | Tested |
|
|
66
|
+
| Fish functions + conf.d | 33 | Tested |
|
|
67
|
+
| Misc / compliance | 34 | Tested |
|
|
68
|
+
| Dot CLI | 30 | Tested |
|
|
69
|
+
| Diagnostics | 28 | Tested |
|
|
70
|
+
| Shell configs | 20 | Tested |
|
|
71
|
+
| Ops | 18 | Tested |
|
|
72
|
+
| Install | 17 | Tested |
|
|
73
|
+
| Security | 16 | Tested |
|
|
74
|
+
| Neovim Lua configs | 15 | Tested |
|
|
75
|
+
| Theme | 11 | Tested |
|
|
76
|
+
| Tools | 7 | Tested |
|
|
77
|
+
| Nushell configs | 6 | Tested |
|
|
78
|
+
| Secrets | 5 | Tested |
|
|
79
|
+
| Integration tests | 10 | Tested |
|
|
80
|
+
| **Total** | **430** | **All pass** |
|
|
81
|
+
|
|
82
|
+
### Validation Environments
|
|
83
|
+
|
|
84
|
+
| Environment | OS | Shell | Bash Version | Status |
|
|
85
|
+
|-------------|-----|-------|--------------|--------|
|
|
86
|
+
| CI (Linux) | Ubuntu latest | Bash | 5.x | Validated |
|
|
87
|
+
| CI (macOS) | macOS latest | Zsh | 3.2 (system) | Validated |
|
|
88
|
+
| Local (Linux) | CachyOS / Arch | Fish, Zsh, Bash | 5.x | Validated |
|
|
89
|
+
| Local (WSL) | Ubuntu | Bash | 5.x | Validated |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Test Framework Architecture
|
|
94
|
+
|
|
95
|
+
### Directory Structure
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
tests/
|
|
99
|
+
├── framework/
|
|
100
|
+
│ ├── test_runner.sh # Test executor — discovers and runs all test_*.sh files
|
|
101
|
+
│ ├── assertions.sh # 16 assertion functions (assert_equals, assert_contains, etc.)
|
|
102
|
+
│ └── mocks.sh # Mock utilities for isolating external dependencies
|
|
103
|
+
├── unit/
|
|
104
|
+
│ ├── aliases/ # Alias and command-surface tests
|
|
105
|
+
│ ├── functions/ # Function behavior tests
|
|
106
|
+
│ ├── dot-cli/ # `dot` command workflow tests
|
|
107
|
+
│ ├── shell/ # Shell integration and completion tests
|
|
108
|
+
│ ├── fish/ # Fish function and completion tests
|
|
109
|
+
│ ├── nushell/ # Nushell configuration tests
|
|
110
|
+
│ ├── nvim/ # Neovim configuration tests
|
|
111
|
+
│ └── test_*.sh # 425 unit test files total
|
|
112
|
+
├── integration/
|
|
113
|
+
│ └── test_*.sh # 11 integration test files
|
|
114
|
+
└── performance/
|
|
115
|
+
└── benchmark_runner.sh # Performance regression benchmarks
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Execution Model
|
|
119
|
+
|
|
120
|
+
1. `test_runner.sh` recursively discovers all `test_*.sh` files under `tests/`.
|
|
121
|
+
2. Each test file is executed in a subshell with `assertions.sh` sourced.
|
|
122
|
+
3. Tests source bash files directly from the repository (not Go templates).
|
|
123
|
+
4. `mocks.sh` provides stubs for external tools (`chezmoi`, `git`, `brew`, etc.).
|
|
124
|
+
5. Exit codes and assertion counts are aggregated into a final report.
|
|
125
|
+
|
|
126
|
+
### Assertion Library
|
|
127
|
+
|
|
128
|
+
| Function | Purpose |
|
|
129
|
+
|----------|---------|
|
|
130
|
+
| `assert_equals` | Exact string equality |
|
|
131
|
+
| `assert_not_equals` | String inequality |
|
|
132
|
+
| `assert_contains` | Substring match |
|
|
133
|
+
| `assert_not_contains` | Substring absence |
|
|
134
|
+
| `assert_starts_with` | Prefix match |
|
|
135
|
+
| `assert_ends_with` | Suffix match |
|
|
136
|
+
| `assert_matches` | Regex match |
|
|
137
|
+
| `assert_file_exists` | File presence |
|
|
138
|
+
| `assert_file_not_exists` | File absence |
|
|
139
|
+
| `assert_directory_exists` | Directory presence |
|
|
140
|
+
| `assert_command_exists` | Command availability |
|
|
141
|
+
| `assert_exit_code` | Process exit code |
|
|
142
|
+
| `assert_empty` | Empty string |
|
|
143
|
+
| `assert_not_empty` | Non-empty string |
|
|
144
|
+
| `assert_true` | Boolean truth |
|
|
145
|
+
| `assert_false` | Boolean false |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Traceability Matrix
|
|
150
|
+
|
|
151
|
+
This matrix maps compliance controls from COMPLIANCE.md to verification requirements defined in this document.
|
|
152
|
+
|
|
153
|
+
### SOC 2 Type II Traceability
|
|
154
|
+
|
|
155
|
+
| SOC 2 Control | Description | Verification Requirement(s) |
|
|
156
|
+
|---------------|-------------|----------------------------|
|
|
157
|
+
| CC6.1 | Logical Access Security | VR-06 (Permission controls), VR-15 (Age encryption) |
|
|
158
|
+
| CC6.8 | Unauthorized Code Protection | VR-07 (Signed commits), VR-03 (No secrets) |
|
|
159
|
+
| CC7.1 | System Operations | VR-05 (TLS enforcement), VR-13 (CI pipelines) |
|
|
160
|
+
| CC7.2 | Change Detection | VR-14 (Pre-commit hooks), VR-08 (Conventional commits) |
|
|
161
|
+
| CC8.1 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits), VR-13 (CI pipelines) |
|
|
162
|
+
| A1.2 | Audit Logs | VR-13 (CI pipelines — logs retained in GitHub Actions) |
|
|
163
|
+
|
|
164
|
+
### ISO 27001 Traceability
|
|
165
|
+
|
|
166
|
+
| ISO Control | Description | Verification Requirement(s) |
|
|
167
|
+
|-------------|-------------|----------------------------|
|
|
168
|
+
| A.9.1.1 | Access Control Policy | VR-06 (Permission controls), VR-15 (Age encryption) |
|
|
169
|
+
| A.9.4.1 | Information Access Restriction | VR-06 (No chmod 777/666) |
|
|
170
|
+
| A.12.1.2 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits) |
|
|
171
|
+
| A.12.6.1 | Technical Vulnerability Management | VR-03 (Gitleaks), VR-05 (TLS enforcement) |
|
|
172
|
+
| A.13.1.1 | Network Controls | VR-05 (TLS enforcement) |
|
|
173
|
+
| A.14.2.5 | Secure Engineering | VR-01 (ShellCheck), VR-02 (set -euo pipefail), VR-04 (Cross-platform) |
|
|
174
|
+
| A.14.2.8 | System Security Testing | VR-09 (Template rendering), VR-10 (Aliases), VR-11 (Neovim), VR-12 (Shell configs) |
|
|
175
|
+
|
|
176
|
+
### GDPR / Privacy Traceability
|
|
177
|
+
|
|
178
|
+
| Requirement | Description | Verification Requirement(s) |
|
|
179
|
+
|-------------|-------------|----------------------------|
|
|
180
|
+
| Data Minimization | Limit data collection | VR-03 (No secrets in source) |
|
|
181
|
+
| Integrity | Protect against tampering | VR-07 (Signed commits), VR-14 (Pre-commit hooks) |
|
|
182
|
+
| Encryption | Protect data at rest | VR-15 (Age encryption operational) |
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Acceptance Criteria
|
|
187
|
+
|
|
188
|
+
All of the following criteria must be satisfied for this V&V report to remain valid.
|
|
189
|
+
|
|
190
|
+
| Criterion | Verification Method | Required Outcome |
|
|
191
|
+
|-----------|---------------------|------------------|
|
|
192
|
+
| All unit and integration tests pass | `./tests/framework/test_runner.sh` | Exit code 0, 0 failures |
|
|
193
|
+
| ShellCheck clean | `shellcheck --severity=error` on all `.sh` files | Zero findings |
|
|
194
|
+
| Gitleaks clean | `gitleaks detect --config config/gitleaks.toml` | Zero findings |
|
|
195
|
+
| Chezmoi dry-run clean | `chezmoi apply --dry-run` on Linux and macOS | Exit code 0, no errors |
|
|
196
|
+
| Pre-commit hooks pass | `pre-commit run --all-files` | Exit code 0 |
|
|
197
|
+
| Cross-platform CI green | `cross-platform-test.yml` on ubuntu-latest and macos-latest | All jobs pass |
|
|
198
|
+
| Module coverage at threshold | Test runner coverage report | >= 95% (currently 100%) |
|
|
199
|
+
| No world-writable permissions | `compliance-guard.yml` pattern scan | Zero `chmod 777` or `chmod 666` matches |
|
|
200
|
+
| No insecure TLS patterns | `compliance-guard.yml` pattern scan | Zero `curl -k` or `wget --no-check-certificate` matches |
|
|
201
|
+
| All commits signed | `git verify-commit` on HEAD~50..HEAD range | All commits verified |
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Sign-off
|
|
206
|
+
|
|
207
|
+
| Role | Name | Date | Signature |
|
|
208
|
+
|------|------|------|-----------|
|
|
209
|
+
| Repository Owner | | | |
|
|
210
|
+
| Security Reviewer | | | |
|
|
211
|
+
| Quality Assurance | | | |
|
|
212
|
+
| Release Manager | | | |
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## References
|
|
217
|
+
|
|
218
|
+
- [ISO 13485:2016](https://www.iso.org/standard/59752.html) — Medical devices, Quality management systems
|
|
219
|
+
- [ISO 27001:2022](https://www.iso.org/standard/27001) — Information security management
|
|
220
|
+
- [SOC 2 Type II](https://www.aicpa.org/soc2) — Trust Services Criteria
|
|
221
|
+
- [SLSA Framework](https://slsa.dev/) — Supply chain Levels for Software Artifacts
|
|
222
|
+
- [ShellCheck](https://www.shellcheck.net/) — Static analysis for shell scripts
|
|
223
|
+
- [Gitleaks](https://gitleaks.io/) — Secrets detection
|
|
224
|
+
- [Chezmoi](https://www.chezmoi.io/) — Dotfiles manager
|