@sebastienrousseau/dotfiles 0.2.499 → 0.2.501
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +452 -0
- package/LICENSE +1283 -0
- package/README.md +322 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
- package/docs/AI.md +108 -0
- package/docs/CNAME +1 -0
- package/docs/COPYRIGHT +4 -3
- package/docs/NAMING_CONVENTIONS.md +102 -0
- package/docs/README.md +82 -0
- package/docs/_config.yml +59 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
- package/docs/adr/ADR-002-shell-performance.md +130 -0
- package/docs/adr/ADR-003-security-first.md +158 -0
- package/docs/adr/ADR-004-cli-architecture.md +171 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
- package/docs/adr/ADR-006-shell-selection.md +124 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
- package/docs/adr/ADR-008-alias-system-architecture.md +95 -0
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
- package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
- package/docs/adr/README.md +39 -0
- package/docs/architecture/ARCHITECTURE.md +117 -0
- package/docs/architecture/INTEROP.md +44 -0
- package/docs/architecture/REPO_LAYOUT.md +241 -0
- package/docs/architecture/WALKTHROUGH.md +86 -0
- package/docs/architecture/fleet-deployment.md +77 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
- package/docs/archive/LEGACY_ROADMAP.md +160 -0
- package/docs/archive/MILESTONE_v0.2.493.md +47 -0
- package/docs/{PLAN.md → archive/PLAN.md} +50 -12
- package/docs/archive/REPO_AUDIT.md +31 -0
- package/docs/guides/INSTALL.md +144 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
- package/docs/guides/THEMING.md +230 -0
- package/docs/guides/TROUBLESHOOTING.md +176 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
- package/docs/index.md +43 -0
- package/docs/interop/A2A.md +39 -0
- package/docs/interop/POWERSHELL.md +102 -0
- package/docs/manual/00-introduction.md +89 -0
- package/docs/manual/01-concepts/01-architecture.md +138 -0
- package/docs/manual/01-concepts/02-trust-model.md +182 -0
- package/docs/manual/01-concepts/03-theme-engine.md +186 -0
- package/docs/manual/01-concepts/04-fleet.md +148 -0
- package/docs/manual/01-concepts/05-self-healing.md +204 -0
- package/docs/manual/02-tutorials/01-first-install.md +197 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
- package/docs/manual/02-tutorials/03-create-profile.md +244 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
- package/docs/manual/03-reference/01-dot-cli.md +417 -0
- package/docs/manual/03-reference/02-config-files.md +265 -0
- package/docs/manual/03-reference/03-environment.md +124 -0
- package/docs/manual/03-reference/04-templates.md +190 -0
- package/docs/manual/03-reference/05-feature-flags.md +128 -0
- package/docs/manual/04-cookbook/01-recipes.md +285 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
- package/docs/manual/04-cookbook/03-faq.md +175 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
- package/docs/manual/05-appendices/B-security-checklist.md +84 -0
- package/docs/manual/05-appendices/C-glossary.md +40 -0
- package/docs/manual/05-appendices/D-bibliography.md +58 -0
- package/docs/manual/05-appendices/E-license.md +38 -0
- package/docs/manual/_toc.yml +58 -0
- package/docs/manual/command-index.md +62 -0
- package/docs/manual/concept-index.md +168 -0
- package/docs/operations/ATTESTATION.md +44 -0
- package/docs/operations/CI_CADENCE.md +107 -0
- package/docs/operations/CI_COMPOSITES.md +156 -0
- package/docs/operations/COMPLETIONS.md +123 -0
- package/docs/operations/COVERAGE.md +148 -0
- package/docs/operations/DRIFT.md +107 -0
- package/docs/operations/MAINTENANCE.md +63 -0
- package/docs/operations/MIGRATION.md +109 -0
- package/docs/operations/OPERATIONS.md +188 -0
- package/docs/operations/PERFORMANCE.md +133 -0
- package/docs/operations/RELIABILITY.md +122 -0
- package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
- package/docs/operations/TESTING.md +199 -0
- package/docs/operations/TRACEABILITY.md +35 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
- package/docs/operations/VERSION_SYNC.md +393 -0
- package/docs/reference/ALIASES.md +131 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
- package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
- package/docs/reference/FEATURES.md +66 -0
- package/docs/reference/FONTS.md +112 -0
- package/docs/reference/PROFILES.md +69 -0
- package/docs/reference/SCREENSHOTS.md +121 -0
- package/docs/reference/SCRIPTS.md +71 -0
- package/docs/reference/SUPPORT_MATRIX.md +80 -0
- package/docs/reference/THEMES.md +117 -0
- package/docs/reference/TOOLS.md +109 -0
- package/docs/reference/UTILS.md +155 -0
- package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
- package/docs/security/AUDIT_BYPASS.md +103 -0
- package/docs/security/AUTOMATION_SECRETS.md +26 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
- package/docs/security/COMPLIANCE.md +458 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
- package/docs/security/ENCRYPTION.md +57 -0
- package/docs/security/FMEA.md +159 -0
- package/docs/security/HISTORY_FILTERING.md +132 -0
- package/docs/security/INCIDENT_RESPONSE.md +579 -0
- package/docs/security/INSTALL_VERIFICATION.md +122 -0
- package/docs/security/KEYS.md +49 -0
- package/docs/security/KEY_ROTATION.md +223 -0
- package/docs/security/MCP_POLICY.md +78 -0
- package/docs/security/POLICY_RELEASES.md +37 -0
- package/docs/security/README.md +28 -0
- package/docs/security/SCORECARD.md +80 -0
- package/docs/security/SECRETS.md +158 -0
- package/docs/security/SECURITY.md +45 -0
- package/docs/security/SECURITY_CHECKLIST.md +55 -0
- package/docs/security/SHELL_EXEMPTIONS.md +145 -0
- package/docs/security/SOUP_REGISTER.md +36 -0
- package/docs/security/THREAT_MODEL.md +130 -0
- package/docs/security/VERIFICATION_VALIDATION.md +228 -0
- package/docs/themes/README.md +10 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
- package/docs/themes/hero-shot.svg +78 -0
- package/dot_config/.module-manifest.json +69 -0
- package/dot_config/ai/identity.md +23 -0
- package/dot_config/ai/patterns/architect.md +16 -0
- package/dot_config/ai/patterns/hardener.md +15 -0
- package/dot_config/ai/patterns/refactor.md +15 -0
- package/dot_config/aider/aider.conf.yml +32 -0
- package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
- package/dot_config/ansible/ansible.cfg +11 -0
- package/dot_config/atuin/config.toml.tmpl +47 -0
- package/dot_config/bat/config +23 -0
- package/dot_config/brave-flags.conf.tmpl +7 -0
- package/dot_config/btop/btop.conf +16 -0
- package/dot_config/btop/themes/tokyonight.theme +34 -0
- package/dot_config/bun/bunfig.toml.tmpl +33 -0
- package/dot_config/claude/mcp_servers.json +20 -0
- package/dot_config/containers/containers.conf +14 -0
- package/dot_config/curl/dot_curlrc +18 -0
- package/dot_config/dlv/config.yml +39 -0
- package/dot_config/docker/config.json +15 -0
- package/dot_config/dotfiles/agent-card.json +29 -0
- package/dot_config/dotfiles/agent-profiles.json +92 -0
- package/dot_config/dotfiles/boot/README.md +13 -0
- package/dot_config/dotfiles/grub/README.md +13 -0
- package/dot_config/dotfiles/lock/README.md +13 -0
- package/dot_config/dotfiles/mcp-lock.json +33 -0
- package/dot_config/dotfiles/mcp-policy.json +52 -0
- package/dot_config/dotfiles/mcp-registry.json +47 -0
- package/dot_config/dotfiles/model-registry.json +20 -0
- package/dot_config/dotfiles/policy-bundles.json +38 -0
- package/dot_config/dotfiles/prompt-registry.json +16 -0
- package/dot_config/dotfiles/versions.env +18 -0
- package/dot_config/duf/duf.conf +6 -0
- package/dot_config/duti/defaults.duti +5 -0
- package/dot_config/emoji/emoji.txt +34 -0
- package/dot_config/environment.d/50-ssh-agent.conf +2 -0
- package/dot_config/environment.d/90-wayland.conf +19 -0
- package/dot_config/fastfetch/config.jsonc +28 -0
- package/dot_config/firefox/user.js.tmpl +58 -0
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
- package/dot_config/fish/completions/dot.fish.tmpl +115 -0
- package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
- package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
- package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
- package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
- package/dot_config/fish/conf.d/init.fish.tmpl +172 -0
- package/dot_config/fish/config.fish.tmpl +44 -0
- package/dot_config/fish/fish_plugins +1 -0
- package/dot_config/fish/functions/_.fish +3 -0
- package/dot_config/fish/functions/_cached_eval.fish +131 -0
- package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
- package/dot_config/fish/functions/als.fish +46 -0
- package/dot_config/fish/functions/bg-upgrade.fish +7 -0
- package/dot_config/fish/functions/c.fish +3 -0
- package/dot_config/fish/functions/cat.fish +9 -0
- package/dot_config/fish/functions/d.fish +7 -0
- package/dot_config/fish/functions/dot.fish +34 -0
- package/dot_config/fish/functions/h.fish +3 -0
- package/dot_config/fish/functions/l.fish +7 -0
- package/dot_config/fish/functions/la.fish +7 -0
- package/dot_config/fish/functions/ll.fish +7 -0
- package/dot_config/fish/functions/log_error.fish +13 -0
- package/dot_config/fish/functions/log_info.fish +13 -0
- package/dot_config/fish/functions/lr.fish +7 -0
- package/dot_config/fish/functions/lra.fish +7 -0
- package/dot_config/fish/functions/ls.fish +7 -0
- package/dot_config/fish/functions/lt.fish +7 -0
- package/dot_config/fish/functions/lta.fish +7 -0
- package/dot_config/fish/functions/notify-run.fish +11 -0
- package/dot_config/fish/functions/q.fish +3 -0
- package/dot_config/fish/functions/silent-run.fish +7 -0
- package/dot_config/fish/functions/yy.fish +8 -0
- package/dot_config/flatpak/flatpak.list +4 -0
- package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
- package/dot_config/foot/foot.ini.tmpl +33 -0
- package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
- package/dot_config/fzf/fzf.zsh +48 -0
- package/dot_config/gem/gemrc +9 -0
- package/dot_config/gh/config.yml +12 -0
- package/dot_config/ghostty/config.tmpl +165 -0
- package/dot_config/git/allowed_signers.tmpl +18 -0
- package/dot_config/git/attributes +12 -0
- package/dot_config/git/commit-template +10 -0
- package/dot_config/git/hooks/executable_commit-msg +146 -0
- package/dot_config/git/ignore +27 -0
- package/dot_config/gnupg/gpg-agent.conf +11 -0
- package/dot_config/go/golangci.yml +118 -0
- package/dot_config/go/gopls.json +30 -0
- package/dot_config/goose/config.yaml +29 -0
- package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
- package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
- package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
- package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
- package/dot_config/htop/htoprc +20 -0
- package/dot_config/inputrc +2 -0
- package/dot_config/ipython/profile_default/ipython_config.py +19 -0
- package/dot_config/just/justfile +122 -0
- package/dot_config/k9s/config.yaml +65 -0
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
- package/dot_config/kanshi/config.tmpl +22 -0
- package/dot_config/karabiner/karabiner.json +14 -0
- package/dot_config/kitty/kitty.conf.tmpl +53 -0
- package/dot_config/lazydocker/config.yml +186 -0
- package/dot_config/lazygit/config.yml +35 -0
- package/dot_config/mako/config +47 -0
- package/dot_config/mas/masapps.txt +5 -0
- package/dot_config/micro/settings.json +3 -0
- package/dot_config/mimeapps.list +77 -0
- package/dot_config/minikube/config.json +13 -0
- package/dot_config/mise/config.toml +99 -0
- package/dot_config/mongosh/mongoshrc.js +68 -0
- package/dot_config/mpv/input.conf +47 -0
- package/dot_config/mpv/mpv.conf +47 -0
- package/dot_config/mycli/myclirc +67 -0
- package/dot_config/nano/nanorc +28 -0
- package/dot_config/ncdu/config +12 -0
- package/dot_config/niri/config.kdl.tmpl +327 -0
- package/dot_config/nushell/aliases.nu +18 -0
- package/dot_config/nushell/cached_eval.nu +80 -0
- package/dot_config/nushell/completions.nu.tmpl +52 -0
- package/dot_config/nushell/config.nu.tmpl +86 -0
- package/dot_config/nushell/env.nu.tmpl +102 -0
- package/dot_config/nushell/functions.nu.tmpl +17 -0
- package/dot_config/nvim/init.lua +18 -0
- package/dot_config/nvim/lazy-lock.json +58 -0
- package/dot_config/nvim/lua/config/autocmds.lua +107 -0
- package/dot_config/nvim/lua/config/keymaps.lua +92 -0
- package/dot_config/nvim/lua/config/lazy.lua +44 -0
- package/dot_config/nvim/lua/config/options.lua +49 -0
- package/dot_config/nvim/lua/plugins/ai.lua +75 -0
- package/dot_config/nvim/lua/plugins/coding.lua +216 -0
- package/dot_config/nvim/lua/plugins/completion.lua +60 -0
- package/dot_config/nvim/lua/plugins/dap.lua +412 -0
- package/dot_config/nvim/lua/plugins/editor.lua +55 -0
- package/dot_config/nvim/lua/plugins/git.lua +10 -0
- package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
- package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
- package/dot_config/nvim/lua/plugins/rust.lua +34 -0
- package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
- package/dot_config/nvim/lua/plugins/ui.lua +509 -0
- package/dot_config/paru/paru.conf +10 -0
- package/dot_config/pip/pip.conf.tmpl +32 -0
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
- package/dot_config/pueue/pueue.yml +34 -0
- package/dot_config/pypoetry/config.toml +6 -0
- package/dot_config/pyrightconfig.json +5 -0
- package/dot_config/raycast/README.md +13 -0
- package/dot_config/redis/redisclirc +41 -0
- package/dot_config/ripgrep/ripgreprc +21 -0
- package/dot_config/shell/00-core-paths.sh.tmpl +134 -0
- package/dot_config/shell/05-core-safety.sh +48 -0
- package/dot_config/shell/10-secrets.sh +41 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
- package/dot_config/shell/40-ls-colors.sh +49 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -0
- package/dot_config/shell/Brewfile +207 -0
- package/dot_config/shell/Brewfile.cask +92 -0
- package/dot_config/shell/Brewfile.cli +127 -0
- package/dot_config/shell/README.md +284 -0
- package/dot_config/shell/als_data.txt.tmpl +65 -0
- package/dot_config/shell/custom/auto_ls.zsh +20 -0
- package/dot_config/shell/custom/context_suggest.zsh +68 -0
- package/dot_config/shell/custom/error_analysis.zsh +45 -0
- package/dot_config/sops/dot_sops.yaml +23 -0
- package/dot_config/starship.toml.tmpl +202 -0
- package/dot_config/swaylock/config +43 -0
- package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
- package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
- package/dot_config/systemd/user/pueued.service +12 -0
- package/dot_config/systemd/user/ssh-agent.service +12 -0
- package/dot_config/task/Taskfile.yml +86 -0
- package/dot_config/tflint/tflint.hcl +9 -0
- package/dot_config/tmux/tmux.conf.tmpl +223 -0
- package/dot_config/topgrade.toml.tmpl +54 -0
- package/dot_config/user-dirs.dirs +10 -0
- package/dot_config/vscode/extensions.txt +11 -0
- package/dot_config/vscode/settings.json.tmpl +82 -0
- package/dot_config/waybar/config.jsonc.tmpl +90 -0
- package/dot_config/waybar/style.css.tmpl +211 -0
- package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
- package/dot_config/wget/wgetrc +12 -0
- package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
- package/dot_config/yarn/yarnrc.yml +36 -0
- package/dot_config/yazi/keymap.toml +67 -0
- package/dot_config/yazi/theme.toml +102 -0
- package/dot_config/yazi/yazi.toml +40 -0
- package/dot_config/zathura/zathurarc +52 -0
- package/dot_config/zellij/config.kdl.tmpl +79 -0
- package/dot_config/zsh/dot_zprofile +7 -0
- package/dot_config/zsh/dot_zshenv +5 -0
- package/dot_config/zsh/dot_zshrc.tmpl +635 -0
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -0
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
- package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +214 -0
- package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
- package/dot_local/bin/executable_ai-update +195 -0
- package/dot_local/bin/executable_ai_core +152 -0
- package/dot_local/bin/executable_antigravity +11 -0
- package/dot_local/bin/executable_b64 +84 -0
- package/dot_local/bin/executable_bm +79 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +596 -0
- package/dot_local/bin/executable_dot-ai +36 -0
- package/dot_local/bin/executable_dot-bootstrap +77 -0
- package/dot_local/bin/executable_dot-launch-or-focus +52 -0
- package/dot_local/bin/executable_dot-load-benchmark +31 -0
- package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
- package/dot_local/bin/executable_dot-theme-sync +952 -0
- package/dot_local/bin/executable_dot_completion +57 -0
- package/dot_local/bin/executable_dtags +28 -0
- package/dot_local/bin/executable_epoch +67 -0
- package/dot_local/bin/executable_extract +41 -0
- package/dot_local/bin/executable_gbd +52 -0
- package/dot_local/bin/executable_gd +42 -0
- package/dot_local/bin/executable_git-ai-commit +175 -0
- package/dot_local/bin/executable_git-ai-diff +169 -0
- package/dot_local/bin/executable_gl +101 -0
- package/dot_local/bin/executable_hash +161 -0
- package/dot_local/bin/executable_hashsum +160 -0
- package/dot_local/bin/executable_hex +115 -0
- package/dot_local/bin/executable_jsonv +78 -0
- package/dot_local/bin/executable_jwt +94 -0
- package/dot_local/bin/executable_kill-port +75 -0
- package/dot_local/bin/executable_lorem +118 -0
- package/dot_local/bin/executable_mkscript +35 -0
- package/dot_local/bin/executable_monitor +56 -0
- package/dot_local/bin/executable_myip +51 -0
- package/dot_local/bin/executable_notify +24 -0
- package/dot_local/bin/executable_open +38 -0
- package/dot_local/bin/executable_pw +27 -0
- package/dot_local/bin/executable_rec-start +46 -0
- package/dot_local/bin/executable_rec-stop +35 -0
- package/dot_local/bin/executable_regex +132 -0
- package/dot_local/bin/executable_start-niri +8 -0
- package/dot_local/bin/executable_tmux-sessionizer +314 -0
- package/dot_local/bin/executable_tour +177 -0
- package/dot_local/bin/executable_up +23 -0
- package/dot_local/bin/executable_update +142 -0
- package/dot_local/bin/executable_uuid +87 -0
- package/dot_local/bin/executable_win +32 -0
- package/dot_local/bin/executable_yamlv +57 -0
- package/dot_local/share/bash-completion/completions/dot +72 -0
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +149 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +283 -0
- package/install.sh +350 -0
- package/package.json +1 -1
- package/scripts/ci/check-copyright-headers.sh +96 -0
- package/scripts/ci/check-dangerous-chmod.sh +19 -0
- package/scripts/ci/check-deps-dev.sh +236 -0
- package/scripts/ci/check-insecure-tls.sh +61 -0
- package/scripts/ci/check-regression-traceability.sh +67 -0
- package/scripts/ci/check-shell-preamble.sh +106 -0
- package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
- package/scripts/ci/install-chezmoi-verified.sh +64 -0
- package/scripts/ci/run-coverage.sh +362 -0
- package/scripts/ci/validate-chezmoidata.sh +25 -0
- package/scripts/ci/validate-ci-config.sh +224 -0
- package/scripts/demo/record.sh +42 -0
- package/scripts/diagnostics/a2a-conformance.sh +162 -0
- package/scripts/diagnostics/alias-governance.sh +137 -0
- package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
- package/scripts/diagnostics/aliases-manifest.sh +31 -0
- package/scripts/diagnostics/benchmark.sh +381 -0
- package/scripts/diagnostics/conflicts.sh +72 -0
- package/scripts/diagnostics/doctor-unified.sh +38 -0
- package/scripts/diagnostics/doctor.sh +709 -0
- package/scripts/diagnostics/drift-dashboard.sh +201 -0
- package/scripts/diagnostics/health.sh +614 -0
- package/scripts/diagnostics/history-analysis.sh +85 -0
- package/scripts/diagnostics/mcp-doctor.sh +575 -0
- package/scripts/diagnostics/perf.sh +452 -0
- package/scripts/diagnostics/scorecard.sh +118 -0
- package/scripts/diagnostics/secret-governance.sh +58 -0
- package/scripts/diagnostics/security-score.sh +438 -0
- package/scripts/diagnostics/smoke-test.sh +87 -0
- package/scripts/diagnostics/snapshot.sh +89 -0
- package/scripts/diagnostics/verify.sh +107 -0
- package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
- package/scripts/diagnostics/version-locks.sh +79 -0
- package/scripts/diagnostics/workstation-attestation.sh +186 -0
- package/scripts/docs/build-manual.sh +883 -0
- package/scripts/docs/check-manual.sh +213 -0
- package/scripts/dot/commands/agent.sh +474 -0
- package/scripts/dot/commands/ai.sh +481 -0
- package/scripts/dot/commands/aliases.sh +250 -0
- package/scripts/dot/commands/appearance.sh +80 -0
- package/scripts/dot/commands/core.sh +185 -0
- package/scripts/dot/commands/diagnostics.sh +229 -0
- package/scripts/dot/commands/fleet.sh +399 -0
- package/scripts/dot/commands/lint.sh +177 -0
- package/scripts/dot/commands/manual.sh +168 -0
- package/scripts/dot/commands/meta.sh +248 -0
- package/scripts/dot/commands/patterns.sh +54 -0
- package/scripts/dot/commands/restore.sh +231 -0
- package/scripts/dot/commands/secrets.sh +223 -0
- package/scripts/dot/commands/security.sh +76 -0
- package/scripts/dot/commands/tools.sh +469 -0
- package/scripts/dot/data/alias-deprecations.tsv +2 -0
- package/scripts/dot/lib/bento.sh +50 -0
- package/scripts/dot/lib/log.sh +200 -0
- package/scripts/dot/lib/platform.sh +99 -0
- package/scripts/dot/lib/ui.sh +518 -0
- package/scripts/dot/lib/utils.sh +377 -0
- package/scripts/fonts/install-nerd-fonts.sh +68 -0
- package/scripts/fonts/patch-fonts.sh +35 -0
- package/scripts/git-hooks/install.sh +11 -0
- package/scripts/git-hooks/pre-commit +12 -0
- package/scripts/git-hooks/pre-commit-audit.sh +145 -0
- package/scripts/git-hooks/pre-push +92 -0
- package/scripts/git-hooks/prepare-commit-msg +29 -0
- package/scripts/lib/secrets_provider.sh +158 -0
- package/scripts/maintenance/check-updates.sh +131 -0
- package/scripts/ops/ai-setup.sh +55 -0
- package/scripts/ops/bundle.sh +77 -0
- package/scripts/ops/chaos.sh +49 -0
- package/scripts/ops/chezmoi-apply.sh +270 -0
- package/scripts/ops/chezmoi-diff.sh +15 -0
- package/scripts/ops/chezmoi-remove.sh +45 -0
- package/scripts/ops/chezmoi-update.sh +48 -0
- package/scripts/ops/heal-chezmoi.sh +86 -0
- package/scripts/ops/heal-system.sh +128 -0
- package/scripts/ops/heal-tools.sh +340 -0
- package/scripts/ops/heal.sh +222 -0
- package/scripts/ops/post-apply-repair.sh +106 -0
- package/scripts/ops/prewarm.sh +127 -0
- package/scripts/ops/release.sh +252 -0
- package/scripts/ops/rollback.sh +589 -0
- package/scripts/ops/setup.sh +137 -0
- package/scripts/ops/teleport.sh +33 -0
- package/scripts/qa/coverage-baseline.sh +60 -0
- package/scripts/qa/docs-coverage.sh +111 -0
- package/scripts/qa/powershell-contract.ps1 +95 -0
- package/scripts/qa/reliability-audit.sh +138 -0
- package/scripts/qa/traceability-coverage.sh +116 -0
- package/scripts/qa/validate-examples.sh +26 -0
- package/scripts/qa/wsl-contract.sh +11 -0
- package/scripts/release/package-policy-bundles.sh +125 -0
- package/scripts/secrets/age-init.sh +70 -0
- package/scripts/secrets/create-secrets-file.sh +45 -0
- package/scripts/secrets/encrypt-ssh-key.sh +43 -0
- package/scripts/security/backup.sh +57 -0
- package/scripts/security/dns-doh.sh +51 -0
- package/scripts/security/encryption-check.sh +54 -0
- package/scripts/security/enforce-policies.sh +334 -0
- package/scripts/security/firewall.sh +90 -0
- package/scripts/security/lock-configs.sh +57 -0
- package/scripts/security/lock-screen.sh +55 -0
- package/scripts/security/manage-secrets.sh +428 -0
- package/scripts/security/ssh-cert.sh +203 -0
- package/scripts/security/telemetry-kill.sh +50 -0
- package/scripts/security/usb-safety.sh +51 -0
- package/scripts/theme/apply-gnome-theme.sh +328 -0
- package/scripts/theme/extract-theme.py +677 -0
- package/scripts/theme/install-boot-logo.sh +62 -0
- package/scripts/theme/install-catppuccin-themes.sh +370 -0
- package/scripts/theme/install-cursors.sh +25 -0
- package/scripts/theme/install-file-icons.sh +26 -0
- package/scripts/theme/install-grub-theme.sh +61 -0
- package/scripts/theme/install-lock-icon.sh +30 -0
- package/scripts/theme/merge-wallpaper.sh +145 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +431 -0
- package/scripts/theme/wallpaper-rotate.sh +136 -0
- package/scripts/theme/wallpaper-sync.sh +397 -0
- package/scripts/tools/cmatrix.sh +21 -0
- package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
- package/scripts/tools/emoji-picker.sh +48 -0
- package/scripts/tools/figlet-banner.sh +18 -0
- package/scripts/tools/log-rotate.sh +30 -0
- package/scripts/tools/lolcat-wrap.sh +19 -0
- package/scripts/tools/pipes.sh +48 -0
- package/scripts/tuning/linux.sh +185 -0
- package/scripts/tuning/macos.sh +55 -0
- package/scripts/uninstall.sh +85 -0
- package/scripts/version-sync.sh +487 -0
- package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
- package/templates/chezmoi-data/mac-m1.toml.example +16 -0
- package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
- package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
- package/templates/projects/go/.github/workflows/ci.yml +31 -0
- package/templates/projects/go/README.md +4 -0
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +7 -0
- package/templates/projects/molecule/converge.yml +7 -0
- package/templates/projects/molecule/molecule.yml +16 -0
- package/templates/projects/node/.github/workflows/ci.yml +30 -0
- package/templates/projects/node/README.md +4 -0
- package/templates/projects/node/package-lock.json +12 -0
- package/templates/projects/node/src/index.js +1 -0
- package/templates/projects/packer/README.md +15 -0
- package/templates/projects/packer/main.pkr.hcl +15 -0
- package/templates/projects/python/.github/workflows/ci.yml +34 -0
- package/templates/projects/python/README.md +4 -0
- package/templates/projects/python/pyproject.toml +15 -0
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
- package/templates/projects/python/tests/test_basic.py +1 -0
- package/docs/ARCHITECTURE.md +0 -62
- package/docs/COMPLIANCE.md +0 -47
- package/docs/OPERATIONS.md +0 -103
- package/docs/PR_DESCRIPTION.md +0 -150
- package/docs/ROADMAP_legacy.md +0 -556
- package/docs/SECURITY_CHECKLIST.md +0 -25
- package/docs/TASK.md +0 -99
- package/docs/WALKTHROUGH.md +0 -46
- package/scripts/backup.sh +0 -142
- package/scripts/banner.sh +0 -20
- package/scripts/benchmark.sh +0 -20
- package/scripts/build.sh +0 -41
- package/scripts/clean.sh +0 -31
- package/scripts/compile.sh +0 -54
- package/scripts/copy.sh +0 -108
- package/scripts/doctor.sh +0 -79
- package/scripts/dotfiles.sh +0 -63
- package/scripts/download.sh +0 -35
- package/scripts/help.sh +0 -57
- package/scripts/lock-configs.sh +0 -57
- package/scripts/package.sh +0 -46
- package/scripts/ssh.sh +0 -55
- package/scripts/teleport.sh +0 -23
- package/scripts/test-aliases.sh +0 -25
- package/scripts/test_smoke.sh +0 -88
- package/scripts/unpack.sh +0 -28
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Keybindings
|
|
6
|
+
|
|
7
|
+
This is the single source of truth for navigation and muscle-memory shortcuts
|
|
8
|
+
across the dotfiles stack. Keep it concise and consistent.
|
|
9
|
+
|
|
10
|
+
## Zsh
|
|
11
|
+
|
|
12
|
+
- `Ctrl+R`: History search (`fzf`/`atuin` if enabled)
|
|
13
|
+
- `Ctrl+P` / `Ctrl+N`: History prefix search (up/down)
|
|
14
|
+
|
|
15
|
+
## Tmux (prefix = `Ctrl-a`)
|
|
16
|
+
|
|
17
|
+
- `Prefix + r`: Reload config
|
|
18
|
+
- `Prefix + N`: New window
|
|
19
|
+
- `Prefix + a` / `Tab`: Last window
|
|
20
|
+
- `Prefix + %`: Split vertical (current path)
|
|
21
|
+
- `Prefix + "`: Split horizontal (current path)
|
|
22
|
+
- `Prefix + \`: Split vertical (alt)
|
|
23
|
+
- `Prefix + |`: Split horizontal (alt)
|
|
24
|
+
- `Prefix + h/j/k/l`: Move between panes (vim-style)
|
|
25
|
+
- `Prefix + z`: Toggle zoom pane
|
|
26
|
+
- `Prefix + H/J/K/L`: Resize pane (left/down/up/right)
|
|
27
|
+
|
|
28
|
+
## Neovim (leader = `Space`)
|
|
29
|
+
|
|
30
|
+
- `Ctrl-h/j/k/l`: Move between splits
|
|
31
|
+
- `Ctrl-s`: Save file
|
|
32
|
+
- `Leader + ff`: Find files (Telescope)
|
|
33
|
+
- `Leader + fg`: Live grep (Telescope)
|
|
34
|
+
- `Leader + q`: Quit
|
|
35
|
+
|
|
36
|
+
## Shell Tools
|
|
37
|
+
|
|
38
|
+
- `z <dir>`: Jump to a directory (`zoxide`)
|
|
39
|
+
- `lg`: Open `lazygit`
|
|
40
|
+
|
|
41
|
+
## Terminal
|
|
42
|
+
|
|
43
|
+
- `Ctrl+Shift+C`: Copy
|
|
44
|
+
- `Ctrl+Shift+V`: Paste
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
Update this file when bindings change. If you add a new tool, add its shortcuts
|
|
49
|
+
here and keep them aligned with the global conventions.
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Key Rotation Guide
|
|
6
|
+
|
|
7
|
+
This guide covers rotating encryption keys for secrets managed by Age and SOPS.
|
|
8
|
+
|
|
9
|
+
## Age Key Rotation
|
|
10
|
+
|
|
11
|
+
### When to Rotate
|
|
12
|
+
|
|
13
|
+
- **Annually**: As a preventive measure
|
|
14
|
+
- **After compromise**: If you suspect key exposure
|
|
15
|
+
- **Personnel change**: When team members leave
|
|
16
|
+
- **Device loss**: If a device with the key is lost/stolen
|
|
17
|
+
|
|
18
|
+
### Rotation Procedure
|
|
19
|
+
|
|
20
|
+
#### 1. Generate New Key
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Create new age key
|
|
24
|
+
age-keygen -o ~/.config/chezmoi/key-new.txt
|
|
25
|
+
|
|
26
|
+
# Note the public key (starts with "age1...")
|
|
27
|
+
cat ~/.config/chezmoi/key-new.txt | grep "public key"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
#### 2. Re-encrypt All Secrets
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# List all encrypted files
|
|
34
|
+
chezmoi managed --include=encrypted
|
|
35
|
+
|
|
36
|
+
# For each encrypted file, decrypt with old key and re-encrypt with new
|
|
37
|
+
for file in $(chezmoi managed --include=encrypted); do
|
|
38
|
+
# Decrypt with old key
|
|
39
|
+
chezmoi cat "$file" > "/tmp/$(basename $file).dec"
|
|
40
|
+
|
|
41
|
+
# Re-encrypt with new key (update chezmoi config first)
|
|
42
|
+
# See step 3
|
|
43
|
+
done
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
#### 3. Update Chezmoi Configuration
|
|
47
|
+
|
|
48
|
+
Edit `~/.config/chezmoi/chezmoi.toml`:
|
|
49
|
+
|
|
50
|
+
```toml
|
|
51
|
+
[age]
|
|
52
|
+
identity = "~/.config/chezmoi/key-new.txt"
|
|
53
|
+
recipient = "age1your_new_public_key_here"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
#### 4. Re-add Encrypted Files
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Re-add each secret with new encryption
|
|
60
|
+
chezmoi add --encrypt ~/.ssh/id_ed25519
|
|
61
|
+
chezmoi add --encrypt ~/.config/secrets/api-keys.env
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### 5. Verify and Clean Up
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Verify decryption works
|
|
68
|
+
chezmoi cat ~/.ssh/id_ed25519
|
|
69
|
+
|
|
70
|
+
# Archive old key (store securely offline)
|
|
71
|
+
mv ~/.config/chezmoi/key.txt ~/.config/chezmoi/key-$(date +%Y%m%d)-archived.txt
|
|
72
|
+
|
|
73
|
+
# Rename new key
|
|
74
|
+
mv ~/.config/chezmoi/key-new.txt ~/.config/chezmoi/key.txt
|
|
75
|
+
|
|
76
|
+
# Commit changes
|
|
77
|
+
cd ~/.dotfiles
|
|
78
|
+
git add -A
|
|
79
|
+
git commit -m "chore(secrets): rotate age encryption key"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Emergency Rotation (Compromised Key)
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# 1. Immediately generate new key
|
|
86
|
+
age-keygen -o ~/.config/chezmoi/key-emergency.txt
|
|
87
|
+
|
|
88
|
+
# 2. Re-encrypt ALL secrets (prioritize most sensitive)
|
|
89
|
+
# 3. Revoke/rotate any API keys, tokens that were encrypted
|
|
90
|
+
# 4. Update any shared secrets with team members
|
|
91
|
+
# 5. Document the incident
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## SOPS Key Rotation
|
|
97
|
+
|
|
98
|
+
### Overview
|
|
99
|
+
|
|
100
|
+
SOPS supports multiple key types. This covers Age keys (recommended) and GPG keys.
|
|
101
|
+
|
|
102
|
+
### SOPS with Age Keys
|
|
103
|
+
|
|
104
|
+
#### Generate New Key
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
age-keygen -o ~/.config/sops/age/keys-new.txt
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
#### Update .sops.yaml
|
|
111
|
+
|
|
112
|
+
```yaml
|
|
113
|
+
creation_rules:
|
|
114
|
+
- path_regex: \.env$
|
|
115
|
+
age: >-
|
|
116
|
+
age1new_key_here,
|
|
117
|
+
age1old_key_here # Keep old key temporarily for decryption
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### Re-encrypt Files
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Rotate key for a single file
|
|
124
|
+
sops updatekeys secrets.env
|
|
125
|
+
|
|
126
|
+
# Or re-encrypt entirely
|
|
127
|
+
sops -d secrets.env | sops -e /dev/stdin > secrets.env.new
|
|
128
|
+
mv secrets.env.new secrets.env
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
#### Remove Old Key
|
|
132
|
+
|
|
133
|
+
After confirming all files are re-encrypted:
|
|
134
|
+
|
|
135
|
+
1. Remove old key from `.sops.yaml`
|
|
136
|
+
2. Archive old key securely
|
|
137
|
+
3. Commit changes
|
|
138
|
+
|
|
139
|
+
### SOPS with GPG Keys
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Generate new GPG key
|
|
143
|
+
gpg --full-generate-key
|
|
144
|
+
|
|
145
|
+
# Export fingerprint
|
|
146
|
+
gpg --list-keys --keyid-format LONG
|
|
147
|
+
|
|
148
|
+
# Update .sops.yaml with new fingerprint
|
|
149
|
+
# Re-encrypt files
|
|
150
|
+
sops updatekeys <file>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Automation Scripts
|
|
156
|
+
|
|
157
|
+
### Check Key Age
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
#!/usr/bin/env bash
|
|
161
|
+
# check-key-age.sh - Alert if keys are older than 365 days
|
|
162
|
+
|
|
163
|
+
KEY_FILE="${HOME}/.config/chezmoi/key.txt"
|
|
164
|
+
MAX_AGE_DAYS=365
|
|
165
|
+
|
|
166
|
+
if [[ -f "$KEY_FILE" ]]; then
|
|
167
|
+
key_age=$(( ($(date +%s) - $(stat -c %Y "$KEY_FILE")) / 86400 ))
|
|
168
|
+
|
|
169
|
+
if [[ $key_age -gt $MAX_AGE_DAYS ]]; then
|
|
170
|
+
echo "⚠️ Age key is ${key_age} days old. Consider rotation."
|
|
171
|
+
exit 1
|
|
172
|
+
else
|
|
173
|
+
echo "✓ Age key is ${key_age} days old (limit: ${MAX_AGE_DAYS})"
|
|
174
|
+
fi
|
|
175
|
+
fi
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Automated Backup Before Rotation
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
#!/usr/bin/env bash
|
|
182
|
+
# backup-before-rotation.sh
|
|
183
|
+
|
|
184
|
+
BACKUP_DIR="${HOME}/.local/share/dotfiles/key-backups"
|
|
185
|
+
mkdir -p "$BACKUP_DIR"
|
|
186
|
+
|
|
187
|
+
# Backup current key
|
|
188
|
+
cp ~/.config/chezmoi/key.txt "$BACKUP_DIR/key-$(date +%Y%m%d_%H%M%S).txt"
|
|
189
|
+
|
|
190
|
+
# Encrypt backup with passphrase
|
|
191
|
+
gpg --symmetric --cipher-algo AES256 "$BACKUP_DIR/key-$(date +%Y%m%d_%H%M%S).txt"
|
|
192
|
+
|
|
193
|
+
# Remove unencrypted backup
|
|
194
|
+
rm "$BACKUP_DIR/key-$(date +%Y%m%d_%H%M%S).txt"
|
|
195
|
+
|
|
196
|
+
echo "Key backed up to $BACKUP_DIR (encrypted)"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Best Practices
|
|
202
|
+
|
|
203
|
+
1. **Never commit unencrypted keys** - Use `.gitignore` properly
|
|
204
|
+
2. **Store backups offline** - USB drive in secure location
|
|
205
|
+
3. **Use hardware keys when possible** - YubiKey with age-plugin-yubikey
|
|
206
|
+
4. **Document rotation dates** - Keep a log of when keys were rotated
|
|
207
|
+
5. **Test decryption** - Always verify after rotation
|
|
208
|
+
6. **Notify team members** - If using shared secrets
|
|
209
|
+
|
|
210
|
+
## Recovery Procedures
|
|
211
|
+
|
|
212
|
+
If you lose access to your key:
|
|
213
|
+
|
|
214
|
+
1. **Check backups** - Offline storage, password manager
|
|
215
|
+
2. **Check other machines** - Key may exist on another device
|
|
216
|
+
3. **Re-create secrets** - As last resort, regenerate API keys, tokens, etc.
|
|
217
|
+
|
|
218
|
+
## Related Documentation
|
|
219
|
+
|
|
220
|
+
- [SECRETS.md](SECRETS.md) - Secrets management overview
|
|
221
|
+
- [SECURITY.md](SECURITY.md) - Security hardening guide
|
|
222
|
+
- [Age documentation](https://github.com/FiloSottile/age)
|
|
223
|
+
- [SOPS documentation](https://github.com/getsops/sops)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# MCP Policy
|
|
6
|
+
|
|
7
|
+
MCP is treated as a controlled execution boundary.
|
|
8
|
+
|
|
9
|
+
## Default posture
|
|
10
|
+
|
|
11
|
+
The tracked default is `strict-local`.
|
|
12
|
+
|
|
13
|
+
Properties:
|
|
14
|
+
|
|
15
|
+
- local-first
|
|
16
|
+
- least privilege
|
|
17
|
+
- no broad filesystem roots
|
|
18
|
+
- no wildcard or unsafe flags
|
|
19
|
+
- no network-facing MCP servers enabled by default
|
|
20
|
+
- machine-readable validation output
|
|
21
|
+
|
|
22
|
+
## Policy artifact
|
|
23
|
+
|
|
24
|
+
The source of truth lives in [mcp-policy.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-policy.json).
|
|
25
|
+
Approved package pins live in [mcp-lock.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-lock.json).
|
|
26
|
+
Tracked server registry entries live in [mcp-registry.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-registry.json).
|
|
27
|
+
|
|
28
|
+
Current defaults:
|
|
29
|
+
|
|
30
|
+
- Allowed launchers: `npx`, `node`, `uvx`
|
|
31
|
+
- Trusted transports: `stdio`, `http`
|
|
32
|
+
- Blocked filesystem roots: `/`, `/home`, `/Users`
|
|
33
|
+
- Blocked argument patterns: `^--allow-.*`, `^--unsafe$`, `^\\*$`
|
|
34
|
+
- Network-facing servers disabled by default: `github`, `brave-search`, `fetch`, `puppeteer`, `filesystem`
|
|
35
|
+
- Approved packages must resolve through the tracked MCP lock manifest
|
|
36
|
+
- Every active server must match the tracked MCP registry
|
|
37
|
+
- HTTP transports must use `https://` and registry-declared OAuth2
|
|
38
|
+
|
|
39
|
+
## Validation
|
|
40
|
+
|
|
41
|
+
Run:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
dot mcp --strict
|
|
45
|
+
dot mcp -s -j
|
|
46
|
+
dot mcp registry
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The JSON form is the audit artifact for CI, release validation, and workstation attestation.
|
|
50
|
+
|
|
51
|
+
## Change control
|
|
52
|
+
|
|
53
|
+
Any change to MCP policy requires:
|
|
54
|
+
|
|
55
|
+
1. A signed commit
|
|
56
|
+
2. A matching test update
|
|
57
|
+
3. A release note if the effective trust boundary changes
|
|
58
|
+
4. A policy bundle review when enterprise defaults change
|
|
59
|
+
|
|
60
|
+
## Supply-chain controls
|
|
61
|
+
|
|
62
|
+
Phase 2 adds explicit package locking for default MCP servers.
|
|
63
|
+
|
|
64
|
+
Current approved refs:
|
|
65
|
+
|
|
66
|
+
- `mcp-server-git@2025.1.14`
|
|
67
|
+
- `@modelcontextprotocol/server-memory@2025.8.4`
|
|
68
|
+
- `mcp-server-sqlite@2025.1.14`
|
|
69
|
+
|
|
70
|
+
`dot mcp --strict` and `dot mcp -s` now verify that:
|
|
71
|
+
|
|
72
|
+
- package refs are version-pinned
|
|
73
|
+
- the pinned refs match the tracked lock manifest
|
|
74
|
+
- non-approved package refs are rejected in strict mode
|
|
75
|
+
- active servers match the tracked registry entries
|
|
76
|
+
- remote HTTP transports are HTTPS and OAuth-backed
|
|
77
|
+
|
|
78
|
+
Policy bundle baselines live in [policy-bundles.json](/home/seb/.dotfiles/dot_config/dotfiles/policy-bundles.json).
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Policy Bundle Releases
|
|
6
|
+
|
|
7
|
+
Policy bundles are released as tracked governance artifacts.
|
|
8
|
+
|
|
9
|
+
They include:
|
|
10
|
+
|
|
11
|
+
- policy bundles
|
|
12
|
+
- model registry
|
|
13
|
+
- prompt registry
|
|
14
|
+
- agent profiles
|
|
15
|
+
- agent card
|
|
16
|
+
- MCP policy, registry, and lock
|
|
17
|
+
- A2A discovery metadata
|
|
18
|
+
|
|
19
|
+
## Local packaging
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
bash scripts/release/package-policy-bundles.sh --version 2026.03
|
|
23
|
+
bash scripts/release/package-policy-bundles.sh --json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Release workflow
|
|
27
|
+
|
|
28
|
+
Use the `Policy Bundle Release` workflow.
|
|
29
|
+
|
|
30
|
+
Release controls:
|
|
31
|
+
|
|
32
|
+
- source ref must be signed
|
|
33
|
+
- governance JSON must validate with `jq`
|
|
34
|
+
- bundle archive gets a SHA-256 checksum
|
|
35
|
+
- bundle archive gets GitHub provenance attestation
|
|
36
|
+
|
|
37
|
+
Signed commits remain mandatory for any policy change.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Security Documentation
|
|
6
|
+
|
|
7
|
+
This directory contains security documentation for the dotfiles project.
|
|
8
|
+
|
|
9
|
+
## Index
|
|
10
|
+
|
|
11
|
+
| Document | Description |
|
|
12
|
+
|----------|-------------|
|
|
13
|
+
| [SECURITY.md](SECURITY.md) | Core security model and opt-in hardening |
|
|
14
|
+
| [THREAT_MODEL.md](THREAT_MODEL.md) | Threat analysis with trust boundaries |
|
|
15
|
+
| [SECRETS.md](SECRETS.md) | Secrets management (Age, SOPS, Keychain) |
|
|
16
|
+
| [KEY_ROTATION.md](KEY_ROTATION.md) | Key rotation procedures |
|
|
17
|
+
| [KEYS.md](KEYS.md) | Keybindings reference |
|
|
18
|
+
| [COMPLIANCE.md](COMPLIANCE.md) | SOC 2, ISO 27001, GDPR, HIPAA mapping |
|
|
19
|
+
| [AI_ACT_COMPLIANCE.md](AI_ACT_COMPLIANCE.md) | EU AI Act risk classification and exemption analysis |
|
|
20
|
+
| [SECURITY_CHECKLIST.md](SECURITY_CHECKLIST.md) | Pre-release security verification |
|
|
21
|
+
|
|
22
|
+
## Quick Reference
|
|
23
|
+
|
|
24
|
+
- **Encryption:** Age + SOPS for secrets at rest
|
|
25
|
+
- **Signing:** SSH ED25519 commit signing enforced
|
|
26
|
+
- **Scanning:** Gitleaks pre-commit hook prevents credential leaks
|
|
27
|
+
- **Telemetry:** Disabled by default, no data leaves your machine
|
|
28
|
+
- **Hardening:** Opt-in firewall, DNS-over-HTTPS, lock-screen, USB safety
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# OpenSSF Scorecard
|
|
6
|
+
|
|
7
|
+
This page records the current OpenSSF Scorecard posture for this
|
|
8
|
+
repository, the known gaps, and the remediation roadmap. The badge in
|
|
9
|
+
the README links to the live result; this page is the maintained
|
|
10
|
+
narrative behind it.
|
|
11
|
+
|
|
12
|
+
## Live score
|
|
13
|
+
|
|
14
|
+
[](https://scorecard.dev/viewer/?uri=github.com/sebastienrousseau/dotfiles)
|
|
15
|
+
|
|
16
|
+
The badge above is regenerated every Monday at 06:00 UTC and on every
|
|
17
|
+
push to `master` by `.github/workflows/scorecard.yml`. The SARIF
|
|
18
|
+
result is uploaded to GitHub Code Scanning (Security tab) and
|
|
19
|
+
retained as a 30-day workflow artifact.
|
|
20
|
+
|
|
21
|
+
## Threshold policy
|
|
22
|
+
|
|
23
|
+
| Score | Action |
|
|
24
|
+
|---|---|
|
|
25
|
+
| ≥ 8.0 | Healthy. Keep doing what we're doing. |
|
|
26
|
+
| 7.0 – 7.9 | Acceptable. Tracked. |
|
|
27
|
+
| < 7.0 | Regression — the workflow auto-opens a tracking issue labelled `type:security + priority:high`. |
|
|
28
|
+
|
|
29
|
+
Regressions are triaged within one Monday cycle: identify the check
|
|
30
|
+
that dropped, either remediate or file an exception entry below with
|
|
31
|
+
a rationale and an expiry date.
|
|
32
|
+
|
|
33
|
+
## Per-check posture (snapshot)
|
|
34
|
+
|
|
35
|
+
The checks below come from OpenSSF Scorecard's published rubric. Tick
|
|
36
|
+
marks reflect this repo's posture at the time of writing — the
|
|
37
|
+
*live* badge is authoritative if these diverge.
|
|
38
|
+
|
|
39
|
+
| Check | Status | Notes |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Branch-Protection | ✓ | `master` requires signed commits, linear history, required checks. Codified at `.github/rulesets/master.json` and `.github/branch-protection-config.json`. |
|
|
42
|
+
| Code-Review | ✓ | Every PR requires at least one approval; CODEOWNERS in place. |
|
|
43
|
+
| Signed-Commits | ✓ | Enforced by pre-push hook (`scripts/git-hooks/pre-push`) and at-push by branch protection (#853 + #857). |
|
|
44
|
+
| Dependency-Update-Tool | ✓ | Dependabot configured for github-actions / npm / docker / devcontainers / uv. |
|
|
45
|
+
| Fuzzing | ⚠ | `install.sh` fuzz harness lives under `tests/fuzz/` (closes #881). Coverage is the script's CLI surface plus chaos input fixtures — not full corpus fuzzing yet. |
|
|
46
|
+
| License | ✓ | Apache-2.0 at repo root. |
|
|
47
|
+
| Maintained | ✓ | Active commit cadence; the [README](../../README.md) lists the current `dotfiles_version` (v0.2.501). |
|
|
48
|
+
| Pinned-Dependencies | ✓ | Every workflow action is pinned to a 40-char commit SHA; the lint rule under `actionlint` enforces this on PR. |
|
|
49
|
+
| SAST | ✓ | CodeQL (`.github/workflows/codeql.yml`) + Checkov + Grype. |
|
|
50
|
+
| SBOM | ✓ | Generated per PR by `sbom-diff.yml` and per release by `security-release.yml`. |
|
|
51
|
+
| Security-Policy | ✓ | `.github/SECURITY.md` + this page + `docs/security/THREAT_MODEL.md`. |
|
|
52
|
+
| Token-Permissions | ✓ | Workflows use least-privilege `permissions:` blocks. `harden-runner` adoption (#878) tightens this further. |
|
|
53
|
+
| Vulnerabilities | ✓ | Grype gate hard-fails on `high` / `critical` on `master` (#852). |
|
|
54
|
+
| Webhooks | n/a | No external webhooks configured. |
|
|
55
|
+
| CI-Tests | ✓ | Comprehensive CI matrix (Linux + macOS Intel + Apple Silicon, optional Windows). |
|
|
56
|
+
| CII-Best-Practices | ☐ | Not applied yet — see "Open work" below. |
|
|
57
|
+
| Dangerous-Workflow | ✓ | No `pull_request_target` with checkout-PR-code anti-pattern. |
|
|
58
|
+
| Packaging | ✓ | `npm publish --provenance` via OIDC (`.github/workflows/npm-publish.yml`); `policy-bundle-release.yml` for the policy artifact. |
|
|
59
|
+
|
|
60
|
+
## Open work
|
|
61
|
+
|
|
62
|
+
- Apply for the [OpenSSF Best Practices badge (CII)](https://www.bestpractices.dev/) and embed it next to the Scorecard badge. (Maintainer action — needs the project to register with the BestPractices.dev site.)
|
|
63
|
+
- Once `harden-runner` is in `block` mode across all jobs (#878), the **Token-Permissions** check should hit its maximum.
|
|
64
|
+
- Once Cosign keyless signing is wired into the release pipeline (#876), the **Signed-Releases** check should hit its maximum.
|
|
65
|
+
|
|
66
|
+
## Exceptions
|
|
67
|
+
|
|
68
|
+
| Check | Expiry | Rationale |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| *(none currently)* | *—* | *—* |
|
|
71
|
+
|
|
72
|
+
If you add an exception, include the check name, an expiry date
|
|
73
|
+
(don't allow indefinite), and the rationale. Re-evaluate every quarter.
|
|
74
|
+
|
|
75
|
+
## References
|
|
76
|
+
|
|
77
|
+
- `.github/workflows/scorecard.yml` — the scanner.
|
|
78
|
+
- [Scorecard project](https://github.com/ossf/scorecard).
|
|
79
|
+
- [Scorecard checks reference](https://github.com/ossf/scorecard/blob/main/docs/checks.md).
|
|
80
|
+
- Issue [#869](https://github.com/sebastienrousseau/dotfiles/issues/869).
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
{% raw %}
|
|
5
|
+
|
|
6
|
+
# Secrets Management
|
|
7
|
+
|
|
8
|
+
Provider-agnostic secrets via `dot secrets`. Supports macOS Keychain, `pass`, and age-encrypted local storage.
|
|
9
|
+
|
|
10
|
+
## Providers
|
|
11
|
+
|
|
12
|
+
Provider selection is controlled by `.chezmoidata.toml`:
|
|
13
|
+
|
|
14
|
+
```toml
|
|
15
|
+
[secrets.policy]
|
|
16
|
+
provider = "auto" # auto | macos-keychain | pass | plain-enc
|
|
17
|
+
auto_load = true
|
|
18
|
+
|
|
19
|
+
[secrets.buckets]
|
|
20
|
+
ai = ["GEMINI_API_KEY", "CLAUDE_API_KEY", "OPENAI_API_KEY"]
|
|
21
|
+
infra = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "GITHUB_TOKEN"]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`auto` resolves in this order:
|
|
25
|
+
|
|
26
|
+
1. `macos-keychain` on macOS
|
|
27
|
+
2. `pass` when available
|
|
28
|
+
3. `plain-enc` fallback (age-encrypted local store)
|
|
29
|
+
|
|
30
|
+
## Commands
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Bootstrap age key for chezmoi encrypted files
|
|
34
|
+
dot secrets-init
|
|
35
|
+
|
|
36
|
+
# Optional: create encrypted secrets file for chezmoi
|
|
37
|
+
dot secrets-create
|
|
38
|
+
dot secrets edit
|
|
39
|
+
|
|
40
|
+
# Managed secret store
|
|
41
|
+
dot secrets set GEMINI_API_KEY
|
|
42
|
+
dot secrets get GEMINI_API_KEY --raw
|
|
43
|
+
dot secrets list
|
|
44
|
+
dot secrets provider
|
|
45
|
+
|
|
46
|
+
# Emit export lines for a bucket
|
|
47
|
+
dot secrets load ai
|
|
48
|
+
|
|
49
|
+
# Load into current shell session
|
|
50
|
+
eval "$(dot env load ai)"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Shell Auto-Load
|
|
54
|
+
|
|
55
|
+
When `auto_load = true`, shell startup can load configured buckets automatically via `dot env load <bucket>`.
|
|
56
|
+
|
|
57
|
+
Environment toggles:
|
|
58
|
+
|
|
59
|
+
- `DOTFILES_SECRETS_PROVIDER`
|
|
60
|
+
- `DOTFILES_SECRETS_AUTO_LOAD`
|
|
61
|
+
- `DOTFILES_SECRETS_BUCKET_NAMES`
|
|
62
|
+
|
|
63
|
+
## Governance
|
|
64
|
+
|
|
65
|
+
A pre-commit hook runs:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
scripts/diagnostics/secret-governance.sh
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
It blocks staged commits when likely secret patterns are found. In strict mode it also blocks exact matches against managed secret values.
|
|
72
|
+
|
|
73
|
+
## SSH Key Encryption
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
dot ssh-key ~/.ssh/id_ed25519
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This creates a local encrypted file, which you can add to chezmoi with `chezmoi add --encrypt` if needed.
|
|
80
|
+
|
|
81
|
+
## External Secrets Backends
|
|
82
|
+
|
|
83
|
+
Chezmoi natively supports external secret managers as template functions. Configure the backend in `.chezmoidata.toml`:
|
|
84
|
+
|
|
85
|
+
```toml
|
|
86
|
+
secrets_backend = "age" # age, 1password, bitwarden, pass, vault
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 1Password
|
|
90
|
+
|
|
91
|
+
Requires the [1Password CLI](https://developer.1password.com/docs/cli/) (`op`).
|
|
92
|
+
|
|
93
|
+
```toml
|
|
94
|
+
# .chezmoidata.toml
|
|
95
|
+
secrets_backend = "1password"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Use in templates:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
{{ onepassword "my-secret" "vault-name" }}
|
|
102
|
+
{{ onepasswordRead "op://vault/item/field" }}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Bitwarden
|
|
106
|
+
|
|
107
|
+
Requires the [Bitwarden CLI](https://bitwarden.com/help/cli/) (`bw`).
|
|
108
|
+
|
|
109
|
+
```toml
|
|
110
|
+
# .chezmoidata.toml
|
|
111
|
+
secrets_backend = "bitwarden"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Use in templates:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
{{ bitwarden "item" "my-login" }}
|
|
118
|
+
{{ bitwardenFields "item" "my-login" }}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### HashiCorp Vault
|
|
122
|
+
|
|
123
|
+
Requires the [Vault CLI](https://developer.hashicorp.com/vault/docs/commands) (`vault`).
|
|
124
|
+
|
|
125
|
+
```toml
|
|
126
|
+
# .chezmoidata.toml
|
|
127
|
+
secrets_backend = "vault"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Use in templates:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
{{ vault "secret/data/my-secret" }}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### pass (Password Store)
|
|
137
|
+
|
|
138
|
+
Requires [pass](https://www.passwordstore.org/).
|
|
139
|
+
|
|
140
|
+
```toml
|
|
141
|
+
# .chezmoidata.toml
|
|
142
|
+
secrets_backend = "pass"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Use in templates:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
{{ pass "my-secret" }}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
See the [chezmoi documentation](https://www.chezmoi.io/user-guide/password-managers/) for full details on each backend.
|
|
152
|
+
|
|
153
|
+
## Security Notes
|
|
154
|
+
|
|
155
|
+
- **Never commit** `~/.config/chezmoi/key.txt` to version control.
|
|
156
|
+
- **Avoid shell history exposure** — use `dot secrets set` which prompts securely.
|
|
157
|
+
- **Rotate credentials** on a regular schedule.
|
|
158
|
+
{% endraw %}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Security
|
|
6
|
+
|
|
7
|
+
How dotfiles handles security and system modifications.
|
|
8
|
+
|
|
9
|
+
## Core Principles
|
|
10
|
+
|
|
11
|
+
- **Opt-In Only** — No hardening applies unless `DOTFILES_*` variables are set to `1`.
|
|
12
|
+
- **Local Logging** — All actions log to `~/.local/share/dotfiles.log`. No telemetry.
|
|
13
|
+
- **No Hidden Sudo** — Sudo requests only for package managers. Never cached indefinitely.
|
|
14
|
+
|
|
15
|
+
## Hardening
|
|
16
|
+
|
|
17
|
+
| Feature | Env Var | Action (macOS) | Action (Linux) |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| Firewall | `DOTFILES_FIREWALL` | Enables `socketfilterfw` + Stealth Mode | Configures UFW |
|
|
20
|
+
| Telemetry | `DOTFILES_TELEMETRY` | Disables Diagnostic plists | Disables `whoopsie`/`apport` |
|
|
21
|
+
| DNS-over-HTTPS | `DOTFILES_DOH` | Browser-level settings | Configures `resolvectl` |
|
|
22
|
+
| Idle Security | `DOTFILES_LOCK` | Sets screensaver idle time | Sets GNOME/KDE idle-delay |
|
|
23
|
+
|
|
24
|
+
## Secrets
|
|
25
|
+
|
|
26
|
+
The dotfiles use **age** for encryption.
|
|
27
|
+
|
|
28
|
+
- **Initialization**: `dot secrets-init` creates a key at `~/.config/chezmoi/key.txt`.
|
|
29
|
+
- **Storage**: Secrets are stored as `.age` encrypted files.
|
|
30
|
+
- **Protection**: Private keys aren't committed to the repo.
|
|
31
|
+
|
|
32
|
+
## SSH Certificates
|
|
33
|
+
|
|
34
|
+
Short-lived SSH certificates reduce the blast radius of key compromise.
|
|
35
|
+
|
|
36
|
+
- **Issue**: `dot ssh-cert issue [--ttl 16h] [--principal user]`
|
|
37
|
+
- **Status**: `dot ssh-cert status` — checks certificate validity and expiry
|
|
38
|
+
- **Revoke**: `dot ssh-cert revoke` — revokes active certificates
|
|
39
|
+
- **Backends**: `step-ca` (Smallstep) and local CA key (`ssh-keygen`)
|
|
40
|
+
- **Default TTL**: 16 hours (override via `SSH_CERT_TTL` environment variable)
|
|
41
|
+
- **CA URL**: Set `SSH_CERT_CA_URL` for `step-ca` integration
|
|
42
|
+
|
|
43
|
+
## Reporting a Vulnerability
|
|
44
|
+
|
|
45
|
+
If you discover a security vulnerability, don't open a public issue. Follow the instructions in the Security Policy.
|