@sebastienrousseau/dotfiles 0.2.481 → 0.2.500

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/CHANGELOG.md +122 -32
  2. package/LICENSE +1 -1
  3. package/README.md +211 -242
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +2 -2
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +58 -249
  9. package/docs/adr/ADR-004-cli-architecture.md +2 -2
  10. package/docs/adr/ADR-006-shell-selection.md +2 -2
  11. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  12. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  13. package/docs/adr/README.md +2 -3
  14. package/docs/architecture/ARCHITECTURE.md +113 -0
  15. package/docs/architecture/INTEROP.md +36 -0
  16. package/docs/architecture/REPO_LAYOUT.md +237 -0
  17. package/docs/architecture/WALKTHROUGH.md +82 -0
  18. package/docs/architecture/fleet-deployment.md +73 -0
  19. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  20. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  21. package/docs/{PLAN.md → archive/PLAN.md} +1 -1
  22. package/docs/guides/INSTALL.md +140 -0
  23. package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
  24. package/docs/guides/THEMING.md +222 -0
  25. package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
  26. package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
  27. package/docs/index.md +39 -0
  28. package/docs/interop/A2A.md +32 -0
  29. package/docs/manual/00-introduction.md +85 -0
  30. package/docs/manual/01-concepts/01-architecture.md +134 -0
  31. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  32. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  33. package/docs/manual/01-concepts/04-fleet.md +142 -0
  34. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  35. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  36. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  37. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  38. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  39. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  40. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  41. package/docs/manual/03-reference/02-config-files.md +259 -0
  42. package/docs/manual/03-reference/03-environment.md +120 -0
  43. package/docs/manual/03-reference/04-templates.md +184 -0
  44. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  45. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  46. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  47. package/docs/manual/04-cookbook/03-faq.md +167 -0
  48. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  49. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  50. package/docs/manual/05-appendices/C-glossary.md +36 -0
  51. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  52. package/docs/manual/05-appendices/E-license.md +34 -0
  53. package/docs/manual/_toc.yml +58 -0
  54. package/docs/manual/command-index.md +58 -0
  55. package/docs/manual/concept-index.md +164 -0
  56. package/docs/operations/ATTESTATION.md +39 -0
  57. package/docs/operations/MAINTENANCE.md +59 -0
  58. package/docs/operations/MIGRATION.md +101 -0
  59. package/docs/operations/OPERATIONS.md +164 -0
  60. package/docs/operations/RELIABILITY.md +116 -0
  61. package/docs/{ROADMAP.md → operations/ROADMAP.md} +11 -11
  62. package/docs/operations/TESTING.md +195 -0
  63. package/docs/operations/TRACEABILITY.md +31 -0
  64. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  65. package/docs/operations/VERSION_SYNC.md +344 -0
  66. package/docs/{ALIASES.md → reference/ALIASES.md} +2 -6
  67. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  68. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  69. package/docs/reference/FEATURES.md +62 -0
  70. package/docs/reference/FONTS.md +108 -0
  71. package/docs/reference/PROFILES.md +65 -0
  72. package/docs/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
  73. package/docs/reference/SCRIPTS.md +67 -0
  74. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  75. package/docs/reference/THEMES.md +113 -0
  76. package/docs/reference/TOOLS.md +105 -0
  77. package/docs/reference/UTILS.md +151 -0
  78. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  79. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  80. package/docs/security/COMPLIANCE.md +453 -0
  81. package/docs/security/ENCRYPTION.md +52 -0
  82. package/docs/security/FMEA.md +155 -0
  83. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  84. package/docs/security/KEYS.md +45 -0
  85. package/docs/security/MCP_POLICY.md +69 -0
  86. package/docs/security/POLICY_RELEASES.md +33 -0
  87. package/docs/security/README.md +24 -0
  88. package/docs/security/SECRETS.md +146 -0
  89. package/docs/security/SECURITY.md +41 -0
  90. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  91. package/docs/security/SOUP_REGISTER.md +32 -0
  92. package/docs/security/THREAT_MODEL.md +120 -0
  93. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  94. package/docs/themes/README.md +3 -17
  95. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  96. package/docs/themes/hero-shot.svg +78 -0
  97. package/dot_config/.module-manifest.json +69 -0
  98. package/dot_config/ai/identity.md +20 -0
  99. package/dot_config/ai/patterns/architect.md +14 -0
  100. package/dot_config/ai/patterns/hardener.md +13 -0
  101. package/dot_config/ai/patterns/refactor.md +13 -0
  102. package/dot_config/aider/aider.conf.yml +1 -1
  103. package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
  104. package/dot_config/atuin/config.toml +18 -1
  105. package/dot_config/bat/config +16 -1
  106. package/dot_config/claude/mcp_servers.json +3 -32
  107. package/dot_config/dotfiles/agent-card.json +29 -0
  108. package/dot_config/dotfiles/agent-profiles.json +92 -0
  109. package/dot_config/dotfiles/boot/README.md +1 -1
  110. package/dot_config/dotfiles/grub/README.md +1 -1
  111. package/dot_config/dotfiles/lock/README.md +1 -1
  112. package/dot_config/dotfiles/mcp-lock.json +33 -0
  113. package/dot_config/dotfiles/mcp-policy.json +52 -0
  114. package/dot_config/dotfiles/mcp-registry.json +47 -0
  115. package/dot_config/dotfiles/model-registry.json +20 -0
  116. package/dot_config/dotfiles/policy-bundles.json +38 -0
  117. package/dot_config/dotfiles/prompt-registry.json +16 -0
  118. package/dot_config/dotfiles/versions.env +18 -0
  119. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  120. package/dot_config/environment.d/90-wayland.conf +19 -0
  121. package/dot_config/firefox/user.js.tmpl +58 -0
  122. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  123. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  124. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  125. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  126. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  127. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  128. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  129. package/dot_config/fish/config.fish.tmpl +44 -0
  130. package/dot_config/fish/fish_plugins +1 -0
  131. package/dot_config/fish/functions/_.fish +3 -0
  132. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  133. package/dot_config/fish/functions/als.fish +46 -0
  134. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  135. package/dot_config/fish/functions/c.fish +3 -0
  136. package/dot_config/fish/functions/cat.fish +9 -0
  137. package/dot_config/fish/functions/d.fish +7 -0
  138. package/dot_config/fish/functions/dot.fish +34 -0
  139. package/dot_config/fish/functions/h.fish +3 -0
  140. package/dot_config/fish/functions/l.fish +7 -0
  141. package/dot_config/fish/functions/la.fish +7 -0
  142. package/dot_config/fish/functions/ll.fish +7 -0
  143. package/dot_config/fish/functions/log_error.fish +13 -0
  144. package/dot_config/fish/functions/log_info.fish +13 -0
  145. package/dot_config/fish/functions/lr.fish +7 -0
  146. package/dot_config/fish/functions/lra.fish +7 -0
  147. package/dot_config/fish/functions/ls.fish +7 -0
  148. package/dot_config/fish/functions/lt.fish +7 -0
  149. package/dot_config/fish/functions/lta.fish +7 -0
  150. package/dot_config/fish/functions/notify-run.fish +11 -0
  151. package/dot_config/fish/functions/q.fish +3 -0
  152. package/dot_config/fish/functions/silent-run.fish +7 -0
  153. package/dot_config/fish/functions/yy.fish +8 -0
  154. package/dot_config/fontconfig/fonts.conf.tmpl +13 -0
  155. package/dot_config/foot/foot.ini.tmpl +33 -0
  156. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  157. package/dot_config/fzf/fzf.zsh +48 -0
  158. package/dot_config/ghostty/config.tmpl +69 -565
  159. package/dot_config/git/allowed_signers.tmpl +18 -0
  160. package/dot_config/git/commit-template +10 -0
  161. package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
  162. package/dot_config/goose/config.yaml +2 -2
  163. package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
  164. package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
  165. package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
  166. package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
  167. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  168. package/dot_config/just/justfile +18 -0
  169. package/dot_config/kanshi/config.tmpl +22 -0
  170. package/dot_config/kitty/kitty.conf.tmpl +44 -508
  171. package/dot_config/lazygit/config.yml +18 -6
  172. package/dot_config/mako/config +47 -0
  173. package/dot_config/micro/settings.json +3 -0
  174. package/dot_config/mimeapps.list +77 -0
  175. package/dot_config/mise/config.toml +63 -5
  176. package/dot_config/mongosh/mongoshrc.js +1 -0
  177. package/dot_config/mpv/input.conf +47 -0
  178. package/dot_config/mpv/mpv.conf +47 -0
  179. package/dot_config/niri/config.kdl.tmpl +327 -0
  180. package/dot_config/nushell/aliases.nu +18 -0
  181. package/dot_config/nushell/completions.nu.tmpl +52 -0
  182. package/dot_config/nushell/config.nu.tmpl +86 -0
  183. package/dot_config/nushell/env.nu.tmpl +94 -0
  184. package/dot_config/nushell/functions.nu.tmpl +17 -0
  185. package/dot_config/nvim/init.lua +14 -0
  186. package/dot_config/nvim/lazy-lock.json +45 -14
  187. package/dot_config/nvim/lua/config/autocmds.lua +45 -1
  188. package/dot_config/nvim/lua/config/keymaps.lua +13 -8
  189. package/dot_config/nvim/lua/config/lazy.lua +22 -12
  190. package/dot_config/nvim/lua/config/options.lua +1 -0
  191. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  192. package/dot_config/nvim/lua/plugins/coding.lua +11 -29
  193. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  194. package/dot_config/nvim/lua/plugins/dap.lua +215 -4
  195. package/dot_config/nvim/lua/plugins/editor.lua +6 -10
  196. package/dot_config/nvim/lua/plugins/git.lua +1 -0
  197. package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
  198. package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
  199. package/dot_config/nvim/lua/plugins/rust.lua +1 -0
  200. package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
  201. package/dot_config/nvim/lua/plugins/ui.lua +23 -51
  202. package/dot_config/paru/paru.conf +10 -0
  203. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  204. package/dot_config/pueue/pueue.yml +34 -0
  205. package/dot_config/raycast/README.md +1 -1
  206. package/dot_config/ripgrep/ripgreprc +21 -0
  207. package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
  208. package/dot_config/shell/05-core-safety.sh +47 -0
  209. package/dot_config/shell/10-secrets.sh +40 -0
  210. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  211. package/dot_config/shell/40-ls-colors.sh +48 -0
  212. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  213. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  214. package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
  215. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
  216. package/dot_config/shell/Brewfile.cli +8 -0
  217. package/dot_config/shell/README.md +9 -9
  218. package/dot_config/shell/als_data.txt.tmpl +65 -0
  219. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  220. package/dot_config/shell/custom/context_suggest.zsh +50 -50
  221. package/dot_config/shell/custom/error_analysis.zsh +29 -29
  222. package/dot_config/starship.toml.tmpl +85 -7
  223. package/dot_config/swaylock/config +43 -0
  224. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  225. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  226. package/dot_config/systemd/user/pueued.service +12 -0
  227. package/dot_config/systemd/user/ssh-agent.service +12 -0
  228. package/dot_config/tmux/tmux.conf.tmpl +80 -38
  229. package/dot_config/topgrade.toml.tmpl +54 -0
  230. package/dot_config/user-dirs.dirs +9 -0
  231. package/dot_config/vscode/settings.json.tmpl +9 -50
  232. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  233. package/dot_config/waybar/style.css.tmpl +211 -0
  234. package/dot_config/wezterm/wezterm.lua.tmpl +31 -203
  235. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  236. package/dot_config/yazi/keymap.toml +67 -0
  237. package/dot_config/yazi/theme.toml +102 -0
  238. package/dot_config/zathura/zathurarc +52 -0
  239. package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
  240. package/dot_config/zsh/dot_zprofile +1 -7
  241. package/dot_config/zsh/dot_zshenv +2 -3
  242. package/dot_config/zsh/dot_zshrc.tmpl +368 -69
  243. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  244. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
  245. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
  246. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  247. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
  248. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  249. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  250. package/dot_local/bin/executable_ai-update +195 -0
  251. package/dot_local/bin/executable_ai_core +113 -91
  252. package/dot_local/bin/executable_antigravity +11 -0
  253. package/dot_local/bin/executable_b64 +61 -36
  254. package/dot_local/bin/executable_bm +77 -0
  255. package/dot_local/bin/executable_cb +39 -0
  256. package/dot_local/bin/executable_dot +543 -132
  257. package/dot_local/bin/executable_dot-ai +36 -0
  258. package/dot_local/bin/executable_dot-bootstrap +77 -0
  259. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  260. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  261. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  262. package/dot_local/bin/executable_dot-theme-sync +952 -0
  263. package/dot_local/bin/executable_dot_completion +2 -0
  264. package/dot_local/bin/executable_dtags +28 -0
  265. package/dot_local/bin/executable_epoch +43 -38
  266. package/dot_local/bin/executable_extract +32 -99
  267. package/dot_local/bin/executable_gbd +52 -0
  268. package/dot_local/bin/executable_gd +42 -0
  269. package/dot_local/bin/executable_git-ai-commit +35 -20
  270. package/dot_local/bin/executable_git-ai-diff +33 -18
  271. package/dot_local/bin/executable_gl +101 -0
  272. package/dot_local/bin/executable_hash +56 -18
  273. package/dot_local/bin/executable_hashsum +160 -0
  274. package/dot_local/bin/executable_hex +44 -8
  275. package/dot_local/bin/executable_jsonv +34 -10
  276. package/dot_local/bin/executable_jwt +22 -6
  277. package/dot_local/bin/executable_kill-port +18 -2
  278. package/dot_local/bin/executable_lorem +21 -6
  279. package/dot_local/bin/executable_mkscript +35 -0
  280. package/dot_local/bin/executable_monitor +56 -0
  281. package/dot_local/bin/{executable_ip → executable_myip} +16 -2
  282. package/dot_local/bin/executable_notify +22 -0
  283. package/dot_local/bin/executable_open +36 -0
  284. package/dot_local/bin/executable_pw +27 -0
  285. package/dot_local/bin/executable_rec-start +46 -0
  286. package/dot_local/bin/executable_rec-stop +35 -0
  287. package/dot_local/bin/executable_regex +49 -13
  288. package/dot_local/bin/executable_start-niri +8 -0
  289. package/dot_local/bin/executable_tmux-sessionizer +276 -149
  290. package/dot_local/bin/executable_tour +112 -74
  291. package/dot_local/bin/executable_up +21 -0
  292. package/dot_local/bin/executable_update +45 -11
  293. package/dot_local/bin/executable_uuid +37 -7
  294. package/dot_local/bin/executable_win +32 -0
  295. package/dot_local/bin/executable_yamlv +25 -7
  296. package/dot_local/share/bash-completion/completions/dot +62 -44
  297. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  298. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  299. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  300. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  301. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  302. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  303. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  304. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  305. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  306. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  307. package/dot_local/share/man/man1/dot.1 +149 -0
  308. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  309. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  310. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  311. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  312. package/dot_local/share/zsh/completions/_dot +283 -0
  313. package/install.sh +297 -210
  314. package/package.json +17 -5
  315. package/scripts/ci/check-copyright-headers.sh +96 -0
  316. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  317. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  318. package/scripts/ci/validate-ci-config.sh +41 -39
  319. package/scripts/demo/record.sh +3 -2
  320. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  321. package/scripts/diagnostics/alias-governance.sh +137 -0
  322. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  323. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  324. package/scripts/diagnostics/benchmark.sh +209 -29
  325. package/scripts/diagnostics/conflicts.sh +72 -0
  326. package/scripts/diagnostics/doctor-unified.sh +38 -0
  327. package/scripts/diagnostics/doctor.sh +491 -65
  328. package/scripts/diagnostics/drift-dashboard.sh +17 -6
  329. package/scripts/diagnostics/health.sh +351 -110
  330. package/scripts/diagnostics/history-analysis.sh +12 -4
  331. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  332. package/scripts/diagnostics/perf.sh +225 -0
  333. package/scripts/diagnostics/scorecard.sh +118 -0
  334. package/scripts/diagnostics/secret-governance.sh +58 -0
  335. package/scripts/diagnostics/security-score.sh +139 -93
  336. package/scripts/diagnostics/smoke-test.sh +87 -0
  337. package/scripts/diagnostics/snapshot.sh +89 -0
  338. package/scripts/diagnostics/verify.sh +107 -0
  339. package/scripts/diagnostics/verify_state.sh +2 -2
  340. package/scripts/diagnostics/version-locks.sh +79 -0
  341. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  342. package/scripts/docs/build-manual.sh +883 -0
  343. package/scripts/docs/check-manual.sh +213 -0
  344. package/scripts/dot/commands/agent.sh +465 -0
  345. package/scripts/dot/commands/ai.sh +416 -0
  346. package/scripts/dot/commands/aliases.sh +250 -0
  347. package/scripts/dot/commands/appearance.sh +21 -4
  348. package/scripts/dot/commands/core.sh +59 -4
  349. package/scripts/dot/commands/diagnostics.sh +132 -3
  350. package/scripts/dot/commands/fleet.sh +399 -0
  351. package/scripts/dot/commands/lint.sh +177 -0
  352. package/scripts/dot/commands/manual.sh +168 -0
  353. package/scripts/dot/commands/meta.sh +148 -17
  354. package/scripts/dot/commands/patterns.sh +54 -0
  355. package/scripts/dot/commands/restore.sh +57 -35
  356. package/scripts/dot/commands/secrets.sh +151 -9
  357. package/scripts/dot/commands/security.sh +3 -0
  358. package/scripts/dot/commands/tools.sh +268 -27
  359. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  360. package/scripts/dot/lib/bento.sh +49 -0
  361. package/scripts/dot/lib/log.sh +194 -0
  362. package/scripts/dot/lib/platform.sh +98 -0
  363. package/scripts/dot/lib/ui.sh +507 -0
  364. package/scripts/dot/lib/utils.sh +318 -18
  365. package/scripts/fonts/install-nerd-fonts.sh +19 -10
  366. package/scripts/fonts/patch-fonts.sh +1 -0
  367. package/scripts/git-hooks/install.sh +11 -0
  368. package/scripts/git-hooks/pre-commit +12 -0
  369. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  370. package/scripts/git-hooks/pre-push +29 -0
  371. package/scripts/git-hooks/prepare-commit-msg +29 -0
  372. package/scripts/lib/secrets_provider.sh +158 -0
  373. package/scripts/maintenance/check-updates.sh +131 -0
  374. package/scripts/ops/ai-setup.sh +55 -0
  375. package/scripts/ops/bundle.sh +77 -0
  376. package/scripts/ops/chaos.sh +49 -0
  377. package/scripts/ops/chezmoi-apply.sh +245 -17
  378. package/scripts/ops/chezmoi-diff.sh +1 -0
  379. package/scripts/ops/chezmoi-remove.sh +2 -0
  380. package/scripts/ops/chezmoi-update.sh +34 -2
  381. package/scripts/ops/heal-chezmoi.sh +51 -0
  382. package/scripts/ops/heal-system.sh +128 -0
  383. package/scripts/ops/heal-tools.sh +340 -0
  384. package/scripts/ops/heal.sh +98 -342
  385. package/scripts/ops/post-apply-repair.sh +106 -0
  386. package/scripts/ops/prewarm.sh +127 -0
  387. package/scripts/ops/release.sh +252 -0
  388. package/scripts/ops/rollback.sh +86 -28
  389. package/scripts/ops/setup.sh +137 -0
  390. package/scripts/ops/teleport.sh +2 -1
  391. package/scripts/qa/coverage-baseline.sh +60 -0
  392. package/scripts/qa/docs-coverage.sh +111 -0
  393. package/scripts/qa/reliability-audit.sh +138 -0
  394. package/scripts/qa/traceability-coverage.sh +116 -0
  395. package/scripts/qa/validate-examples.sh +26 -0
  396. package/scripts/qa/wsl-contract.sh +11 -0
  397. package/scripts/release/package-policy-bundles.sh +125 -0
  398. package/scripts/secrets/age-init.sh +1 -0
  399. package/scripts/secrets/create-secrets-file.sh +1 -0
  400. package/scripts/secrets/encrypt-ssh-key.sh +1 -0
  401. package/scripts/security/backup.sh +44 -4
  402. package/scripts/security/dns-doh.sh +36 -14
  403. package/scripts/security/encryption-check.sh +27 -12
  404. package/scripts/security/enforce-policies.sh +11 -16
  405. package/scripts/security/firewall.sh +76 -20
  406. package/scripts/security/lock-configs.sh +2 -2
  407. package/scripts/security/lock-screen.sh +40 -18
  408. package/scripts/security/manage-secrets.sh +42 -29
  409. package/scripts/security/ssh-cert.sh +203 -0
  410. package/scripts/security/telemetry-kill.sh +40 -18
  411. package/scripts/security/usb-safety.sh +37 -15
  412. package/scripts/theme/apply-gnome-theme.sh +87 -56
  413. package/scripts/theme/extract-theme.py +677 -0
  414. package/scripts/theme/install-boot-logo.sh +1 -0
  415. package/scripts/theme/install-catppuccin-themes.sh +57 -33
  416. package/scripts/theme/install-cursors.sh +1 -0
  417. package/scripts/theme/install-file-icons.sh +1 -0
  418. package/scripts/theme/install-grub-theme.sh +11 -1
  419. package/scripts/theme/install-lock-icon.sh +1 -0
  420. package/scripts/theme/merge-wallpaper.sh +141 -0
  421. package/scripts/theme/rebuild-themes.sh +309 -0
  422. package/scripts/theme/switch.sh +308 -137
  423. package/scripts/theme/wallpaper-rotate.sh +66 -12
  424. package/scripts/theme/wallpaper-sync.sh +386 -31
  425. package/scripts/tools/cmatrix.sh +1 -0
  426. package/scripts/tools/detect-collisions.py +1 -1
  427. package/scripts/tools/emoji-picker.sh +4 -1
  428. package/scripts/tools/figlet-banner.sh +1 -0
  429. package/scripts/tools/log-rotate.sh +2 -1
  430. package/scripts/tools/lolcat-wrap.sh +1 -0
  431. package/scripts/tools/pipes.sh +1 -0
  432. package/scripts/tuning/linux.sh +23 -13
  433. package/scripts/tuning/macos.sh +13 -4
  434. package/scripts/uninstall.sh +85 -0
  435. package/scripts/version-sync.sh +487 -0
  436. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  437. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  438. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  439. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  440. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  441. package/templates/projects/go/README.md +1 -1
  442. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  443. package/templates/projects/go/go.sum +0 -0
  444. package/templates/projects/molecule/README.md +1 -1
  445. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  446. package/templates/projects/node/README.md +1 -1
  447. package/templates/projects/node/package-lock.json +12 -0
  448. package/templates/projects/node/src/index.js +1 -0
  449. package/templates/projects/packer/README.md +1 -1
  450. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  451. package/templates/projects/python/README.md +1 -1
  452. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  453. package/templates/projects/python/tests/test_basic.py +1 -0
  454. package/docs/ARCHITECTURE.md +0 -229
  455. package/docs/COMPLIANCE.md +0 -47
  456. package/docs/FEATURES.md +0 -166
  457. package/docs/FONTS.md +0 -147
  458. package/docs/INSTALL.md +0 -119
  459. package/docs/KEYS.md +0 -40
  460. package/docs/OPERATIONS.md +0 -130
  461. package/docs/PR_DESCRIPTION.md +0 -149
  462. package/docs/SECRETS.md +0 -76
  463. package/docs/SECURITY.md +0 -30
  464. package/docs/SECURITY_CHECKLIST.md +0 -25
  465. package/docs/TASK.md +0 -99
  466. package/docs/TESTING.md +0 -190
  467. package/docs/TOOLS.md +0 -146
  468. package/docs/UTILS.md +0 -105
  469. package/docs/WALKTHROUGH.md +0 -165
  470. package/dot_config/clippy.toml +0 -55
  471. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  472. package/dot_config/firefox/user.js +0 -8
  473. package/dot_config/git/config.tmpl +0 -77
  474. package/dot_config/go/aliases.sh +0 -61
  475. package/dot_config/go/env.sh +0 -24
  476. package/dot_config/ice/README.md +0 -13
  477. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  478. package/dot_config/lsd/config.yaml +0 -19
  479. package/dot_config/nvim/snippets/all.lua +0 -9
  480. package/dot_config/nvim/snippets/python.lua +0 -16
  481. package/dot_config/shell/00-container-detect.sh +0 -53
  482. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  483. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  484. package/dot_config/shell/90-theme-switch.sh +0 -70
  485. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  486. package/dot_config/waybar/style.css +0 -8
  487. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  488. package/dot_local/bin/executable_zig-install +0 -89
  489. package/dot_local/bin/voice_ops +0 -7
  490. package/scripts/ops/health-check.sh +0 -380
  491. package/scripts/tests/README.md +0 -241
  492. package/scripts/tests/benchmark.sh +0 -91
  493. package/scripts/tests/framework/assertions.sh +0 -283
  494. package/scripts/tests/framework/mocks.sh +0 -201
  495. package/scripts/tests/framework/test_runner.sh +0 -189
  496. package/scripts/tests/integration/test_install.sh +0 -237
  497. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  498. package/scripts/tests/performance/regression_check.sh +0 -73
  499. package/scripts/tests/performance/stress_test.sh +0 -65
  500. package/scripts/tests/test-aliases.sh +0 -25
  501. package/scripts/tests/test-docker.sh +0 -48
  502. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  503. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  504. package/scripts/tests/unit/test_backup.sh +0 -227
  505. package/scripts/tests/unit/test_case_functions.sh +0 -238
  506. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  507. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  508. package/scripts/tests/unit/test_encode64.sh +0 -67
  509. package/scripts/tests/unit/test_environment.sh +0 -78
  510. package/scripts/tests/unit/test_extract.sh +0 -163
  511. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  512. package/scripts/tests/unit/test_genpass.sh +0 -298
  513. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  514. package/scripts/tests/unit/test_installers.sh +0 -172
  515. package/scripts/tests/unit/test_keygen.sh +0 -68
  516. package/scripts/tests/unit/test_logging.sh +0 -96
  517. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  518. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  519. package/scripts/tests/unit/test_prependpath.sh +0 -66
  520. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  521. package/scripts/tests/unit/test_rd.sh +0 -230
  522. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  523. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  524. package/scripts/tests/unit/test_template_validation.sh +0 -238
  525. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  526. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  527. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  528. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  529. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  530. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  531. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  532. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  533. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  534. package/scripts/tests/unit/test_zipf.sh +0 -76
  535. /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
  536. /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
  537. /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
  538. /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
  539. /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
  540. /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
  541. /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
  542. /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
  543. /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
  544. /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
  545. /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
  546. /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## Package tracked governance artifacts into a release bundle.
