@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,137 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Alias governance checks:
4
+ # - duplicate alias names
5
+ # - risky overrides must be gated
6
+ # - no hardcoded /Users paths
7
+
8
+ set -euo pipefail
9
+
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ manifest_script="$SCRIPT_DIR/aliases-manifest.sh"
12
+ deprecations_file="$SCRIPT_DIR/../dot/data/alias-deprecations.tsv"
13
+ policy="${DOTFILES_ALIAS_POLICY:-standard}"
14
+ if [[ -n "${CI:-}" && "${DOTFILES_ALIAS_POLICY:-}" == "" ]]; then
15
+ policy="strict"
16
+ fi
17
+
18
+ if [[ ! -x "$manifest_script" ]]; then
19
+ echo "ERROR: aliases-manifest.sh not found or not executable" >&2
20
+ exit 1
21
+ fi
22
+
23
+ tmp_manifest="$(umask 077 && mktemp)"
24
+ trap 'rm -f "$tmp_manifest"' EXIT
25
+
26
+ bash "$manifest_script" >"$tmp_manifest"
27
+
28
+ errors=0
29
+
30
+ echo "Alias Governance"
31
+ echo ""
32
+ echo "Policy: $policy"
33
+ echo ""
34
+
35
+ version_ge() {
36
+ local a="${1#v}" b="${2#v}"
37
+ local IFS=.
38
+ local i
39
+ read -r -a av <<<"$a"
40
+ read -r -a bv <<<"$b"
41
+ for i in 0 1 2; do
42
+ local ai="${av[$i]:-0}"
43
+ local bi="${bv[$i]:-0}"
44
+ ((10#$ai > 10#$bi)) && return 0
45
+ ((10#$ai < 10#$bi)) && return 1
46
+ done
47
+ return 0
48
+ }
49
+
50
+ repo_version="0.0.0"
51
+ if [[ -f "$SCRIPT_DIR/../../package.json" ]]; then
52
+ repo_version="$(sed -n 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"\([0-9][0-9.]*\)".*/\1/p' "$SCRIPT_DIR/../../package.json" | head -1)"
53
+ fi
54
+ repo_version="${repo_version:-0.0.0}"
55
+
56
+ # 1) Duplicate alias names
57
+ dupes="$(awk -F'\t' '{count[$1]++} END {for (k in count) if (count[k] > 1) print k}' "$tmp_manifest" | sort)"
58
+ if [[ -n "$dupes" ]]; then
59
+ if [[ "$policy" == "strict" ]]; then
60
+ echo "ERROR: duplicate alias names detected:"
61
+ printf "%s\n" "$dupes" | sed 's/^/ - /'
62
+ errors=$((errors + 1))
63
+ else
64
+ echo "WARN: duplicate alias names detected (review recommended):"
65
+ printf "%s\n" "$dupes" | sed 's/^/ - /'
66
+ fi
67
+ else
68
+ echo "OK: no duplicate alias names"
69
+ fi
70
+
71
+ # 2) Risky overrides must be gated
72
+ while IFS=$'\t' read -r name _value file _line; do
73
+ case "$name" in
74
+ cd | sudo | su | cp | mv | rm | mkdir | alias)
75
+ # GNU coreutils aliases are intentionally centralized overrides.
76
+ if [[ "$file" == *"/aliases/gnu/"* ]]; then
77
+ continue
78
+ fi
79
+ if ! rg -q 'DOTFILES_(ENABLE|SAFE|ALIAS)' "$file"; then
80
+ echo "ERROR: risky override '$name' in $file is not gated by a DOTFILES_* flag"
81
+ errors=$((errors + 1))
82
+ fi
83
+ ;;
84
+ esac
85
+ done <"$tmp_manifest"
86
+
87
+ if [[ $errors -eq 0 ]]; then
88
+ echo "OK: risky overrides are gated"
89
+ fi
90
+
91
+ # 3) Hardcoded /Users path check (alias value only)
92
+ hardcoded="$(awk -F'\t' '$2 ~ /\/Users\// {print $1 "\t" $2 "\t" $3 ":" $4}' "$tmp_manifest")"
93
+ if [[ -n "$hardcoded" ]]; then
94
+ echo "ERROR: hardcoded /Users paths detected in aliases:"
95
+ printf "%s\n" "$hardcoded" | sed 's/^/ - /'
96
+ errors=$((errors + 1))
97
+ else
98
+ echo "OK: no hardcoded /Users paths in aliases"
99
+ fi
100
+
101
+ # 4) Deprecation window enforcement
102
+ if [[ -f "$deprecations_file" ]]; then
103
+ expired_hits=0
104
+ while IFS=$'\t' read -r alias_name replacement remove_in; do
105
+ [[ -z "${alias_name:-}" ]] && continue
106
+ [[ "${alias_name:0:1}" == "#" ]] && continue
107
+ if version_ge "$repo_version" "$remove_in"; then
108
+ alias_found=0
109
+ if awk -F'\t' -v n="$alias_name" '$1==n{found=1} END{exit(found?0:1)}' "$tmp_manifest"; then
110
+ alias_found=1
111
+ fi
112
+ function_found=0
113
+ if rg -q --glob '*.sh' --glob '*.aliases.sh' --glob '*.tmpl' "^[[:space:]]*(function[[:space:]]+)?${alias_name}[[:space:]]*\\(\\)" "$SCRIPT_DIR/../../.chezmoitemplates/aliases" "$SCRIPT_DIR/../../scripts/dot"; then
114
+ function_found=1
115
+ fi
116
+ if [[ $alias_found -eq 1 || $function_found -eq 1 ]]; then
117
+ [[ $expired_hits -eq 0 ]] && echo "ERROR: expired deprecated aliases still present:"
118
+ echo " - $alias_name (remove_in=$remove_in, replacement=$replacement)"
119
+ expired_hits=$((expired_hits + 1))
120
+ fi
121
+ fi
122
+ done < <(cut -f1-3 "$deprecations_file")
123
+ if [[ $expired_hits -gt 0 ]]; then
124
+ errors=$((errors + 1))
125
+ else
126
+ echo "OK: no expired deprecated aliases (repo version: v$repo_version)"
127
+ fi
128
+ fi
129
+
130
+ echo ""
131
+ if [[ $errors -eq 0 ]]; then
132
+ echo "Alias governance checks passed."
133
+ exit 0
134
+ fi
135
+
136
+ echo "Alias governance checks failed: $errors issue(s)." >&2
137
+ exit 1
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ # shellcheck source=../dot/lib/utils.sh
7
+ # shellcheck disable=SC1091
8
+ source "$SCRIPT_DIR/../dot/lib/utils.sh"
9
+
10
+ src_dir="$(require_source_dir)"
11
+ manifest="$src_dir/scripts/diagnostics/aliases-manifest.sh"
12
+ if [[ ! -x "$manifest" ]]; then
13
+ echo "Alias manifest not found: $manifest" >&2
14
+ exit 1
15
+ fi
16
+
17
+ cat <<'HEADER'
18
+ # Alias Cheatsheet
19
+
20
+ Auto-generated from alias manifest.
21
+
22
+ ## Core shortcuts
23
+ HEADER
24
+
25
+ # Core list we care about (preserve ordering).
26
+ core_aliases=(c q e h _ i l ll la lr lra lt lta a d)
27
+
28
+ tmp_manifest="$(umask 077 && mktemp)"
29
+ trap 'rm -f "$tmp_manifest"' EXIT
30
+ bash "$manifest" >"$tmp_manifest"
31
+
32
+ pick_alias() {
33
+ local name="$1"
34
+ shift
35
+ local value=""
36
+ local pattern
37
+ while [[ $# -gt 0 ]]; do
38
+ pattern="$1"
39
+ value="$(awk -F$'\t' -v key="$name" -v pat="$pattern" '$1==key && $3 ~ pat {print $2; exit}' "$tmp_manifest")"
40
+ [[ -n "$value" ]] && {
41
+ printf '%s\n' "$value"
42
+ return 0
43
+ }
44
+ shift
45
+ done
46
+ value="$(awk -F$'\t' -v key="$name" '$1==key {print $2; exit}' "$tmp_manifest")"
47
+ [[ -n "$value" ]] && printf '%s\n' "$value"
48
+ }
49
+
50
+ for a in "${core_aliases[@]}"; do
51
+ case "$a" in
52
+ a)
53
+ line="$(pick_alias "$a" "/ai/")"
54
+ ;;
55
+ d)
56
+ line="$(pick_alias "$a" "/system/" "/configuration/" "/docker/")"
57
+ ;;
58
+ *)
59
+ line="$(pick_alias "$a")"
60
+ ;;
61
+ esac
62
+ if [[ -n "$line" ]]; then
63
+ printf '%s\n' "- \`$a\` $line"
64
+ fi
65
+ done
66
+
67
+ cat <<'FOOTER'
68
+
69
+ ## Notes
70
+
71
+ - Regenerate: `dot aliases cheatsheet`
72
+ - Apply changes: `chezmoi apply`
73
+ FOOTER
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Emit alias manifest as TSV:
4
+ # name<TAB>value<TAB>file<TAB>line
5
+
6
+ set -euo pipefail
7
+
8
+ resolve_source_dir() {
9
+ if [[ -n "${CHEZMOI_SOURCE_DIR:-}" && -d "${CHEZMOI_SOURCE_DIR}" ]]; then
10
+ printf "%s\n" "${CHEZMOI_SOURCE_DIR}"
11
+ return
12
+ fi
13
+ if [[ -d "$HOME/.dotfiles" ]]; then
14
+ printf "%s\n" "$HOME/.dotfiles"
15
+ return
16
+ fi
17
+ if [[ -d "$HOME/.local/share/chezmoi" ]]; then
18
+ printf "%s\n" "$HOME/.local/share/chezmoi"
19
+ return
20
+ fi
21
+ return 1
22
+ }
23
+
24
+ src_dir="${1:-$(resolve_source_dir)}"
25
+
26
+ rg -n \
27
+ -e '^[[:space:]]*alias[[:space:]]+[A-Za-z0-9_.:-]+=' \
28
+ -e '^[[:space:]]*[^#"'\'']*&&[[:space:]]*alias[[:space:]]+[A-Za-z0-9_.:-]+=' \
29
+ "$src_dir/.chezmoitemplates/aliases" \
30
+ "$src_dir/.chezmoitemplates/functions" |
31
+ sed -E 's#^([^:]+):([0-9]+):.*alias[[:space:]]+([A-Za-z0-9_.:-]+)=(.*)$#\3\t\4\t\1\t\2#'
@@ -0,0 +1,381 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## Shell Performance Benchmark.
4
+ ##
5
+ ## Measures shell startup time with per-component profiling. Uses hyperfine
6
+ ## for statistical accuracy or falls back to basic timing. Tracks history
7
+ ## for regression detection.
8
+ ##
9
+ ## # Usage
10
+ ## dot benchmark # Basic startup timing
11
+ ## dot benchmark --detailed # Per-component breakdown
12
+ ## dot benchmark --profile # zprof analysis
13
+ ## dot benchmark --compare # Compare with history
14
+ ## dot benchmark --waterfall # ASCII waterfall chart of component timings
15
+ ##
16
+ ## # Dependencies
17
+ ## - python3: Millisecond timing (required)
18
+ ## - hyperfine: Statistical benchmarking (optional, falls back to basic)
19
+ ## - jq: JSON parsing for results (optional)
20
+ ## - zsh: Target shell (required)
21
+ ##
22
+ ## # Metrics
23
+ ## | Rating | Threshold | Description |
24
+ ## |--------|-----------|-------------|
25
+ ## | Excellent | <100ms | Instant response |
26
+ ## | Good | <200ms | Responsive |
27
+ ## | Acceptable | <500ms | Noticeable delay |
28
+ ## | Slow | >500ms | Optimization needed |
29
+ ##
30
+ ## # Platform Notes
31
+ ## - macOS: Full support
32
+ ## - Linux: Full support
33
+ ## - WSL: May show higher times due to filesystem overhead
34
+ ##
35
+ ## # Output Files
36
+ ## Benchmarks saved to ~/.local/share/dotfiles/benchmarks/
37
+ ##
38
+ ## # Idempotency
39
+ ## Safe to run repeatedly. Creates timestamped history files.
40
+
41
+ set -euo pipefail
42
+
43
+ _cleanup_files=()
44
+ trap 'rm -f "${_cleanup_files[@]}"' EXIT
45
+
46
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
47
+ # shellcheck source=../dot/lib/ui.sh
48
+ # shellcheck disable=SC1091
49
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
50
+ # shellcheck source=../dot/lib/log.sh
51
+ # shellcheck disable=SC1091
52
+ source "$SCRIPT_DIR/../dot/lib/log.sh"
53
+ export DOT_COMMAND="benchmark"
54
+
55
+ BENCHMARK_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/dotfiles/benchmarks"
56
+ mkdir -p "$BENCHMARK_DIR"
57
+
58
+ # Parse arguments
59
+ DETAILED=false
60
+ PROFILE=false
61
+ COMPARE=false
62
+ WATERFALL=false
63
+ while [[ $# -gt 0 ]]; do
64
+ case "$1" in
65
+ --detailed | -d)
66
+ DETAILED=true
67
+ shift
68
+ ;;
69
+ --profile | -p)
70
+ PROFILE=true
71
+ shift
72
+ ;;
73
+ --compare | -c)
74
+ COMPARE=true
75
+ shift
76
+ ;;
77
+ --waterfall | -w)
78
+ WATERFALL=true
79
+ shift
80
+ ;;
81
+ *) shift ;;
82
+ esac
83
+ done
84
+
85
+ ui_init
86
+
87
+ print_header() {
88
+ echo ""
89
+ ui_dot_banner "Diagnostics"
90
+ ui_header "Shell Performance Benchmark"
91
+ echo ""
92
+ }
93
+
94
+ # Basic timing function
95
+ time_command() {
96
+ local start end
97
+ start=$(python3 -c 'import time; print(int(time.time() * 1000))')
98
+ eval "$1" >/dev/null 2>&1
99
+ end=$(python3 -c 'import time; print(int(time.time() * 1000))')
100
+ echo $((end - start))
101
+ }
102
+
103
+ # Per-component profiling using zprof
104
+ run_zsh_profile() {
105
+ ui_header "Zsh profiler (zprof)"
106
+ echo ""
107
+
108
+ zsh -c '
109
+ zmodload zsh/zprof
110
+ # shellcheck disable=SC1091
111
+ source ~/.zshenv 2>/dev/null
112
+ # shellcheck disable=SC1091
113
+ source ~/.config/zsh/.zshrc 2>/dev/null
114
+ zprof
115
+ ' 2>/dev/null | head -30
116
+ }
117
+
118
+ # Benchmark individual components
119
+ benchmark_components() {
120
+ ui_header "Per-Component Timing"
121
+ echo ""
122
+ printf "%-35s %8s\n" "Component" "Time (ms)"
123
+ echo "───────────────────────────────────────────────"
124
+
125
+ # zshenv (bootloader)
126
+ local zshenv_time
127
+ # shellcheck disable=SC1091
128
+ zshenv_time=$(time_command "zsh -c 'source ~/.zshenv 2>/dev/null; exit'")
129
+ printf "%-35s %8s\n" "zshenv (bootloader)" "${zshenv_time}ms"
130
+
131
+ # Core shell options
132
+ local options_time
133
+ # shellcheck disable=SC1091
134
+ options_time=$(time_command "zsh -c 'source ~/.config/zsh/rc.d/30-options.zsh 2>/dev/null; exit'" 2>/dev/null || echo "N/A")
135
+ printf "%-35s %8s\n" "rc.d/30-options.zsh" "${options_time}ms"
136
+
137
+ # Zinit plugins
138
+ local zinit_time
139
+ # shellcheck disable=SC1091
140
+ zinit_time=$(time_command "zsh -c 'source ~/.config/zsh/rc.d/20-zinit.zsh 2>/dev/null; exit'" 2>/dev/null || echo "N/A")
141
+ printf "%-35s %8s\n" "rc.d/20-zinit.zsh (plugins)" "${zinit_time}ms"
142
+
143
+ # Tool initializations
144
+ for tool in starship atuin zoxide fzf direnv; do
145
+ if command -v "$tool" >/dev/null 2>&1; then
146
+ local tool_time
147
+ case "$tool" in
148
+ starship) tool_time=$(time_command "starship init zsh >/dev/null") ;;
149
+ atuin) tool_time=$(time_command "atuin init zsh >/dev/null") ;;
150
+ zoxide) tool_time=$(time_command "zoxide init zsh >/dev/null") ;;
151
+ fzf) tool_time=$(time_command "true") ;; # FZF sourced from file
152
+ direnv) tool_time=$(time_command "direnv hook zsh >/dev/null") ;;
153
+ esac
154
+ printf "%-35s %8s\n" "$tool init" "${tool_time}ms"
155
+ fi
156
+ done
157
+
158
+ echo "───────────────────────────────────────────────"
159
+ }
160
+
161
+ # Render ASCII waterfall chart from component timings
162
+ render_waterfall() {
163
+ ui_header "Startup Waterfall"
164
+ echo ""
165
+
166
+ local -a names=()
167
+ local -a times=()
168
+ local total_time=0
169
+
170
+ # zshenv
171
+ local t
172
+ # shellcheck disable=SC1091
173
+ t=$(time_command "zsh -c 'source ~/.zshenv 2>/dev/null; exit'")
174
+ names+=("zshenv (bootloader)")
175
+ times+=("$t")
176
+ total_time=$((total_time + t))
177
+
178
+ # rc.d modules
179
+ # shellcheck disable=SC1091
180
+ t=$(time_command "zsh -c 'source ~/.config/zsh/rc.d/30-options.zsh 2>/dev/null; exit'" 2>/dev/null || echo 0)
181
+ names+=("rc.d/30-options.zsh")
182
+ times+=("$t")
183
+ total_time=$((total_time + t))
184
+
185
+ # shellcheck disable=SC1091
186
+ t=$(time_command "zsh -c 'source ~/.config/zsh/rc.d/20-zinit.zsh 2>/dev/null; exit'" 2>/dev/null || echo 0)
187
+ names+=("rc.d/20-zinit (plugins)")
188
+ times+=("$t")
189
+ total_time=$((total_time + t))
190
+
191
+ # Tool inits
192
+ for tool in starship atuin zoxide fzf direnv; do
193
+ if command -v "$tool" >/dev/null 2>&1; then
194
+ case "$tool" in
195
+ starship) t=$(time_command "starship init zsh >/dev/null") ;;
196
+ atuin) t=$(time_command "atuin init zsh >/dev/null") ;;
197
+ zoxide) t=$(time_command "zoxide init zsh >/dev/null") ;;
198
+ fzf) t=$(time_command "true") ;;
199
+ direnv) t=$(time_command "direnv hook zsh >/dev/null") ;;
200
+ esac
201
+ names+=("$tool init")
202
+ times+=("$t")
203
+ total_time=$((total_time + t))
204
+ fi
205
+ done
206
+
207
+ if [[ "$total_time" -eq 0 ]]; then
208
+ ui_warn "No timing data" "Could not measure components"
209
+ return
210
+ fi
211
+
212
+ # Render bars
213
+ local bar_width=30
214
+ local i
215
+ for i in "${!names[@]}"; do
216
+ local name="${names[$i]}"
217
+ local ms="${times[$i]}"
218
+ local pct=$((ms * 100 / total_time))
219
+ local filled=$((ms * bar_width / total_time))
220
+ local empty=$((bar_width - filled))
221
+
222
+ local bar=""
223
+ local j
224
+ for ((j = 0; j < filled; j++)); do bar+="$_GL_BAR_FILL"; done
225
+ for ((j = 0; j < empty; j++)); do bar+="$_GL_BAR_EMPTY"; done
226
+
227
+ if [[ "$UI_COLOR" = "1" ]]; then
228
+ printf " %-22s %s%s%s%s%s %4dms (%2d%%)\n" \
229
+ "$name" "$GREEN" "${bar:0:$filled}" "$NORMAL$GRAY" "${bar:$filled}" "$NORMAL" "$ms" "$pct"
230
+ else
231
+ printf " %-22s %s %4dms (%2d%%)\n" "$name" "$bar" "$ms" "$pct"
232
+ fi
233
+ done
234
+
235
+ echo " ──────────────────────────────────────────────────────────"
236
+ printf " %-22s %*s %4dms\n" "Total" "$bar_width" "" "$total_time"
237
+ echo ""
238
+ }
239
+
240
+ # Run hyperfine benchmark
241
+ run_hyperfine() {
242
+ if ! command -v hyperfine >/dev/null 2>&1; then
243
+ if [[ "$UI_ENABLED" = "1" ]]; then
244
+ ui_warn "hyperfine" "not installed, using basic timing"
245
+ else
246
+ printf '%b\n' "${YELLOW}hyperfine not installed. Using basic timing.${NC}"
247
+ fi
248
+ local times=()
249
+ for _ in {1..5}; do
250
+ times+=("$(time_command "zsh -i -c exit")")
251
+ done
252
+ local sum=0
253
+ for t in "${times[@]}"; do sum=$((sum + t)); done
254
+ if [[ "$UI_ENABLED" = "1" ]]; then
255
+ ui_ok "Average startup time" "$((sum / 5))ms"
256
+ else
257
+ printf '%b\n' "\n${GREEN}Average startup time: $((sum / 5))ms${NC}"
258
+ fi
259
+ return
260
+ fi
261
+
262
+ echo ""
263
+ ui_header "Running hyperfine benchmark"
264
+ echo ""
265
+ hyperfine --warmup 3 --runs 10 --shell=none \
266
+ --export-json "$BENCHMARK_DIR/latest.json" \
267
+ 'zsh -i -c exit'
268
+
269
+ # Extract and display results
270
+ if [[ -f "$BENCHMARK_DIR/latest.json" ]]; then
271
+ local mean_ms
272
+ mean_ms=$(jq '.results[0].mean * 1000 | floor' "$BENCHMARK_DIR/latest.json")
273
+ local min_ms
274
+ min_ms=$(jq '.results[0].min * 1000 | floor' "$BENCHMARK_DIR/latest.json")
275
+ local max_ms
276
+ max_ms=$(jq '.results[0].max * 1000 | floor' "$BENCHMARK_DIR/latest.json")
277
+
278
+ echo ""
279
+ ui_header "Results"
280
+ if [[ "$UI_ENABLED" = "1" ]]; then
281
+ ui_kv "Mean:" "${mean_ms}ms"
282
+ ui_kv "Min:" "${min_ms}ms"
283
+ ui_kv "Max:" "${max_ms}ms"
284
+ else
285
+ echo " Mean: ${mean_ms}ms"
286
+ echo " Min: ${min_ms}ms"
287
+ echo " Max: ${max_ms}ms"
288
+ fi
289
+
290
+ # Performance rating
291
+ if [[ $mean_ms -lt 100 ]]; then
292
+ if [[ "$UI_ENABLED" = "1" ]]; then
293
+ ui_ok "Performance" "Excellent (<100ms)"
294
+ else
295
+ printf '%b\n' "\n${GREEN}⚡ Excellent (<100ms)${NC}"
296
+ fi
297
+ elif [[ $mean_ms -lt 200 ]]; then
298
+ if [[ "$UI_ENABLED" = "1" ]]; then
299
+ ui_ok "Performance" "Good (<200ms)"
300
+ else
301
+ printf '%b\n' "\n${GREEN}✓ Good (<200ms)${NC}"
302
+ fi
303
+ elif [[ $mean_ms -lt 500 ]]; then
304
+ if [[ "$UI_ENABLED" = "1" ]]; then
305
+ ui_warn "Performance" "Acceptable (<500ms)"
306
+ else
307
+ printf '%b\n' "\n${YELLOW}⚠ Acceptable (<500ms)${NC}"
308
+ fi
309
+ else
310
+ if [[ "$UI_ENABLED" = "1" ]]; then
311
+ ui_err "Performance" "Slow (>500ms)"
312
+ else
313
+ printf '%b\n' "\n${RED}✗ Slow (>500ms) - optimization needed${NC}"
314
+ fi
315
+ fi
316
+
317
+ # Save with timestamp for history
318
+ cp "$BENCHMARK_DIR/latest.json" "$BENCHMARK_DIR/$(date +%Y%m%d_%H%M%S).json"
319
+ dot_log info "benchmark_complete" "mean_ms=$mean_ms" "min_ms=$min_ms" "max_ms=$max_ms"
320
+ dot_metric "shell_startup_mean" "$mean_ms" "ms"
321
+ fi
322
+ }
323
+
324
+ # Compare with previous benchmarks
325
+ compare_benchmarks() {
326
+ ui_header "Benchmark History"
327
+ echo ""
328
+
329
+ local files
330
+ files=$(find "$BENCHMARK_DIR" -name "*.json" -type f | sort -r | head -10)
331
+
332
+ if [[ -z "$files" ]]; then
333
+ echo "No benchmark history found."
334
+ return
335
+ fi
336
+
337
+ printf "%-20s %10s %10s %10s\n" "Date" "Mean" "Min" "Max"
338
+ echo "────────────────────────────────────────────────"
339
+
340
+ for f in $files; do
341
+ local basename
342
+ basename=$(basename "$f" .json)
343
+ if [[ "$basename" == "latest" ]]; then continue; fi
344
+
345
+ local mean min max
346
+ mean=$(jq '.results[0].mean * 1000 | floor' "$f" 2>/dev/null || echo "N/A")
347
+ min=$(jq '.results[0].min * 1000 | floor' "$f" 2>/dev/null || echo "N/A")
348
+ max=$(jq '.results[0].max * 1000 | floor' "$f" 2>/dev/null || echo "N/A")
349
+
350
+ printf "%-20s %10sms %10sms %10sms\n" "$basename" "$mean" "$min" "$max"
351
+ done
352
+ }
353
+
354
+ # Main execution
355
+ print_header
356
+
357
+ if $PROFILE; then
358
+ run_zsh_profile
359
+ elif $COMPARE; then
360
+ compare_benchmarks
361
+ elif $WATERFALL; then
362
+ render_waterfall
363
+ elif $DETAILED; then
364
+ benchmark_components
365
+ echo ""
366
+ run_hyperfine
367
+ else
368
+ run_hyperfine
369
+ fi
370
+
371
+ if [[ "$UI_ENABLED" = "1" ]]; then
372
+ echo ""
373
+ ui_info "Tip" "dot benchmark --detailed"
374
+ ui_info "Tip" "dot benchmark --profile"
375
+ ui_info "Tip" "dot benchmark --waterfall"
376
+ else
377
+ printf '%b\n' "\n${CYAN}Tip: Run 'dot benchmark --detailed' for per-component timing${NC}"
378
+ printf '%b\n' "${CYAN} Run 'dot benchmark --profile' for zprof analysis${NC}"
379
+ printf '%b\n' "${CYAN} Run 'dot benchmark --waterfall' for ASCII waterfall chart${NC}"
380
+ fi
381
+ printf '%b\n' "${CYAN} Run 'dot benchmark --compare' for history${NC}\n"
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Alias/Command Conflicts Report
4
+ # Usage: dot conflicts
5
+
6
+ set -euo pipefail
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ # shellcheck source=../dot/lib/ui.sh
10
+ # shellcheck disable=SC1091
11
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
12
+
13
+ ui_init
14
+
15
+ resolve_source_dir() {
16
+ if [[ -n "${CHEZMOI_SOURCE_DIR:-}" && -d "$CHEZMOI_SOURCE_DIR" ]]; then
17
+ printf "%s\n" "$CHEZMOI_SOURCE_DIR"
18
+ return
19
+ fi
20
+ if [[ -d "$HOME/.dotfiles" ]]; then
21
+ printf "%s\n" "$HOME/.dotfiles"
22
+ return
23
+ fi
24
+ if [[ -d "$HOME/.local/share/chezmoi" ]]; then
25
+ printf "%s\n" "$HOME/.local/share/chezmoi"
26
+ return
27
+ fi
28
+ return 1
29
+ }
30
+
31
+ src_dir=$(resolve_source_dir)
32
+ manifest="$src_dir/scripts/diagnostics/aliases-manifest.sh"
33
+ if [[ ! -x "$manifest" ]]; then
34
+ ui_err "Alias manifest" "not found"
35
+ exit 1
36
+ fi
37
+
38
+ tmp_manifest=$(umask 077 && mktemp)
39
+ trap 'rm -f "$tmp_manifest"' EXIT
40
+ bash "$manifest" >"$tmp_manifest"
41
+
42
+ ui_header "Alias & Command Conflicts"
43
+
44
+ ui_section "Duplicate alias definitions"
45
+
46
+ dupes=$(awk -F$'\t' '{print $1}' "$tmp_manifest" | sort | uniq -d)
47
+ if [[ -z "$dupes" ]]; then
48
+ ui_ok "Aliases" "No duplicate alias names"
49
+ else
50
+ while IFS= read -r name; do
51
+ [[ -z "$name" ]] && continue
52
+ ui_warn "Alias" "${name} defined multiple times"
53
+ awk -F$'\t' -v k="$name" '$1==k {printf " - %s (%s:%s)\n", $2, $3, $4}' "$tmp_manifest"
54
+ done <<<"$dupes"
55
+ fi
56
+
57
+ ui_section "Alias shadows real commands"
58
+ shadow_found=false
59
+ while IFS=$'\t' read -r name value _; do
60
+ if command -v "$name" >/dev/null 2>&1; then
61
+ shadow_found=true
62
+ ui_warn "Shadow" "${name} -> ${value} (also command)"
63
+ fi
64
+ done <"$tmp_manifest"
65
+
66
+ if ! $shadow_found; then
67
+ ui_ok "Shadowing" "No alias shadows detected"
68
+ fi
69
+
70
+ ui_section "Quick actions"
71
+ ui_info "List aliases" "dot aliases list"
72
+ ui_info "Regenerate cheatsheet" "dot aliases cheatsheet"