@sebastienrousseau/dotfiles 0.2.499 → 0.2.500
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +375 -0
- package/LICENSE +1283 -0
- package/README.md +284 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
- package/docs/AI.md +102 -0
- package/docs/COPYRIGHT +4 -3
- package/docs/NAMING_CONVENTIONS.md +95 -0
- package/docs/README.md +78 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +101 -0
- package/docs/adr/ADR-002-shell-performance.md +121 -0
- package/docs/adr/ADR-003-security-first.md +140 -0
- package/docs/adr/ADR-004-cli-architecture.md +157 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +89 -0
- package/docs/adr/ADR-006-shell-selection.md +115 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
- package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
- package/docs/adr/README.md +32 -0
- package/docs/architecture/ARCHITECTURE.md +113 -0
- package/docs/architecture/INTEROP.md +36 -0
- package/docs/architecture/REPO_LAYOUT.md +237 -0
- package/docs/architecture/WALKTHROUGH.md +82 -0
- package/docs/architecture/fleet-deployment.md +73 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
- package/docs/archive/LEGACY_ROADMAP.md +142 -0
- package/docs/archive/MILESTONE_v0.2.493.md +43 -0
- package/docs/{PLAN.md → archive/PLAN.md} +4 -4
- package/docs/archive/REPO_AUDIT.md +23 -0
- package/docs/guides/INSTALL.md +140 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +52 -0
- package/docs/guides/THEMING.md +222 -0
- package/docs/guides/TROUBLESHOOTING.md +148 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +723 -0
- package/docs/index.md +39 -0
- package/docs/interop/A2A.md +32 -0
- package/docs/manual/00-introduction.md +85 -0
- package/docs/manual/01-concepts/01-architecture.md +134 -0
- package/docs/manual/01-concepts/02-trust-model.md +178 -0
- package/docs/manual/01-concepts/03-theme-engine.md +182 -0
- package/docs/manual/01-concepts/04-fleet.md +142 -0
- package/docs/manual/01-concepts/05-self-healing.md +197 -0
- package/docs/manual/02-tutorials/01-first-install.md +192 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
- package/docs/manual/02-tutorials/03-create-profile.md +238 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
- package/docs/manual/03-reference/01-dot-cli.md +413 -0
- package/docs/manual/03-reference/02-config-files.md +259 -0
- package/docs/manual/03-reference/03-environment.md +120 -0
- package/docs/manual/03-reference/04-templates.md +184 -0
- package/docs/manual/03-reference/05-feature-flags.md +118 -0
- package/docs/manual/04-cookbook/01-recipes.md +281 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
- package/docs/manual/04-cookbook/03-faq.md +167 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
- package/docs/manual/05-appendices/B-security-checklist.md +78 -0
- package/docs/manual/05-appendices/C-glossary.md +36 -0
- package/docs/manual/05-appendices/D-bibliography.md +54 -0
- package/docs/manual/05-appendices/E-license.md +34 -0
- package/docs/manual/_toc.yml +58 -0
- package/docs/manual/command-index.md +58 -0
- package/docs/manual/concept-index.md +164 -0
- package/docs/operations/ATTESTATION.md +39 -0
- package/docs/operations/MAINTENANCE.md +59 -0
- package/docs/operations/MIGRATION.md +101 -0
- package/docs/operations/OPERATIONS.md +164 -0
- package/docs/operations/RELIABILITY.md +116 -0
- package/docs/{ROADMAP.md → operations/ROADMAP.md} +22 -22
- package/docs/operations/TESTING.md +195 -0
- package/docs/operations/TRACEABILITY.md +31 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
- package/docs/operations/VERSION_SYNC.md +344 -0
- package/docs/reference/ALIASES.md +124 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
- package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
- package/docs/reference/FEATURES.md +62 -0
- package/docs/reference/FONTS.md +108 -0
- package/docs/reference/PROFILES.md +65 -0
- package/docs/reference/SCREENSHOTS.md +117 -0
- package/docs/reference/SCRIPTS.md +67 -0
- package/docs/reference/SUPPORT_MATRIX.md +74 -0
- package/docs/reference/THEMES.md +113 -0
- package/docs/reference/TOOLS.md +105 -0
- package/docs/reference/UTILS.md +151 -0
- package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
- package/docs/security/AUTOMATION_SECRETS.md +22 -0
- package/docs/security/COMPLIANCE.md +453 -0
- package/docs/security/ENCRYPTION.md +52 -0
- package/docs/security/FMEA.md +155 -0
- package/docs/security/INCIDENT_RESPONSE.md +575 -0
- package/docs/security/KEYS.md +45 -0
- package/docs/security/KEY_ROTATION.md +219 -0
- package/docs/security/MCP_POLICY.md +69 -0
- package/docs/security/POLICY_RELEASES.md +33 -0
- package/docs/security/README.md +24 -0
- package/docs/security/SECRETS.md +146 -0
- package/docs/security/SECURITY.md +41 -0
- package/docs/security/SECURITY_CHECKLIST.md +44 -0
- package/docs/security/SOUP_REGISTER.md +32 -0
- package/docs/security/THREAT_MODEL.md +120 -0
- package/docs/security/VERIFICATION_VALIDATION.md +224 -0
- package/docs/themes/README.md +6 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
- package/docs/themes/hero-shot.svg +78 -0
- package/dot_config/.module-manifest.json +69 -0
- package/dot_config/ai/identity.md +20 -0
- package/dot_config/ai/patterns/architect.md +14 -0
- package/dot_config/ai/patterns/hardener.md +13 -0
- package/dot_config/ai/patterns/refactor.md +13 -0
- package/dot_config/aider/aider.conf.yml +32 -0
- package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
- package/dot_config/ansible/ansible.cfg +11 -0
- package/dot_config/atuin/config.toml +40 -0
- package/dot_config/bat/config +23 -0
- package/dot_config/brave-flags.conf.tmpl +7 -0
- package/dot_config/btop/btop.conf +16 -0
- package/dot_config/btop/themes/tokyonight.theme +34 -0
- package/dot_config/bun/bunfig.toml.tmpl +33 -0
- package/dot_config/claude/mcp_servers.json +20 -0
- package/dot_config/containers/containers.conf +14 -0
- package/dot_config/curl/dot_curlrc +18 -0
- package/dot_config/dlv/config.yml +39 -0
- package/dot_config/docker/config.json +15 -0
- package/dot_config/dotfiles/agent-card.json +29 -0
- package/dot_config/dotfiles/agent-profiles.json +92 -0
- package/dot_config/dotfiles/boot/README.md +11 -0
- package/dot_config/dotfiles/grub/README.md +11 -0
- package/dot_config/dotfiles/lock/README.md +11 -0
- package/dot_config/dotfiles/mcp-lock.json +33 -0
- package/dot_config/dotfiles/mcp-policy.json +52 -0
- package/dot_config/dotfiles/mcp-registry.json +47 -0
- package/dot_config/dotfiles/model-registry.json +20 -0
- package/dot_config/dotfiles/policy-bundles.json +38 -0
- package/dot_config/dotfiles/prompt-registry.json +16 -0
- package/dot_config/dotfiles/versions.env +18 -0
- package/dot_config/duf/duf.conf +6 -0
- package/dot_config/duti/defaults.duti +5 -0
- package/dot_config/emoji/emoji.txt +34 -0
- package/dot_config/environment.d/50-ssh-agent.conf +2 -0
- package/dot_config/environment.d/90-wayland.conf +19 -0
- package/dot_config/fastfetch/config.jsonc +28 -0
- package/dot_config/firefox/user.js.tmpl +58 -0
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
- package/dot_config/fish/completions/dot.fish.tmpl +115 -0
- package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
- package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
- package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
- package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
- package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
- package/dot_config/fish/config.fish.tmpl +44 -0
- package/dot_config/fish/fish_plugins +1 -0
- package/dot_config/fish/functions/_.fish +3 -0
- package/dot_config/fish/functions/_cached_eval.fish +58 -0
- package/dot_config/fish/functions/als.fish +46 -0
- package/dot_config/fish/functions/bg-upgrade.fish +7 -0
- package/dot_config/fish/functions/c.fish +3 -0
- package/dot_config/fish/functions/cat.fish +9 -0
- package/dot_config/fish/functions/d.fish +7 -0
- package/dot_config/fish/functions/dot.fish +34 -0
- package/dot_config/fish/functions/h.fish +3 -0
- package/dot_config/fish/functions/l.fish +7 -0
- package/dot_config/fish/functions/la.fish +7 -0
- package/dot_config/fish/functions/ll.fish +7 -0
- package/dot_config/fish/functions/log_error.fish +13 -0
- package/dot_config/fish/functions/log_info.fish +13 -0
- package/dot_config/fish/functions/lr.fish +7 -0
- package/dot_config/fish/functions/lra.fish +7 -0
- package/dot_config/fish/functions/ls.fish +7 -0
- package/dot_config/fish/functions/lt.fish +7 -0
- package/dot_config/fish/functions/lta.fish +7 -0
- package/dot_config/fish/functions/notify-run.fish +11 -0
- package/dot_config/fish/functions/q.fish +3 -0
- package/dot_config/fish/functions/silent-run.fish +7 -0
- package/dot_config/fish/functions/yy.fish +8 -0
- package/dot_config/flatpak/flatpak.list +4 -0
- package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
- package/dot_config/foot/foot.ini.tmpl +33 -0
- package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
- package/dot_config/fzf/fzf.zsh +48 -0
- package/dot_config/gem/gemrc +9 -0
- package/dot_config/gh/config.yml +12 -0
- package/dot_config/ghostty/config.tmpl +165 -0
- package/dot_config/git/allowed_signers.tmpl +18 -0
- package/dot_config/git/attributes +12 -0
- package/dot_config/git/commit-template +10 -0
- package/dot_config/git/ignore +27 -0
- package/dot_config/gnupg/gpg-agent.conf +11 -0
- package/dot_config/go/golangci.yml +118 -0
- package/dot_config/go/gopls.json +30 -0
- package/dot_config/goose/config.yaml +29 -0
- package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
- package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
- package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
- package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
- package/dot_config/htop/htoprc +20 -0
- package/dot_config/inputrc +2 -0
- package/dot_config/ipython/profile_default/ipython_config.py +19 -0
- package/dot_config/just/justfile +122 -0
- package/dot_config/k9s/config.yaml +65 -0
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
- package/dot_config/kanshi/config.tmpl +22 -0
- package/dot_config/karabiner/karabiner.json +14 -0
- package/dot_config/kitty/kitty.conf.tmpl +53 -0
- package/dot_config/lazydocker/config.yml +186 -0
- package/dot_config/lazygit/config.yml +35 -0
- package/dot_config/mako/config +47 -0
- package/dot_config/mas/masapps.txt +5 -0
- package/dot_config/micro/settings.json +3 -0
- package/dot_config/mimeapps.list +77 -0
- package/dot_config/minikube/config.json +13 -0
- package/dot_config/mise/config.toml +99 -0
- package/dot_config/mongosh/mongoshrc.js +68 -0
- package/dot_config/mpv/input.conf +47 -0
- package/dot_config/mpv/mpv.conf +47 -0
- package/dot_config/mycli/myclirc +67 -0
- package/dot_config/nano/nanorc +28 -0
- package/dot_config/ncdu/config +12 -0
- package/dot_config/niri/config.kdl.tmpl +327 -0
- package/dot_config/nushell/aliases.nu +18 -0
- package/dot_config/nushell/completions.nu.tmpl +52 -0
- package/dot_config/nushell/config.nu.tmpl +86 -0
- package/dot_config/nushell/env.nu.tmpl +94 -0
- package/dot_config/nushell/functions.nu.tmpl +17 -0
- package/dot_config/nvim/init.lua +18 -0
- package/dot_config/nvim/lazy-lock.json +58 -0
- package/dot_config/nvim/lua/config/autocmds.lua +107 -0
- package/dot_config/nvim/lua/config/keymaps.lua +92 -0
- package/dot_config/nvim/lua/config/lazy.lua +44 -0
- package/dot_config/nvim/lua/config/options.lua +49 -0
- package/dot_config/nvim/lua/plugins/ai.lua +75 -0
- package/dot_config/nvim/lua/plugins/coding.lua +216 -0
- package/dot_config/nvim/lua/plugins/completion.lua +60 -0
- package/dot_config/nvim/lua/plugins/dap.lua +412 -0
- package/dot_config/nvim/lua/plugins/editor.lua +55 -0
- package/dot_config/nvim/lua/plugins/git.lua +10 -0
- package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
- package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
- package/dot_config/nvim/lua/plugins/rust.lua +34 -0
- package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
- package/dot_config/nvim/lua/plugins/ui.lua +509 -0
- package/dot_config/paru/paru.conf +10 -0
- package/dot_config/pip/pip.conf.tmpl +32 -0
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
- package/dot_config/pueue/pueue.yml +34 -0
- package/dot_config/pypoetry/config.toml +6 -0
- package/dot_config/pyrightconfig.json +5 -0
- package/dot_config/raycast/README.md +13 -0
- package/dot_config/redis/redisclirc +41 -0
- package/dot_config/ripgrep/ripgreprc +21 -0
- package/dot_config/shell/00-core-paths.sh.tmpl +133 -0
- package/dot_config/shell/05-core-safety.sh +47 -0
- package/dot_config/shell/10-secrets.sh +40 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
- package/dot_config/shell/40-ls-colors.sh +48 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +10 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +120 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +54 -0
- package/dot_config/shell/Brewfile +207 -0
- package/dot_config/shell/Brewfile.cask +92 -0
- package/dot_config/shell/Brewfile.cli +127 -0
- package/dot_config/shell/README.md +267 -0
- package/dot_config/shell/als_data.txt.tmpl +65 -0
- package/dot_config/shell/custom/auto_ls.zsh +20 -0
- package/dot_config/shell/custom/context_suggest.zsh +68 -0
- package/dot_config/shell/custom/error_analysis.zsh +45 -0
- package/dot_config/sops/dot_sops.yaml +23 -0
- package/dot_config/starship.toml.tmpl +202 -0
- package/dot_config/swaylock/config +43 -0
- package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
- package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
- package/dot_config/systemd/user/pueued.service +12 -0
- package/dot_config/systemd/user/ssh-agent.service +12 -0
- package/dot_config/task/Taskfile.yml +86 -0
- package/dot_config/tflint/tflint.hcl +9 -0
- package/dot_config/tmux/tmux.conf.tmpl +223 -0
- package/dot_config/topgrade.toml.tmpl +54 -0
- package/dot_config/user-dirs.dirs +9 -0
- package/dot_config/vscode/extensions.txt +11 -0
- package/dot_config/vscode/settings.json.tmpl +82 -0
- package/dot_config/waybar/config.jsonc.tmpl +90 -0
- package/dot_config/waybar/style.css.tmpl +211 -0
- package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
- package/dot_config/wget/wgetrc +12 -0
- package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
- package/dot_config/yarn/yarnrc.yml +36 -0
- package/dot_config/yazi/keymap.toml +67 -0
- package/dot_config/yazi/theme.toml +102 -0
- package/dot_config/yazi/yazi.toml +40 -0
- package/dot_config/zathura/zathurarc +52 -0
- package/dot_config/zellij/config.kdl.tmpl +79 -0
- package/dot_config/zsh/dot_zprofile +7 -0
- package/dot_config/zsh/dot_zshenv +5 -0
- package/dot_config/zsh/dot_zshrc.tmpl +498 -0
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
- package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +194 -0
- package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
- package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
- package/dot_local/bin/executable_ai-update +195 -0
- package/dot_local/bin/executable_ai_core +152 -0
- package/dot_local/bin/executable_antigravity +11 -0
- package/dot_local/bin/executable_b64 +84 -0
- package/dot_local/bin/executable_bm +77 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +589 -0
- package/dot_local/bin/executable_dot-ai +36 -0
- package/dot_local/bin/executable_dot-bootstrap +77 -0
- package/dot_local/bin/executable_dot-launch-or-focus +52 -0
- package/dot_local/bin/executable_dot-load-benchmark +31 -0
- package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
- package/dot_local/bin/executable_dot-theme-sync +952 -0
- package/dot_local/bin/executable_dot_completion +57 -0
- package/dot_local/bin/executable_dtags +28 -0
- package/dot_local/bin/executable_epoch +67 -0
- package/dot_local/bin/executable_extract +41 -0
- package/dot_local/bin/executable_gbd +52 -0
- package/dot_local/bin/executable_gd +42 -0
- package/dot_local/bin/executable_git-ai-commit +175 -0
- package/dot_local/bin/executable_git-ai-diff +169 -0
- package/dot_local/bin/executable_gl +101 -0
- package/dot_local/bin/executable_hash +161 -0
- package/dot_local/bin/executable_hashsum +160 -0
- package/dot_local/bin/executable_hex +115 -0
- package/dot_local/bin/executable_jsonv +78 -0
- package/dot_local/bin/executable_jwt +94 -0
- package/dot_local/bin/executable_kill-port +75 -0
- package/dot_local/bin/executable_lorem +118 -0
- package/dot_local/bin/executable_mkscript +35 -0
- package/dot_local/bin/executable_monitor +56 -0
- package/dot_local/bin/executable_myip +51 -0
- package/dot_local/bin/executable_notify +22 -0
- package/dot_local/bin/executable_open +36 -0
- package/dot_local/bin/executable_pw +27 -0
- package/dot_local/bin/executable_rec-start +46 -0
- package/dot_local/bin/executable_rec-stop +35 -0
- package/dot_local/bin/executable_regex +132 -0
- package/dot_local/bin/executable_start-niri +8 -0
- package/dot_local/bin/executable_tmux-sessionizer +314 -0
- package/dot_local/bin/executable_tour +175 -0
- package/dot_local/bin/executable_up +21 -0
- package/dot_local/bin/executable_update +142 -0
- package/dot_local/bin/executable_uuid +87 -0
- package/dot_local/bin/executable_win +32 -0
- package/dot_local/bin/executable_yamlv +57 -0
- package/dot_local/share/bash-completion/completions/dot +72 -0
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +149 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +283 -0
- package/install.sh +342 -0
- package/package.json +1 -1
- package/scripts/ci/check-copyright-headers.sh +96 -0
- package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
- package/scripts/ci/install-chezmoi-verified.sh +64 -0
- package/scripts/ci/validate-ci-config.sh +224 -0
- package/scripts/demo/record.sh +42 -0
- package/scripts/diagnostics/a2a-conformance.sh +162 -0
- package/scripts/diagnostics/alias-governance.sh +137 -0
- package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
- package/scripts/diagnostics/aliases-manifest.sh +31 -0
- package/scripts/diagnostics/benchmark.sh +381 -0
- package/scripts/diagnostics/conflicts.sh +72 -0
- package/scripts/diagnostics/doctor-unified.sh +38 -0
- package/scripts/diagnostics/doctor.sh +541 -0
- package/scripts/diagnostics/drift-dashboard.sh +37 -0
- package/scripts/diagnostics/health.sh +597 -0
- package/scripts/diagnostics/history-analysis.sh +85 -0
- package/scripts/diagnostics/mcp-doctor.sh +575 -0
- package/scripts/diagnostics/perf.sh +225 -0
- package/scripts/diagnostics/scorecard.sh +118 -0
- package/scripts/diagnostics/secret-governance.sh +58 -0
- package/scripts/diagnostics/security-score.sh +438 -0
- package/scripts/diagnostics/smoke-test.sh +87 -0
- package/scripts/diagnostics/snapshot.sh +89 -0
- package/scripts/diagnostics/verify.sh +107 -0
- package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
- package/scripts/diagnostics/version-locks.sh +79 -0
- package/scripts/diagnostics/workstation-attestation.sh +181 -0
- package/scripts/docs/build-manual.sh +883 -0
- package/scripts/docs/check-manual.sh +213 -0
- package/scripts/dot/commands/agent.sh +465 -0
- package/scripts/dot/commands/ai.sh +416 -0
- package/scripts/dot/commands/aliases.sh +250 -0
- package/scripts/dot/commands/appearance.sh +80 -0
- package/scripts/dot/commands/core.sh +185 -0
- package/scripts/dot/commands/diagnostics.sh +229 -0
- package/scripts/dot/commands/fleet.sh +399 -0
- package/scripts/dot/commands/lint.sh +177 -0
- package/scripts/dot/commands/manual.sh +168 -0
- package/scripts/dot/commands/meta.sh +248 -0
- package/scripts/dot/commands/patterns.sh +54 -0
- package/scripts/dot/commands/restore.sh +231 -0
- package/scripts/dot/commands/secrets.sh +223 -0
- package/scripts/dot/commands/security.sh +76 -0
- package/scripts/dot/commands/tools.sh +469 -0
- package/scripts/dot/data/alias-deprecations.tsv +2 -0
- package/scripts/dot/lib/bento.sh +49 -0
- package/scripts/dot/lib/log.sh +194 -0
- package/scripts/dot/lib/platform.sh +98 -0
- package/scripts/dot/lib/ui.sh +507 -0
- package/scripts/dot/lib/utils.sh +372 -0
- package/scripts/fonts/install-nerd-fonts.sh +68 -0
- package/scripts/fonts/patch-fonts.sh +35 -0
- package/scripts/git-hooks/install.sh +11 -0
- package/scripts/git-hooks/pre-commit +12 -0
- package/scripts/git-hooks/pre-commit-audit.sh +145 -0
- package/scripts/git-hooks/pre-push +29 -0
- package/scripts/git-hooks/prepare-commit-msg +29 -0
- package/scripts/lib/secrets_provider.sh +158 -0
- package/scripts/maintenance/check-updates.sh +131 -0
- package/scripts/ops/ai-setup.sh +55 -0
- package/scripts/ops/bundle.sh +77 -0
- package/scripts/ops/chaos.sh +49 -0
- package/scripts/ops/chezmoi-apply.sh +270 -0
- package/scripts/ops/chezmoi-diff.sh +15 -0
- package/scripts/ops/chezmoi-remove.sh +45 -0
- package/scripts/ops/chezmoi-update.sh +48 -0
- package/scripts/ops/heal-chezmoi.sh +51 -0
- package/scripts/ops/heal-system.sh +128 -0
- package/scripts/ops/heal-tools.sh +340 -0
- package/scripts/ops/heal.sh +222 -0
- package/scripts/ops/post-apply-repair.sh +106 -0
- package/scripts/ops/prewarm.sh +127 -0
- package/scripts/ops/release.sh +252 -0
- package/scripts/ops/rollback.sh +589 -0
- package/scripts/ops/setup.sh +137 -0
- package/scripts/ops/teleport.sh +33 -0
- package/scripts/qa/coverage-baseline.sh +60 -0
- package/scripts/qa/docs-coverage.sh +111 -0
- package/scripts/qa/reliability-audit.sh +138 -0
- package/scripts/qa/traceability-coverage.sh +116 -0
- package/scripts/qa/validate-examples.sh +26 -0
- package/scripts/qa/wsl-contract.sh +11 -0
- package/scripts/release/package-policy-bundles.sh +125 -0
- package/scripts/secrets/age-init.sh +70 -0
- package/scripts/secrets/create-secrets-file.sh +45 -0
- package/scripts/secrets/encrypt-ssh-key.sh +43 -0
- package/scripts/security/backup.sh +57 -0
- package/scripts/security/dns-doh.sh +51 -0
- package/scripts/security/encryption-check.sh +54 -0
- package/scripts/security/enforce-policies.sh +334 -0
- package/scripts/security/firewall.sh +90 -0
- package/scripts/security/lock-configs.sh +57 -0
- package/scripts/security/lock-screen.sh +55 -0
- package/scripts/security/manage-secrets.sh +428 -0
- package/scripts/security/ssh-cert.sh +203 -0
- package/scripts/security/telemetry-kill.sh +50 -0
- package/scripts/security/usb-safety.sh +51 -0
- package/scripts/theme/apply-gnome-theme.sh +328 -0
- package/scripts/theme/extract-theme.py +677 -0
- package/scripts/theme/install-boot-logo.sh +62 -0
- package/scripts/theme/install-catppuccin-themes.sh +370 -0
- package/scripts/theme/install-cursors.sh +25 -0
- package/scripts/theme/install-file-icons.sh +26 -0
- package/scripts/theme/install-grub-theme.sh +61 -0
- package/scripts/theme/install-lock-icon.sh +30 -0
- package/scripts/theme/merge-wallpaper.sh +141 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +421 -0
- package/scripts/theme/wallpaper-rotate.sh +136 -0
- package/scripts/theme/wallpaper-sync.sh +397 -0
- package/scripts/tools/cmatrix.sh +21 -0
- package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
- package/scripts/tools/emoji-picker.sh +48 -0
- package/scripts/tools/figlet-banner.sh +18 -0
- package/scripts/tools/log-rotate.sh +30 -0
- package/scripts/tools/lolcat-wrap.sh +19 -0
- package/scripts/tools/pipes.sh +48 -0
- package/scripts/tuning/linux.sh +185 -0
- package/scripts/tuning/macos.sh +55 -0
- package/scripts/uninstall.sh +85 -0
- package/scripts/version-sync.sh +487 -0
- package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
- package/templates/chezmoi-data/mac-m1.toml.example +16 -0
- package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
- package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
- package/templates/projects/go/.github/workflows/ci.yml +31 -0
- package/templates/projects/go/README.md +4 -0
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +7 -0
- package/templates/projects/molecule/converge.yml +7 -0
- package/templates/projects/molecule/molecule.yml +16 -0
- package/templates/projects/node/.github/workflows/ci.yml +30 -0
- package/templates/projects/node/README.md +4 -0
- package/templates/projects/node/package-lock.json +12 -0
- package/templates/projects/node/src/index.js +1 -0
- package/templates/projects/packer/README.md +15 -0
- package/templates/projects/packer/main.pkr.hcl +15 -0
- package/templates/projects/python/.github/workflows/ci.yml +34 -0
- package/templates/projects/python/README.md +4 -0
- package/templates/projects/python/pyproject.toml +15 -0
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
- package/templates/projects/python/tests/test_basic.py +1 -0
- package/docs/ARCHITECTURE.md +0 -62
- package/docs/COMPLIANCE.md +0 -47
- package/docs/OPERATIONS.md +0 -103
- package/docs/PR_DESCRIPTION.md +0 -150
- package/docs/ROADMAP_legacy.md +0 -556
- package/docs/SECURITY_CHECKLIST.md +0 -25
- package/docs/TASK.md +0 -99
- package/docs/WALKTHROUGH.md +0 -46
- package/scripts/backup.sh +0 -142
- package/scripts/banner.sh +0 -20
- package/scripts/benchmark.sh +0 -20
- package/scripts/build.sh +0 -41
- package/scripts/clean.sh +0 -31
- package/scripts/compile.sh +0 -54
- package/scripts/copy.sh +0 -108
- package/scripts/doctor.sh +0 -79
- package/scripts/dotfiles.sh +0 -63
- package/scripts/download.sh +0 -35
- package/scripts/help.sh +0 -57
- package/scripts/lock-configs.sh +0 -57
- package/scripts/package.sh +0 -46
- package/scripts/ssh.sh +0 -55
- package/scripts/teleport.sh +0 -23
- package/scripts/test-aliases.sh +0 -25
- package/scripts/test_smoke.sh +0 -88
- package/scripts/unpack.sh +0 -28
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Key Rotation Guide
|
|
2
|
+
|
|
3
|
+
This guide covers rotating encryption keys for secrets managed by Age and SOPS.
|
|
4
|
+
|
|
5
|
+
## Age Key Rotation
|
|
6
|
+
|
|
7
|
+
### When to Rotate
|
|
8
|
+
|
|
9
|
+
- **Annually**: As a preventive measure
|
|
10
|
+
- **After compromise**: If you suspect key exposure
|
|
11
|
+
- **Personnel change**: When team members leave
|
|
12
|
+
- **Device loss**: If a device with the key is lost/stolen
|
|
13
|
+
|
|
14
|
+
### Rotation Procedure
|
|
15
|
+
|
|
16
|
+
#### 1. Generate New Key
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Create new age key
|
|
20
|
+
age-keygen -o ~/.config/chezmoi/key-new.txt
|
|
21
|
+
|
|
22
|
+
# Note the public key (starts with "age1...")
|
|
23
|
+
cat ~/.config/chezmoi/key-new.txt | grep "public key"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
#### 2. Re-encrypt All Secrets
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# List all encrypted files
|
|
30
|
+
chezmoi managed --include=encrypted
|
|
31
|
+
|
|
32
|
+
# For each encrypted file, decrypt with old key and re-encrypt with new
|
|
33
|
+
for file in $(chezmoi managed --include=encrypted); do
|
|
34
|
+
# Decrypt with old key
|
|
35
|
+
chezmoi cat "$file" > "/tmp/$(basename $file).dec"
|
|
36
|
+
|
|
37
|
+
# Re-encrypt with new key (update chezmoi config first)
|
|
38
|
+
# See step 3
|
|
39
|
+
done
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
#### 3. Update Chezmoi Configuration
|
|
43
|
+
|
|
44
|
+
Edit `~/.config/chezmoi/chezmoi.toml`:
|
|
45
|
+
|
|
46
|
+
```toml
|
|
47
|
+
[age]
|
|
48
|
+
identity = "~/.config/chezmoi/key-new.txt"
|
|
49
|
+
recipient = "age1your_new_public_key_here"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### 4. Re-add Encrypted Files
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Re-add each secret with new encryption
|
|
56
|
+
chezmoi add --encrypt ~/.ssh/id_ed25519
|
|
57
|
+
chezmoi add --encrypt ~/.config/secrets/api-keys.env
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
#### 5. Verify and Clean Up
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Verify decryption works
|
|
64
|
+
chezmoi cat ~/.ssh/id_ed25519
|
|
65
|
+
|
|
66
|
+
# Archive old key (store securely offline)
|
|
67
|
+
mv ~/.config/chezmoi/key.txt ~/.config/chezmoi/key-$(date +%Y%m%d)-archived.txt
|
|
68
|
+
|
|
69
|
+
# Rename new key
|
|
70
|
+
mv ~/.config/chezmoi/key-new.txt ~/.config/chezmoi/key.txt
|
|
71
|
+
|
|
72
|
+
# Commit changes
|
|
73
|
+
cd ~/.dotfiles
|
|
74
|
+
git add -A
|
|
75
|
+
git commit -m "chore(secrets): rotate age encryption key"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Emergency Rotation (Compromised Key)
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# 1. Immediately generate new key
|
|
82
|
+
age-keygen -o ~/.config/chezmoi/key-emergency.txt
|
|
83
|
+
|
|
84
|
+
# 2. Re-encrypt ALL secrets (prioritize most sensitive)
|
|
85
|
+
# 3. Revoke/rotate any API keys, tokens that were encrypted
|
|
86
|
+
# 4. Update any shared secrets with team members
|
|
87
|
+
# 5. Document the incident
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## SOPS Key Rotation
|
|
93
|
+
|
|
94
|
+
### Overview
|
|
95
|
+
|
|
96
|
+
SOPS supports multiple key types. This covers Age keys (recommended) and GPG keys.
|
|
97
|
+
|
|
98
|
+
### SOPS with Age Keys
|
|
99
|
+
|
|
100
|
+
#### Generate New Key
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
age-keygen -o ~/.config/sops/age/keys-new.txt
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### Update .sops.yaml
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
creation_rules:
|
|
110
|
+
- path_regex: \.env$
|
|
111
|
+
age: >-
|
|
112
|
+
age1new_key_here,
|
|
113
|
+
age1old_key_here # Keep old key temporarily for decryption
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
#### Re-encrypt Files
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Rotate key for a single file
|
|
120
|
+
sops updatekeys secrets.env
|
|
121
|
+
|
|
122
|
+
# Or re-encrypt entirely
|
|
123
|
+
sops -d secrets.env | sops -e /dev/stdin > secrets.env.new
|
|
124
|
+
mv secrets.env.new secrets.env
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### Remove Old Key
|
|
128
|
+
|
|
129
|
+
After confirming all files are re-encrypted:
|
|
130
|
+
|
|
131
|
+
1. Remove old key from `.sops.yaml`
|
|
132
|
+
2. Archive old key securely
|
|
133
|
+
3. Commit changes
|
|
134
|
+
|
|
135
|
+
### SOPS with GPG Keys
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Generate new GPG key
|
|
139
|
+
gpg --full-generate-key
|
|
140
|
+
|
|
141
|
+
# Export fingerprint
|
|
142
|
+
gpg --list-keys --keyid-format LONG
|
|
143
|
+
|
|
144
|
+
# Update .sops.yaml with new fingerprint
|
|
145
|
+
# Re-encrypt files
|
|
146
|
+
sops updatekeys <file>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Automation Scripts
|
|
152
|
+
|
|
153
|
+
### Check Key Age
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
#!/usr/bin/env bash
|
|
157
|
+
# check-key-age.sh - Alert if keys are older than 365 days
|
|
158
|
+
|
|
159
|
+
KEY_FILE="${HOME}/.config/chezmoi/key.txt"
|
|
160
|
+
MAX_AGE_DAYS=365
|
|
161
|
+
|
|
162
|
+
if [[ -f "$KEY_FILE" ]]; then
|
|
163
|
+
key_age=$(( ($(date +%s) - $(stat -c %Y "$KEY_FILE")) / 86400 ))
|
|
164
|
+
|
|
165
|
+
if [[ $key_age -gt $MAX_AGE_DAYS ]]; then
|
|
166
|
+
echo "⚠️ Age key is ${key_age} days old. Consider rotation."
|
|
167
|
+
exit 1
|
|
168
|
+
else
|
|
169
|
+
echo "✓ Age key is ${key_age} days old (limit: ${MAX_AGE_DAYS})"
|
|
170
|
+
fi
|
|
171
|
+
fi
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Automated Backup Before Rotation
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
#!/usr/bin/env bash
|
|
178
|
+
# backup-before-rotation.sh
|
|
179
|
+
|
|
180
|
+
BACKUP_DIR="${HOME}/.local/share/dotfiles/key-backups"
|
|
181
|
+
mkdir -p "$BACKUP_DIR"
|
|
182
|
+
|
|
183
|
+
# Backup current key
|
|
184
|
+
cp ~/.config/chezmoi/key.txt "$BACKUP_DIR/key-$(date +%Y%m%d_%H%M%S).txt"
|
|
185
|
+
|
|
186
|
+
# Encrypt backup with passphrase
|
|
187
|
+
gpg --symmetric --cipher-algo AES256 "$BACKUP_DIR/key-$(date +%Y%m%d_%H%M%S).txt"
|
|
188
|
+
|
|
189
|
+
# Remove unencrypted backup
|
|
190
|
+
rm "$BACKUP_DIR/key-$(date +%Y%m%d_%H%M%S).txt"
|
|
191
|
+
|
|
192
|
+
echo "Key backed up to $BACKUP_DIR (encrypted)"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Best Practices
|
|
198
|
+
|
|
199
|
+
1. **Never commit unencrypted keys** - Use `.gitignore` properly
|
|
200
|
+
2. **Store backups offline** - USB drive in secure location
|
|
201
|
+
3. **Use hardware keys when possible** - YubiKey with age-plugin-yubikey
|
|
202
|
+
4. **Document rotation dates** - Keep a log of when keys were rotated
|
|
203
|
+
5. **Test decryption** - Always verify after rotation
|
|
204
|
+
6. **Notify team members** - If using shared secrets
|
|
205
|
+
|
|
206
|
+
## Recovery Procedures
|
|
207
|
+
|
|
208
|
+
If you lose access to your key:
|
|
209
|
+
|
|
210
|
+
1. **Check backups** - Offline storage, password manager
|
|
211
|
+
2. **Check other machines** - Key may exist on another device
|
|
212
|
+
3. **Re-create secrets** - As last resort, regenerate API keys, tokens, etc.
|
|
213
|
+
|
|
214
|
+
## Related Documentation
|
|
215
|
+
|
|
216
|
+
- [SECRETS.md](SECRETS.md) - Secrets management overview
|
|
217
|
+
- [SECURITY.md](SECURITY.md) - Security hardening guide
|
|
218
|
+
- [Age documentation](https://github.com/FiloSottile/age)
|
|
219
|
+
- [SOPS documentation](https://github.com/getsops/sops)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# MCP Policy
|
|
2
|
+
|
|
3
|
+
MCP is treated as a controlled execution boundary.
|
|
4
|
+
|
|
5
|
+
## Default posture
|
|
6
|
+
|
|
7
|
+
The tracked default is `strict-local`.
|
|
8
|
+
|
|
9
|
+
Properties:
|
|
10
|
+
- local-first
|
|
11
|
+
- least privilege
|
|
12
|
+
- no broad filesystem roots
|
|
13
|
+
- no wildcard or unsafe flags
|
|
14
|
+
- no network-facing MCP servers enabled by default
|
|
15
|
+
- machine-readable validation output
|
|
16
|
+
|
|
17
|
+
## Policy artifact
|
|
18
|
+
|
|
19
|
+
The source of truth lives in [mcp-policy.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-policy.json).
|
|
20
|
+
Approved package pins live in [mcp-lock.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-lock.json).
|
|
21
|
+
Tracked server registry entries live in [mcp-registry.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-registry.json).
|
|
22
|
+
|
|
23
|
+
Current defaults:
|
|
24
|
+
- Allowed launchers: `npx`, `node`, `uvx`
|
|
25
|
+
- Trusted transports: `stdio`, `http`
|
|
26
|
+
- Blocked filesystem roots: `/`, `/home`, `/Users`
|
|
27
|
+
- Blocked argument patterns: `^--allow-.*`, `^--unsafe$`, `^\\*$`
|
|
28
|
+
- Network-facing servers disabled by default: `github`, `brave-search`, `fetch`, `puppeteer`, `filesystem`
|
|
29
|
+
- Approved packages must resolve through the tracked MCP lock manifest
|
|
30
|
+
- Every active server must match the tracked MCP registry
|
|
31
|
+
- HTTP transports must use `https://` and registry-declared OAuth2
|
|
32
|
+
|
|
33
|
+
## Validation
|
|
34
|
+
|
|
35
|
+
Run:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
dot mcp --strict
|
|
39
|
+
dot mcp -s -j
|
|
40
|
+
dot mcp registry
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The JSON form is the audit artifact for CI, release validation, and workstation attestation.
|
|
44
|
+
|
|
45
|
+
## Change control
|
|
46
|
+
|
|
47
|
+
Any change to MCP policy requires:
|
|
48
|
+
1. A signed commit
|
|
49
|
+
2. A matching test update
|
|
50
|
+
3. A release note if the effective trust boundary changes
|
|
51
|
+
4. A policy bundle review when enterprise defaults change
|
|
52
|
+
|
|
53
|
+
## Supply-chain controls
|
|
54
|
+
|
|
55
|
+
Phase 2 adds explicit package locking for default MCP servers.
|
|
56
|
+
|
|
57
|
+
Current approved refs:
|
|
58
|
+
- `mcp-server-git@2025.1.14`
|
|
59
|
+
- `@modelcontextprotocol/server-memory@2025.8.4`
|
|
60
|
+
- `mcp-server-sqlite@2025.1.14`
|
|
61
|
+
|
|
62
|
+
`dot mcp --strict` and `dot mcp -s` now verify that:
|
|
63
|
+
- package refs are version-pinned
|
|
64
|
+
- the pinned refs match the tracked lock manifest
|
|
65
|
+
- non-approved package refs are rejected in strict mode
|
|
66
|
+
- active servers match the tracked registry entries
|
|
67
|
+
- remote HTTP transports are HTTPS and OAuth-backed
|
|
68
|
+
|
|
69
|
+
Policy bundle baselines live in [policy-bundles.json](/home/seb/.dotfiles/dot_config/dotfiles/policy-bundles.json).
|
|
@@ -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.
|