4
+
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
9
+
10
+ OUTPUT_DIR="${OUTPUT_DIR:-$REPO_ROOT/dist/policy-bundles}"
11
+ BUNDLE_VERSION="${BUNDLE_VERSION:-$(jq -r '.schemaVersion' "$REPO_ROOT/dot_config/dotfiles/policy-bundles.json")}"
12
+ JSON_MODE=0
13
+
14
+ while [[ $# -gt 0 ]]; do
15
+ case "$1" in
16
+ --output-dir | -o)
17
+ OUTPUT_DIR="${2:-}"
18
+ shift 2
19
+ ;;
20
+ --version | -v)
21
+ BUNDLE_VERSION="${2:-}"
22
+ shift 2
23
+ ;;
24
+ --json | -j)
25
+ JSON_MODE=1
26
+ shift
27
+ ;;
28
+ *)
29
+ shift
30
+ ;;
31
+ esac
32
+ done
33
+
34
+ command -v jq >/dev/null 2>&1 || {
35
+ echo "jq is required for policy bundle packaging." >&2
36
+ exit 1
37
+ }
38
+
39
+ bundle_root="$OUTPUT_DIR/policy-bundles-$BUNDLE_VERSION"
40
+ archive_file="$OUTPUT_DIR/policy-bundles-$BUNDLE_VERSION.tar.gz"
41
+ checksum_file="$OUTPUT_DIR/policy-bundles-$BUNDLE_VERSION.sha256"
42
+
43
+ rm -rf "$bundle_root"
44
+ mkdir -p "$bundle_root/dot_config/dotfiles" "$bundle_root/.well-known" "$bundle_root/docs/security" "$bundle_root/docs/operations" "$bundle_root/docs/interop"
45
+
46
+ files=(
47
+ "dot_config/dotfiles/policy-bundles.json"
48
+ "dot_config/dotfiles/model-registry.json"
49
+ "dot_config/dotfiles/prompt-registry.json"
50
+ "dot_config/dotfiles/agent-profiles.json"
51
+ "dot_config/dotfiles/agent-card.json"
52
+ "dot_config/dotfiles/mcp-policy.json"
53
+ "dot_config/dotfiles/mcp-registry.json"
54
+ "dot_config/dotfiles/mcp-lock.json"
55
+ ".well-known/agent.json"
56
+ ".well-known/agent-card.json"
57
+ ".well-known/mcp/server-card.json"
58
+ "docs/security/MCP_POLICY.md"
59
+ "docs/operations/TRUSTED_AGENT_WORKSTATION.md"
60
+ "docs/interop/A2A.md"
61
+ )
62
+
63
+ for file in "${files[@]}"; do
64
+ [[ -f "$REPO_ROOT/$file" ]] || {
65
+ echo "Missing required policy bundle artifact: $file" >&2
66
+ exit 1
67
+ }
68
+ mkdir -p "$bundle_root/$(dirname "$file")"
69
+ cp "$REPO_ROOT/$file" "$bundle_root/$file"
70
+ done
71
+
72
+ jq empty "$bundle_root/dot_config/dotfiles/policy-bundles.json" >/dev/null
73
+ jq empty "$bundle_root/dot_config/dotfiles/model-registry.json" >/dev/null
74
+ jq empty "$bundle_root/dot_config/dotfiles/prompt-registry.json" >/dev/null
75
+ jq empty "$bundle_root/dot_config/dotfiles/agent-profiles.json" >/dev/null
76
+ jq empty "$bundle_root/dot_config/dotfiles/agent-card.json" >/dev/null
77
+ jq empty "$bundle_root/dot_config/dotfiles/mcp-policy.json" >/dev/null
78
+ jq empty "$bundle_root/dot_config/dotfiles/mcp-registry.json" >/dev/null
79
+ jq empty "$bundle_root/dot_config/dotfiles/mcp-lock.json" >/dev/null
80
+ jq empty "$bundle_root/.well-known/agent.json" >/dev/null
81
+
82
+ tar -C "$OUTPUT_DIR" -czf "$archive_file" "policy-bundles-$BUNDLE_VERSION"
83
+ sha256sum "$archive_file" >"$checksum_file"
84
+
85
+ # Generate CycloneDX SBOM
86
+ sbom_file="$bundle_root/sbom.cyclonedx.json"
87
+ if command -v syft >/dev/null 2>&1; then
88
+ syft dir:"$bundle_root" -o cyclonedx-json >"$sbom_file" 2>/dev/null
89
+ else
90
+ # Minimal CycloneDX manifest via jq
91
+ jq -n \
92
+ --arg version "$BUNDLE_VERSION" \
93
+ --arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
94
+ '{
95
+ bomFormat: "CycloneDX",
96
+ specVersion: "1.5",
97
+ version: 1,
98
+ metadata: {
99
+ timestamp: $timestamp,
100
+ component: {
101
+ type: "application",
102
+ name: "dotfiles-policy-bundles",
103
+ version: $version
104
+ }
105
+ },
106
+ components: []
107
+ }' >"$sbom_file"
108
+ fi
109
+
110
+ # Re-create archive with SBOM included
111
+ tar -C "$OUTPUT_DIR" -czf "$archive_file" "policy-bundles-$BUNDLE_VERSION"
112
+ sha256sum "$archive_file" >"$checksum_file"
113
+
114
+ if [[ "$JSON_MODE" -eq 1 ]]; then
115
+ jq -n \
116
+ --arg version "$BUNDLE_VERSION" \
117
+ --arg output_dir "$OUTPUT_DIR" \
118
+ --arg archive "$archive_file" \
119
+ --arg checksum "$checksum_file" \
120
+ --arg sbom "$sbom_file" \
121
+ '{version: $version, output_dir: $output_dir, archive: $archive, checksum: $checksum, sbom: $sbom}'
122
+ else
123
+ printf 'Policy bundle archive: %s\n' "$archive_file"
124
+ printf 'Policy bundle checksum: %s\n' "$checksum_file"
125
+ fi
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  set -euo pipefail
3
4
 
