@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,90 @@
|
|
|
1
|
+
# EU AI Act Compliance Assessment
|
|
2
|
+
|
|
3
|
+
This document maps the dotfiles project against the EU Artificial Intelligence Act (Regulation (EU) 2024/1689) to confirm compliance posture and applicable obligations.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Risk Classification (Annex III Assessment)
|
|
8
|
+
|
|
9
|
+
| Criterion | Assessment | Result |
|
|
10
|
+
|-----------|-----------|--------|
|
|
11
|
+
| Biometric identification | Not applicable | N/A |
|
|
12
|
+
| Critical infrastructure | Not applicable | N/A |
|
|
13
|
+
| Education / employment | Not applicable | N/A |
|
|
14
|
+
| Essential services | Not applicable | N/A |
|
|
15
|
+
| Law enforcement | Not applicable | N/A |
|
|
16
|
+
| Migration / border control | Not applicable | N/A |
|
|
17
|
+
|
|
18
|
+
**Classification: Minimal Risk**
|
|
19
|
+
|
|
20
|
+
This project is a workstation configuration management tool. It does not deploy, train, or host AI models. It integrates with external AI CLI tools (Claude, Gemini, Ollama) as a consumer, not a provider.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Open-Source Exemption (Article 2(12))
|
|
25
|
+
|
|
26
|
+
| Requirement | Status |
|
|
27
|
+
|-------------|--------|
|
|
28
|
+
| License type | MIT (permissive, open-source) |
|
|
29
|
+
| Model weights distributed | No — no model training or distribution |
|
|
30
|
+
| Free and open-source | Yes — publicly available source code |
|
|
31
|
+
| No prohibited practices (Article 5) | Confirmed — no subliminal, exploitative, or social scoring use |
|
|
32
|
+
|
|
33
|
+
**Result:** This project qualifies for the open-source exemption under Article 2(12). Open-source AI components released under free licenses are exempt from most AI Act obligations, provided they do not fall under prohibited practices or high-risk classifications.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Transparency Obligations
|
|
38
|
+
|
|
39
|
+
Even for minimal-risk and exempt systems, the AI Act encourages transparency. This project voluntarily implements the following:
|
|
40
|
+
|
|
41
|
+
| Obligation | Implementation | Evidence |
|
|
42
|
+
|-----------|----------------|----------|
|
|
43
|
+
| AI interaction disclosure | Agent session logging | `agent-sessions.jsonl` via `dot_agent_session_log()` |
|
|
44
|
+
| Model identification | Model registry | `dot_config/dotfiles/model-registry.json` |
|
|
45
|
+
| Configuration transparency | Agent profiles | `dot_config/dotfiles/agent-profiles.json` |
|
|
46
|
+
| Audit trail | Structured logging | `~/.local/share/dotfiles.log`, `~/.local/state/dotfiles/` |
|
|
47
|
+
| Workstation attestation | Attestation export | `dot attest --json` |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## GPAI Provisions (Chapter V)
|
|
52
|
+
|
|
53
|
+
| Criterion | Assessment |
|
|
54
|
+
|-----------|-----------|
|
|
55
|
+
| General-purpose AI model provider | **No** — this project does not train, fine-tune, or distribute AI models |
|
|
56
|
+
| Systemic risk model | **No** — no model hosting or inference serving |
|
|
57
|
+
| Downstream provider obligations | **No** — consumer of external AI APIs only |
|
|
58
|
+
|
|
59
|
+
**Result:** GPAI provisions are not applicable. This project consumes AI services but does not provide them.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Enforcement Timeline
|
|
64
|
+
|
|
65
|
+
| Milestone | Date | Relevance |
|
|
66
|
+
|-----------|------|-----------|
|
|
67
|
+
| AI Act entered into force | August 1, 2024 | Awareness |
|
|
68
|
+
| Prohibited practices apply | February 2, 2025 | Confirmed no prohibited use |
|
|
69
|
+
| GPAI rules apply | August 2, 2025 | Not applicable |
|
|
70
|
+
| High-risk obligations apply | **August 2, 2026** | Not applicable (minimal risk) |
|
|
71
|
+
| Full enforcement | August 2, 2027 | Maintain compliance posture |
|
|
72
|
+
|
|
73
|
+
**Next review:** Before August 2026 enforcement date — reassess if project scope changes to include model hosting or high-risk use cases.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Cross-References
|
|
78
|
+
|
|
79
|
+
| Document | Relevance |
|
|
80
|
+
|----------|-----------|
|
|
81
|
+
| [COMPLIANCE.md](COMPLIANCE.md) | SOC 2, ISO 27001, GDPR framework mapping |
|
|
82
|
+
| [THREAT_MODEL.md](THREAT_MODEL.md) | Trust boundaries and attack surface |
|
|
83
|
+
| [MCP_POLICY.md](MCP_POLICY.md) | MCP governance and supply-chain controls |
|
|
84
|
+
| [SECURITY.md](SECURITY.md) | Core security model |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Summary
|
|
89
|
+
|
|
90
|
+
This project is classified as **minimal risk** under the EU AI Act and qualifies for the **open-source exemption** under Article 2(12). No mandatory obligations apply. Transparency measures are voluntarily implemented through agent session logging, model registry, and workstation attestation.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Automation Secrets
|
|
2
|
+
|
|
3
|
+
## Required secrets
|
|
4
|
+
|
|
5
|
+
| Secret | Scope | Purpose |
|
|
6
|
+
| :--- | :--- | :--- |
|
|
7
|
+
| `ACTIONS_BOT_SIGNING_KEY` | GitHub Actions | SSH private key used for signed automation commits |
|
|
8
|
+
| `GITHUB_TOKEN` | GitHub Actions | GitHub API access for PRs, attestations, and scans |
|
|
9
|
+
|
|
10
|
+
## Required local variables
|
|
11
|
+
|
|
12
|
+
| Variable | Scope | Purpose |
|
|
13
|
+
| :--- | :--- | :--- |
|
|
14
|
+
| `HOMEBREW_INSTALLER_SHA256` | macOS bootstrap | Verifies the Homebrew installer before execution |
|
|
15
|
+
| `CHEZMOI_INSTALLER_SHA256` | Installer | Verifies the Chezmoi installer before execution |
|
|
16
|
+
|
|
17
|
+
## Provisioning notes
|
|
18
|
+
|
|
19
|
+
1. Store the SSH signing private key in GitHub Actions as `ACTIONS_BOT_SIGNING_KEY`.
|
|
20
|
+
2. Store the matching public key in [allowed_signers](/home/seb/.dotfiles/dot_config/git/allowed_signers).
|
|
21
|
+
3. Rotate the key on personnel or workstation change.
|
|
22
|
+
4. Fail closed when secrets are absent.
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
# Compliance Architecture
|
|
2
|
+
|
|
3
|
+
This document describes the compliance, security, and cross-platform compatibility controls implemented in this repository, mapped to standard regulatory frameworks (SOC 2, ISO 27001, GDPR).
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
| Framework | Status | Description |
|
|
8
|
+
|-----------|--------|-------------|
|
|
9
|
+
| SOC 2 Type II | Aligned | Security, availability, and confidentiality |
|
|
10
|
+
| ISO 27001 | Aligned | Information security management controls |
|
|
11
|
+
| GDPR/HIPAA | Aligned | Privacy and data protection |
|
|
12
|
+
| ISO 13485 | Aligned | Risk management (FMEA), verification & validation |
|
|
13
|
+
| ALCOA | Implemented | Audit trail integrity |
|
|
14
|
+
| EU AI Act | Exempt | Minimal risk, open-source exemption (Article 2(12)) |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## EU AI Act (Regulation (EU) 2024/1689)
|
|
19
|
+
|
|
20
|
+
| Requirement | Status | Implementation |
|
|
21
|
+
|-------------|--------|----------------|
|
|
22
|
+
| **Risk classification** | Minimal risk | No high-risk use cases (Annex III) |
|
|
23
|
+
| **Open-source exemption** | Applicable | MIT license, no model weights distributed (Article 2(12)) |
|
|
24
|
+
| **Prohibited practices** | Confirmed none | No subliminal, exploitative, or social scoring use (Article 5) |
|
|
25
|
+
| **Transparency** | Voluntary | Agent session logging, model registry, attestation |
|
|
26
|
+
| **GPAI provisions** | Not applicable | Consumer of AI APIs, not a provider |
|
|
27
|
+
|
|
28
|
+
See [AI_ACT_COMPLIANCE.md](AI_ACT_COMPLIANCE.md) for full assessment.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Regulatory Mapping
|
|
33
|
+
|
|
34
|
+
### SOC 2 Type II
|
|
35
|
+
|
|
36
|
+
| Control | Description | Implementation |
|
|
37
|
+
|---------|-------------|----------------|
|
|
38
|
+
| **CC6.1** | Logical Access Security | `zsh` restricted permissions, SSH key management via `1Password`/Agents |
|
|
39
|
+
| **CC6.8** | Unauthorized Code Protection | GPG/SSH signed commits, `slsa-framework` workflow |
|
|
40
|
+
| **CC7.1** | System Operations | `compliance-guard.yml` blocks insecure patterns |
|
|
41
|
+
| **CC7.2** | Change Detection | Pre-commit hooks detect security violations |
|
|
42
|
+
| **CC8.1** | Change Management | Git-based IaC, PR templates, CODEOWNERS |
|
|
43
|
+
| **A1.2** | Audit Logs | `~/.local/share/dotfiles.log` tracks operations |
|
|
44
|
+
|
|
45
|
+
### ISO 27001
|
|
46
|
+
|
|
47
|
+
| Control | Description | Implementation |
|
|
48
|
+
|---------|-------------|----------------|
|
|
49
|
+
| **A.9.1.1** | Access Control Policy | Principle of Least Privilege (umask 022/077) |
|
|
50
|
+
| **A.9.4.1** | Information Access Restriction | `chmod 777/666` blocked by CI |
|
|
51
|
+
| **A.12.1.2** | Change Management | Git version control with CI/CD verification |
|
|
52
|
+
| **A.12.6.1** | Technical Vulnerability Management | Gitleaks, TruffleHog secrets scanning |
|
|
53
|
+
| **A.13.1.1** | Network Controls | TLS enforcement (no `curl -k`) |
|
|
54
|
+
| **A.14.2.5** | Secure Engineering | ShellCheck, cross-platform testing |
|
|
55
|
+
| **A.14.2.8** | System Security Testing | Module coverage gate (>=95%, currently 100%), weekly scans |
|
|
56
|
+
|
|
57
|
+
### GDPR / HIPAA (Privacy)
|
|
58
|
+
|
|
59
|
+
| Requirement | Description | Implementation |
|
|
60
|
+
|-------------|-------------|----------------|
|
|
61
|
+
| **Data Minimization** | Limit data collection | `privacy-mode` disables CLI telemetry |
|
|
62
|
+
| **Integrity** | Protect against tampering | `lock-configs` prevents modification |
|
|
63
|
+
| **Encryption** | Protect data at rest | Age encryption for sensitive dotfiles |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Security Controls
|
|
68
|
+
|
|
69
|
+
### TLS Enforcement
|
|
70
|
+
|
|
71
|
+
All network operations require valid TLS certificates:
|
|
72
|
+
|
|
73
|
+
| Control | Pattern Blocked | Enforcement |
|
|
74
|
+
|---------|-----------------|-------------|
|
|
75
|
+
| Insecure curl | `curl -k`, `--insecure` | Pre-commit + CI |
|
|
76
|
+
| Certificate bypass | `wget --no-check-certificate` | Pre-commit + CI |
|
|
77
|
+
| Plaintext HTTP | `http://` URLs | CI warning |
|
|
78
|
+
|
|
79
|
+
**Files:**
|
|
80
|
+
- Pre-commit: `config/pre-commit-config.yaml`
|
|
81
|
+
- CI: `.github/workflows/compliance-guard.yml`
|
|
82
|
+
|
|
83
|
+
### Secrets Management
|
|
84
|
+
|
|
85
|
+
| Tool | Purpose | Configuration |
|
|
86
|
+
|------|---------|---------------|
|
|
87
|
+
| Gitleaks | Prevent secrets in commits | `config/gitleaks.toml` |
|
|
88
|
+
| TruffleHog | Deep secrets scanning | CI workflow |
|
|
89
|
+
| detect-secrets | Baseline secrets detection | `.secrets.baseline` |
|
|
90
|
+
| Age | Encrypt sensitive dotfiles | Chezmoi integration |
|
|
91
|
+
|
|
92
|
+
### Permission Controls
|
|
93
|
+
|
|
94
|
+
| Control | Implementation |
|
|
95
|
+
|---------|----------------|
|
|
96
|
+
| Least privilege CI | `permissions: contents: read` default |
|
|
97
|
+
| No world-writable | `chmod 777/666` blocked by CI |
|
|
98
|
+
| CODEOWNERS | All paths mapped to reviewers |
|
|
99
|
+
| Signed commits | GPG signing enforced |
|
|
100
|
+
|
|
101
|
+
### Dangerous Pattern Blocking
|
|
102
|
+
|
|
103
|
+
Patterns automatically blocked by CI and pre-commit hooks:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Blocked - insecure TLS
|
|
107
|
+
curl -k https://...
|
|
108
|
+
wget --no-check-certificate https://...
|
|
109
|
+
|
|
110
|
+
# Blocked - world-writable permissions
|
|
111
|
+
chmod 777 /path
|
|
112
|
+
chmod -R 666 /files
|
|
113
|
+
|
|
114
|
+
# Blocked - hardcoded credentials
|
|
115
|
+
password="literal_value"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Cross-Platform Compatibility
|
|
121
|
+
|
|
122
|
+
### Supported Platforms
|
|
123
|
+
|
|
124
|
+
| Platform | Tools | Default Shell | Bash Version |
|
|
125
|
+
|----------|-------|---------------|--------------|
|
|
126
|
+
| Linux | GNU | Bash | 5.x |
|
|
127
|
+
| macOS | BSD | Zsh | 3.2 (system) |
|
|
128
|
+
| WSL | GNU | Bash | 5.x |
|
|
129
|
+
|
|
130
|
+
### Line Ending Normalization
|
|
131
|
+
|
|
132
|
+
Configured in `.gitattributes`:
|
|
133
|
+
|
|
134
|
+
| Pattern | Line Ending | Reason |
|
|
135
|
+
|---------|-------------|--------|
|
|
136
|
+
| `*.sh` | LF | Unix scripts |
|
|
137
|
+
| `*.bash` | LF | Unix scripts |
|
|
138
|
+
| `*.zsh` | LF | Unix scripts |
|
|
139
|
+
| `*.bat` | CRLF | Windows batch |
|
|
140
|
+
| `*.ps1` | CRLF | PowerShell |
|
|
141
|
+
|
|
142
|
+
### BSD vs GNU Compatibility
|
|
143
|
+
|
|
144
|
+
The `cross-platform-test.yml` workflow validates scripts on both platforms:
|
|
145
|
+
|
|
146
|
+
| Pattern | Issue | Portable Alternative |
|
|
147
|
+
|---------|-------|---------------------|
|
|
148
|
+
| `sed -i ''` | BSD requires backup ext | Check `$OSTYPE` |
|
|
149
|
+
| `sed -i` | GNU style | Check `$OSTYPE` |
|
|
150
|
+
| `grep -P` | GNU-only PCRE | Use `grep -E` |
|
|
151
|
+
| `date -d` | GNU-only | Use `date +%s` |
|
|
152
|
+
| `readarray` | Bash 4+ only | Use `while read` |
|
|
153
|
+
| `declare -A` | Bash 4+ only | Use indexed arrays |
|
|
154
|
+
|
|
155
|
+
### Path Handling
|
|
156
|
+
|
|
157
|
+
| Requirement | Implementation |
|
|
158
|
+
|-------------|----------------|
|
|
159
|
+
| No hardcoded user paths | Use `$HOME` or `~` |
|
|
160
|
+
| Case-insensitive safe | No filename collisions |
|
|
161
|
+
| Cross-platform paths | No platform-specific path literals |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## CI/CD Pipeline
|
|
166
|
+
|
|
167
|
+
### Workflow Matrix
|
|
168
|
+
|
|
169
|
+
| Workflow | Trigger | Purpose |
|
|
170
|
+
|----------|---------|---------|
|
|
171
|
+
| `ci.yml` | Push/PR | Full CI pipeline, ShellCheck, tests |
|
|
172
|
+
| `compliance-guard.yml` | Push/PR | Security pattern scanning |
|
|
173
|
+
| `cross-platform-test.yml` | Push/PR + weekly | BSD/GNU compatibility |
|
|
174
|
+
| `security-enhanced.yml` | Push/PR | Deep security analysis, SBOM |
|
|
175
|
+
| `codeql.yml` | Push/PR + weekly | Static code analysis |
|
|
176
|
+
| `sbom-diff.yml` | Pull request | SBOM diff and CVE correlation |
|
|
177
|
+
| `nightly.yml` | Daily 2 AM UTC | Dependency version checks |
|
|
178
|
+
|
|
179
|
+
### Compliance Guard Jobs
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
compliance-guard.yml
|
|
183
|
+
├── insecure-patterns # TLS, credentials, chmod
|
|
184
|
+
├── portability # ShellCheck, paths, .gitattributes
|
|
185
|
+
├── dockerfile-lint # Hadolint
|
|
186
|
+
└── compliance-summary # Report generation
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Cross-Platform Test Jobs
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
cross-platform-test.yml
|
|
193
|
+
├── ubuntu-latest (GNU) # Linux compatibility
|
|
194
|
+
├── macos-latest (BSD) # macOS compatibility
|
|
195
|
+
└── compatibility-report # Summary
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### GitHub Actions Security
|
|
199
|
+
|
|
200
|
+
| Control | Implementation |
|
|
201
|
+
|---------|----------------|
|
|
202
|
+
| Pinned versions | All actions pinned to SHA or version |
|
|
203
|
+
| Minimal permissions | `contents: read` by default |
|
|
204
|
+
| Concurrency control | Cancel in-progress duplicates |
|
|
205
|
+
| Timeout limits | All jobs have explicit timeouts |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Pre-Commit Hooks
|
|
210
|
+
|
|
211
|
+
### Configuration
|
|
212
|
+
|
|
213
|
+
File: `config/pre-commit-config.yaml`
|
|
214
|
+
|
|
215
|
+
### Hook Matrix
|
|
216
|
+
|
|
217
|
+
| Hook | Stage | Purpose |
|
|
218
|
+
|------|-------|---------|
|
|
219
|
+
| `shellcheck` | commit | Shell script linting |
|
|
220
|
+
| `shfmt` | commit | Shell script formatting |
|
|
221
|
+
| `gitleaks` | commit | Secrets detection |
|
|
222
|
+
| `detect-secrets` | commit | Credential scanning |
|
|
223
|
+
| `checkov` | commit | Infrastructure security |
|
|
224
|
+
| `hadolint` | commit | Dockerfile linting |
|
|
225
|
+
| `insecure-tls-check` | commit | Block `curl -k` |
|
|
226
|
+
| `dangerous-chmod-check` | commit | Block `chmod 777/666` |
|
|
227
|
+
| `security-policy-enforcement` | pre-push | Policy validation |
|
|
228
|
+
|
|
229
|
+
### Installation
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
pip install pre-commit
|
|
233
|
+
pre-commit install
|
|
234
|
+
pre-commit install --hook-type pre-push
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Change Management
|
|
240
|
+
|
|
241
|
+
### Pull Request Requirements
|
|
242
|
+
|
|
243
|
+
| Requirement | Implementation |
|
|
244
|
+
|-------------|----------------|
|
|
245
|
+
| PR template | `.github/PULL_REQUEST_TEMPLATE.md` |
|
|
246
|
+
| Code owners | `.github/CODEOWNERS` |
|
|
247
|
+
| CI checks | Required to pass |
|
|
248
|
+
| Review required | Auto-assigned via CODEOWNERS |
|
|
249
|
+
|
|
250
|
+
### PR Template Checklist
|
|
251
|
+
|
|
252
|
+
```markdown
|
|
253
|
+
- [ ] `chezmoi apply --dry-run` verified
|
|
254
|
+
- [ ] Manual testing on macOS
|
|
255
|
+
- [ ] Manual testing on Linux
|
|
256
|
+
- [ ] CI checks pass
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Commit Requirements
|
|
260
|
+
|
|
261
|
+
| Requirement | Implementation |
|
|
262
|
+
|-------------|----------------|
|
|
263
|
+
| Signed commits | GPG/SSH signing (cryptographically verified) |
|
|
264
|
+
| Conventional format | `feat:`, `fix:`, `docs:` prefixes |
|
|
265
|
+
| Co-author attribution | AI contributions attributed |
|
|
266
|
+
|
|
267
|
+
### Cryptographic Identity Verification (ALCOA: Attributable)
|
|
268
|
+
|
|
269
|
+
For SOC 2 compliance, the "Attributable" principle requires that all changes are linked to a **verified cryptographic identity**, not just a username.
|
|
270
|
+
|
|
271
|
+
**Enforcement layers:**
|
|
272
|
+
|
|
273
|
+
| Layer | Mechanism | Status |
|
|
274
|
+
|-------|-----------|--------|
|
|
275
|
+
| Local | Pre-push hook blocks unsigned commits | Enforced |
|
|
276
|
+
| CI | `compliance-guard.yml` verifies signatures | Advisory |
|
|
277
|
+
| GitHub | Branch protection (optional) | Configurable |
|
|
278
|
+
|
|
279
|
+
**Pre-push hook location:** `scripts/git-hooks/pre-push`
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# The hook verifies each commit before push:
|
|
283
|
+
for c in $(git rev-list "$range"); do
|
|
284
|
+
if ! git verify-commit "$c" >/dev/null 2>&1; then
|
|
285
|
+
echo "Blocked: unsigned commit $c"
|
|
286
|
+
exit 1
|
|
287
|
+
fi
|
|
288
|
+
done
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Setup signing:**
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
# SSH signing (recommended)
|
|
295
|
+
git config --global gpg.format ssh
|
|
296
|
+
git config --global user.signingkey ~/.ssh/id_ed25519.pub
|
|
297
|
+
git config --global commit.gpgsign true
|
|
298
|
+
|
|
299
|
+
# GPG signing (alternative)
|
|
300
|
+
git config --global user.signingkey <YOUR_GPG_KEY_ID>
|
|
301
|
+
git config --global commit.gpgsign true
|
|
302
|
+
|
|
303
|
+
# Or use the dotfiles alias:
|
|
304
|
+
enable-signing ssh # or: enable-signing gpg
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**Install pre-push hook:**
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
cp scripts/git-hooks/pre-push .git/hooks/pre-push
|
|
311
|
+
chmod +x .git/hooks/pre-push
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**GitHub Branch Protection (recommended):**
|
|
315
|
+
|
|
316
|
+
Enable "Require signed commits" in repository settings:
|
|
317
|
+
`Settings > Branches > Branch protection rules > Require signed commits`
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Test Coverage
|
|
322
|
+
|
|
323
|
+
### Current Metrics
|
|
324
|
+
|
|
325
|
+
| Category | Count | Coverage |
|
|
326
|
+
|----------|-------|----------|
|
|
327
|
+
| Documentation files | 63 | Audited |
|
|
328
|
+
| Executable shell surfaces | 205 | Audited |
|
|
329
|
+
| Unit test files | 425 | Tested |
|
|
330
|
+
| Integration test files | 11 | Tested |
|
|
331
|
+
| **Total test files** | **436** | **Module coverage: 100% (threshold >=95%)** |
|
|
332
|
+
| **Named tests (`test_start`)** | **2149** | **Pass rate: 100%** |
|
|
333
|
+
|
|
334
|
+
### Test Framework
|
|
335
|
+
|
|
336
|
+
```text
|
|
337
|
+
tests/
|
|
338
|
+
├── framework/
|
|
339
|
+
│ ├── assertions.sh # 16 assertion functions
|
|
340
|
+
│ ├── mocks.sh # Mock utilities
|
|
341
|
+
│ └── test_runner.sh # Test executor
|
|
342
|
+
├── unit/
|
|
343
|
+
│ └── test_*.sh # 378 unit test files
|
|
344
|
+
├── integration/
|
|
345
|
+
│ └── test_*.sh # 9 integration test files
|
|
346
|
+
└── performance/
|
|
347
|
+
└── benchmark_runner.sh
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Running Tests
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
# Run all tests
|
|
354
|
+
./tests/framework/test_runner.sh
|
|
355
|
+
|
|
356
|
+
# Run specific test
|
|
357
|
+
bash tests/unit/test_dot_commands_apply.sh
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Security Documentation
|
|
363
|
+
|
|
364
|
+
### Required Files
|
|
365
|
+
|
|
366
|
+
| File | Purpose | Location |
|
|
367
|
+
|------|---------|----------|
|
|
368
|
+
| SECURITY.md | Vulnerability reporting | `.github/SECURITY.md` |
|
|
369
|
+
| CONTRIBUTING.md | Contribution guidelines | `.github/CONTRIBUTING.md` |
|
|
370
|
+
| CODEOWNERS | Code ownership | `.github/CODEOWNERS` |
|
|
371
|
+
| INCIDENT_RESPONSE.md | Incident response plan | `docs/security/` |
|
|
372
|
+
| FMEA.md | Failure Mode & Effects Analysis | `docs/security/` |
|
|
373
|
+
| VERIFICATION_VALIDATION.md | ISO 13485-style V&V report | `docs/security/` |
|
|
374
|
+
| .editorconfig | Editor settings | Root |
|
|
375
|
+
| .gitattributes | Git attributes | Root |
|
|
376
|
+
|
|
377
|
+
### Vulnerability Response SLA
|
|
378
|
+
|
|
379
|
+
| Severity | Initial Response | Resolution Target |
|
|
380
|
+
|----------|------------------|-------------------|
|
|
381
|
+
| Critical | 24 hours | 48 hours |
|
|
382
|
+
| High | 72 hours | 7 days |
|
|
383
|
+
| Medium | 5 business days | 30 days |
|
|
384
|
+
| Low | 10 business days | 90 days |
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Audit & Forensics
|
|
389
|
+
|
|
390
|
+
### Immutability
|
|
391
|
+
|
|
392
|
+
Lock critical configuration files:
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
lock-configs # Sets chflags uchg (macOS) or chattr +i (Linux)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Audit Trail
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# View dotfiles operations log
|
|
402
|
+
dot audit
|
|
403
|
+
|
|
404
|
+
# Log location
|
|
405
|
+
~/.local/share/dotfiles.log
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Supply Chain Security
|
|
409
|
+
|
|
410
|
+
| Control | Implementation |
|
|
411
|
+
|---------|----------------|
|
|
412
|
+
| SBOM | Generated for every release (SPDX) |
|
|
413
|
+
| Provenance | SLSA Level 3 build attestation |
|
|
414
|
+
| Dependencies | Pinned versions, weekly updates |
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Verification Commands
|
|
419
|
+
|
|
420
|
+
### Manual Verification
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
# Run all pre-commit hooks
|
|
424
|
+
pre-commit run --all-files
|
|
425
|
+
|
|
426
|
+
# Run unit tests
|
|
427
|
+
./tests/framework/test_runner.sh
|
|
428
|
+
|
|
429
|
+
# Check for insecure patterns
|
|
430
|
+
grep -rn --include="*.sh" -E 'curl.*-k|wget.*--no-check' .
|
|
431
|
+
|
|
432
|
+
# Validate .gitattributes
|
|
433
|
+
grep "text=auto" .gitattributes && echo "OK"
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Automated Verification
|
|
437
|
+
|
|
438
|
+
| Schedule | Check |
|
|
439
|
+
|----------|-------|
|
|
440
|
+
| Every PR | compliance-guard, cross-platform-test |
|
|
441
|
+
| Weekly | Full security scan, CodeQL |
|
|
442
|
+
| Nightly | Tool version checks |
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## References
|
|
447
|
+
|
|
448
|
+
- [SOC 2 Type II](https://www.aicpa.org/soc2)
|
|
449
|
+
- [ISO 27001:2022](https://www.iso.org/standard/27001)
|
|
450
|
+
- [OWASP Top 10](https://owasp.org/Top10/)
|
|
451
|
+
- [Google Shell Style Guide](https://google.github.io/styleguide/shellguide.html)
|
|
452
|
+
- [ShellCheck Wiki](https://www.shellcheck.net/wiki/)
|
|
453
|
+
- [SLSA Framework](https://slsa.dev/)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Secrets Encryption with SOPS and age
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# 1. Generate an age key (one-time)
|
|
7
|
+
mkdir -p ~/.config/sops/age
|
|
8
|
+
age-keygen -o ~/.config/sops/age/keys.txt
|
|
9
|
+
|
|
10
|
+
# 2. Get your public key
|
|
11
|
+
age-keygen -y ~/.config/sops/age/keys.txt
|
|
12
|
+
# Output: age1abc123...
|
|
13
|
+
|
|
14
|
+
# 3. Update .sops.yaml with your public key
|
|
15
|
+
# Replace the placeholder key in .sops.yaml with your actual public key
|
|
16
|
+
|
|
17
|
+
# 4. Encrypt a file
|
|
18
|
+
sops --encrypt --age $(age-keygen -y ~/.config/sops/age/keys.txt) secrets.yaml > secrets.sops.yaml
|
|
19
|
+
|
|
20
|
+
# 5. Edit encrypted files
|
|
21
|
+
sops secrets.sops.yaml
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Key Management
|
|
25
|
+
|
|
26
|
+
- **Private key**: `~/.config/sops/age/keys.txt` — never commit this file.
|
|
27
|
+
- **Public key**: Safe to share. It lives in `.sops.yaml`.
|
|
28
|
+
- **Backup**: Keep your private key in a password manager or a hardware security module.
|
|
29
|
+
|
|
30
|
+
## Recovery
|
|
31
|
+
|
|
32
|
+
If you lose your age private key, follow these steps:
|
|
33
|
+
1. Create a new key: `age-keygen -o ~/.config/sops/age/keys.txt`
|
|
34
|
+
2. Re-encrypt all secrets with the new public key.
|
|
35
|
+
3. Update `.sops.yaml` with the new public key.
|
|
36
|
+
|
|
37
|
+
## Integration with Chezmoi
|
|
38
|
+
|
|
39
|
+
Chezmoi has built-in support for age encryption.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
chezmoi add --encrypt ~/.ssh/config
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This encrypts the file in the source state. It uses the age key set in `~/.config/chezmoi/chezmoi.toml`:
|
|
46
|
+
|
|
47
|
+
```toml
|
|
48
|
+
encryption = "age"
|
|
49
|
+
[age]
|
|
50
|
+
identity = "~/.config/sops/age/keys.txt"
|
|
51
|
+
recipient = "age1abc123..."
|
|
52
|
+
```
|