@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,438 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## Security Score Assessment.
4
+ ##
5
+ ## Evaluates system security posture across encryption, SSH, Git, system
6
+ ## hardening, and secrets management. Returns a letter grade (A+ to F) with
7
+ ## actionable recommendations.
8
+ ##
9
+ ## # Usage
10
+ ## dot security-score [--verbose|-v] [--json|-j] [--quiet|-q]
11
+ ##
12
+ ## # Dependencies
13
+ ## - age: Encryption tool check
14
+ ## - sops: Secrets manager check
15
+ ## - gpg: Key management check
16
+ ## - git: Commit signing verification
17
+ ##
18
+ ## # Platform Notes
19
+ ## - macOS: Checks socketfilterfw, FileVault, Little Snitch
20
+ ## - Linux: Checks ufw/firewalld, LUKS encryption
21
+ ## - WSL: Checks host encryption, virtualization detection
22
+ ##
23
+ ## # Security
24
+ ## Does not modify system state. Read-only checks only.
25
+ ##
26
+ ## # Idempotency
27
+ ## Safe to run repeatedly. No side effects.
28
+
29
+ set -euo pipefail
30
+ set +o xtrace 2>/dev/null || true
31
+
32
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
+ # shellcheck source=../dot/lib/ui.sh
34
+ # shellcheck disable=SC1091
35
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
36
+
37
+ # Parse arguments
38
+ VERBOSE=true
39
+ JSON_OUTPUT=false
40
+ while [[ $# -gt 0 ]]; do
41
+ case "$1" in
42
+ --verbose | -v)
43
+ VERBOSE=true
44
+ shift
45
+ ;;
46
+ --quiet | -q)
47
+ VERBOSE=false
48
+ shift
49
+ ;;
50
+ --json | -j)
51
+ JSON_OUTPUT=true
52
+ shift
53
+ ;;
54
+ *) shift ;;
55
+ esac
56
+ done
57
+
58
+ ui_init
59
+ NC="${NORMAL}"
60
+ RED="${RED:-}"
61
+ GREEN="${GREEN:-}"
62
+ YELLOW="${YELLOW:-}"
63
+
64
+ # Scoring
65
+ TOTAL_POINTS=0
66
+ MAX_POINTS=0
67
+ declare -A CATEGORY_SCORES
68
+
69
+ add_points() {
70
+ local category="$1"
71
+ local points="$2"
72
+ local max="$3"
73
+ local description="$4"
74
+
75
+ TOTAL_POINTS=$((TOTAL_POINTS + points))
76
+ MAX_POINTS=$((MAX_POINTS + max))
77
+ CATEGORY_SCORES["$category"]=$((${CATEGORY_SCORES[$category]:-0} + points))
78
+
79
+ if ! $JSON_OUTPUT && $VERBOSE; then
80
+ local icon
81
+ local color=""
82
+ if [[ $points -eq $max ]]; then
83
+ icon="✓"
84
+ color="$GREEN"
85
+ elif [[ $points -gt 0 ]]; then
86
+ icon="◐"
87
+ color="$YELLOW"
88
+ else
89
+ icon="✗"
90
+ color="$RED"
91
+ fi
92
+
93
+ if [[ "$UI_ENABLED" = "1" ]]; then
94
+ ui_status "$icon" "[OK]" "$description" "$points/$max pts" "$color"
95
+ else
96
+ ui_bullet "$description ($points/$max pts)"
97
+ fi
98
+ fi
99
+ }
100
+
101
+ print_header() {
102
+ if ! $JSON_OUTPUT; then
103
+ echo ""
104
+ ui_dot_banner "Diagnostics"
105
+ ui_header "Security Score Assessment"
106
+ echo ""
107
+ fi
108
+ }
109
+
110
+ section() {
111
+ if ! $JSON_OUTPUT; then
112
+ echo ""
113
+ ui_section "$1"
114
+ if [[ "$UI_ENABLED" != "1" ]]; then
115
+ echo "───────────────────────────────────────────────"
116
+ fi
117
+ fi
118
+ }
119
+
120
+ # === Security Checks ===
121
+
122
+ check_encryption() {
123
+ section "Encryption (30 pts max)"
124
+
125
+ # Age encryption tool
126
+ if command -v age >/dev/null 2>&1; then
127
+ add_points "encryption" 5 5 "Age encryption installed"
128
+ else
129
+ add_points "encryption" 0 5 "Age encryption installed"
130
+ fi
131
+
132
+ # Age key exists
133
+ if [[ -f "${HOME}/.config/chezmoi/key.txt" ]]; then
134
+ add_points "encryption" 5 5 "Age encryption key present"
135
+
136
+ # Check key permissions
137
+ local perms
138
+ perms=$(stat -c "%a" "${HOME}/.config/chezmoi/key.txt" 2>/dev/null || stat -f "%OLp" "${HOME}/.config/chezmoi/key.txt" 2>/dev/null)
139
+ if [[ "$perms" == "600" ]]; then
140
+ add_points "encryption" 5 5 "Key file permissions (600)"
141
+ else
142
+ add_points "encryption" 2 5 "Key file permissions (600)"
143
+ fi
144
+ else
145
+ add_points "encryption" 0 10 "Age encryption configured"
146
+ fi
147
+
148
+ # SOPS available
149
+ if command -v sops >/dev/null 2>&1; then
150
+ add_points "encryption" 5 5 "SOPS secrets manager"
151
+ else
152
+ add_points "encryption" 0 5 "SOPS secrets manager"
153
+ fi
154
+
155
+ # GPG available
156
+ if command -v gpg >/dev/null 2>&1 && gpg --list-secret-keys 2>/dev/null | grep -q sec; then
157
+ add_points "encryption" 10 10 "GPG keys configured"
158
+ elif command -v gpg >/dev/null 2>&1; then
159
+ add_points "encryption" 3 10 "GPG keys configured"
160
+ else
161
+ add_points "encryption" 0 10 "GPG keys configured"
162
+ fi
163
+ }
164
+
165
+ check_ssh() {
166
+ section "SSH Security (25 pts max)"
167
+
168
+ # SSH directory permissions
169
+ if [[ -d "${HOME}/.ssh" ]]; then
170
+ local ssh_perms
171
+ ssh_perms=$(stat -c "%a" "${HOME}/.ssh" 2>/dev/null || stat -f "%OLp" "${HOME}/.ssh" 2>/dev/null)
172
+ if [[ "$ssh_perms" == "700" ]]; then
173
+ add_points "ssh" 5 5 "SSH directory permissions (700)"
174
+ else
175
+ add_points "ssh" 2 5 "SSH directory permissions (700)"
176
+ fi
177
+ else
178
+ add_points "ssh" 0 5 "SSH directory exists"
179
+ fi
180
+
181
+ # ED25519 key (preferred over RSA)
182
+ if [[ -f "${HOME}/.ssh/id_ed25519" ]]; then
183
+ add_points "ssh" 10 10 "ED25519 SSH key (modern)"
184
+ elif [[ -f "${HOME}/.ssh/id_rsa" ]]; then
185
+ add_points "ssh" 5 10 "SSH key present (RSA)"
186
+ else
187
+ add_points "ssh" 0 10 "SSH key present"
188
+ fi
189
+
190
+ # SSH agent
191
+ if [[ -n "${SSH_AUTH_SOCK:-}" ]] || pgrep -x ssh-agent >/dev/null 2>&1; then
192
+ add_points "ssh" 5 5 "SSH agent running"
193
+ else
194
+ add_points "ssh" 0 5 "SSH agent running"
195
+ fi
196
+
197
+ # SSH config exists
198
+ if [[ -f "${HOME}/.ssh/config" ]]; then
199
+ add_points "ssh" 5 5 "SSH config present"
200
+ else
201
+ add_points "ssh" 2 5 "SSH config present"
202
+ fi
203
+ }
204
+
205
+ check_git() {
206
+ section "Git Security (20 pts max)"
207
+
208
+ # Git installed
209
+ if ! command -v git >/dev/null 2>&1; then
210
+ add_points "git" 0 20 "Git installed"
211
+ return
212
+ fi
213
+
214
+ # Commit signing
215
+ if git config --global commit.gpgsign 2>/dev/null | grep -q true; then
216
+ add_points "git" 10 10 "Commit signing enabled"
217
+ else
218
+ add_points "git" 0 10 "Commit signing enabled"
219
+ fi
220
+
221
+ # User identity configured
222
+ if git config --global user.email >/dev/null 2>&1 && git config --global user.name >/dev/null 2>&1; then
223
+ add_points "git" 5 5 "Git identity configured"
224
+ else
225
+ add_points "git" 0 5 "Git identity configured"
226
+ fi
227
+
228
+ # Credential helper
229
+ if git config --global credential.helper >/dev/null 2>&1; then
230
+ add_points "git" 5 5 "Credential helper configured"
231
+ else
232
+ add_points "git" 0 5 "Credential helper configured"
233
+ fi
234
+ }
235
+
236
+ check_system() {
237
+ section "System Security (15 pts max)"
238
+
239
+ # Firewall (macOS or Linux)
240
+ if [[ "$(uname)" == "Darwin" ]]; then
241
+ if /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate 2>/dev/null | grep -q enabled; then
242
+ add_points "system" 5 5 "Firewall enabled"
243
+ elif pgrep -x "Little Snitch" >/dev/null 2>&1 || [[ -d "/Applications/Little Snitch.app" ]]; then
244
+ add_points "system" 5 5 "Firewall enabled (Little Snitch)"
245
+ else
246
+ add_points "system" 0 5 "Firewall enabled"
247
+ fi
248
+ else
249
+ # Check ufw via systemctl (doesn't need sudo) or sudo ufw status
250
+ local fw_enabled=false
251
+ if systemctl is-active --quiet ufw 2>/dev/null; then
252
+ fw_enabled=true
253
+ elif command -v ufw >/dev/null 2>&1 && sudo -n ufw status 2>/dev/null | grep -q "Status: active"; then
254
+ fw_enabled=true
255
+ elif command -v firewall-cmd >/dev/null 2>&1 && firewall-cmd --state 2>/dev/null | grep -q running; then
256
+ fw_enabled=true
257
+ fi
258
+
259
+ if $fw_enabled; then
260
+ add_points "system" 5 5 "Firewall enabled"
261
+ else
262
+ add_points "system" 0 5 "Firewall enabled"
263
+ fi
264
+ fi
265
+
266
+ # Disk encryption (LUKS, FileVault, or ecryptfs)
267
+ if [[ "$(uname)" == "Darwin" ]]; then
268
+ if fdesetup status 2>/dev/null | grep -q "FileVault is On"; then
269
+ add_points "system" 10 10 "Disk encryption (FileVault)"
270
+ else
271
+ add_points "system" 0 10 "Disk encryption (FileVault)"
272
+ fi
273
+ else
274
+ local encryption_found=false
275
+ # Check LUKS
276
+ if lsblk 2>/dev/null | grep -q crypt || [[ -d /sys/block/dm-0 ]]; then
277
+ encryption_found=true
278
+ add_points "system" 10 10 "Disk encryption (LUKS)"
279
+ # Check Apple T2 chip (hardware SSD encryption)
280
+ elif lspci 2>/dev/null | grep -qi "T2.*Secure Enclave"; then
281
+ encryption_found=true
282
+ add_points "system" 10 10 "Hardware encryption (Apple T2)"
283
+ # Check ecryptfs (encrypted home)
284
+ elif mount 2>/dev/null | grep -q ecryptfs || [[ -d "$HOME/.ecryptfs" ]]; then
285
+ encryption_found=true
286
+ add_points "system" 10 10 "Home encryption (ecryptfs)"
287
+ # Check if running in encrypted VM/container
288
+ elif [[ -f /sys/class/dmi/id/product_name ]] && grep -qiE "virtual|vmware|kvm|qemu" /sys/class/dmi/id/product_name 2>/dev/null; then
289
+ encryption_found=true
290
+ add_points "system" 10 10 "Virtualized (host encryption)"
291
+ fi
292
+
293
+ if ! $encryption_found; then
294
+ add_points "system" 0 10 "Disk encryption"
295
+ fi
296
+ fi
297
+ }
298
+
299
+ check_secrets() {
300
+ section "Secrets Management (10 pts max)"
301
+
302
+ # No secrets in dotfiles repo
303
+ if [[ -d "${HOME}/.dotfiles" ]]; then
304
+ local secrets_found=false
305
+ local match=""
306
+ # Check for common secret patterns, ignore templates/placeholders and variable expansions.
307
+ match=$(grep -rE "(api_key|api_secret|password|token)[[:space:]]*=[[:space:]]*['\"][^'\"]+['\"]" \
308
+ "${HOME}/.dotfiles" --include="*.sh" --include="*.zsh" --include="*.toml" 2>/dev/null |
309
+ grep -v "example\\|template\\|placeholder" | grep -F -v "\${" | head -1 || true)
310
+ if [[ -n "$match" ]]; then
311
+ secrets_found=true
312
+ fi
313
+
314
+ if $secrets_found; then
315
+ add_points "secrets" 0 5 "No hardcoded secrets"
316
+ else
317
+ add_points "secrets" 5 5 "No hardcoded secrets"
318
+ fi
319
+ else
320
+ add_points "secrets" 5 5 "No hardcoded secrets"
321
+ fi
322
+
323
+ # Environment variables for secrets
324
+ if [[ -f "${HOME}/.config/secrets/api-keys.env" ]] || [[ -d "${HOME}/.config/secrets" ]]; then
325
+ add_points "secrets" 5 5 "Secrets in dedicated location"
326
+ else
327
+ add_points "secrets" 2 5 "Secrets management setup"
328
+ fi
329
+ }
330
+
331
+ print_summary() {
332
+ local score=$((TOTAL_POINTS * 100 / MAX_POINTS))
333
+
334
+ if $JSON_OUTPUT; then
335
+ echo "{"
336
+ echo " \"score\": $score,"
337
+ echo " \"points\": $TOTAL_POINTS,"
338
+ echo " \"max_points\": $MAX_POINTS,"
339
+ echo " \"grade\": \"$(get_grade $score)\","
340
+ echo " \"categories\": {"
341
+ local first=true
342
+ for cat in "${!CATEGORY_SCORES[@]}"; do
343
+ $first || echo ","
344
+ first=false
345
+ printf " \"%s\": %d" "$cat" "${CATEGORY_SCORES[$cat]}"
346
+ done
347
+ echo ""
348
+ echo " }"
349
+ echo "}"
350
+ return
351
+ fi
352
+
353
+ echo ""
354
+ ui_header "Security Score"
355
+ echo ""
356
+
357
+ local bar_width=28
358
+ local filled=$((score * bar_width / 100))
359
+ local empty=$((bar_width - filled))
360
+ local block="#"
361
+ local pad="-"
362
+
363
+ local grade
364
+ grade=$(get_grade $score)
365
+
366
+ printf " Score: "
367
+ if [[ $score -ge 80 ]]; then
368
+ printf '%s' "${GREEN}"
369
+ elif [[ $score -ge 60 ]]; then
370
+ printf '%s' "${YELLOW}"
371
+ else
372
+ printf '%s' "${RED}"
373
+ fi
374
+ printf "%${filled}s" | tr ' ' "$block"
375
+ printf '%s' "${NC}"
376
+ printf "%${empty}s" | tr ' ' "$pad"
377
+ printf " %s%% Grade: %s\n" "${score}" "${grade}"
378
+
379
+ printf '%b\n' "\n Points: ${TOTAL_POINTS}/${MAX_POINTS}"
380
+ echo ""
381
+
382
+ # Recommendations
383
+ if [[ $score -lt 100 ]]; then
384
+ ui_header "Recommendations"
385
+ if ! command -v age >/dev/null 2>&1; then
386
+ ui_bullet "Install age for encryption: brew install age"
387
+ fi
388
+ if ! command -v sops >/dev/null 2>&1; then
389
+ ui_bullet "Install SOPS for secrets: brew install sops"
390
+ fi
391
+ if ! git config --global commit.gpgsign 2>/dev/null | grep -q true; then
392
+ ui_bullet "Enable commit signing: git config --global commit.gpgsign true"
393
+ fi
394
+ if [[ ! -f "${HOME}/.ssh/id_ed25519" ]]; then
395
+ ui_bullet "Generate ED25519 SSH key: ssh-keygen -t ed25519"
396
+ fi
397
+ echo ""
398
+ fi
399
+ }
400
+
401
+ get_grade() {
402
+ local score=$1
403
+ if [[ $score -ge 95 ]]; then
404
+ echo "A+"
405
+ elif [[ $score -ge 90 ]]; then
406
+ echo "A"
407
+ elif [[ $score -ge 85 ]]; then
408
+ echo "A-"
409
+ elif [[ $score -ge 80 ]]; then
410
+ echo "B+"
411
+ elif [[ $score -ge 75 ]]; then
412
+ echo "B"
413
+ elif [[ $score -ge 70 ]]; then
414
+ echo "B-"
415
+ elif [[ $score -ge 65 ]]; then
416
+ echo "C+"
417
+ elif [[ $score -ge 60 ]]; then
418
+ echo "C"
419
+ elif [[ $score -ge 55 ]]; then
420
+ echo "C-"
421
+ elif [[ $score -ge 50 ]]; then
422
+ echo "D"
423
+ else
424
+ echo "F"
425
+ fi
426
+ }
427
+
428
+ # Main
429
+ export LANG="${LANG:-en_US.UTF-8}"
430
+ export LC_ALL="${LC_ALL:-en_US.UTF-8}"
431
+
432
+ print_header
433
+ check_encryption
434
+ check_ssh
435
+ check_git
436
+ check_system
437
+ check_secrets
438
+ print_summary
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Smoke tests to quickly verify toolchain health after installation/updates.
4
+
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ # shellcheck source=../dot/lib/ui.sh
9
+ # shellcheck disable=SC1091
10
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
11
+ ui_init
12
+
13
+ ui_header "Dotfiles Smoke Tests"
14
+
15
+ declare -i passed=0
16
+ declare -i failed=0
17
+
18
+ check_cmd() {
19
+ local cmd="$1"
20
+ if command -v "$cmd" >/dev/null 2>&1; then
21
+ return 0
22
+ fi
23
+ if command -v mise >/dev/null 2>&1; then
24
+ if mise ls --installed 2>/dev/null | grep -qE "($cmd|aqua:.*$cmd)"; then
25
+ return 0
26
+ fi
27
+ fi
28
+ return 1
29
+ }
30
+
31
+ verify_cmd() {
32
+ local cmd="$1"
33
+ local expected_output="${2:-}"
34
+
35
+ if ! check_cmd "$cmd"; then
36
+ ui_err "$cmd" "not found"
37
+ failed+=1
38
+ return 1
39
+ fi
40
+
41
+ if [[ -n "$expected_output" ]]; then
42
+ local output
43
+ # shellcheck disable=SC2015
44
+ output=$($cmd --version 2>&1 || $cmd version 2>&1 || true)
45
+ if echo "$output" | grep -q "$expected_output"; then
46
+ ui_ok "$cmd"
47
+ passed+=1
48
+ else
49
+ ui_err "$cmd" "output mismatch"
50
+ failed+=1
51
+ fi
52
+ else
53
+ ui_ok "$cmd"
54
+ passed+=1
55
+ fi
56
+ }
57
+
58
+ # Core utilities
59
+ verify_cmd "git" "git version"
60
+ verify_cmd "zsh" "zsh"
61
+ verify_cmd "chezmoi" "chezmoi version"
62
+
63
+ # Rust Toolchain / Frontier
64
+ verify_cmd "rg" "ripgrep"
65
+ verify_cmd "bat" "bat"
66
+ verify_cmd "eza" "eza"
67
+ verify_cmd "zoxide" "zoxide"
68
+ verify_cmd "zellij" "zellij"
69
+ verify_cmd "shfmt" "3."
70
+
71
+ # Process management
72
+ verify_cmd "pueue" "pueue"
73
+
74
+ # AI Tools
75
+ # Prevent sgpt from prompting for a key by piping empty string
76
+ export OPENAI_API_KEY="sk-placeholder-for-testing"
77
+ verify_cmd "sgpt" "ShellGPT"
78
+ verify_cmd "copilot" "copilot"
79
+ verify_cmd "kiro-cli" "kiro-cli"
80
+
81
+ echo ""
82
+ if [[ $failed -eq 0 ]]; then
83
+ ui_ok "All $passed tests passed"
84
+ else
85
+ ui_err "$failed failed" "$passed passed"
86
+ exit 1
87
+ fi
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Snapshot current system/tooling state
4
+ # Usage: dot snapshot [--baseline|-b] [--force|-f]
5
+
6
+ set -euo pipefail
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ # shellcheck source=../dot/lib/ui.sh
10
+ # shellcheck disable=SC1091
11
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
12
+
13
+ ui_init
14
+
15
+ BASELINE=false
16
+ FORCE=false
17
+ while [[ $# -gt 0 ]]; do
18
+ case "$1" in
19
+ --baseline | -b)
20
+ BASELINE=true
21
+ shift
22
+ ;;
23
+ --force | -f)
24
+ FORCE=true
25
+ shift
26
+ ;;
27
+ *) shift ;;
28
+ esac
29
+ done
30
+
31
+ STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles/snapshots"
32
+ mkdir -p "$STATE_DIR"
33
+
34
+ if $BASELINE; then
35
+ output="$STATE_DIR/baseline.json"
36
+ else
37
+ output="$STATE_DIR/snapshot_$(date +%Y%m%d_%H%M%S).json"
38
+ fi
39
+
40
+ if [[ -f "$output" && "$FORCE" != "true" ]]; then
41
+ ui_warn "Snapshot" "${output} already exists (use --force)"
42
+ exit 0
43
+ fi
44
+
45
+ safe() { printf '%s' "$1" | sed 's/"/\\"/g'; }
46
+
47
+ get_version() {
48
+ local cmd="$1"
49
+ if command -v "$cmd" >/dev/null 2>&1; then
50
+ "$cmd" --version 2>/dev/null | head -1 | awk '{print $NF}'
51
+ else
52
+ echo ""
53
+ fi
54
+ }
55
+
56
+ os_name=$(uname -s 2>/dev/null || echo "unknown")
57
+ kernel=$(uname -r 2>/dev/null || echo "unknown")
58
+ shell_name=$(basename "${SHELL:-}" 2>/dev/null || echo "")
59
+
60
+ dot_version=""
61
+ if [[ -f "$SCRIPT_DIR/../../package.json" ]]; then
62
+ dot_version=$(sed -n 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"\([0-9.]*\)".*/\1/p' "$SCRIPT_DIR/../../package.json" | head -1)
63
+ fi
64
+
65
+ cat >"$output" <<JSON
66
+ {
67
+ "timestamp": "$(date -Iseconds)",
68
+ "os": "$(safe "$os_name")",
69
+ "kernel": "$(safe "$kernel")",
70
+ "shell": "$(safe "$shell_name")",
71
+ "dotfiles_version": "$(safe "$dot_version")",
72
+ "tools": {
73
+ "chezmoi": "$(safe "$(get_version chezmoi)")",
74
+ "git": "$(safe "$(get_version git)")",
75
+ "zsh": "$(safe "$(get_version zsh)")",
76
+ "node": "$(safe "$(get_version node)")",
77
+ "python": "$(safe "$(python3 --version 2>/dev/null | awk '{print $2}')")",
78
+ "rustc": "$(safe "$(rustc --version 2>/dev/null | awk '{print $2}')")",
79
+ "go": "$(safe "$(go version 2>/dev/null | awk '{print $3}')")",
80
+ "nvim": "$(safe "$(nvim --version 2>/dev/null | head -1 | awk '{print $2}')")",
81
+ "tmux": "$(safe "$(tmux -V 2>/dev/null | awk '{print $2}')")",
82
+ "starship": "$(safe "$(get_version starship)")",
83
+ "mise": "$(safe "$(get_version mise)")"
84
+ }
85
+ }
86
+ JSON
87
+
88
+ ui_dot_banner "Diagnostics"
89
+ ui_ok "Snapshot" "$output"