4
5
  SECRETS_DIR="$HOME/.config/chezmoi"
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  set -euo pipefail
3
4
 
4
5
  OUT_FILE="${1:-$HOME/.config/chezmoi/encrypted_secrets.env.age}"
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  set -euo pipefail
3
4
 
4
5
  KEY_PATH="${1:-$HOME/.ssh/id_ed25519}"
@@ -1,5 +1,45 @@
1
- #!/bin/sh
2
- set -e
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## Create compressed backup of home directory.
4
+ ##
5
+ ## Archives the home directory (excluding cache and trash) to a timestamped
6
+ # shellcheck disable=SC1091
7
+ ## .tgz file. Supports custom source and destination directories via
8
+ ## environment variables.
9
+ ##
10
+ ## # Usage
11
+ ## dot backup
12
+ ## DOTFILES_BACKUP_DIR=/mnt/backup dot backup
13
+ ##
14
+ ## # Dependencies
15
+ ## - tar: Archive creation
16
+ ##
17
+ ## # Environment Variables
18
+ ## | Variable | Default | Description |
19
+ ## |----------|---------|-------------|
20
+ ## | DOTFILES_BACKUP_DIR | ~/.backups | Backup destination |
21
+ ## | DOTFILES_BACKUP_SRC | ~/ | Source directory |
22
+ ##
23
+ ## # Platform Notes
24
+ ## - macOS: Uses BSD tar
25
+ ## - Linux: Uses GNU tar
26
+ ## - WSL: Backup stored in Linux filesystem for performance
27
+ ##
28
+ ## # Security
29
+ ## Does not encrypt backups. Use age/gpg for sensitive data.
30
+ ##
31
+ ## # Idempotency
32
+ ## Creates new timestamped backup on each run.
33
+
34
+ set -euo pipefail
35
+
36
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
37
+ # shellcheck source=../dot/lib/ui.sh
38
+ # shellcheck disable=SC1091
39
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
40
+
41
+ ui_init
42
+ ui_header "Backup"
3
43
 
