@sebastienrousseau/dotfiles 0.2.499 → 0.2.500

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/CHANGELOG.md +375 -0
  2. package/LICENSE +1283 -0
  3. package/README.md +284 -0
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +4 -3
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +78 -0
  9. package/docs/adr/ADR-001-ci-cd-pipeline.md +101 -0
  10. package/docs/adr/ADR-002-shell-performance.md +121 -0
  11. package/docs/adr/ADR-003-security-first.md +140 -0
  12. package/docs/adr/ADR-004-cli-architecture.md +157 -0
  13. package/docs/adr/ADR-005-chezmoi-choice.md +89 -0
  14. package/docs/adr/ADR-006-shell-selection.md +115 -0
  15. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  16. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  17. package/docs/adr/README.md +32 -0
  18. package/docs/architecture/ARCHITECTURE.md +113 -0
  19. package/docs/architecture/INTEROP.md +36 -0
  20. package/docs/architecture/REPO_LAYOUT.md +237 -0
  21. package/docs/architecture/WALKTHROUGH.md +82 -0
  22. package/docs/architecture/fleet-deployment.md +73 -0
  23. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  24. package/docs/archive/LEGACY_ROADMAP.md +142 -0
  25. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  26. package/docs/{PLAN.md → archive/PLAN.md} +4 -4
  27. package/docs/archive/REPO_AUDIT.md +23 -0
  28. package/docs/guides/INSTALL.md +140 -0
  29. package/docs/guides/NEOVIM_IDE_GUIDE.md +52 -0
  30. package/docs/guides/THEMING.md +222 -0
  31. package/docs/guides/TROUBLESHOOTING.md +148 -0
  32. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +723 -0
  33. package/docs/index.md +39 -0
  34. package/docs/interop/A2A.md +32 -0
  35. package/docs/manual/00-introduction.md +85 -0
  36. package/docs/manual/01-concepts/01-architecture.md +134 -0
  37. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  38. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  39. package/docs/manual/01-concepts/04-fleet.md +142 -0
  40. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  41. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  42. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  43. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  44. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  45. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  46. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  47. package/docs/manual/03-reference/02-config-files.md +259 -0
  48. package/docs/manual/03-reference/03-environment.md +120 -0
  49. package/docs/manual/03-reference/04-templates.md +184 -0
  50. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  51. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  52. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  53. package/docs/manual/04-cookbook/03-faq.md +167 -0
  54. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  55. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  56. package/docs/manual/05-appendices/C-glossary.md +36 -0
  57. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  58. package/docs/manual/05-appendices/E-license.md +34 -0
  59. package/docs/manual/_toc.yml +58 -0
  60. package/docs/manual/command-index.md +58 -0
  61. package/docs/manual/concept-index.md +164 -0
  62. package/docs/operations/ATTESTATION.md +39 -0
  63. package/docs/operations/MAINTENANCE.md +59 -0
  64. package/docs/operations/MIGRATION.md +101 -0
  65. package/docs/operations/OPERATIONS.md +164 -0
  66. package/docs/operations/RELIABILITY.md +116 -0
  67. package/docs/{ROADMAP.md → operations/ROADMAP.md} +22 -22
  68. package/docs/operations/TESTING.md +195 -0
  69. package/docs/operations/TRACEABILITY.md +31 -0
  70. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  71. package/docs/operations/VERSION_SYNC.md +344 -0
  72. package/docs/reference/ALIASES.md +124 -0
  73. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  74. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  75. package/docs/reference/FEATURES.md +62 -0
  76. package/docs/reference/FONTS.md +108 -0
  77. package/docs/reference/PROFILES.md +65 -0
  78. package/docs/reference/SCREENSHOTS.md +117 -0
  79. package/docs/reference/SCRIPTS.md +67 -0
  80. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  81. package/docs/reference/THEMES.md +113 -0
  82. package/docs/reference/TOOLS.md +105 -0
  83. package/docs/reference/UTILS.md +151 -0
  84. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  85. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  86. package/docs/security/COMPLIANCE.md +453 -0
  87. package/docs/security/ENCRYPTION.md +52 -0
  88. package/docs/security/FMEA.md +155 -0
  89. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  90. package/docs/security/KEYS.md +45 -0
  91. package/docs/security/KEY_ROTATION.md +219 -0
  92. package/docs/security/MCP_POLICY.md +69 -0
  93. package/docs/security/POLICY_RELEASES.md +33 -0
  94. package/docs/security/README.md +24 -0
  95. package/docs/security/SECRETS.md +146 -0
  96. package/docs/security/SECURITY.md +41 -0
  97. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  98. package/docs/security/SOUP_REGISTER.md +32 -0
  99. package/docs/security/THREAT_MODEL.md +120 -0
  100. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  101. package/docs/themes/README.md +6 -0
  102. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  103. package/docs/themes/hero-shot.svg +78 -0
  104. package/dot_config/.module-manifest.json +69 -0
  105. package/dot_config/ai/identity.md +20 -0
  106. package/dot_config/ai/patterns/architect.md +14 -0
  107. package/dot_config/ai/patterns/hardener.md +13 -0
  108. package/dot_config/ai/patterns/refactor.md +13 -0
  109. package/dot_config/aider/aider.conf.yml +32 -0
  110. package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
  111. package/dot_config/ansible/ansible.cfg +11 -0
  112. package/dot_config/atuin/config.toml +40 -0
  113. package/dot_config/bat/config +23 -0
  114. package/dot_config/brave-flags.conf.tmpl +7 -0
  115. package/dot_config/btop/btop.conf +16 -0
  116. package/dot_config/btop/themes/tokyonight.theme +34 -0
  117. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  118. package/dot_config/claude/mcp_servers.json +20 -0
  119. package/dot_config/containers/containers.conf +14 -0
  120. package/dot_config/curl/dot_curlrc +18 -0
  121. package/dot_config/dlv/config.yml +39 -0
  122. package/dot_config/docker/config.json +15 -0
  123. package/dot_config/dotfiles/agent-card.json +29 -0
  124. package/dot_config/dotfiles/agent-profiles.json +92 -0
  125. package/dot_config/dotfiles/boot/README.md +11 -0
  126. package/dot_config/dotfiles/grub/README.md +11 -0
  127. package/dot_config/dotfiles/lock/README.md +11 -0
  128. package/dot_config/dotfiles/mcp-lock.json +33 -0
  129. package/dot_config/dotfiles/mcp-policy.json +52 -0
  130. package/dot_config/dotfiles/mcp-registry.json +47 -0
  131. package/dot_config/dotfiles/model-registry.json +20 -0
  132. package/dot_config/dotfiles/policy-bundles.json +38 -0
  133. package/dot_config/dotfiles/prompt-registry.json +16 -0
  134. package/dot_config/dotfiles/versions.env +18 -0
  135. package/dot_config/duf/duf.conf +6 -0
  136. package/dot_config/duti/defaults.duti +5 -0
  137. package/dot_config/emoji/emoji.txt +34 -0
  138. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  139. package/dot_config/environment.d/90-wayland.conf +19 -0
  140. package/dot_config/fastfetch/config.jsonc +28 -0
  141. package/dot_config/firefox/user.js.tmpl +58 -0
  142. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  143. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  144. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  145. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  146. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  147. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  148. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  149. package/dot_config/fish/config.fish.tmpl +44 -0
  150. package/dot_config/fish/fish_plugins +1 -0
  151. package/dot_config/fish/functions/_.fish +3 -0
  152. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  153. package/dot_config/fish/functions/als.fish +46 -0
  154. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  155. package/dot_config/fish/functions/c.fish +3 -0
  156. package/dot_config/fish/functions/cat.fish +9 -0
  157. package/dot_config/fish/functions/d.fish +7 -0
  158. package/dot_config/fish/functions/dot.fish +34 -0
  159. package/dot_config/fish/functions/h.fish +3 -0
  160. package/dot_config/fish/functions/l.fish +7 -0
  161. package/dot_config/fish/functions/la.fish +7 -0
  162. package/dot_config/fish/functions/ll.fish +7 -0
  163. package/dot_config/fish/functions/log_error.fish +13 -0
  164. package/dot_config/fish/functions/log_info.fish +13 -0
  165. package/dot_config/fish/functions/lr.fish +7 -0
  166. package/dot_config/fish/functions/lra.fish +7 -0
  167. package/dot_config/fish/functions/ls.fish +7 -0
  168. package/dot_config/fish/functions/lt.fish +7 -0
  169. package/dot_config/fish/functions/lta.fish +7 -0
  170. package/dot_config/fish/functions/notify-run.fish +11 -0
  171. package/dot_config/fish/functions/q.fish +3 -0
  172. package/dot_config/fish/functions/silent-run.fish +7 -0
  173. package/dot_config/fish/functions/yy.fish +8 -0
  174. package/dot_config/flatpak/flatpak.list +4 -0
  175. package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
  176. package/dot_config/foot/foot.ini.tmpl +33 -0
  177. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  178. package/dot_config/fzf/fzf.zsh +48 -0
  179. package/dot_config/gem/gemrc +9 -0
  180. package/dot_config/gh/config.yml +12 -0
  181. package/dot_config/ghostty/config.tmpl +165 -0
  182. package/dot_config/git/allowed_signers.tmpl +18 -0
  183. package/dot_config/git/attributes +12 -0
  184. package/dot_config/git/commit-template +10 -0
  185. package/dot_config/git/ignore +27 -0
  186. package/dot_config/gnupg/gpg-agent.conf +11 -0
  187. package/dot_config/go/golangci.yml +118 -0
  188. package/dot_config/go/gopls.json +30 -0
  189. package/dot_config/goose/config.yaml +29 -0
  190. package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
  191. package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
  192. package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
  193. package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
  194. package/dot_config/htop/htoprc +20 -0
  195. package/dot_config/inputrc +2 -0
  196. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  197. package/dot_config/just/justfile +122 -0
  198. package/dot_config/k9s/config.yaml +65 -0
  199. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  200. package/dot_config/kanshi/config.tmpl +22 -0
  201. package/dot_config/karabiner/karabiner.json +14 -0
  202. package/dot_config/kitty/kitty.conf.tmpl +53 -0
  203. package/dot_config/lazydocker/config.yml +186 -0
  204. package/dot_config/lazygit/config.yml +35 -0
  205. package/dot_config/mako/config +47 -0
  206. package/dot_config/mas/masapps.txt +5 -0
  207. package/dot_config/micro/settings.json +3 -0
  208. package/dot_config/mimeapps.list +77 -0
  209. package/dot_config/minikube/config.json +13 -0
  210. package/dot_config/mise/config.toml +99 -0
  211. package/dot_config/mongosh/mongoshrc.js +68 -0
  212. package/dot_config/mpv/input.conf +47 -0
  213. package/dot_config/mpv/mpv.conf +47 -0
  214. package/dot_config/mycli/myclirc +67 -0
  215. package/dot_config/nano/nanorc +28 -0
  216. package/dot_config/ncdu/config +12 -0
  217. package/dot_config/niri/config.kdl.tmpl +327 -0
  218. package/dot_config/nushell/aliases.nu +18 -0
  219. package/dot_config/nushell/completions.nu.tmpl +52 -0
  220. package/dot_config/nushell/config.nu.tmpl +86 -0
  221. package/dot_config/nushell/env.nu.tmpl +94 -0
  222. package/dot_config/nushell/functions.nu.tmpl +17 -0
  223. package/dot_config/nvim/init.lua +18 -0
  224. package/dot_config/nvim/lazy-lock.json +58 -0
  225. package/dot_config/nvim/lua/config/autocmds.lua +107 -0
  226. package/dot_config/nvim/lua/config/keymaps.lua +92 -0
  227. package/dot_config/nvim/lua/config/lazy.lua +44 -0
  228. package/dot_config/nvim/lua/config/options.lua +49 -0
  229. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  230. package/dot_config/nvim/lua/plugins/coding.lua +216 -0
  231. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  232. package/dot_config/nvim/lua/plugins/dap.lua +412 -0
  233. package/dot_config/nvim/lua/plugins/editor.lua +55 -0
  234. package/dot_config/nvim/lua/plugins/git.lua +10 -0
  235. package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
  236. package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
  237. package/dot_config/nvim/lua/plugins/rust.lua +34 -0
  238. package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
  239. package/dot_config/nvim/lua/plugins/ui.lua +509 -0
  240. package/dot_config/paru/paru.conf +10 -0
  241. package/dot_config/pip/pip.conf.tmpl +32 -0
  242. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  243. package/dot_config/pueue/pueue.yml +34 -0
  244. package/dot_config/pypoetry/config.toml +6 -0
  245. package/dot_config/pyrightconfig.json +5 -0
  246. package/dot_config/raycast/README.md +13 -0
  247. package/dot_config/redis/redisclirc +41 -0
  248. package/dot_config/ripgrep/ripgreprc +21 -0
  249. package/dot_config/shell/00-core-paths.sh.tmpl +133 -0
  250. package/dot_config/shell/05-core-safety.sh +47 -0
  251. package/dot_config/shell/10-secrets.sh +40 -0
  252. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  253. package/dot_config/shell/40-ls-colors.sh +48 -0
  254. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  255. package/dot_config/shell/50-logic-functions.sh.tmpl +10 -0
  256. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  257. package/dot_config/shell/90-ux-aliases.sh.tmpl +120 -0
  258. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +54 -0
  259. package/dot_config/shell/Brewfile +207 -0
  260. package/dot_config/shell/Brewfile.cask +92 -0
  261. package/dot_config/shell/Brewfile.cli +127 -0
  262. package/dot_config/shell/README.md +267 -0
  263. package/dot_config/shell/als_data.txt.tmpl +65 -0
  264. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  265. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  266. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  267. package/dot_config/sops/dot_sops.yaml +23 -0
  268. package/dot_config/starship.toml.tmpl +202 -0
  269. package/dot_config/swaylock/config +43 -0
  270. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  271. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  272. package/dot_config/systemd/user/pueued.service +12 -0
  273. package/dot_config/systemd/user/ssh-agent.service +12 -0
  274. package/dot_config/task/Taskfile.yml +86 -0
  275. package/dot_config/tflint/tflint.hcl +9 -0
  276. package/dot_config/tmux/tmux.conf.tmpl +223 -0
  277. package/dot_config/topgrade.toml.tmpl +54 -0
  278. package/dot_config/user-dirs.dirs +9 -0
  279. package/dot_config/vscode/extensions.txt +11 -0
  280. package/dot_config/vscode/settings.json.tmpl +82 -0
  281. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  282. package/dot_config/waybar/style.css.tmpl +211 -0
  283. package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
  284. package/dot_config/wget/wgetrc +12 -0
  285. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  286. package/dot_config/yarn/yarnrc.yml +36 -0
  287. package/dot_config/yazi/keymap.toml +67 -0
  288. package/dot_config/yazi/theme.toml +102 -0
  289. package/dot_config/yazi/yazi.toml +40 -0
  290. package/dot_config/zathura/zathurarc +52 -0
  291. package/dot_config/zellij/config.kdl.tmpl +79 -0
  292. package/dot_config/zsh/dot_zprofile +7 -0
  293. package/dot_config/zsh/dot_zshenv +5 -0
  294. package/dot_config/zsh/dot_zshrc.tmpl +498 -0
  295. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  296. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
  297. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  298. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  299. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +194 -0
  300. package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
  301. package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
  302. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  303. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  304. package/dot_local/bin/executable_ai-update +195 -0
  305. package/dot_local/bin/executable_ai_core +152 -0
  306. package/dot_local/bin/executable_antigravity +11 -0
  307. package/dot_local/bin/executable_b64 +84 -0
  308. package/dot_local/bin/executable_bm +77 -0
  309. package/dot_local/bin/executable_cb +39 -0
  310. package/dot_local/bin/executable_dot +589 -0
  311. package/dot_local/bin/executable_dot-ai +36 -0
  312. package/dot_local/bin/executable_dot-bootstrap +77 -0
  313. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  314. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  315. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  316. package/dot_local/bin/executable_dot-theme-sync +952 -0
  317. package/dot_local/bin/executable_dot_completion +57 -0
  318. package/dot_local/bin/executable_dtags +28 -0
  319. package/dot_local/bin/executable_epoch +67 -0
  320. package/dot_local/bin/executable_extract +41 -0
  321. package/dot_local/bin/executable_gbd +52 -0
  322. package/dot_local/bin/executable_gd +42 -0
  323. package/dot_local/bin/executable_git-ai-commit +175 -0
  324. package/dot_local/bin/executable_git-ai-diff +169 -0
  325. package/dot_local/bin/executable_gl +101 -0
  326. package/dot_local/bin/executable_hash +161 -0
  327. package/dot_local/bin/executable_hashsum +160 -0
  328. package/dot_local/bin/executable_hex +115 -0
  329. package/dot_local/bin/executable_jsonv +78 -0
  330. package/dot_local/bin/executable_jwt +94 -0
  331. package/dot_local/bin/executable_kill-port +75 -0
  332. package/dot_local/bin/executable_lorem +118 -0
  333. package/dot_local/bin/executable_mkscript +35 -0
  334. package/dot_local/bin/executable_monitor +56 -0
  335. package/dot_local/bin/executable_myip +51 -0
  336. package/dot_local/bin/executable_notify +22 -0
  337. package/dot_local/bin/executable_open +36 -0
  338. package/dot_local/bin/executable_pw +27 -0
  339. package/dot_local/bin/executable_rec-start +46 -0
  340. package/dot_local/bin/executable_rec-stop +35 -0
  341. package/dot_local/bin/executable_regex +132 -0
  342. package/dot_local/bin/executable_start-niri +8 -0
  343. package/dot_local/bin/executable_tmux-sessionizer +314 -0
  344. package/dot_local/bin/executable_tour +175 -0
  345. package/dot_local/bin/executable_up +21 -0
  346. package/dot_local/bin/executable_update +142 -0
  347. package/dot_local/bin/executable_uuid +87 -0
  348. package/dot_local/bin/executable_win +32 -0
  349. package/dot_local/bin/executable_yamlv +57 -0
  350. package/dot_local/share/bash-completion/completions/dot +72 -0
  351. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  352. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  353. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  354. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  355. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  356. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  357. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  358. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  359. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  360. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  361. package/dot_local/share/man/man1/dot.1 +149 -0
  362. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  363. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  364. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  365. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  366. package/dot_local/share/zsh/completions/.keep +0 -0
  367. package/dot_local/share/zsh/completions/_dot +283 -0
  368. package/install.sh +342 -0
  369. package/package.json +1 -1
  370. package/scripts/ci/check-copyright-headers.sh +96 -0
  371. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  372. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  373. package/scripts/ci/validate-ci-config.sh +224 -0
  374. package/scripts/demo/record.sh +42 -0
  375. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  376. package/scripts/diagnostics/alias-governance.sh +137 -0
  377. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  378. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  379. package/scripts/diagnostics/benchmark.sh +381 -0
  380. package/scripts/diagnostics/conflicts.sh +72 -0
  381. package/scripts/diagnostics/doctor-unified.sh +38 -0
  382. package/scripts/diagnostics/doctor.sh +541 -0
  383. package/scripts/diagnostics/drift-dashboard.sh +37 -0
  384. package/scripts/diagnostics/health.sh +597 -0
  385. package/scripts/diagnostics/history-analysis.sh +85 -0
  386. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  387. package/scripts/diagnostics/perf.sh +225 -0
  388. package/scripts/diagnostics/scorecard.sh +118 -0
  389. package/scripts/diagnostics/secret-governance.sh +58 -0
  390. package/scripts/diagnostics/security-score.sh +438 -0
  391. package/scripts/diagnostics/smoke-test.sh +87 -0
  392. package/scripts/diagnostics/snapshot.sh +89 -0
  393. package/scripts/diagnostics/verify.sh +107 -0
  394. package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
  395. package/scripts/diagnostics/version-locks.sh +79 -0
  396. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  397. package/scripts/docs/build-manual.sh +883 -0
  398. package/scripts/docs/check-manual.sh +213 -0
  399. package/scripts/dot/commands/agent.sh +465 -0
  400. package/scripts/dot/commands/ai.sh +416 -0
  401. package/scripts/dot/commands/aliases.sh +250 -0
  402. package/scripts/dot/commands/appearance.sh +80 -0
  403. package/scripts/dot/commands/core.sh +185 -0
  404. package/scripts/dot/commands/diagnostics.sh +229 -0
  405. package/scripts/dot/commands/fleet.sh +399 -0
  406. package/scripts/dot/commands/lint.sh +177 -0
  407. package/scripts/dot/commands/manual.sh +168 -0
  408. package/scripts/dot/commands/meta.sh +248 -0
  409. package/scripts/dot/commands/patterns.sh +54 -0
  410. package/scripts/dot/commands/restore.sh +231 -0
  411. package/scripts/dot/commands/secrets.sh +223 -0
  412. package/scripts/dot/commands/security.sh +76 -0
  413. package/scripts/dot/commands/tools.sh +469 -0
  414. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  415. package/scripts/dot/lib/bento.sh +49 -0
  416. package/scripts/dot/lib/log.sh +194 -0
  417. package/scripts/dot/lib/platform.sh +98 -0
  418. package/scripts/dot/lib/ui.sh +507 -0
  419. package/scripts/dot/lib/utils.sh +372 -0
  420. package/scripts/fonts/install-nerd-fonts.sh +68 -0
  421. package/scripts/fonts/patch-fonts.sh +35 -0
  422. package/scripts/git-hooks/install.sh +11 -0
  423. package/scripts/git-hooks/pre-commit +12 -0
  424. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  425. package/scripts/git-hooks/pre-push +29 -0
  426. package/scripts/git-hooks/prepare-commit-msg +29 -0
  427. package/scripts/lib/secrets_provider.sh +158 -0
  428. package/scripts/maintenance/check-updates.sh +131 -0
  429. package/scripts/ops/ai-setup.sh +55 -0
  430. package/scripts/ops/bundle.sh +77 -0
  431. package/scripts/ops/chaos.sh +49 -0
  432. package/scripts/ops/chezmoi-apply.sh +270 -0
  433. package/scripts/ops/chezmoi-diff.sh +15 -0
  434. package/scripts/ops/chezmoi-remove.sh +45 -0
  435. package/scripts/ops/chezmoi-update.sh +48 -0
  436. package/scripts/ops/heal-chezmoi.sh +51 -0
  437. package/scripts/ops/heal-system.sh +128 -0
  438. package/scripts/ops/heal-tools.sh +340 -0
  439. package/scripts/ops/heal.sh +222 -0
  440. package/scripts/ops/post-apply-repair.sh +106 -0
  441. package/scripts/ops/prewarm.sh +127 -0
  442. package/scripts/ops/release.sh +252 -0
  443. package/scripts/ops/rollback.sh +589 -0
  444. package/scripts/ops/setup.sh +137 -0
  445. package/scripts/ops/teleport.sh +33 -0
  446. package/scripts/qa/coverage-baseline.sh +60 -0
  447. package/scripts/qa/docs-coverage.sh +111 -0
  448. package/scripts/qa/reliability-audit.sh +138 -0
  449. package/scripts/qa/traceability-coverage.sh +116 -0
  450. package/scripts/qa/validate-examples.sh +26 -0
  451. package/scripts/qa/wsl-contract.sh +11 -0
  452. package/scripts/release/package-policy-bundles.sh +125 -0
  453. package/scripts/secrets/age-init.sh +70 -0
  454. package/scripts/secrets/create-secrets-file.sh +45 -0
  455. package/scripts/secrets/encrypt-ssh-key.sh +43 -0
  456. package/scripts/security/backup.sh +57 -0
  457. package/scripts/security/dns-doh.sh +51 -0
  458. package/scripts/security/encryption-check.sh +54 -0
  459. package/scripts/security/enforce-policies.sh +334 -0
  460. package/scripts/security/firewall.sh +90 -0
  461. package/scripts/security/lock-configs.sh +57 -0
  462. package/scripts/security/lock-screen.sh +55 -0
  463. package/scripts/security/manage-secrets.sh +428 -0
  464. package/scripts/security/ssh-cert.sh +203 -0
  465. package/scripts/security/telemetry-kill.sh +50 -0
  466. package/scripts/security/usb-safety.sh +51 -0
  467. package/scripts/theme/apply-gnome-theme.sh +328 -0
  468. package/scripts/theme/extract-theme.py +677 -0
  469. package/scripts/theme/install-boot-logo.sh +62 -0
  470. package/scripts/theme/install-catppuccin-themes.sh +370 -0
  471. package/scripts/theme/install-cursors.sh +25 -0
  472. package/scripts/theme/install-file-icons.sh +26 -0
  473. package/scripts/theme/install-grub-theme.sh +61 -0
  474. package/scripts/theme/install-lock-icon.sh +30 -0
  475. package/scripts/theme/merge-wallpaper.sh +141 -0
  476. package/scripts/theme/rebuild-themes.sh +309 -0
  477. package/scripts/theme/switch.sh +421 -0
  478. package/scripts/theme/wallpaper-rotate.sh +136 -0
  479. package/scripts/theme/wallpaper-sync.sh +397 -0
  480. package/scripts/tools/cmatrix.sh +21 -0
  481. package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
  482. package/scripts/tools/emoji-picker.sh +48 -0
  483. package/scripts/tools/figlet-banner.sh +18 -0
  484. package/scripts/tools/log-rotate.sh +30 -0
  485. package/scripts/tools/lolcat-wrap.sh +19 -0
  486. package/scripts/tools/pipes.sh +48 -0
  487. package/scripts/tuning/linux.sh +185 -0
  488. package/scripts/tuning/macos.sh +55 -0
  489. package/scripts/uninstall.sh +85 -0
  490. package/scripts/version-sync.sh +487 -0
  491. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  492. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  493. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  494. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  495. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  496. package/templates/projects/go/README.md +4 -0
  497. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  498. package/templates/projects/go/go.sum +0 -0
  499. package/templates/projects/molecule/README.md +7 -0
  500. package/templates/projects/molecule/converge.yml +7 -0
  501. package/templates/projects/molecule/molecule.yml +16 -0
  502. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  503. package/templates/projects/node/README.md +4 -0
  504. package/templates/projects/node/package-lock.json +12 -0
  505. package/templates/projects/node/src/index.js +1 -0
  506. package/templates/projects/packer/README.md +15 -0
  507. package/templates/projects/packer/main.pkr.hcl +15 -0
  508. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  509. package/templates/projects/python/README.md +4 -0
  510. package/templates/projects/python/pyproject.toml +15 -0
  511. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  512. package/templates/projects/python/tests/test_basic.py +1 -0
  513. package/docs/ARCHITECTURE.md +0 -62
  514. package/docs/COMPLIANCE.md +0 -47
  515. package/docs/OPERATIONS.md +0 -103
  516. package/docs/PR_DESCRIPTION.md +0 -150
  517. package/docs/ROADMAP_legacy.md +0 -556
  518. package/docs/SECURITY_CHECKLIST.md +0 -25
  519. package/docs/TASK.md +0 -99
  520. package/docs/WALKTHROUGH.md +0 -46
  521. package/scripts/backup.sh +0 -142
  522. package/scripts/banner.sh +0 -20
  523. package/scripts/benchmark.sh +0 -20
  524. package/scripts/build.sh +0 -41
  525. package/scripts/clean.sh +0 -31
  526. package/scripts/compile.sh +0 -54
  527. package/scripts/copy.sh +0 -108
  528. package/scripts/doctor.sh +0 -79
  529. package/scripts/dotfiles.sh +0 -63
  530. package/scripts/download.sh +0 -35
  531. package/scripts/help.sh +0 -57
  532. package/scripts/lock-configs.sh +0 -57
  533. package/scripts/package.sh +0 -46
  534. package/scripts/ssh.sh +0 -55
  535. package/scripts/teleport.sh +0 -23
  536. package/scripts/test-aliases.sh +0 -25
  537. package/scripts/test_smoke.sh +0 -88
  538. package/scripts/unpack.sh +0 -28
