@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.
Files changed (567) hide show
  1. package/CHANGELOG.md +452 -0
  2. package/LICENSE +1283 -0
  3. package/README.md +322 -0
  4. package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
  5. package/docs/AI.md +108 -0
  6. package/docs/CNAME +1 -0
  7. package/docs/COPYRIGHT +4 -3
  8. package/docs/NAMING_CONVENTIONS.md +102 -0
  9. package/docs/README.md +82 -0
  10. package/docs/_config.yml +59 -0
  11. package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
  12. package/docs/adr/ADR-002-shell-performance.md +130 -0
  13. package/docs/adr/ADR-003-security-first.md +158 -0
  14. package/docs/adr/ADR-004-cli-architecture.md +171 -0
  15. package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
  16. package/docs/adr/ADR-006-shell-selection.md +124 -0
  17. package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
  18. package/docs/adr/ADR-008-alias-system-architecture.md +95 -0
  19. package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
  20. package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
  21. package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
  22. package/docs/adr/README.md +39 -0
  23. package/docs/architecture/ARCHITECTURE.md +117 -0
  24. package/docs/architecture/INTEROP.md +44 -0
  25. package/docs/architecture/REPO_LAYOUT.md +241 -0
  26. package/docs/architecture/WALKTHROUGH.md +86 -0
  27. package/docs/architecture/fleet-deployment.md +77 -0
  28. package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
  29. package/docs/archive/LEGACY_ROADMAP.md +160 -0
  30. package/docs/archive/MILESTONE_v0.2.493.md +47 -0
  31. package/docs/{PLAN.md → archive/PLAN.md} +50 -12
  32. package/docs/archive/REPO_AUDIT.md +31 -0
  33. package/docs/guides/INSTALL.md +144 -0
  34. package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
  35. package/docs/guides/THEMING.md +230 -0
  36. package/docs/guides/TROUBLESHOOTING.md +176 -0
  37. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
  38. package/docs/index.md +43 -0
  39. package/docs/interop/A2A.md +39 -0
  40. package/docs/interop/POWERSHELL.md +102 -0
  41. package/docs/manual/00-introduction.md +89 -0
  42. package/docs/manual/01-concepts/01-architecture.md +138 -0
  43. package/docs/manual/01-concepts/02-trust-model.md +182 -0
  44. package/docs/manual/01-concepts/03-theme-engine.md +186 -0
  45. package/docs/manual/01-concepts/04-fleet.md +148 -0
  46. package/docs/manual/01-concepts/05-self-healing.md +204 -0
  47. package/docs/manual/02-tutorials/01-first-install.md +197 -0
  48. package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
  49. package/docs/manual/02-tutorials/03-create-profile.md +244 -0
  50. package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
  51. package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
  52. package/docs/manual/03-reference/01-dot-cli.md +417 -0
  53. package/docs/manual/03-reference/02-config-files.md +265 -0
  54. package/docs/manual/03-reference/03-environment.md +124 -0
  55. package/docs/manual/03-reference/04-templates.md +190 -0
  56. package/docs/manual/03-reference/05-feature-flags.md +128 -0
  57. package/docs/manual/04-cookbook/01-recipes.md +285 -0
  58. package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
  59. package/docs/manual/04-cookbook/03-faq.md +175 -0
  60. package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
  61. package/docs/manual/05-appendices/B-security-checklist.md +84 -0
  62. package/docs/manual/05-appendices/C-glossary.md +40 -0
  63. package/docs/manual/05-appendices/D-bibliography.md +58 -0
  64. package/docs/manual/05-appendices/E-license.md +38 -0
  65. package/docs/manual/_toc.yml +58 -0
  66. package/docs/manual/command-index.md +62 -0
  67. package/docs/manual/concept-index.md +168 -0
  68. package/docs/operations/ATTESTATION.md +44 -0
  69. package/docs/operations/CI_CADENCE.md +107 -0
  70. package/docs/operations/CI_COMPOSITES.md +156 -0
  71. package/docs/operations/COMPLETIONS.md +123 -0
  72. package/docs/operations/COVERAGE.md +148 -0
  73. package/docs/operations/DRIFT.md +107 -0
  74. package/docs/operations/MAINTENANCE.md +63 -0
  75. package/docs/operations/MIGRATION.md +109 -0
  76. package/docs/operations/OPERATIONS.md +188 -0
  77. package/docs/operations/PERFORMANCE.md +133 -0
  78. package/docs/operations/RELIABILITY.md +122 -0
  79. package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
  80. package/docs/operations/TESTING.md +199 -0
  81. package/docs/operations/TRACEABILITY.md +35 -0
  82. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
  83. package/docs/operations/VERSION_SYNC.md +393 -0
  84. package/docs/reference/ALIASES.md +131 -0
  85. package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
  86. package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
  87. package/docs/reference/FEATURES.md +66 -0
  88. package/docs/reference/FONTS.md +112 -0
  89. package/docs/reference/PROFILES.md +69 -0
  90. package/docs/reference/SCREENSHOTS.md +121 -0
  91. package/docs/reference/SCRIPTS.md +71 -0
  92. package/docs/reference/SUPPORT_MATRIX.md +80 -0
  93. package/docs/reference/THEMES.md +117 -0
  94. package/docs/reference/TOOLS.md +109 -0
  95. package/docs/reference/UTILS.md +155 -0
  96. package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
  97. package/docs/security/AUDIT_BYPASS.md +103 -0
  98. package/docs/security/AUTOMATION_SECRETS.md +26 -0
  99. package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
  100. package/docs/security/COMPLIANCE.md +458 -0
  101. package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
  102. package/docs/security/ENCRYPTION.md +57 -0
  103. package/docs/security/FMEA.md +159 -0
  104. package/docs/security/HISTORY_FILTERING.md +132 -0
  105. package/docs/security/INCIDENT_RESPONSE.md +579 -0
  106. package/docs/security/INSTALL_VERIFICATION.md +122 -0
  107. package/docs/security/KEYS.md +49 -0
  108. package/docs/security/KEY_ROTATION.md +223 -0
  109. package/docs/security/MCP_POLICY.md +78 -0
  110. package/docs/security/POLICY_RELEASES.md +37 -0
  111. package/docs/security/README.md +28 -0
  112. package/docs/security/SCORECARD.md +80 -0
  113. package/docs/security/SECRETS.md +158 -0
  114. package/docs/security/SECURITY.md +45 -0
  115. package/docs/security/SECURITY_CHECKLIST.md +55 -0
  116. package/docs/security/SHELL_EXEMPTIONS.md +145 -0
  117. package/docs/security/SOUP_REGISTER.md +36 -0
  118. package/docs/security/THREAT_MODEL.md +130 -0
  119. package/docs/security/VERIFICATION_VALIDATION.md +228 -0
  120. package/docs/themes/README.md +10 -0
  121. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
  122. package/docs/themes/hero-shot.svg +78 -0
  123. package/dot_config/.module-manifest.json +69 -0
  124. package/dot_config/ai/identity.md +23 -0
  125. package/dot_config/ai/patterns/architect.md +16 -0
  126. package/dot_config/ai/patterns/hardener.md +15 -0
  127. package/dot_config/ai/patterns/refactor.md +15 -0
  128. package/dot_config/aider/aider.conf.yml +32 -0
  129. package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
  130. package/dot_config/ansible/ansible.cfg +11 -0
  131. package/dot_config/atuin/config.toml.tmpl +47 -0
  132. package/dot_config/bat/config +23 -0
  133. package/dot_config/brave-flags.conf.tmpl +7 -0
  134. package/dot_config/btop/btop.conf +16 -0
  135. package/dot_config/btop/themes/tokyonight.theme +34 -0
  136. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  137. package/dot_config/claude/mcp_servers.json +20 -0
  138. package/dot_config/containers/containers.conf +14 -0
  139. package/dot_config/curl/dot_curlrc +18 -0
  140. package/dot_config/dlv/config.yml +39 -0
  141. package/dot_config/docker/config.json +15 -0
  142. package/dot_config/dotfiles/agent-card.json +29 -0
  143. package/dot_config/dotfiles/agent-profiles.json +92 -0
  144. package/dot_config/dotfiles/boot/README.md +13 -0
  145. package/dot_config/dotfiles/grub/README.md +13 -0
  146. package/dot_config/dotfiles/lock/README.md +13 -0
  147. package/dot_config/dotfiles/mcp-lock.json +33 -0
  148. package/dot_config/dotfiles/mcp-policy.json +52 -0
  149. package/dot_config/dotfiles/mcp-registry.json +47 -0
  150. package/dot_config/dotfiles/model-registry.json +20 -0
  151. package/dot_config/dotfiles/policy-bundles.json +38 -0
  152. package/dot_config/dotfiles/prompt-registry.json +16 -0
  153. package/dot_config/dotfiles/versions.env +18 -0
  154. package/dot_config/duf/duf.conf +6 -0
  155. package/dot_config/duti/defaults.duti +5 -0
  156. package/dot_config/emoji/emoji.txt +34 -0
  157. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  158. package/dot_config/environment.d/90-wayland.conf +19 -0
  159. package/dot_config/fastfetch/config.jsonc +28 -0
  160. package/dot_config/firefox/user.js.tmpl +58 -0
  161. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  162. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  163. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  164. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  165. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  166. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  167. package/dot_config/fish/conf.d/init.fish.tmpl +172 -0
  168. package/dot_config/fish/config.fish.tmpl +44 -0
  169. package/dot_config/fish/fish_plugins +1 -0
  170. package/dot_config/fish/functions/_.fish +3 -0
  171. package/dot_config/fish/functions/_cached_eval.fish +131 -0
  172. package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
  173. package/dot_config/fish/functions/als.fish +46 -0
  174. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  175. package/dot_config/fish/functions/c.fish +3 -0
  176. package/dot_config/fish/functions/cat.fish +9 -0
  177. package/dot_config/fish/functions/d.fish +7 -0
  178. package/dot_config/fish/functions/dot.fish +34 -0
  179. package/dot_config/fish/functions/h.fish +3 -0
  180. package/dot_config/fish/functions/l.fish +7 -0
  181. package/dot_config/fish/functions/la.fish +7 -0
  182. package/dot_config/fish/functions/ll.fish +7 -0
  183. package/dot_config/fish/functions/log_error.fish +13 -0
  184. package/dot_config/fish/functions/log_info.fish +13 -0
  185. package/dot_config/fish/functions/lr.fish +7 -0
  186. package/dot_config/fish/functions/lra.fish +7 -0
  187. package/dot_config/fish/functions/ls.fish +7 -0
  188. package/dot_config/fish/functions/lt.fish +7 -0
  189. package/dot_config/fish/functions/lta.fish +7 -0
  190. package/dot_config/fish/functions/notify-run.fish +11 -0
  191. package/dot_config/fish/functions/q.fish +3 -0
  192. package/dot_config/fish/functions/silent-run.fish +7 -0
  193. package/dot_config/fish/functions/yy.fish +8 -0
  194. package/dot_config/flatpak/flatpak.list +4 -0
  195. package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
  196. package/dot_config/foot/foot.ini.tmpl +33 -0
  197. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  198. package/dot_config/fzf/fzf.zsh +48 -0
  199. package/dot_config/gem/gemrc +9 -0
  200. package/dot_config/gh/config.yml +12 -0
  201. package/dot_config/ghostty/config.tmpl +165 -0
  202. package/dot_config/git/allowed_signers.tmpl +18 -0
  203. package/dot_config/git/attributes +12 -0
  204. package/dot_config/git/commit-template +10 -0
  205. package/dot_config/git/hooks/executable_commit-msg +146 -0
  206. package/dot_config/git/ignore +27 -0
  207. package/dot_config/gnupg/gpg-agent.conf +11 -0
  208. package/dot_config/go/golangci.yml +118 -0
  209. package/dot_config/go/gopls.json +30 -0
  210. package/dot_config/goose/config.yaml +29 -0
  211. package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
  212. package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
  213. package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
  214. package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
  215. package/dot_config/htop/htoprc +20 -0
  216. package/dot_config/inputrc +2 -0
  217. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  218. package/dot_config/just/justfile +122 -0
  219. package/dot_config/k9s/config.yaml +65 -0
  220. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  221. package/dot_config/kanshi/config.tmpl +22 -0
  222. package/dot_config/karabiner/karabiner.json +14 -0
  223. package/dot_config/kitty/kitty.conf.tmpl +53 -0
  224. package/dot_config/lazydocker/config.yml +186 -0
  225. package/dot_config/lazygit/config.yml +35 -0
  226. package/dot_config/mako/config +47 -0
  227. package/dot_config/mas/masapps.txt +5 -0
  228. package/dot_config/micro/settings.json +3 -0
  229. package/dot_config/mimeapps.list +77 -0
  230. package/dot_config/minikube/config.json +13 -0
  231. package/dot_config/mise/config.toml +99 -0
  232. package/dot_config/mongosh/mongoshrc.js +68 -0
  233. package/dot_config/mpv/input.conf +47 -0
  234. package/dot_config/mpv/mpv.conf +47 -0
  235. package/dot_config/mycli/myclirc +67 -0
  236. package/dot_config/nano/nanorc +28 -0
  237. package/dot_config/ncdu/config +12 -0
  238. package/dot_config/niri/config.kdl.tmpl +327 -0
  239. package/dot_config/nushell/aliases.nu +18 -0
  240. package/dot_config/nushell/cached_eval.nu +80 -0
  241. package/dot_config/nushell/completions.nu.tmpl +52 -0
  242. package/dot_config/nushell/config.nu.tmpl +86 -0
  243. package/dot_config/nushell/env.nu.tmpl +102 -0
  244. package/dot_config/nushell/functions.nu.tmpl +17 -0
  245. package/dot_config/nvim/init.lua +18 -0
  246. package/dot_config/nvim/lazy-lock.json +58 -0
  247. package/dot_config/nvim/lua/config/autocmds.lua +107 -0
  248. package/dot_config/nvim/lua/config/keymaps.lua +92 -0
  249. package/dot_config/nvim/lua/config/lazy.lua +44 -0
  250. package/dot_config/nvim/lua/config/options.lua +49 -0
  251. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  252. package/dot_config/nvim/lua/plugins/coding.lua +216 -0
  253. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  254. package/dot_config/nvim/lua/plugins/dap.lua +412 -0
  255. package/dot_config/nvim/lua/plugins/editor.lua +55 -0
  256. package/dot_config/nvim/lua/plugins/git.lua +10 -0
  257. package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
  258. package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
  259. package/dot_config/nvim/lua/plugins/rust.lua +34 -0
  260. package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
  261. package/dot_config/nvim/lua/plugins/ui.lua +509 -0
  262. package/dot_config/paru/paru.conf +10 -0
  263. package/dot_config/pip/pip.conf.tmpl +32 -0
  264. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  265. package/dot_config/pueue/pueue.yml +34 -0
  266. package/dot_config/pypoetry/config.toml +6 -0
  267. package/dot_config/pyrightconfig.json +5 -0
  268. package/dot_config/raycast/README.md +13 -0
  269. package/dot_config/redis/redisclirc +41 -0
  270. package/dot_config/ripgrep/ripgreprc +21 -0
  271. package/dot_config/shell/00-core-paths.sh.tmpl +134 -0
  272. package/dot_config/shell/05-core-safety.sh +48 -0
  273. package/dot_config/shell/10-secrets.sh +41 -0
  274. package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
  275. package/dot_config/shell/40-ls-colors.sh +49 -0
  276. package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
  277. package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
  278. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
  279. package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
  280. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -0
  281. package/dot_config/shell/Brewfile +207 -0
  282. package/dot_config/shell/Brewfile.cask +92 -0
  283. package/dot_config/shell/Brewfile.cli +127 -0
  284. package/dot_config/shell/README.md +284 -0
  285. package/dot_config/shell/als_data.txt.tmpl +65 -0
  286. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  287. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  288. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  289. package/dot_config/sops/dot_sops.yaml +23 -0
  290. package/dot_config/starship.toml.tmpl +202 -0
  291. package/dot_config/swaylock/config +43 -0
  292. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  293. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  294. package/dot_config/systemd/user/pueued.service +12 -0
  295. package/dot_config/systemd/user/ssh-agent.service +12 -0
  296. package/dot_config/task/Taskfile.yml +86 -0
  297. package/dot_config/tflint/tflint.hcl +9 -0
  298. package/dot_config/tmux/tmux.conf.tmpl +223 -0
  299. package/dot_config/topgrade.toml.tmpl +54 -0
  300. package/dot_config/user-dirs.dirs +10 -0
  301. package/dot_config/vscode/extensions.txt +11 -0
  302. package/dot_config/vscode/settings.json.tmpl +82 -0
  303. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  304. package/dot_config/waybar/style.css.tmpl +211 -0
  305. package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
  306. package/dot_config/wget/wgetrc +12 -0
  307. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  308. package/dot_config/yarn/yarnrc.yml +36 -0
  309. package/dot_config/yazi/keymap.toml +67 -0
  310. package/dot_config/yazi/theme.toml +102 -0
  311. package/dot_config/yazi/yazi.toml +40 -0
  312. package/dot_config/zathura/zathurarc +52 -0
  313. package/dot_config/zellij/config.kdl.tmpl +79 -0
  314. package/dot_config/zsh/dot_zprofile +7 -0
  315. package/dot_config/zsh/dot_zshenv +5 -0
  316. package/dot_config/zsh/dot_zshrc.tmpl +635 -0
  317. package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -0
  318. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
  319. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  320. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  321. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +214 -0
  322. package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
  323. package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
  324. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  325. package/dot_local/bin/executable_ai-update +195 -0
  326. package/dot_local/bin/executable_ai_core +152 -0
  327. package/dot_local/bin/executable_antigravity +11 -0
  328. package/dot_local/bin/executable_b64 +84 -0
  329. package/dot_local/bin/executable_bm +79 -0
  330. package/dot_local/bin/executable_cb +39 -0
  331. package/dot_local/bin/executable_dot +596 -0
  332. package/dot_local/bin/executable_dot-ai +36 -0
  333. package/dot_local/bin/executable_dot-bootstrap +77 -0
  334. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  335. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  336. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  337. package/dot_local/bin/executable_dot-theme-sync +952 -0
  338. package/dot_local/bin/executable_dot_completion +57 -0
  339. package/dot_local/bin/executable_dtags +28 -0
  340. package/dot_local/bin/executable_epoch +67 -0
  341. package/dot_local/bin/executable_extract +41 -0
  342. package/dot_local/bin/executable_gbd +52 -0
  343. package/dot_local/bin/executable_gd +42 -0
  344. package/dot_local/bin/executable_git-ai-commit +175 -0
  345. package/dot_local/bin/executable_git-ai-diff +169 -0
  346. package/dot_local/bin/executable_gl +101 -0
  347. package/dot_local/bin/executable_hash +161 -0
  348. package/dot_local/bin/executable_hashsum +160 -0
  349. package/dot_local/bin/executable_hex +115 -0
  350. package/dot_local/bin/executable_jsonv +78 -0
  351. package/dot_local/bin/executable_jwt +94 -0
  352. package/dot_local/bin/executable_kill-port +75 -0
  353. package/dot_local/bin/executable_lorem +118 -0
  354. package/dot_local/bin/executable_mkscript +35 -0
  355. package/dot_local/bin/executable_monitor +56 -0
  356. package/dot_local/bin/executable_myip +51 -0
  357. package/dot_local/bin/executable_notify +24 -0
  358. package/dot_local/bin/executable_open +38 -0
  359. package/dot_local/bin/executable_pw +27 -0
  360. package/dot_local/bin/executable_rec-start +46 -0
  361. package/dot_local/bin/executable_rec-stop +35 -0
  362. package/dot_local/bin/executable_regex +132 -0
  363. package/dot_local/bin/executable_start-niri +8 -0
  364. package/dot_local/bin/executable_tmux-sessionizer +314 -0
  365. package/dot_local/bin/executable_tour +177 -0
  366. package/dot_local/bin/executable_up +23 -0
  367. package/dot_local/bin/executable_update +142 -0
  368. package/dot_local/bin/executable_uuid +87 -0
  369. package/dot_local/bin/executable_win +32 -0
  370. package/dot_local/bin/executable_yamlv +57 -0
  371. package/dot_local/share/bash-completion/completions/dot +72 -0
  372. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  373. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  374. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  375. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  376. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  382. package/dot_local/share/man/man1/dot.1 +149 -0
  383. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  384. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  385. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  386. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  387. package/dot_local/share/zsh/completions/.keep +0 -0
  388. package/dot_local/share/zsh/completions/_dot +283 -0
  389. package/install.sh +350 -0
  390. package/package.json +1 -1
  391. package/scripts/ci/check-copyright-headers.sh +96 -0
  392. package/scripts/ci/check-dangerous-chmod.sh +19 -0
  393. package/scripts/ci/check-deps-dev.sh +236 -0
  394. package/scripts/ci/check-insecure-tls.sh +61 -0
  395. package/scripts/ci/check-regression-traceability.sh +67 -0
  396. package/scripts/ci/check-shell-preamble.sh +106 -0
  397. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  398. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  399. package/scripts/ci/run-coverage.sh +362 -0
  400. package/scripts/ci/validate-chezmoidata.sh +25 -0
  401. package/scripts/ci/validate-ci-config.sh +224 -0
  402. package/scripts/demo/record.sh +42 -0
  403. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  404. package/scripts/diagnostics/alias-governance.sh +137 -0
  405. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  406. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  407. package/scripts/diagnostics/benchmark.sh +381 -0
  408. package/scripts/diagnostics/conflicts.sh +72 -0
  409. package/scripts/diagnostics/doctor-unified.sh +38 -0
  410. package/scripts/diagnostics/doctor.sh +709 -0
  411. package/scripts/diagnostics/drift-dashboard.sh +201 -0
  412. package/scripts/diagnostics/health.sh +614 -0
  413. package/scripts/diagnostics/history-analysis.sh +85 -0
  414. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  415. package/scripts/diagnostics/perf.sh +452 -0
  416. package/scripts/diagnostics/scorecard.sh +118 -0
  417. package/scripts/diagnostics/secret-governance.sh +58 -0
  418. package/scripts/diagnostics/security-score.sh +438 -0
  419. package/scripts/diagnostics/smoke-test.sh +87 -0
  420. package/scripts/diagnostics/snapshot.sh +89 -0
  421. package/scripts/diagnostics/verify.sh +107 -0
  422. package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
  423. package/scripts/diagnostics/version-locks.sh +79 -0
  424. package/scripts/diagnostics/workstation-attestation.sh +186 -0
  425. package/scripts/docs/build-manual.sh +883 -0
  426. package/scripts/docs/check-manual.sh +213 -0
  427. package/scripts/dot/commands/agent.sh +474 -0
  428. package/scripts/dot/commands/ai.sh +481 -0
  429. package/scripts/dot/commands/aliases.sh +250 -0
  430. package/scripts/dot/commands/appearance.sh +80 -0
  431. package/scripts/dot/commands/core.sh +185 -0
  432. package/scripts/dot/commands/diagnostics.sh +229 -0
  433. package/scripts/dot/commands/fleet.sh +399 -0
  434. package/scripts/dot/commands/lint.sh +177 -0
  435. package/scripts/dot/commands/manual.sh +168 -0
  436. package/scripts/dot/commands/meta.sh +248 -0
  437. package/scripts/dot/commands/patterns.sh +54 -0
  438. package/scripts/dot/commands/restore.sh +231 -0
  439. package/scripts/dot/commands/secrets.sh +223 -0
  440. package/scripts/dot/commands/security.sh +76 -0
  441. package/scripts/dot/commands/tools.sh +469 -0
  442. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  443. package/scripts/dot/lib/bento.sh +50 -0
  444. package/scripts/dot/lib/log.sh +200 -0
  445. package/scripts/dot/lib/platform.sh +99 -0
  446. package/scripts/dot/lib/ui.sh +518 -0
  447. package/scripts/dot/lib/utils.sh +377 -0
  448. package/scripts/fonts/install-nerd-fonts.sh +68 -0
  449. package/scripts/fonts/patch-fonts.sh +35 -0
  450. package/scripts/git-hooks/install.sh +11 -0
  451. package/scripts/git-hooks/pre-commit +12 -0
  452. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  453. package/scripts/git-hooks/pre-push +92 -0
  454. package/scripts/git-hooks/prepare-commit-msg +29 -0
  455. package/scripts/lib/secrets_provider.sh +158 -0
  456. package/scripts/maintenance/check-updates.sh +131 -0
  457. package/scripts/ops/ai-setup.sh +55 -0
  458. package/scripts/ops/bundle.sh +77 -0
  459. package/scripts/ops/chaos.sh +49 -0
  460. package/scripts/ops/chezmoi-apply.sh +270 -0
  461. package/scripts/ops/chezmoi-diff.sh +15 -0
  462. package/scripts/ops/chezmoi-remove.sh +45 -0
  463. package/scripts/ops/chezmoi-update.sh +48 -0
  464. package/scripts/ops/heal-chezmoi.sh +86 -0
  465. package/scripts/ops/heal-system.sh +128 -0
  466. package/scripts/ops/heal-tools.sh +340 -0
  467. package/scripts/ops/heal.sh +222 -0
  468. package/scripts/ops/post-apply-repair.sh +106 -0
  469. package/scripts/ops/prewarm.sh +127 -0
  470. package/scripts/ops/release.sh +252 -0
  471. package/scripts/ops/rollback.sh +589 -0
  472. package/scripts/ops/setup.sh +137 -0
  473. package/scripts/ops/teleport.sh +33 -0
  474. package/scripts/qa/coverage-baseline.sh +60 -0
  475. package/scripts/qa/docs-coverage.sh +111 -0
  476. package/scripts/qa/powershell-contract.ps1 +95 -0
  477. package/scripts/qa/reliability-audit.sh +138 -0
  478. package/scripts/qa/traceability-coverage.sh +116 -0
  479. package/scripts/qa/validate-examples.sh +26 -0
  480. package/scripts/qa/wsl-contract.sh +11 -0
  481. package/scripts/release/package-policy-bundles.sh +125 -0
  482. package/scripts/secrets/age-init.sh +70 -0
  483. package/scripts/secrets/create-secrets-file.sh +45 -0
  484. package/scripts/secrets/encrypt-ssh-key.sh +43 -0
  485. package/scripts/security/backup.sh +57 -0
  486. package/scripts/security/dns-doh.sh +51 -0
  487. package/scripts/security/encryption-check.sh +54 -0
  488. package/scripts/security/enforce-policies.sh +334 -0
  489. package/scripts/security/firewall.sh +90 -0
  490. package/scripts/security/lock-configs.sh +57 -0
  491. package/scripts/security/lock-screen.sh +55 -0
  492. package/scripts/security/manage-secrets.sh +428 -0
  493. package/scripts/security/ssh-cert.sh +203 -0
  494. package/scripts/security/telemetry-kill.sh +50 -0
  495. package/scripts/security/usb-safety.sh +51 -0
  496. package/scripts/theme/apply-gnome-theme.sh +328 -0
  497. package/scripts/theme/extract-theme.py +677 -0
  498. package/scripts/theme/install-boot-logo.sh +62 -0
  499. package/scripts/theme/install-catppuccin-themes.sh +370 -0
  500. package/scripts/theme/install-cursors.sh +25 -0
  501. package/scripts/theme/install-file-icons.sh +26 -0
  502. package/scripts/theme/install-grub-theme.sh +61 -0
  503. package/scripts/theme/install-lock-icon.sh +30 -0
  504. package/scripts/theme/merge-wallpaper.sh +145 -0
  505. package/scripts/theme/rebuild-themes.sh +309 -0
  506. package/scripts/theme/switch.sh +431 -0
  507. package/scripts/theme/wallpaper-rotate.sh +136 -0
  508. package/scripts/theme/wallpaper-sync.sh +397 -0
  509. package/scripts/tools/cmatrix.sh +21 -0
  510. package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
  511. package/scripts/tools/emoji-picker.sh +48 -0
  512. package/scripts/tools/figlet-banner.sh +18 -0
  513. package/scripts/tools/log-rotate.sh +30 -0
  514. package/scripts/tools/lolcat-wrap.sh +19 -0
  515. package/scripts/tools/pipes.sh +48 -0
  516. package/scripts/tuning/linux.sh +185 -0
  517. package/scripts/tuning/macos.sh +55 -0
  518. package/scripts/uninstall.sh +85 -0
  519. package/scripts/version-sync.sh +487 -0
  520. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  521. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  522. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  523. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  524. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  525. package/templates/projects/go/README.md +4 -0
  526. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  527. package/templates/projects/go/go.sum +0 -0
  528. package/templates/projects/molecule/README.md +7 -0
  529. package/templates/projects/molecule/converge.yml +7 -0
  530. package/templates/projects/molecule/molecule.yml +16 -0
  531. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  532. package/templates/projects/node/README.md +4 -0
  533. package/templates/projects/node/package-lock.json +12 -0
  534. package/templates/projects/node/src/index.js +1 -0
  535. package/templates/projects/packer/README.md +15 -0
  536. package/templates/projects/packer/main.pkr.hcl +15 -0
  537. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  538. package/templates/projects/python/README.md +4 -0
  539. package/templates/projects/python/pyproject.toml +15 -0
  540. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  541. package/templates/projects/python/tests/test_basic.py +1 -0
  542. package/docs/ARCHITECTURE.md +0 -62
  543. package/docs/COMPLIANCE.md +0 -47
  544. package/docs/OPERATIONS.md +0 -103
  545. package/docs/PR_DESCRIPTION.md +0 -150
  546. package/docs/ROADMAP_legacy.md +0 -556
  547. package/docs/SECURITY_CHECKLIST.md +0 -25
  548. package/docs/TASK.md +0 -99
  549. package/docs/WALKTHROUGH.md +0 -46
  550. package/scripts/backup.sh +0 -142
  551. package/scripts/banner.sh +0 -20
  552. package/scripts/benchmark.sh +0 -20
  553. package/scripts/build.sh +0 -41
  554. package/scripts/clean.sh +0 -31
  555. package/scripts/compile.sh +0 -54
  556. package/scripts/copy.sh +0 -108
  557. package/scripts/doctor.sh +0 -79
  558. package/scripts/dotfiles.sh +0 -63
  559. package/scripts/download.sh +0 -35
  560. package/scripts/help.sh +0 -57
  561. package/scripts/lock-configs.sh +0 -57
  562. package/scripts/package.sh +0 -46
  563. package/scripts/ssh.sh +0 -55
  564. package/scripts/teleport.sh +0 -23
  565. package/scripts/test-aliases.sh +0 -25
  566. package/scripts/test_smoke.sh +0 -88
  567. 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