4
44
  BACKUP_DIR="${DOTFILES_BACKUP_DIR:-$HOME/.backups}"
5
45
  SRC_DIR="${DOTFILES_BACKUP_SRC:-$HOME}"
@@ -9,9 +49,9 @@ OUT="$BACKUP_DIR/dotfiles-backup-$STAMP.tgz"
9
49
  mkdir -p "$BACKUP_DIR"
10
50
 
11
51
  if ! tar --exclude="$HOME/.cache" --exclude="$HOME/.local/share/Trash" -czf "$OUT" "$SRC_DIR"; then
12
- echo "[ERROR] Backup failed!" >&2
52
+ ui_err "Backup failed"
13
53
  rm -f "$OUT"
14
54
  exit 1
15
55
  fi
16
56
 
17
- echo "Backup written to: $OUT"
57
+ ui_ok "Backup written" "$OUT"
@@ -1,29 +1,51 @@
1
- #!/bin/sh
2
- set -e
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
3
4
 
4
- if [ "${DOTFILES_DOH:-}" != "1" ]; then
5
- echo "DoH script is disabled by default."
6
- echo "Re-run with DOTFILES_DOH=1 to apply."
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 "DNS-over-HTTPS"
23
+
24
+ if [[ "$DRY_RUN" -eq 1 ]]; then
25
+ ui_info "Mode" "dry-run (no changes will be made)"
26
+ elif [ "${DOTFILES_DOH:-}" != "1" ]; then
27
+ ui_warn "DoH" "disabled by default"
28
+ ui_info "Re-run" "DOTFILES_DOH=1"
7
29
  exit 1
