@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,96 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Copyright header validator (zero-tolerance policy).
4
+ #
5
+ # Scans source files for a copyright header in the first 10 lines. Patterns
6
+ # are deliberately narrow to avoid false positives on C-style `(c)` comments
7
+ # or the word "token" appearing in running text.
8
+ #
9
+ # Usage:
10
+ # check-copyright-headers.sh [--extensions=sh,lua,nix,...] [--excludes=REGEX]
11
+ #
12
+ # Exit codes:
13
+ # 0 all files have a valid header
14
+ # 1 one or more files are missing a header
15
+ # 2 invalid invocation
16
+
17
+ set -euo pipefail
18
+
19
+ EXTENSIONS_DEFAULT="sh,lua,nix,py,js,ts,go,rs,java,cpp,c,h,hpp"
20
+ EXCLUDES_DEFAULT='(^|/)(node_modules|\.git|vendor|target|build)/|\.tmpl$|(^|/)\.chezmoitemplates/'
21
+
22
+ EXTENSIONS="$EXTENSIONS_DEFAULT"
23
+ EXCLUDES="$EXCLUDES_DEFAULT"
24
+
25
+ for arg in "$@"; do
26
+ case "$arg" in
27
+ --extensions=*) EXTENSIONS="${arg#*=}" ;;
28
+ --excludes=*) EXCLUDES="${arg#*=}" ;;
29
+ -h | --help)
30
+ sed -n '2,14p' "$0" | sed 's/^# \{0,1\}//'
31
+ exit 0
32
+ ;;
33
+ *)
34
+ echo "Unknown argument: $arg" >&2
35
+ exit 2
36
+ ;;
37
+ esac
38
+ done
39
+
40
+ # Narrow patterns — each must be specific enough that running prose cannot match.
41
+ # Deliberately DROPPED: bare "(c) " (false-positives in C comments),
42
+ # bare "All rights reserved" (often appears in vendored prose).
43
+ # Matched by `grep -F`, so these are literal strings.
44
+ PATTERNS=(
45
+ "Copyright (c)"
46
+ "Copyright ©"
47
+ "SPDX-License-Identifier:"
48
+ "© "
49
+ )
50
+
51
+ # Build a ripgrep glob like `{*.sh,*.lua,*.nix}` from the comma list.
52
+ IFS=',' read -r -a exts <<<"$EXTENSIONS"
53
+ glob="{"
54
+ for i in "${!exts[@]}"; do
55
+ [[ $i -gt 0 ]] && glob+=","
56
+ glob+="*.${exts[$i]}"
57
+ done
58
+ glob+="}"
59
+
60
+ mapfile -t all_files < <(rg --files -g "$glob" 2>/dev/null || true)
61
+
62
+ if [[ "${#all_files[@]}" -eq 0 ]]; then
63
+ echo "::notice::No files matched extensions: $EXTENSIONS"
64
+ exit 0
65
+ fi
66
+
67
+ missing=()
68
+ for file in "${all_files[@]}"; do
69
+ if [[ "$file" =~ $EXCLUDES ]]; then
70
+ continue
71
+ fi
72
+
73
+ found=false
74
+ # Read the first 10 lines once; search each pattern against that buffer.
75
+ head_buf="$(head -n 10 "$file" 2>/dev/null || true)"
76
+ for pattern in "${PATTERNS[@]}"; do
77
+ if grep -qF -- "$pattern" <<<"$head_buf"; then
78
+ found=true
79
+ break
80
+ fi
81
+ done
82
+
83
+ $found || missing+=("$file")
84
+ done
85
+
86
+ if [[ "${#missing[@]}" -gt 0 ]]; then
87
+ echo "::error::Copyright header validation failed — ${#missing[@]} file(s) missing header"
88
+ echo "Files missing a recognised copyright header:"
89
+ printf ' - %s\n' "${missing[@]}"
90
+ echo
91
+ echo "Add ONE of the following to the first 10 lines:"
92
+ printf ' - %s\n' "${PATTERNS[@]}"
93
+ exit 1
94
+ fi
95
+
96
+ echo "::notice::All ${#all_files[@]} file(s) have a valid copyright header"
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Guard against full-history gitleaks scans on manual runs.
4
+ # This ensures workflow checkout remains shallow near gitleaks steps.
5
+
6
+ set -euo pipefail
7
+
8
+ check_workflow() {
9
+ local workflow="$1"
10
+ local failed=0
11
+ local line_no
12
+
13
+ while IFS=: read -r line_no _; do
14
+ local start end context
15
+ start=$((line_no - 16))
16
+ end=$((line_no + 2))
17
+ if [[ "$start" -lt 1 ]]; then
18
+ start=1
19
+ fi
20
+
21
+ context="$(sed -n "${start},${end}p" "$workflow")"
22
+
23
+ if [[ "$context" != *"actions/checkout"* ]]; then
24
+ echo "ERROR: $workflow:$line_no missing nearby checkout for gitleaks step."
25
+ failed=1
26
+ continue
27
+ fi
28
+
29
+ if [[ "$context" != *"fetch-depth: 1"* ]]; then
30
+ echo "ERROR: $workflow:$line_no gitleaks step must use checkout fetch-depth: 1."
31
+ failed=1
32
+ fi
33
+
34
+ if [[ "$context" == *"fetch-depth: 0"* ]]; then
35
+ echo "ERROR: $workflow:$line_no gitleaks step contains forbidden fetch-depth: 0."
36
+ failed=1
37
+ fi
38
+ done < <(grep -n "gitleaks/gitleaks-action" "$workflow" || true)
39
+
40
+ return "$failed"
41
+ }
42
+
43
+ main() {
44
+ local failed=0
45
+
46
+ check_workflow ".github/workflows/ci.yml" || failed=1
47
+ check_workflow ".github/workflows/security-enhanced.yml" || failed=1
48
+
49
+ if [[ "$failed" -ne 0 ]]; then
50
+ echo "Gitleaks checkout guard failed."
51
+ exit 1
52
+ fi
53
+
54
+ echo "Gitleaks checkout guard passed."
55
+ }
56
+
57
+ main "$@"
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Install a pinned Chezmoi release with checksum verification.
4
+ set -euo pipefail
5
+
6
+ VERSION="${1:-}"
7
+ BIN_DIR="${2:-$HOME/.local/bin}"
8
+
9
+ if [[ -z "$VERSION" ]]; then
10
+ echo "Usage: $0 <chezmoi-version> [bin-dir]" >&2
11
+ exit 1
12
+ fi
13
+
14
+ OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
15
+ ARCH="$(uname -m)"
16
+
17
+ case "$OS" in
18
+ linux | darwin) ;;
19
+ *)
20
+ echo "Unsupported OS: $OS" >&2
21
+ exit 1
22
+ ;;
23
+ esac
24
+
25
+ case "$ARCH" in
26
+ x86_64 | amd64) ARCH="amd64" ;;
27
+ arm64 | aarch64) ARCH="arm64" ;;
28
+ *)
29
+ echo "Unsupported architecture: $ARCH" >&2
30
+ exit 1
31
+ ;;
32
+ esac
33
+
34
+ ASSET="chezmoi_${VERSION}_${OS}_${ARCH}.tar.gz"
35
+ CHECKSUMS_ASSET="chezmoi_${VERSION}_checksums.txt"
36
+ BASE_URL="https://github.com/twpayne/chezmoi/releases/download/v${VERSION}"
37
+
38
+ TMP_DIR="$(umask 077 && mktemp -d)"
39
+ trap 'rm -rf "$TMP_DIR"' EXIT
40
+
41
+ # Support both old and new checksum filenames.
42
+ if ! curl -fsSL -o "$TMP_DIR/checksums.txt" "$BASE_URL/$CHECKSUMS_ASSET"; then
43
+ curl -fsSL -o "$TMP_DIR/checksums.txt" "$BASE_URL/checksums.txt"
44
+ fi
45
+ curl -fsSL -o "$TMP_DIR/$ASSET" "$BASE_URL/$ASSET"
46
+
47
+ CHECKSUM_LINE="$(grep -E "[[:space:]]${ASSET}$" "$TMP_DIR/checksums.txt" | head -n1 || true)"
48
+ if [[ -z "$CHECKSUM_LINE" ]]; then
49
+ echo "Checksum entry not found for $ASSET" >&2
50
+ exit 1
51
+ fi
52
+
53
+ (
54
+ cd "$TMP_DIR"
55
+ if command -v sha256sum >/dev/null 2>&1; then
56
+ echo "$CHECKSUM_LINE" | sha256sum -c -
57
+ else
58
+ echo "$CHECKSUM_LINE" | shasum -a 256 -c -
59
+ fi
60
+ )
61
+
62
+ tar -xzf "$TMP_DIR/$ASSET" -C "$TMP_DIR" chezmoi
63
+ mkdir -p "$BIN_DIR"
64
+ install -m 755 "$TMP_DIR/chezmoi" "$BIN_DIR/chezmoi"
@@ -0,0 +1,224 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # CI Configuration Validation Script
4
+ # Verifies that all zero-warning policy components are properly configured
5
+
6
+ set -euo pipefail
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
10
+
11
+ # Colors for output (respect NO_COLOR: https://no-color.org)
12
+ if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
13
+ RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m'
14
+ BLUE='\033[0;34m' NC='\033[0m'
15
+ else
16
+ RED='' GREEN='' YELLOW='' BLUE='' NC=''
17
+ fi
18
+
19
+ printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
20
+ printf '%b\n' "${BLUE} CI CONFIGURATION VALIDATOR ${NC}"
21
+ printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
22
+ echo ""
23
+
24
+ ERRORS=0
25
+ WARNINGS=0
26
+
27
+ # Helper functions
28
+ check_file_exists() {
29
+ local file="$1"
30
+ local description="$2"
31
+
32
+ if [[ -f "$file" ]]; then
33
+ printf '%b\n' " ${GREEN}✓${NC} $description"
34
+ return 0
35
+ else
36
+ printf '%b\n' " ${RED}✗${NC} $description"
37
+ ((ERRORS++))
38
+ return 1
39
+ fi
40
+ }
41
+
42
+ check_pattern_in_file() {
43
+ local file="$1"
44
+ local pattern="$2"
45
+ local description="$3"
46
+
47
+ if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
48
+ printf '%b\n' " ${GREEN}✓${NC} $description"
49
+ return 0
50
+ else
51
+ printf '%b\n' " ${RED}✗${NC} $description"
52
+ ((ERRORS++))
53
+ return 1
54
+ fi
55
+ }
56
+
57
+ warn_if_pattern() {
58
+ local file="$1"
59
+ local pattern="$2"
60
+ local description="$3"
61
+
62
+ if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
63
+ printf '%b\n' " ${YELLOW}⚠${NC} $description"
64
+ ((WARNINGS++))
65
+ return 1
66
+ else
67
+ printf '%b\n' " ${GREEN}✓${NC} $description"
68
+ return 0
69
+ fi
70
+ }
71
+
72
+ # Check 1: Core CI files exist
73
+ printf '%b\n' "${BLUE}1. Core CI Files${NC}"
74
+ check_file_exists "$REPO_ROOT/.github/workflows/ci.yml" "Main CI workflow exists"
75
+ check_file_exists "$REPO_ROOT/.github/workflows/nightly.yml" "Nightly workflow exists"
76
+ check_file_exists "$REPO_ROOT/.github/workflows/security-enhanced.yml" "Security workflow exists"
77
+ check_file_exists "$REPO_ROOT/config/pre-commit-config.yaml" "Pre-commit configuration exists"
78
+ echo ""
79
+
80
+ # Check 2: Zero-warning enforcement
81
+ printf '%b\n' "${BLUE}2. Zero-Warning Policy Enforcement${NC}"
82
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "zero-warning" "Zero-warning policy documented"
83
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail on unformatted code" "Formatter failure enforced"
84
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "warnings-as-errors" "Warnings treated as errors"
85
+
86
+ # Verify no || true patterns in security steps
87
+ warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "gitleaks.*||.*true" "Gitleaks bypass detected"
88
+ warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "shellcheck.*||.*true" "Shellcheck bypass detected"
89
+ echo ""
90
+
91
+ # Check 3: Test coverage requirements
92
+ printf '%b\n' "${BLUE}3. Test Coverage Requirements${NC}"
93
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "100%" "100% coverage requirement"
94
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail-under" "Coverage threshold enforcement"
95
+
96
+ if [[ -f "$REPO_ROOT/tests/framework/test_runner.sh" ]]; then
97
+ printf '%b\n' " ${GREEN}✓${NC} Test framework exists"
98
+ else
99
+ printf '%b\n' " ${RED}✗${NC} Test framework missing"
100
+ ((ERRORS++))
101
+ fi
102
+ echo ""
103
+
104
+ # Check 4: Security scanning
105
+ printf '%b\n' "${BLUE}4. Security Scanning Configuration${NC}"
106
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-secrets" "Secret scanning enabled"
107
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-dependencies" "Dependency audit enabled"
108
+ check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "gitleaks" "Pre-commit secret scanning"
109
+ check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "detect-secrets" "Advanced secret detection"
110
+
111
+ # Verify no piped execution patterns
112
+ warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "curl.*|.*sh" "Dangerous piped execution"
113
+ warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "wget.*|.*bash" "Dangerous piped execution"
114
+ echo ""
115
+
116
+ # Check 5: Performance monitoring
117
+ printf '%b\n' "${BLUE}5. Performance Monitoring${NC}"
118
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "benchmark" "Performance benchmarking enabled"
119
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "500ms" "Shell startup threshold defined"
120
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "performance-tracking" "Nightly performance tracking"
121
+ echo ""
122
+
123
+ # Check 6: Multi-OS support
124
+ printf '%b\n' "${BLUE}6. Multi-OS Testing${NC}"
125
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "ubuntu-latest" "Linux testing enabled"
126
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "macos-latest" "macOS testing enabled"
127
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "matrix:" "OS matrix testing configured"
128
+ echo ""
129
+
130
+ # Check 7: Timeouts and efficiency
131
+ printf '%b\n' "${BLUE}7. Timeout and Efficiency Settings${NC}"
132
+ if grep -q "timeout-minutes: [0-9]" "$REPO_ROOT/.github/workflows/ci.yml"; then
133
+ MAX_TIMEOUT=$(grep "timeout-minutes:" "$REPO_ROOT/.github/workflows/ci.yml" |
134
+ awk '{print $2}' | sort -n | tail -1)
135
+ if [[ $MAX_TIMEOUT -le 15 ]]; then
136
+ printf '%b\n' " ${GREEN}✓${NC} Job timeouts properly configured (max: ${MAX_TIMEOUT}min)"
137
+ else
138
+ printf '%b\n' " ${YELLOW}⚠${NC} Some jobs have long timeouts (max: ${MAX_TIMEOUT}min)"
139
+ ((WARNINGS++))
140
+ fi
141
+ else
142
+ printf '%b\n' " ${RED}✗${NC} No timeout configuration found"
143
+ ((ERRORS++))
144
+ fi
145
+
146
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "cache" "Dependency caching enabled"
147
+ echo ""
148
+
149
+ # Check 8: Branch protection readiness
150
+ printf '%b\n' "${BLUE}8. Branch Protection Readiness${NC}"
151
+ check_file_exists "$REPO_ROOT/.github/BRANCH_PROTECTION.md" "Branch protection documentation"
152
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "quality-gate" "Quality gate job defined"
153
+
154
+ # Check for required status check names
155
+ REQUIRED_CHECKS=(
156
+ "lint-shell"
157
+ "security-secrets"
158
+ "security-dependencies"
159
+ "test-unit"
160
+ "quality-gate"
161
+ )
162
+
163
+ for check in "${REQUIRED_CHECKS[@]}"; do
164
+ if grep -q "name:.*$check" "$REPO_ROOT/.github/workflows/ci.yml"; then
165
+ printf '%b\n' " ${GREEN}✓${NC} Required check '$check' defined"
166
+ else
167
+ printf '%b\n' " ${RED}✗${NC} Required check '$check' missing"
168
+ ((ERRORS++))
169
+ fi
170
+ done
171
+ echo ""
172
+
173
+ # Check 9: Nightly extended testing
174
+ printf '%b\n' "${BLUE}9. Nightly Extended Testing${NC}"
175
+ if [[ -f "$REPO_ROOT/.github/workflows/nightly.yml" ]]; then
176
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "dependency-updates" "Dependency monitoring"
177
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "beta-tools-test" "Beta tool testing"
178
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "security-extended" "Extended security scanning"
179
+ check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "cron:" "Scheduled execution"
180
+ else
181
+ printf '%b\n' " ${RED}✗${NC} Nightly workflow missing"
182
+ ((ERRORS++))
183
+ fi
184
+ echo ""
185
+
186
+ # Final summary
187
+ printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
188
+ printf '%b\n' "${BLUE} VALIDATION SUMMARY ${NC}"
189
+ printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
190
+
191
+ if [[ $ERRORS -eq 0 ]] && [[ $WARNINGS -eq 0 ]]; then
192
+ printf '%b\n' "${GREEN}✅ PERFECT: CI configuration fully compliant${NC}"
193
+ echo " - Zero-warning policy properly enforced"
194
+ echo " - All security gates configured"
195
+ echo " - Performance monitoring active"
196
+ echo " - Ready for branch protection"
197
+ elif [[ $ERRORS -eq 0 ]]; then
198
+ printf '%b\n' "${YELLOW}⚠️ GOOD: CI mostly compliant with $WARNINGS warning(s)${NC}"
199
+ echo " - Core functionality working"
200
+ echo " - Minor improvements recommended"
201
+ else
202
+ printf '%b\n' "${RED}❌ ISSUES: CI configuration has $ERRORS error(s) and $WARNINGS warning(s)${NC}"
203
+ echo " - Critical fixes required before deployment"
204
+ fi
205
+
206
+ echo ""
207
+ echo "Configuration Details:"
208
+ echo " - Repository: $REPO_ROOT"
209
+ echo " - Main CI: .github/workflows/ci.yml"
210
+ echo " - Nightly: .github/workflows/nightly.yml"
211
+ echo " - Pre-commit: config/pre-commit-config.yaml"
212
+ echo ""
213
+ echo "Next Steps:"
214
+ if [[ $ERRORS -gt 0 ]]; then
215
+ echo " 1. Fix critical errors listed above"
216
+ echo " 2. Re-run validation: $0"
217
+ fi
218
+ if [[ $WARNINGS -gt 0 ]]; then
219
+ echo " 3. Address warnings for optimal configuration"
220
+ fi
221
+ echo " 4. Configure branch protection rules per BRANCH_PROTECTION.md"
222
+ echo " 5. Test CI pipeline with a small PR"
223
+
224
+ exit $ERRORS
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ OUT="${1:-$HOME/.dotfiles/docs/demo/demo.gif}"
6
+ DURATION="${DURATION:-30}"
7
+ FPS="${FPS:-15}"
8
+
9
+ record_ffmpeg() {
10
+ if command -v ffmpeg >/dev/null; then
11
+ echo "Recording with ffmpeg for ${DURATION}s..."
12
+ if [ "$(uname -s)" = "Darwin" ]; then
13
+ # macOS (AVFoundation)
14
+ ffmpeg -y -t "$DURATION" -f avfoundation -i "1:none" -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
15
+ else
16
+ # Linux (X11)
17
+ ffmpeg -y -t "$DURATION" -f x11grab -i :0.0 -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
18
+ fi
19
+ else
20
+ echo "ffmpeg not found. Install it and retry."
21
+ exit 1
22
+ fi
23
+ }
24
+
25
+ record_wf_recorder() {
26
+ if command -v wf-recorder >/dev/null; then
27
+ echo "Recording with wf-recorder for ${DURATION}s..."
28
+ wf-recorder -f "$OUT" -t "$DURATION"
29
+ else
30
+ return 1
31
+ fi
32
+ }
33
+
34
+ if [ "$(uname -s)" = "Linux" ]; then
35
+ if record_wf_recorder; then
36
+ exit 0
37
+ fi
38
+ fi
39
+
40
+ record_ffmpeg
41
+
42
+ printf "Saved demo to %s\n" "$OUT"
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## A2A v0.3 and agent card conformance validation.
4
+
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
9
+
10
+ # shellcheck source=../dot/lib/ui.sh
11
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
12
+
13
+ JSON_MODE=0
14
+ STRICT_MODE=0
15
+ while [[ $# -gt 0 ]]; do
16
+ case "$1" in
17
+ --json | -j)
18
+ JSON_MODE=1
19
+ shift
20
+ ;;
21
+ --strict | -s)
22
+ STRICT_MODE=1
23
+ shift
24
+ ;;
25
+ *)
26
+ shift
27
+ ;;
28
+ esac
29
+ done
30
+
31
+ command -v jq >/dev/null 2>&1 || {
32
+ echo "jq is required for A2A conformance checks." >&2
33
+ exit 1
34
+ }
35
+
36
+ a2a_card="$REPO_ROOT/.well-known/agent-card.json"
37
+ legacy_doc="$REPO_ROOT/.well-known/agent.json"
38
+ internal_card="$REPO_ROOT/dot_config/dotfiles/agent-card.json"
39
+ agent_profiles="$REPO_ROOT/dot_config/dotfiles/agent-profiles.json"
40
+ status="healthy"
41
+ issues=()
42
+
43
+ # Check primary A2A v0.3 card
44
+ if [[ ! -f "$a2a_card" ]]; then
45
+ issues+=("missing:.well-known/agent-card.json")
46
+ fi
47
+
48
+ # Check legacy agent.json
49
+ if [[ ! -f "$legacy_doc" ]]; then
50
+ issues+=("missing:.well-known/agent.json")
51
+ fi
52
+
53
+ # Check internal card
54
+ if [[ ! -f "$internal_card" ]]; then
55
+ issues+=("missing:agent-card.json")
56
+ fi
57
+
58
+ # Check agent profiles
59
+ if [[ ! -f "$agent_profiles" ]]; then
60
+ issues+=("missing:agent-profiles.json")
61
+ fi
62
+
63
+ if [[ "${#issues[@]}" -eq 0 ]]; then
64
+ # Validate A2A v0.3 card
65
+ spec_version="$(jq -r '.specVersion // empty' "$a2a_card")"
66
+ [[ "$spec_version" == "0.3" ]] || issues+=("specVersion:expected 0.3, got $spec_version")
67
+
68
+ # Skills array
69
+ jq -e '.skills | type == "array"' "$a2a_card" >/dev/null 2>&1 || issues+=("skills:missing or not array")
70
+ skills_count="$(jq '.skills | length' "$a2a_card" 2>/dev/null || echo 0)"
71
+ [[ "$skills_count" -gt 0 ]] || issues+=("skills:empty array")
72
+
73
+ # Authentication block
74
+ jq -e '.authentication' "$a2a_card" >/dev/null 2>&1 || issues+=("authentication:missing")
75
+
76
+ # Signing metadata
77
+ signing_method="$(jq -r '.signing.method // empty' "$a2a_card")"
78
+ [[ -n "$signing_method" ]] || issues+=("signing:missing method")
79
+
80
+ # Capabilities
81
+ jq -e '.capabilities' "$a2a_card" >/dev/null 2>&1 || issues+=("capabilities:missing")
82
+
83
+ # Protocol must be "a2a" not "a2a-ready"
84
+ if jq -e '.protocols | index("a2a-ready")' "$a2a_card" >/dev/null 2>&1; then
85
+ issues+=("protocols:should use 'a2a' not 'a2a-ready'")
86
+ fi
87
+ jq -e '.protocols | index("a2a")' "$a2a_card" >/dev/null 2>&1 || issues+=("protocols:missing 'a2a'")
88
+
89
+ # Validate internal card also uses v0.3 and "a2a"
90
+ internal_spec="$(jq -r '.specVersion // empty' "$internal_card")"
91
+ [[ "$internal_spec" == "0.3" ]] || issues+=("internal-card:specVersion expected 0.3")
92
+ if jq -e '.protocols | index("a2a-ready")' "$internal_card" >/dev/null 2>&1; then
93
+ issues+=("internal-card:should use 'a2a' not 'a2a-ready'")
94
+ fi
95
+
96
+ # Validate legacy doc points to new card
97
+ jq -e '.a2aCard' "$legacy_doc" >/dev/null 2>&1 || issues+=("legacy:missing a2aCard pointer")
98
+ if jq -e '.protocols | index("a2a-ready")' "$legacy_doc" >/dev/null 2>&1; then
99
+ issues+=("legacy:should use 'a2a' not 'a2a-ready'")
100
+ fi
101
+
102
+ # Name consistency
103
+ a2a_name="$(jq -r '.name // empty' "$a2a_card")"
104
+ internal_name="$(jq -r '.name // empty' "$internal_card")"
105
+ legacy_name="$(jq -r '.name // empty' "$legacy_doc")"
106
+ [[ "$a2a_name" == "$internal_name" ]] || issues+=("name:mismatch between a2a-card and internal card")
107
+ [[ "$a2a_name" == "$legacy_name" ]] || issues+=("name:mismatch between a2a-card and legacy doc")
108
+
109
+ # Default profile validation
110
+ default_profile="$(jq -r '.defaultProfile // empty' "$internal_card")"
111
+ if [[ -n "$default_profile" ]]; then
112
+ jq -e --arg profile "$default_profile" '.profiles[$profile]' "$agent_profiles" >/dev/null 2>&1 || issues+=("default-profile:missing in agent-profiles.json")
113
+ fi
114
+
115
+ # Card signing in internal card
116
+ jq -e '.security.cardSigning' "$internal_card" >/dev/null 2>&1 || issues+=("internal-card:missing cardSigning in security")
117
+ fi
118
+
119
+ if [[ "${#issues[@]}" -gt 0 ]]; then
120
+ status="issues"
121
+ fi
122
+
123
+ # Build issues JSON safely
124
+ if [[ "${#issues[@]}" -gt 0 ]]; then
125
+ issues_json="$(printf '%s\n' "${issues[@]}" | jq -R . | jq -s .)"
126
+ else
127
+ issues_json="[]"
128
+ fi
129
+
130
+ payload="$(jq -n \
131
+ --arg status "$status" \
132
+ --arg a2a_card "$a2a_card" \
133
+ --arg legacy_doc "$legacy_doc" \
134
+ --arg internal_card "$internal_card" \
135
+ --arg agent_profiles "$agent_profiles" \
136
+ --argjson strict "$([[ "$STRICT_MODE" -eq 1 ]] && echo true || echo false)" \
137
+ --argjson issues "$issues_json" \
138
+ '{status: $status, strict: $strict, specVersion: "0.3", files: {a2a_card: $a2a_card, legacy_doc: $legacy_doc, internal_card: $internal_card, agent_profiles: $agent_profiles}, issues: $issues}')"
139
+
140
+ if [[ "$JSON_MODE" -eq 1 ]]; then
141
+ printf '%s\n' "$payload"
142
+ else
143
+ ui_dot_banner "AI and Agents"
144
+ ui_header "A2A v0.3 Conformance"
145
+ if [[ "$status" == "healthy" ]]; then
146
+ ui_ok "Status" "healthy"
147
+ ui_ok "Spec version" "0.3"
148
+ ui_ok "A2A card" "$a2a_card"
149
+ ui_ok "Legacy doc" "$legacy_doc"
150
+ ui_ok "Internal card" "$internal_card"
151
+ else
152
+ ui_warn "Status" "issues"
153
+ while IFS= read -r issue; do
154
+ [[ -n "$issue" ]] || continue
155
+ ui_warn "Issue" "$issue"
156
+ done < <(printf '%s' "$payload" | jq -r '.issues[]')
157
+ fi
158
+ fi
159
+
160
+ if [[ "$STRICT_MODE" -eq 1 && "$status" != "healthy" ]]; then
161
+ exit 1
162
+ fi