@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,334 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
# Security Policy Enforcement Script
|
|
4
|
+
# This script enforces security policies across the dotfiles repository
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# Script configuration
|
|
9
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
readonly SCRIPT_DIR
|
|
11
|
+
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
|
12
|
+
readonly REPO_ROOT
|
|
13
|
+
readonly POLICIES_DIR="${REPO_ROOT}/.github/security-policies"
|
|
14
|
+
readonly LOG_FILE="${REPO_ROOT}/.security-audit.log"
|
|
15
|
+
|
|
16
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
17
|
+
# shellcheck disable=SC1091
|
|
18
|
+
source "${SCRIPT_DIR}/../dot/lib/ui.sh"
|
|
19
|
+
ui_init
|
|
20
|
+
|
|
21
|
+
# Logging function (also writes to log file)
|
|
22
|
+
log() {
|
|
23
|
+
local level="$1"
|
|
24
|
+
shift
|
|
25
|
+
local message="$*"
|
|
26
|
+
local timestamp
|
|
27
|
+
timestamp=$(date -u '+%Y-%m-%d %H:%M:%S UTC')
|
|
28
|
+
echo "[${timestamp}] [${level}] ${message}" | tee -a "${LOG_FILE}"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Error handling
|
|
32
|
+
error_exit() {
|
|
33
|
+
log "ERROR" "$1"
|
|
34
|
+
exit 1
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Check if required tools are installed
|
|
38
|
+
check_dependencies() {
|
|
39
|
+
log "INFO" "Checking dependencies..."
|
|
40
|
+
|
|
41
|
+
local missing_tools=()
|
|
42
|
+
|
|
43
|
+
# Required tools
|
|
44
|
+
local tools=("opa" "gitleaks" "shellcheck" "grep" "find")
|
|
45
|
+
|
|
46
|
+
for tool in "${tools[@]}"; do
|
|
47
|
+
if ! command -v "$tool" &>/dev/null; then
|
|
48
|
+
missing_tools+=("$tool")
|
|
49
|
+
fi
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
if [[ ${#missing_tools[@]} -gt 0 ]]; then
|
|
53
|
+
error_exit "Missing required tools: ${missing_tools[*]}"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
log "INFO" "All dependencies satisfied"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
# Scan for hardcoded secrets
|
|
60
|
+
scan_secrets() {
|
|
61
|
+
log "INFO" "Scanning for hardcoded secrets..."
|
|
62
|
+
|
|
63
|
+
local violations=0
|
|
64
|
+
|
|
65
|
+
# Run gitleaks
|
|
66
|
+
if gitleaks detect --source="${REPO_ROOT}" --config="${REPO_ROOT}/config/gitleaks.toml" --no-git >/dev/null 2>&1; then
|
|
67
|
+
log "INFO" "✅ No secrets detected by gitleaks"
|
|
68
|
+
else
|
|
69
|
+
log "WARN" "❌ Potential secrets detected by gitleaks"
|
|
70
|
+
violations=$((violations + 1))
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Manual pattern checks
|
|
74
|
+
local secret_patterns=(
|
|
75
|
+
'password\s*=\s*["\047][^"\047]*["\047]'
|
|
76
|
+
'token\s*=\s*["\047][^"\047]*["\047]'
|
|
77
|
+
'secret\s*=\s*["\047][^"\047]*["\047]'
|
|
78
|
+
'key\s*=\s*["\047][^"\047]*["\047]'
|
|
79
|
+
'AKIA[0-9A-Z]{16}' # AWS Access Key
|
|
80
|
+
'[0-9a-f]{32,}' # Potential hash/token
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
for pattern in "${secret_patterns[@]}"; do
|
|
84
|
+
if grep -r -E -i "${pattern}" "${REPO_ROOT}" \
|
|
85
|
+
--exclude-dir=".git" \
|
|
86
|
+
--exclude="*.log" \
|
|
87
|
+
--exclude="enforce-policies.sh" \
|
|
88
|
+
--exclude="environment-template.env" >/dev/null 2>&1; then
|
|
89
|
+
log "WARN" "❌ Potential hardcoded credential pattern found: ${pattern}"
|
|
90
|
+
violations=$((violations + 1))
|
|
91
|
+
fi
|
|
92
|
+
done
|
|
93
|
+
|
|
94
|
+
if [[ $violations -eq 0 ]]; then
|
|
95
|
+
log "INFO" "✅ No hardcoded secrets detected"
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
return $violations
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
# Check file permissions
|
|
102
|
+
check_file_permissions() {
|
|
103
|
+
log "INFO" "Checking file permissions..."
|
|
104
|
+
|
|
105
|
+
local violations=0
|
|
106
|
+
|
|
107
|
+
# Check for overly permissive files
|
|
108
|
+
while IFS= read -r -d '' file; do
|
|
109
|
+
if [[ -f "$file" ]]; then
|
|
110
|
+
local perms
|
|
111
|
+
perms=$(stat -c %a "$file" 2>/dev/null || stat -f %OLp "$file")
|
|
112
|
+
if [[ $perms -gt 755 ]]; then
|
|
113
|
+
log "WARN" "❌ Overly permissive file: ${file} (${perms})"
|
|
114
|
+
violations=$((violations + 1))
|
|
115
|
+
fi
|
|
116
|
+
fi
|
|
117
|
+
done < <(find "${REPO_ROOT}" -type f -not -path "*/.git/*" -print0)
|
|
118
|
+
|
|
119
|
+
# Check for executable text files
|
|
120
|
+
local text_extensions=("md" "txt" "json" "yaml" "yml" "toml")
|
|
121
|
+
|
|
122
|
+
for ext in "${text_extensions[@]}"; do
|
|
123
|
+
while IFS= read -r -d '' file; do
|
|
124
|
+
if [[ -x "$file" ]]; then
|
|
125
|
+
log "WARN" "❌ Executable text file: ${file}"
|
|
126
|
+
violations=$((violations + 1))
|
|
127
|
+
fi
|
|
128
|
+
done < <(find "${REPO_ROOT}" -name "*.${ext}" -executable -not -path "*/.git/*" -print0)
|
|
129
|
+
done
|
|
130
|
+
|
|
131
|
+
if [[ $violations -eq 0 ]]; then
|
|
132
|
+
log "INFO" "✅ File permissions are appropriate"
|
|
133
|
+
fi
|
|
134
|
+
|
|
135
|
+
return $violations
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
# Validate shell scripts
|
|
139
|
+
validate_shell_scripts() {
|
|
140
|
+
log "INFO" "Validating shell scripts..."
|
|
141
|
+
|
|
142
|
+
local violations=0
|
|
143
|
+
|
|
144
|
+
while IFS= read -r -d '' script; do
|
|
145
|
+
if ! shellcheck "$script" >/dev/null 2>&1; then
|
|
146
|
+
log "WARN" "❌ ShellCheck violations in: ${script}"
|
|
147
|
+
violations=$((violations + 1))
|
|
148
|
+
fi
|
|
149
|
+
done < <(find "${REPO_ROOT}" -name "*.sh" -not -path "*/.git/*" -print0)
|
|
150
|
+
|
|
151
|
+
if [[ $violations -eq 0 ]]; then
|
|
152
|
+
log "INFO" "✅ All shell scripts pass validation"
|
|
153
|
+
fi
|
|
154
|
+
|
|
155
|
+
return $violations
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
# Check environment variable usage
|
|
159
|
+
check_environment_variables() {
|
|
160
|
+
log "INFO" "Checking environment variable usage..."
|
|
161
|
+
|
|
162
|
+
local violations=0
|
|
163
|
+
|
|
164
|
+
# Look for unprotected variable assignments
|
|
165
|
+
while IFS= read -r -d '' file; do
|
|
166
|
+
# Skip binary files and specific files
|
|
167
|
+
if file "$file" | grep -q "text" && [[ ! "$file" =~ \.(log|env)$ ]]; then
|
|
168
|
+
# Check for variables that should use default patterns
|
|
169
|
+
if grep -E '^[A-Z_]+=.+$' "$file" >/dev/null 2>&1; then
|
|
170
|
+
# Check if they use proper defaulting
|
|
171
|
+
if ! grep -E '\$\{[A-Z_]+:-[^}]*\}' "$file" >/dev/null 2>&1; then
|
|
172
|
+
local suspicious_vars
|
|
173
|
+
suspicious_vars=$(grep -E '^[A-Z_]+=.+$' "$file" | head -3)
|
|
174
|
+
if [[ -n "$suspicious_vars" ]]; then
|
|
175
|
+
log "WARN" "❌ Potential hardcoded variables in ${file}: ${suspicious_vars}"
|
|
176
|
+
violations=$((violations + 1))
|
|
177
|
+
fi
|
|
178
|
+
fi
|
|
179
|
+
fi
|
|
180
|
+
fi
|
|
181
|
+
done < <(find "${REPO_ROOT}" -type f -not -path "*/.git/*" -not -path "*/.github/security-policies/*" -print0)
|
|
182
|
+
|
|
183
|
+
if [[ $violations -eq 0 ]]; then
|
|
184
|
+
log "INFO" "✅ Environment variable usage is appropriate"
|
|
185
|
+
fi
|
|
186
|
+
|
|
187
|
+
return $violations
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
# Validate OPA policies
|
|
191
|
+
validate_policies() {
|
|
192
|
+
log "INFO" "Validating OPA policies..."
|
|
193
|
+
|
|
194
|
+
if [[ ! -f "${POLICIES_DIR}/security.rego" ]]; then
|
|
195
|
+
log "WARN" "❌ Security policy file not found"
|
|
196
|
+
return 1
|
|
197
|
+
fi
|
|
198
|
+
|
|
199
|
+
if opa test "${POLICIES_DIR}" >/dev/null 2>&1; then
|
|
200
|
+
log "INFO" "✅ OPA policies are valid"
|
|
201
|
+
return 0
|
|
202
|
+
else
|
|
203
|
+
log "WARN" "❌ OPA policy validation failed"
|
|
204
|
+
return 1
|
|
205
|
+
fi
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
# Check for sensitive files
|
|
209
|
+
check_sensitive_files() {
|
|
210
|
+
log "INFO" "Checking for sensitive files..."
|
|
211
|
+
|
|
212
|
+
local violations=0
|
|
213
|
+
local sensitive_patterns=(
|
|
214
|
+
"*.key"
|
|
215
|
+
"*.pem"
|
|
216
|
+
"*.p12"
|
|
217
|
+
"*.pfx"
|
|
218
|
+
"*.jks"
|
|
219
|
+
"*.keystore"
|
|
220
|
+
".env"
|
|
221
|
+
".env.*"
|
|
222
|
+
"credentials.json"
|
|
223
|
+
"service-account.json"
|
|
224
|
+
"id_rsa"
|
|
225
|
+
"id_dsa"
|
|
226
|
+
"id_ecdsa"
|
|
227
|
+
"id_ed25519"
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
for pattern in "${sensitive_patterns[@]}"; do
|
|
231
|
+
while IFS= read -r -d '' file; do
|
|
232
|
+
# Skip allowed files
|
|
233
|
+
if [[ ! "$file" =~ (environment-template\.env|\.pub$) ]]; then
|
|
234
|
+
log "WARN" "❌ Sensitive file detected: ${file}"
|
|
235
|
+
violations=$((violations + 1))
|
|
236
|
+
fi
|
|
237
|
+
done < <(find "${REPO_ROOT}" -name "${pattern}" -not -path "*/.git/*" -print0)
|
|
238
|
+
done
|
|
239
|
+
|
|
240
|
+
if [[ $violations -eq 0 ]]; then
|
|
241
|
+
log "INFO" "✅ No sensitive files detected"
|
|
242
|
+
fi
|
|
243
|
+
|
|
244
|
+
return $violations
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
# Generate security report
|
|
248
|
+
generate_report() {
|
|
249
|
+
local total_violations="$1"
|
|
250
|
+
local report_file="${REPO_ROOT}/security-report.md"
|
|
251
|
+
|
|
252
|
+
log "INFO" "Generating security report..."
|
|
253
|
+
|
|
254
|
+
cat >"${report_file}" <<EOF
|
|
255
|
+
# Security Policy Enforcement Report
|
|
256
|
+
|
|
257
|
+
**Generated:** $(date -u '+%Y-%m-%d %H:%M:%S UTC')
|
|
258
|
+
**Repository:** $(basename "${REPO_ROOT}")
|
|
259
|
+
**Total Violations:** ${total_violations}
|
|
260
|
+
|
|
261
|
+
## Security Checks Performed
|
|
262
|
+
|
|
263
|
+
- ✅ Secrets scanning (gitleaks + manual patterns)
|
|
264
|
+
- ✅ File permissions validation
|
|
265
|
+
- ✅ Shell script analysis (shellcheck)
|
|
266
|
+
- ✅ Environment variable usage check
|
|
267
|
+
- ✅ OPA policy validation
|
|
268
|
+
- ✅ Sensitive files detection
|
|
269
|
+
|
|
270
|
+
## Security Score
|
|
271
|
+
|
|
272
|
+
$(if [[ $total_violations -eq 0 ]]; then echo "🟢 **PASSED** - No security violations detected"; else echo "🔴 **FAILED** - ${total_violations} violations detected"; fi)
|
|
273
|
+
|
|
274
|
+
## Recommendations
|
|
275
|
+
|
|
276
|
+
1. Review any flagged violations in the audit log
|
|
277
|
+
2. Update hardcoded values to use environment variables
|
|
278
|
+
3. Ensure proper file permissions (644 for files, 755 for executables)
|
|
279
|
+
4. Use the provided environment template for configuration
|
|
280
|
+
5. Run this script regularly as part of your development workflow
|
|
281
|
+
|
|
282
|
+
## Next Steps
|
|
283
|
+
|
|
284
|
+
- Fix any identified violations
|
|
285
|
+
- Run \`scripts/security/enforce-policies.sh\` again to verify fixes
|
|
286
|
+
- Consider setting up automated policy enforcement in CI/CD
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
*This report was generated by the automated security policy enforcement system.*
|
|
290
|
+
EOF
|
|
291
|
+
|
|
292
|
+
log "INFO" "Security report generated: ${report_file}"
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
# Main execution
|
|
296
|
+
main() {
|
|
297
|
+
log "INFO" "Starting security policy enforcement..."
|
|
298
|
+
|
|
299
|
+
# Initialize log file
|
|
300
|
+
echo "# Security Audit Log - $(date -u '+%Y-%m-%d %H:%M:%S UTC')" >"${LOG_FILE}"
|
|
301
|
+
|
|
302
|
+
check_dependencies
|
|
303
|
+
|
|
304
|
+
local total_violations=0
|
|
305
|
+
|
|
306
|
+
# Run all checks
|
|
307
|
+
scan_secrets || total_violations=$((total_violations + $?))
|
|
308
|
+
check_file_permissions || total_violations=$((total_violations + $?))
|
|
309
|
+
validate_shell_scripts || total_violations=$((total_violations + $?))
|
|
310
|
+
check_environment_variables || total_violations=$((total_violations + $?))
|
|
311
|
+
validate_policies || total_violations=$((total_violations + 1))
|
|
312
|
+
check_sensitive_files || total_violations=$((total_violations + $?))
|
|
313
|
+
|
|
314
|
+
# Generate report
|
|
315
|
+
generate_report "$total_violations"
|
|
316
|
+
|
|
317
|
+
# Final result
|
|
318
|
+
if [[ $total_violations -eq 0 ]]; then
|
|
319
|
+
ui_ok "All security checks passed"
|
|
320
|
+
log "INFO" "Security policy enforcement completed successfully"
|
|
321
|
+
exit 0
|
|
322
|
+
else
|
|
323
|
+
ui_err "$total_violations violations" "Security policy enforcement failed"
|
|
324
|
+
ui_warn "Details" "Check ${LOG_FILE}"
|
|
325
|
+
ui_warn "Report" "Review security-report.md"
|
|
326
|
+
log "ERROR" "Security policy enforcement failed with ${total_violations} violations"
|
|
327
|
+
exit 1
|
|
328
|
+
fi
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
# Script entry point
|
|
332
|
+
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
333
|
+
main "$@"
|
|
334
|
+
fi
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
## Configure system firewall with secure defaults.
|
|
4
|
+
##
|
|
5
|
+
## Enables firewall with deny-by-default policy and minimal exceptions.
|
|
6
|
+
## Requires explicit opt-in via DOTFILES_FIREWALL=1 to prevent accidental
|
|
7
|
+
## lockouts.
|
|
8
|
+
##
|
|
9
|
+
## # Usage
|
|
10
|
+
## DOTFILES_FIREWALL=1 dot firewall
|
|
11
|
+
##
|
|
12
|
+
## # Dependencies
|
|
13
|
+
## - macOS: socketfilterfw (built-in)
|
|
14
|
+
## - Linux: ufw (Uncomplicated Firewall)
|
|
15
|
+
##
|
|
16
|
+
## # Platform Notes
|
|
17
|
+
## ### Platform: macOS
|
|
18
|
+
## - Enables Application Firewall via socketfilterfw
|
|
19
|
+
## - Enables stealth mode (no ICMP responses)
|
|
20
|
+
## - Allows signed applications
|
|
21
|
+
##
|
|
22
|
+
## ### Platform: Linux
|
|
23
|
+
## - Configures UFW with deny incoming / allow outgoing
|
|
24
|
+
## - Allows OpenSSH to prevent lockout
|
|
25
|
+
## - Requires ufw package installed
|
|
26
|
+
##
|
|
27
|
+
## # Security
|
|
28
|
+
## **Requires sudo.** All changes logged to dotfiles.log.
|
|
29
|
+
##
|
|
30
|
+
## # Side Effects
|
|
31
|
+
## - Modifies system firewall rules
|
|
32
|
+
## - May block existing connections
|
|
33
|
+
##
|
|
34
|
+
## # Idempotency
|
|
35
|
+
## Safe to run repeatedly. Applies same rules each time.
|
|
36
|
+
|
|
37
|
+
set -euo pipefail
|
|
38
|
+
|
|
39
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
40
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
41
|
+
# shellcheck disable=SC1091
|
|
42
|
+
source "$SCRIPT_DIR/../dot/lib/ui.sh"
|
|
43
|
+
# shellcheck source=../dot/lib/platform.sh
|
|
44
|
+
# shellcheck disable=SC1091
|
|
45
|
+
source "$SCRIPT_DIR/../dot/lib/platform.sh"
|
|
46
|
+
|
|
47
|
+
DRY_RUN=0
|
|
48
|
+
for arg in "$@"; do
|
|
49
|
+
case "$arg" in --dry-run | -n) DRY_RUN=1 ;; esac
|
|
50
|
+
done
|
|
51
|
+
_run_cmd() {
|
|
52
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then ui_info "[dry-run]" "$*"; else "$@"; fi
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
ui_init
|
|
56
|
+
ui_header "Firewall"
|
|
57
|
+
|
|
58
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
59
|
+
ui_info "Mode" "dry-run (no changes will be made)"
|
|
60
|
+
elif [ "${DOTFILES_FIREWALL:-}" != "1" ]; then
|
|
61
|
+
ui_warn "Firewall" "disabled by default"
|
|
62
|
+
ui_info "Re-run" "DOTFILES_FIREWALL=1"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
case "$(dot_platform_id)" in
|
|
67
|
+
macos)
|
|
68
|
+
ui_info "Enabling" "macOS firewall"
|
|
69
|
+
_run_cmd sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
|
|
70
|
+
_run_cmd sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsigned on
|
|
71
|
+
_run_cmd sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsignedapp on
|
|
72
|
+
_run_cmd sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
|
|
73
|
+
;;
|
|
74
|
+
linux | wsl)
|
|
75
|
+
if command -v ufw >/dev/null; then
|
|
76
|
+
ui_info "Enabling" "UFW"
|
|
77
|
+
_run_cmd sudo ufw default deny incoming
|
|
78
|
+
_run_cmd sudo ufw default allow outgoing
|
|
79
|
+
_run_cmd sudo ufw allow OpenSSH
|
|
80
|
+
_run_cmd sudo ufw --force enable
|
|
81
|
+
else
|
|
82
|
+
ui_err "ufw" "not installed; re-run after install"
|
|
83
|
+
exit 1
|
|
84
|
+
fi
|
|
85
|
+
;;
|
|
86
|
+
*)
|
|
87
|
+
ui_err "Unsupported OS" "firewall setup"
|
|
88
|
+
exit 1
|
|
89
|
+
;;
|
|
90
|
+
esac
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# MIT License
|
|
3
|
+
# Copyright (c) 2026
|
|
4
|
+
# See LICENSE file for details.
|
|
5
|
+
|
|
6
|
+
# Script: lock-configs.sh
|
|
7
|
+
# Description: Toggles immutability flags on critical configuration files.
|
|
8
|
+
# Usage: lock-configs [lock|unlock]
|
|
9
|
+
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
ACTION="${1:-lock}"
|
|
13
|
+
CRITICAL_FILES=(
|
|
14
|
+
"$HOME/.zshrc"
|
|
15
|
+
"$HOME/.bashrc"
|
|
16
|
+
"$HOME/.profile"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# Determine OS command for immutability
|
|
20
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
21
|
+
LOCK_CMD="chflags uchg"
|
|
22
|
+
UNLOCK_CMD="chflags nouchg"
|
|
23
|
+
CHECK_CMD="ls -lO"
|
|
24
|
+
else
|
|
25
|
+
# Linux (requires root usually, but we'll try)
|
|
26
|
+
if command -v chattr >/dev/null; then
|
|
27
|
+
LOCK_CMD="sudo chattr +i"
|
|
28
|
+
UNLOCK_CMD="sudo chattr -i"
|
|
29
|
+
CHECK_CMD="lsattr"
|
|
30
|
+
else
|
|
31
|
+
echo " 'chattr' not found. Cannot set immutability on Linux without it."
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
if [[ "$ACTION" == "lock" ]]; then
|
|
37
|
+
echo " Locking critical configuration files..."
|
|
38
|
+
CMD="$LOCK_CMD"
|
|
39
|
+
elif [[ "$ACTION" == "unlock" ]]; then
|
|
40
|
+
echo " Unlocking critical configuration files..."
|
|
41
|
+
CMD="$UNLOCK_CMD"
|
|
42
|
+
else
|
|
43
|
+
echo "Usage: $0 [lock|unlock]"
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
for file in "${CRITICAL_FILES[@]}"; do
|
|
48
|
+
if [[ -f "$file" ]]; then
|
|
49
|
+
echo "Processing: $file"
|
|
50
|
+
$CMD "$file" || echo "️ Failed to modify flags for $file (permission denied?)"
|
|
51
|
+
fi
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
echo "Done. Environment state:"
|
|
55
|
+
for file in "${CRITICAL_FILES[@]}"; do
|
|
56
|
+
[[ -f "$file" ]] && $CHECK_CMD "$file"
|
|
57
|
+
done
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
7
|
+
# shellcheck disable=SC1091
|
|
8
|
+
source "$SCRIPT_DIR/../dot/lib/ui.sh"
|
|
9
|
+
# shellcheck source=../dot/lib/platform.sh
|
|
10
|
+
# shellcheck disable=SC1091
|
|
11
|
+
source "$SCRIPT_DIR/../dot/lib/platform.sh"
|
|
12
|
+
|
|
13
|
+
DRY_RUN=0
|
|
14
|
+
for arg in "$@"; do
|
|
15
|
+
case "$arg" in --dry-run | -n) DRY_RUN=1 ;; esac
|
|
16
|
+
done
|
|
17
|
+
_run_cmd() {
|
|
18
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then ui_info "[dry-run]" "$*"; else "$@"; fi
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
ui_init
|
|
22
|
+
ui_header "Lock Screen"
|
|
23
|
+
|
|
24
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
25
|
+
ui_info "Mode" "dry-run (no changes will be made)"
|
|
26
|
+
elif [ "${DOTFILES_LOCK:-}" != "1" ]; then
|
|
27
|
+
ui_warn "Lock screen" "disabled by default"
|
|
28
|
+
ui_info "Re-run" "DOTFILES_LOCK=1"
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
case "$(dot_platform_id)" in
|
|
33
|
+
linux | wsl)
|
|
34
|
+
if command -v gsettings >/dev/null; then
|
|
35
|
+
ui_info "Enabling" "screen lock and idle timeout"
|
|
36
|
+
_run_cmd gsettings set org.gnome.desktop.screensaver lock-enabled true || true
|
|
37
|
+
_run_cmd gsettings set org.gnome.desktop.session idle-delay 300 || true
|
|
38
|
+
_run_cmd gsettings set org.gnome.desktop.screensaver lock-delay 0 || true
|
|
39
|
+
else
|
|
40
|
+
ui_err "gsettings" "not found"
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
;;
|
|
44
|
+
macos)
|
|
45
|
+
ui_info "Enabling" "lock on sleep and screensaver (macOS)"
|
|
46
|
+
_run_cmd defaults write com.apple.screensaver askForPassword -int 1 || true
|
|
47
|
+
_run_cmd defaults write com.apple.screensaver askForPasswordDelay -int 0 || true
|
|
48
|
+
# 5-minute idle timeout
|
|
49
|
+
_run_cmd defaults -currentHost write com.apple.screensaver idleTime -int 300 || true
|
|
50
|
+
;;
|
|
51
|
+
*)
|
|
52
|
+
ui_err "Unsupported OS" "lock screen hardening"
|
|
53
|
+
exit 1
|
|
54
|
+
;;
|
|
55
|
+
esac
|