8
30
  fi
9
31
 
10
- case "$(uname -s)" in
11
- Linux)
32
+ case "$(dot_platform_id)" in
33
+ linux | wsl)
12
34
  if command -v resolvectl >/dev/null; then
13
- echo "Enabling DNS-over-HTTPS with systemd-resolved (Cloudflare)..."
14
- sudo resolvectl dns-over-https on
15
- sudo resolvectl dns 1.1.1.1 1.0.0.1
35
+ ui_info "Enabling" "systemd-resolved DoH (Cloudflare)"
36
+ _run_cmd sudo resolvectl dns-over-https on
37
+ _run_cmd sudo resolvectl dns 1.1.1.1 1.0.0.1
16
38
  else
17
- echo "systemd-resolved not detected."
39
+ ui_err "systemd-resolved" "not detected"
18
40
  exit 1
19
41
  fi
20
42
  ;;
21
- Darwin)
22
- echo "Configure DoH in your browser (system-wide DoH requires profiles)."
43
+ macos)
44
+ ui_info "Configure" "DoH in your browser"
23
45
  exit 0
24
46
  ;;
25
47
  *)
26
- echo "Unsupported OS for DoH config."
48
+ ui_err "Unsupported OS" "DoH config"
27
49
  exit 1
28
50
  ;;