@@ -0,0 +1,575 @@
1
+ # Incident Response Plan
2
+
3
+ Incident response procedures for the dotfiles repository. Covers supply chain compromise, secrets exposure, configuration drift, tool tampering, and CI pipeline attacks. Based on NIST SP 800-61 Rev. 2 (Computer Security Incident Handling Guide).
4
+
5
+ ## Purpose and Scope
6
+
7
+ This plan defines the detection, triage, containment, eradication, recovery, and post-mortem procedures for security incidents affecting the dotfiles distribution.
8
+
9
+ ### In Scope
10
+
11
+ | Domain | Description |
12
+ |--------|-------------|
13
+ | Supply chain | Dependency tampering in Homebrew, Nix, Zinit, Neovim plugins, npm, pip |
14
+ | Secrets exposure | API keys, SSH keys, tokens leaked to git history, shell history, or logs |
15
+ | Configuration drift | Unauthorized changes to deployed dotfiles, chezmoi apply failures |
16
+ | Tool compromise | Malicious updates to mise, Nix, or Homebrew-managed binaries |
17
+ | CI pipeline | GitHub Actions workflow tampering, compromised action dependencies |
18
+
19
+ ### Out of Scope
20
+
21
+ | Domain | Reason |
22
+ |--------|--------|
23
+ | Operating system vulnerabilities | Managed by OS vendor security updates |
24
+ | Hardware compromise | Physical security is outside repository scope |
25
+ | Third-party SaaS breaches | Upstream provider responsibility (1Password, GitHub) |
26
+
27
+ ---
28
+
29
+ ## Severity Classification Matrix
30
+
31
+ Severity levels and response times align with the Vulnerability Response SLA defined in [COMPLIANCE.md](COMPLIANCE.md).
32
+
33
+ | Severity | Definition | Examples | Initial Response | Resolution Target |
34
+ |----------|------------|----------|------------------|-------------------|
35
+ | **Critical** | Active exploitation or secrets exposed in public repository | Leaked API key in git history; compromised CI workflow pushing malicious code; active credential abuse | 24 hours | 48 hours |
36
+ | **High** | Confirmed compromise with no evidence of active exploitation | Unsigned commits merged to main; supply chain dependency with known CVE; tampered binary in PATH | 72 hours | 7 days |
37
+ | **Medium** | Policy violation or misconfiguration with limited blast radius | Chezmoi apply drift on non-sensitive config; TLS bypass pattern in script; stale Nix flake lock | 5 business days | 30 days |
38
+ | **Low** | Informational finding, hardening opportunity, or cosmetic policy gap | Missing CODEOWNERS entry; advisory shellcheck warning; outdated pinned version | 10 business days | 90 days |
39
+
40
+ ---
41
+
42
+ ## Incident Response Phases
43
+
44
+ ### Phase 1: Detection
45
+
46
+ Identify the incident through automated or manual signals.
47
+
48
+ **Automated detection sources:**
49
+
50
+ | Source | Signal | Tool |
51
+ |--------|--------|------|
52
+ | Pre-commit hooks | Blocked secret, insecure pattern | Gitleaks, detect-secrets, compliance-guard |
53
+ | CI pipeline | Failed security scan, unsigned commit | `security-enhanced.yml`, `compliance-guard.yml` |
54
+ | Nightly checks | Dependency version drift, CVE match | `nightly.yml` |
55
+ | CodeQL | Static analysis finding | `codeql.yml` |
56
+ | Audit log | Unexpected operation | `dot audit` (`~/.local/share/dotfiles.log`) |
57
+
58
+ **Manual detection signals:**
59
+
60
+ - Unexpected `chezmoi diff` output on a clean system
61
+ - Unrecognized entries in `git log --show-signature`
62
+ - Binary hash mismatch for tools in `~/.local/bin`
63
+ - Shell startup latency spike (possible injected sourcing)
64
+
65
+ ### Phase 2: Triage
66
+
67
+ Classify the incident severity and assign ownership.
68
+
69
+ ```bash
70
+ # Gather initial evidence
71
+ dot audit | tail -50
72
+ git log --oneline --show-signature -20
73
+ chezmoi diff
74
+ chezmoi verify
75
+
76
+ # Check for secrets in recent history
77
+ gitleaks detect --source . --log-opts="-20"
78
+
79
+ # Validate binary integrity
80
+ mise ls --current
81
+ nix flake metadata
82
+ ```
83
+
84
+ **Triage decision tree:**
85
+
86
+ 1. Are credentials or secrets exposed publicly? -> **Critical**
87
+ 2. Is a signed commit chain broken? -> **High**
88
+ 3. Is the CI pipeline producing unexpected artifacts? -> **High**
89
+ 4. Is configuration drift limited to non-sensitive files? -> **Medium**
90
+ 5. Is the finding advisory with no active risk? -> **Low**
91
+
92
+ ### Phase 3: Containment
93
+
94
+ Stop the incident from spreading. Actions depend on severity.
95
+
96
+ **Immediate containment (Critical/High):**
97
+
98
+ ```bash
99
+ # Revoke exposed credentials
100
+ dot secrets rotate --all-exposed
101
+
102
+ # Revoke SSH certificates
103
+ dot ssh-cert revoke
104
+
105
+ # Lock configuration files to prevent further modification
106
+ lock-configs
107
+
108
+ # Disable compromised CI workflow
109
+ gh workflow disable <workflow-name>
110
+
111
+ # Force-protect the main branch
112
+ gh api repos/{owner}/{repo}/branches/master/protection \
113
+ --method PUT \
114
+ --field required_status_checks='{"strict":true,"contexts":["ci"]}' \
115
+ --field enforce_admins=true
116
+ ```
117
+
118
+ **Short-term containment (Medium/Low):**
119
+
120
+ ```bash
121
+ # Pin the affected dependency to a known-good version
122
+ # In .chezmoidata.toml or flake.nix, revert to last verified version
123
+
124
+ # Re-apply known-good configuration
125
+ chezmoi apply --force
126
+
127
+ # Clear potentially tainted caches
128
+ rm -rf ~/.cache/shell/
129
+ ```
130
+
131
+ ### Phase 4: Eradication
132
+
133
+ Remove the root cause of the incident.
134
+
135
+ | Incident Type | Eradication Action |
136
+ |---------------|-------------------|
137
+ | Secrets in git history | Rewrite history with `git filter-repo`; rotate all exposed credentials |
138
+ | Compromised dependency | Pin to patched version; update `flake.lock` or `lazy-lock.json` |
139
+ | Unsigned commits | Rebase and re-sign the commit chain; enforce branch protection |
140
+ | Tampered binary | Reinstall from verified source; validate checksums |
141
+ | CI workflow compromise | Audit workflow diff; re-pin actions to verified SHA; rotate `GITHUB_TOKEN` |
142
+
143
+ ### Phase 5: Recovery
144
+
145
+ Restore normal operations and verify integrity.
146
+
147
+ ```bash
148
+ # Re-apply dotfiles from clean source
149
+ chezmoi init --apply
150
+
151
+ # Verify deployed state matches source
152
+ chezmoi verify
153
+
154
+ # Run full test suite
155
+ ./tests/framework/test_runner.sh
156
+
157
+ # Run compliance checks
158
+ pre-commit run --all-files
159
+
160
+ # Validate system health
161
+ dot health
162
+ dot doctor
163
+
164
+ # Confirm audit log captures recovery
165
+ dot audit | tail -20
166
+ ```
167
+
168
+ ### Phase 6: Post-Mortem
169
+
170
+ Conduct a structured review within 5 business days of resolution. Use the [Post-Incident Review Template](#post-incident-review-template) below.
171
+
172
+ ---
173
+
174
+ ## Runbooks
175
+
176
+ ### Runbook 1: Secrets Leaked to Git History
177
+
178
+ **Detection:** Gitleaks pre-commit hook, TruffleHog CI scan, or manual discovery.
179
+
180
+ ```bash
181
+ # Step 1: Identify exposed secrets
182
+ gitleaks detect --source . --verbose --report-path /tmp/gitleaks-report.json
183
+
184
+ # Step 2: Determine exposure window
185
+ git log --all --oneline --diff-filter=A -- '**/.*env*' '**/*key*' '**/*token*'
186
+
187
+ # Step 3: Rotate all exposed credentials immediately
188
+ # API keys: regenerate in provider dashboard
189
+ # SSH keys: generate new keypair and update authorized_keys
190
+ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new
191
+ # Tokens: revoke and reissue via provider
192
+
193
+ # Step 4: Remove secrets from git history
194
+ git filter-repo --invert-paths --path <file-containing-secret>
195
+
196
+ # Step 5: Force-push cleaned history (requires branch protection override)
197
+ git push origin --force --all
198
+
199
+ # Step 6: Notify GitHub to purge cached views
200
+ # Open a support ticket at https://support.github.com for cache invalidation
201
+
202
+ # Step 7: Update Gitleaks baseline
203
+ gitleaks detect --source . --baseline-path config/gitleaks-baseline.json
204
+
205
+ # Step 8: Verify clean state
206
+ gitleaks detect --source . --verbose
207
+ ```
208
+
209
+ **Post-action:** Add the leaked pattern to `config/gitleaks.toml` allowlist if it was a false positive, or add a new rule if the pattern was not previously covered.
210
+
211
+ ### Runbook 2: Supply Chain Compromise
212
+
213
+ **Detection:** CVE advisory, unexpected binary behavior, hash mismatch, or `nightly.yml` alert.
214
+
215
+ ```bash
216
+ # Step 1: Identify the compromised package
217
+ mise ls --current
218
+ brew list --versions
219
+ nix flake metadata
220
+
221
+ # Step 2: Check upstream advisories
222
+ gh api /advisories --jq '.[] | select(.package.name == "<package>")'
223
+
224
+ # Step 3: Pin to last known-good version
225
+ # For Nix: revert flake.lock to known-good commit
226
+ git checkout <known-good-commit> -- flake.lock
227
+ nix flake lock --update-input nixpkgs
228
+
229
+ # For Homebrew: pin the formula
230
+ brew pin <formula>
231
+
232
+ # For mise: set explicit version
233
+ mise use <tool>@<safe-version>
234
+
235
+ # Step 4: Verify integrity of installed binary
236
+ sha256sum "$(which <tool>)"
237
+ # Compare against published checksums from upstream release
238
+
239
+ # Step 5: Re-apply configuration with clean dependencies
240
+ chezmoi apply --force
241
+
242
+ # Step 6: Run full test suite to detect behavioral changes
243
+ ./tests/framework/test_runner.sh
244
+ ```
245
+
246
+ ### Runbook 3: Configuration Drift
247
+
248
+ **Detection:** `chezmoi diff` shows unexpected changes, `chezmoi verify` fails, or `dot health` reports drift.
249
+
250
+ ```bash
251
+ # Step 1: Identify drift scope
252
+ chezmoi diff
253
+ chezmoi managed --include=files | wc -l
254
+
255
+ # Step 2: Capture current deployed state for forensic comparison
256
+ chezmoi dump --format=json > /tmp/chezmoi-state-$(date +%s).json
257
+
258
+ # Step 3: Check audit log for unauthorized operations
259
+ dot audit | grep -E "(apply|edit|add)" | tail -20
260
+
261
+ # Step 4: Determine root cause
262
+ # Option A: Local manual edit (benign)
263
+ # Option B: External tool modified config (investigate)
264
+ # Option C: Compromised apply (escalate to Critical)
265
+
266
+ # Step 5: Restore to source-of-truth state
267
+ chezmoi apply --force
268
+
269
+ # Step 6: Verify restoration
270
+ chezmoi verify
271
+ chezmoi diff # Should produce no output
272
+
273
+ # Step 7: Lock critical configs to prevent recurrence
274
+ lock-configs
275
+ ```
276
+
277
+ ### Runbook 4: Tool Compromise (mise/Nix Managed)
278
+
279
+ **Detection:** Unexpected binary behavior, hash mismatch, or CVE disclosure for a managed tool.
280
+
281
+ ```bash
282
+ # Step 1: Quarantine the affected tool
283
+ chmod 000 "$(which <tool>)"
284
+
285
+ # Step 2: Record forensic evidence
286
+ sha256sum "$(which <tool>)" > /tmp/quarantine-evidence.txt
287
+ ls -la "$(which <tool>)" >> /tmp/quarantine-evidence.txt
288
+ file "$(which <tool>)" >> /tmp/quarantine-evidence.txt
289
+
290
+ # Step 3: Check if the tool executed during shell startup
291
+ grep "<tool>" ~/.cache/shell/*
292
+ grep "<tool>" ~/.local/share/dotfiles.log
293
+
294
+ # Step 4: Reinstall from verified source
295
+ mise install <tool>@<verified-version> --force
296
+ # Or for Nix:
297
+ nix profile remove <package>
298
+ nix profile install nixpkgs#<package>
299
+
300
+ # Step 5: Verify replacement binary
301
+ sha256sum "$(which <tool>)"
302
+
303
+ # Step 6: Clear cached eval output that may reference the compromised tool
304
+ rm -rf ~/.cache/shell/
305
+
306
+ # Step 7: Restart shell and verify clean startup
307
+ exec "$SHELL" -l
308
+ dot health
309
+ ```
310
+
311
+ ### Runbook 5: CI Pipeline Compromise
312
+
313
+ **Detection:** Unexpected workflow behavior, modified workflow files, compromised action dependency.
314
+
315
+ ```bash
316
+ # Step 1: Disable the affected workflow
317
+ gh workflow disable <workflow-name>
318
+
319
+ # Step 2: Audit recent workflow changes
320
+ git log --oneline --all -- '.github/workflows/'
321
+ git diff HEAD~10 -- '.github/workflows/'
322
+
323
+ # Step 3: Check action pinning integrity
324
+ grep -r "uses:" .github/workflows/ | grep -v "@" # Find unpinned actions
325
+
326
+ # Step 4: Verify no unauthorized secrets access
327
+ gh api repos/{owner}/{repo}/actions/runs \
328
+ --jq '.workflow_runs[] | {id, name, conclusion, head_sha}' | head -20
329
+
330
+ # Step 5: Review workflow permissions
331
+ grep -r "permissions:" .github/workflows/
332
+
333
+ # Step 6: Restore workflows from known-good state
334
+ git checkout <known-good-commit> -- .github/workflows/
335
+
336
+ # Step 7: Re-pin all actions to verified SHA
337
+ # Replace tag references with full commit SHA
338
+ # Example: actions/checkout@v4 -> actions/checkout@<full-sha>
339
+
340
+ # Step 8: Re-enable workflow and verify
341
+ gh workflow enable <workflow-name>
342
+ gh workflow run <workflow-name>
343
+ gh run list --workflow=<workflow-name> --limit=1
344
+ ```
345
+
346
+ ---
347
+
348
+ ## Communication Protocol
349
+
350
+ ### Notification Matrix
351
+
352
+ | Severity | Notify | Channel | Timeframe |
353
+ |----------|--------|---------|-----------|
354
+ | Critical | Repository owner, all contributors | GitHub Security Advisory, direct message | Immediate |
355
+ | High | Repository owner | GitHub Issue (private), direct message | Within 24 hours |
356
+ | Medium | Repository owner | GitHub Issue | Within 5 business days |
357
+ | Low | Tracked in backlog | GitHub Issue with `security` label | Next review cycle |
358
+
359
+ ### Escalation Path
360
+
361
+ ```text
362
+ 1. Incident detected
363
+ └── Automated: CI/hook blocks and logs
364
+ └── Manual: Reporter opens private advisory
365
+
366
+ 2. Triage (within Initial Response SLA)
367
+ └── Classify severity
368
+ └── Assign owner
369
+
370
+ 3. Escalation triggers
371
+ └── No response within SLA -> escalate to next severity level
372
+ └── Scope expansion -> reclassify severity upward
373
+ └── Active exploitation confirmed -> immediate Critical classification
374
+ ```
375
+
376
+ ### External Notification
377
+
378
+ | Condition | Action |
379
+ |-----------|--------|
380
+ | Leaked credentials for third-party service | Notify the service provider to revoke/rotate |
381
+ | Compromised upstream dependency | Open issue on upstream repository |
382
+ | GitHub Actions vulnerability | Report via GitHub security advisory |
383
+
384
+ ---
385
+
386
+ ## Evidence Preservation
387
+
388
+ Preserve all forensic evidence before performing eradication or recovery actions.
389
+
390
+ ### Evidence Collection Checklist
391
+
392
+ | Evidence | Command | Storage |
393
+ |----------|---------|---------|
394
+ | Dotfiles audit log | `cp ~/.local/share/dotfiles.log /tmp/incident-$(date +%s)/` | Local archive |
395
+ | Git reflog | `git reflog > /tmp/incident-$(date +%s)/reflog.txt` | Local archive |
396
+ | Git signatures | `git log --show-signature -50 > /tmp/incident-$(date +%s)/signatures.txt` | Local archive |
397
+ | Chezmoi state | `chezmoi dump --format=json > /tmp/incident-$(date +%s)/chezmoi-state.json` | Local archive |
398
+ | Binary hashes | `sha256sum ~/.local/bin/* > /tmp/incident-$(date +%s)/binary-hashes.txt` | Local archive |
399
+ | CI run logs | `gh run view <run-id> --log > /tmp/incident-$(date +%s)/ci-log.txt` | Local archive |
400
+ | Shell cache | `cp -r ~/.cache/shell/ /tmp/incident-$(date +%s)/shell-cache/` | Local archive |
401
+
402
+ ### Structured Log Format
403
+
404
+ Incident evidence is recorded in JSONL format for automated processing:
405
+
406
+ ```bash
407
+ # Append structured incident event to log
408
+ log_incident() {
409
+ local severity="$1" type="$2" description="$3"
410
+ printf '{"timestamp":"%s","severity":"%s","type":"%s","description":"%s","user":"%s","hostname":"%s"}\n' \
411
+ "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
412
+ "$severity" \
413
+ "$type" \
414
+ "$description" \
415
+ "$(whoami)" \
416
+ "$(hostname)" \
417
+ >> ~/.local/share/incident-log.jsonl
418
+ }
419
+
420
+ # Usage
421
+ log_incident "critical" "secrets-exposure" "API key found in commit abc1234"
422
+ ```
423
+
424
+ ### Retention Policy
425
+
426
+ | Evidence Type | Retention Period |
427
+ |---------------|-----------------|
428
+ | Incident logs (JSONL) | 1 year |
429
+ | Git reflog snapshots | 90 days |
430
+ | Binary hash records | Until next verified release |
431
+ | CI run logs | 90 days (GitHub default) |
432
+
433
+ ---
434
+
435
+ ## Recovery Procedures
436
+
437
+ ### Standard Recovery
438
+
439
+ ```bash
440
+ # Roll back to a known-good dotfiles state
441
+ dot rollback
442
+
443
+ # Restore specific configuration files
444
+ dot restore <target>
445
+
446
+ # Full re-apply from source of truth
447
+ chezmoi init --apply --force
448
+
449
+ # Verify system health
450
+ dot health
451
+ dot doctor
452
+ ```
453
+
454
+ ### Full System Recovery
455
+
456
+ For incidents requiring complete re-provisioning:
457
+
458
+ ```bash
459
+ # Step 1: Export current secrets (if not compromised)
460
+ dot secrets export > /tmp/secrets-backup.age
461
+
462
+ # Step 2: Clear all deployed dotfiles
463
+ chezmoi purge
464
+
465
+ # Step 3: Clear all caches
466
+ rm -rf ~/.cache/shell/
467
+ rm -rf ~/.cache/chezmoi/
468
+
469
+ # Step 4: Re-initialize from clean clone
470
+ git clone <repo-url> ~/.dotfiles
471
+ cd ~/.dotfiles
472
+ git verify-commit HEAD # Verify signature chain
473
+
474
+ # Step 5: Re-apply
475
+ chezmoi init --apply
476
+
477
+ # Step 6: Re-import secrets (if exported)
478
+ dot secrets import /tmp/secrets-backup.age
479
+
480
+ # Step 7: Verify
481
+ chezmoi verify
482
+ dot health
483
+ ./tests/framework/test_runner.sh
484
+ ```
485
+
486
+ ### Recovery Verification Checklist
487
+
488
+ | Check | Command | Expected |
489
+ |-------|---------|----------|
490
+ | Chezmoi state clean | `chezmoi diff` | No output |
491
+ | All managed files present | `chezmoi verify` | Exit code 0 |
492
+ | Test suite passes | `./tests/framework/test_runner.sh` | All assertions pass |
493
+ | Health dashboard green | `dot health` | No errors |
494
+ | Signatures valid | `git log --show-signature -5` | All commits signed |
495
+ | Pre-commit hooks active | `pre-commit run --all-files` | All hooks pass |
496
+
497
+ ---
498
+
499
+ ## Post-Incident Review Template
500
+
501
+ Conduct a review within 5 business days of resolution. Copy the template below into a new file under `docs/security/incidents/`.
502
+
503
+ ````markdown
504
+ # Post-Incident Review: [INCIDENT-YYYY-NNN]
505
+
506
+ ## Metadata
507
+
508
+ | Field | Value |
509
+ |-------|-------|
510
+ | **Date detected** | YYYY-MM-DD HH:MM UTC |
511
+ | **Date resolved** | YYYY-MM-DD HH:MM UTC |
512
+ | **Severity** | Critical / High / Medium / Low |
513
+ | **Incident type** | Secrets exposure / Supply chain / Drift / Tool compromise / CI compromise |
514
+ | **Responder** | @handle |
515
+
516
+ ## Timeline
517
+
518
+ | Time (UTC) | Event |
519
+ |------------|-------|
520
+ | HH:MM | Incident detected by [source] |
521
+ | HH:MM | Triage completed, classified as [severity] |
522
+ | HH:MM | Containment action taken: [description] |
523
+ | HH:MM | Root cause identified: [description] |
524
+ | HH:MM | Eradication completed |
525
+ | HH:MM | Recovery verified |
526
+
527
+ ## Root Cause
528
+
529
+ [Describe the root cause. Include the specific technical failure, misconfiguration, or external event.]
530
+
531
+ ## Impact
532
+
533
+ | Dimension | Assessment |
534
+ |-----------|------------|
535
+ | Data exposed | [What data, if any, was exposed] |
536
+ | Systems affected | [Which machines, configs, or pipelines] |
537
+ | Duration of exposure | [Time between introduction and remediation] |
538
+
539
+ ## Response Evaluation
540
+
541
+ | Metric | Target | Actual |
542
+ |--------|--------|--------|
543
+ | Detection time | Automated / < 1 hour | [actual] |
544
+ | Initial response | Per severity SLA | [actual] |
545
+ | Resolution | Per severity SLA | [actual] |
546
+
547
+ ## Lessons Learned
548
+
549
+ ### What went well
550
+
551
+ - [Item]
552
+
553
+ ### What needs improvement
554
+
555
+ - [Item]
556
+
557
+ ## Action Items
558
+
559
+ | Action | Owner | Due Date | Status |
560
+ |--------|-------|----------|--------|
561
+ | [Preventive measure] | @handle | YYYY-MM-DD | Open |
562
+ | [Detection improvement] | @handle | YYYY-MM-DD | Open |
563
+ | [Process update] | @handle | YYYY-MM-DD | Open |
564
+ ````
565
+
566
+ ---
567
+
568
+ ## References
569
+
570
+ - [NIST SP 800-61 Rev. 2 — Computer Security Incident Handling Guide](https://csrc.nist.gov/publications/detail/sp/800-61/rev-2/final)
571
+ - [COMPLIANCE.md — Vulnerability Response SLA](COMPLIANCE.md)
572
+ - [THREAT_MODEL.md — Attack Surfaces and Mitigations](THREAT_MODEL.md)
573
+ - [SECURITY.md — Security Controls and Hardening](SECURITY.md)
574
+ - [SLSA Framework](https://slsa.dev/)
575
+ - [Gitleaks](https://github.com/gitleaks/gitleaks)
@@ -0,0 +1,45 @@
1
+ # Keybindings
2
+
3
+ This is the single source of truth for navigation and muscle-memory shortcuts
4
+ across the dotfiles stack. Keep it concise and consistent.
5
+
6
+ ## Zsh
7
+
8
+ - `Ctrl+R`: History search (`fzf`/`atuin` if enabled)
9
+ - `Ctrl+P` / `Ctrl+N`: History prefix search (up/down)
10
+
11
+ ## Tmux (prefix = `Ctrl-a`)
12
+
13
+ - `Prefix + r`: Reload config
14
+ - `Prefix + N`: New window
15
+ - `Prefix + a` / `Tab`: Last window
16
+ - `Prefix + %`: Split vertical (current path)
17
+ - `Prefix + "`: Split horizontal (current path)
18
+ - `Prefix + \`: Split vertical (alt)
19
+ - `Prefix + |`: Split horizontal (alt)
20
+ - `Prefix + h/j/k/l`: Move between panes (vim-style)
21
+ - `Prefix + z`: Toggle zoom pane
22
+ - `Prefix + H/J/K/L`: Resize pane (left/down/up/right)
23
+
24
+ ## Neovim (leader = `Space`)
25
+
26
+ - `Ctrl-h/j/k/l`: Move between splits
27
+ - `Ctrl-s`: Save file
28
+ - `Leader + ff`: Find files (Telescope)
29
+ - `Leader + fg`: Live grep (Telescope)
30
+ - `Leader + q`: Quit
31
+
32
+ ## Shell Tools
33
+
34
+ - `z <dir>`: Jump to a directory (`zoxide`)
35
+ - `lg`: Open `lazygit`
36
+
37
+ ## Terminal
38
+
39
+ - `Ctrl+Shift+C`: Copy
40
+ - `Ctrl+Shift+V`: Paste
41
+
42
+ ---
43
+
44
+ Update this file when bindings change. If you add a new tool, add its shortcuts
45
+ here and keep them aligned with the global conventions.