29
51
  esac
@@ -1,39 +1,54 @@
1
- #!/bin/sh
2
- set -e
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
3
4
 
4
- case "$(uname -s)" in
5
- Darwin)
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
+ ui_init
14
+ ui_header "Encryption Check"
15
+
16
+ case "$(dot_platform_id)" in
17
+ macos)
6
18
  if command -v fdesetup >/dev/null; then
7
19
  status=$(fdesetup status || true)
8
20
  echo "$status"
9
- echo "$status" | grep -qi "FileVault is On" && exit 0
10
- echo "Warning: FileVault appears to be off."
21
+ echo "$status" | grep -qi "FileVault is On" && {
22
+ ui_ok "FileVault" "On"
23
+ exit 0
24
+ }
25
+ ui_warn "FileVault" "appears to be off"
11
26
  exit 1
12
27
  else
13
- echo "fdesetup not found."
28
+ ui_err "fdesetup" "not found"
14
29
  exit 1
15
30
  fi
16
31
  ;;
17
- Linux)
32
+ linux | wsl)
18
33
  if command -v lsblk >/dev/null; then
19
34
  lsblk_output=$(lsblk -f)
20
35
  if command -v rg >/dev/null; then
21
36
  if echo "$lsblk_output" | rg -i "crypto|luks" >/dev/null; then
22
- echo "Encrypted block device detected (LUKS)."
37
+ ui_ok "LUKS" "encrypted block device detected"
23
38
  exit 0
24
39
  fi
25
40
  else
26
41
  if echo "$lsblk_output" | grep -Ei "crypto|luks" >/dev/null; then
27
- echo "Encrypted block device detected (LUKS)."
42
+ ui_ok "LUKS" "encrypted block device detected"
28
43
  exit 0
29
44
  fi
30
45
  fi
31
- echo "Warning: No LUKS/crypto volume detected."
46
+ ui_warn "LUKS" "no crypto volume detected"
32
47
  exit 1
33
48
  fi
34
49
  ;;
35
50
  *)
36
- echo "Unsupported OS for encryption check."
51
+ ui_err "Unsupported OS" "encryption check"
37
52
  exit 1
38
53
  ;;
39
54
  esac
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
3
  # Security Policy Enforcement Script
3
4
  # This script enforces security policies across the dotfiles repository
4
5
 
@@ -12,24 +13,18 @@ readonly REPO_ROOT
12
13
  readonly POLICIES_DIR="${REPO_ROOT}/.github/security-policies"
13
14
  readonly LOG_FILE="${REPO_ROOT}/.security-audit.log"
14
15
 
15
- # Color codes for output (respect NO_COLOR: https://no-color.org)
16
- if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
17
- readonly RED='\033[0;31m'
18
- readonly GREEN='\033[0;32m'
19
- readonly YELLOW='\033[1;33m'
20
- readonly NC='\033[0m'
21
- else
22
- readonly RED='' GREEN='' YELLOW='' NC=''
23
- fi
16
+ # shellcheck source=../dot/lib/ui.sh
17
+ # shellcheck disable=SC1091
18
+ source "${SCRIPT_DIR}/../dot/lib/ui.sh"
19
+ ui_init
24
20
 
25
- # Logging function
21
+ # Logging function (also writes to log file)
26
22
  log() {
27
23
  local level="$1"
28
24
  shift
29
25
  local message="$*"
30
26
  local timestamp
31
27
  timestamp=$(date -u '+%Y-%m-%d %H:%M:%S UTC')
32
-
33
28
  echo "[${timestamp}] [${level}] ${message}" | tee -a "${LOG_FILE}"
34
29
  }
35
30
 
@@ -113,7 +108,7 @@ check_file_permissions() {
113
108
  while IFS= read -r -d '' file; do
114
109
  if [[ -f "$file" ]]; then
115
110
  local perms
116
- perms=$(stat -c %a "$file" 2>/dev/null || stat -f %A "$file")
111
+ perms=$(stat -c %a "$file" 2>/dev/null || stat -f %OLp "$file")
117
112
  if [[ $perms -gt 755 ]]; then
118
113
  log "WARN" "❌ Overly permissive file: ${file} (${perms})"
119
114
  violations=$((violations + 1))
@@ -321,13 +316,13 @@ main() {
321
316
 
322
317
  # Final result
323
318
  if [[ $total_violations -eq 0 ]]; then
324
- echo -e "${GREEN}✅ All security checks passed!${NC}"
319
+ ui_ok "All security checks passed"
325
320
  log "INFO" "Security policy enforcement completed successfully"
326
321
  exit 0
327
322
  else
328
- echo -e "${RED}❌ Security policy enforcement failed with ${total_violations} violations${NC}"
329
- echo -e "${YELLOW}📋 Check ${LOG_FILE} for details${NC}"
330
- echo -e "${YELLOW}📋 Review security-report.md for summary${NC}"
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"
331
326
  log "ERROR" "Security policy enforcement failed with ${total_violations} violations"
332
327
  exit 1
333
328
  fi
@@ -1,34 +1,90 @@
1
- #!/bin/sh
2
- set -e
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.
3
36
 
4
- if [ "${DOTFILES_FIREWALL:-}" != "1" ]; then
5
- echo "Firewall script is disabled by default."
6
- echo "Re-run with DOTFILES_FIREWALL=1 to apply."
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"
7
63
  exit 1
8
64
  fi
9
65
 
10
- case "$(uname -s)" in
11
- Darwin)
12
- echo "Enabling macOS firewall..."
13
- sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
14
- sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsigned on
15
- sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsignedapp on
16
- sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
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
17
73
  ;;
18
- Linux)
74
+ linux | wsl)
19
75
  if command -v ufw >/dev/null; then
20
- echo "Enabling UFW..."
21
- sudo ufw default deny incoming
22
- sudo ufw default allow outgoing
23
- sudo ufw allow OpenSSH
24
- sudo ufw --force enable
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
25
81
  else
26
- echo "ufw not installed. Install ufw and re-run."
82
+ ui_err "ufw" "not installed; re-run after install"
27
83
  exit 1
28
84
  fi
29
85
  ;;
30
86
  *)
31
- echo "Unsupported OS for firewall setup."
87
+ ui_err "Unsupported OS" "firewall setup"
32
88
  exit 1
33
89
  ;;
34
90
  esac
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env bash
2
2
  # MIT License
3
- # Copyright (c) 2026 Sebastien Rousseau
3
+ # Copyright (c) 2026
4
4
  # See LICENSE file for details.
5
5
 
6
6
  # Script: lock-configs.sh
7
7
  # Description: Toggles immutability flags on critical configuration files.
8
8
  # Usage: lock-configs [lock|unlock]
9
9
 
10
- set -e
10
+ set -euo pipefail
11
11
 
12
12
  ACTION="${1:-lock}"
13
13
  CRITICAL_FILES=(
@@ -1,33 +1,55 @@
1
- #!/bin/sh
2
- set -e
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
3
4
 
4
- if [ "${DOTFILES_LOCK:-}" != "1" ]; then
5
- echo "Lock screen script is disabled by default."
6
- echo "Re-run with DOTFILES_LOCK=1 to apply."
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"
7
29
  exit 1
8
30
  fi
9
31
 
10
- case "$(uname -s)" in
11
- Linux)
32
+ case "$(dot_platform_id)" in
33
+ linux | wsl)
12
34
  if command -v gsettings >/dev/null; then
13
- echo "Enabling screen lock and idle timeout..."
14
- gsettings set org.gnome.desktop.screensaver lock-enabled true || true
15
- gsettings set org.gnome.desktop.session idle-delay 300 || true
16
- gsettings set org.gnome.desktop.screensaver lock-delay 0 || true
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
17
39
  else
18
- echo "gsettings not found."
40
+ ui_err "gsettings" "not found"
19
41
  exit 1
20
42
  fi
21
43
  ;;
22
- Darwin)
23
- echo "Enabling lock on sleep and screensaver (macOS)..."
24
- defaults write com.apple.screensaver askForPassword -int 1 || true
25
- defaults write com.apple.screensaver askForPasswordDelay -int 0 || true
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
26
48
  # 5-minute idle timeout
27
- defaults -currentHost write com.apple.screensaver idleTime -int 300 || true
49
+ _run_cmd defaults -currentHost write com.apple.screensaver idleTime -int 300 || true
28
50
  ;;
29
51
  *)
30
- echo "Unsupported OS for lock screen hardening."
52
+ ui_err "Unsupported OS" "lock screen hardening"
31
53
  exit 1
32
54
  ;;
33
55
  esac