@sebastienrousseau/dotfiles 0.2.481 → 0.2.500

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/CHANGELOG.md +122 -32
  2. package/LICENSE +1 -1
  3. package/README.md +211 -242
  4. package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
  5. package/docs/AI.md +102 -0
  6. package/docs/COPYRIGHT +2 -2
  7. package/docs/NAMING_CONVENTIONS.md +95 -0
  8. package/docs/README.md +58 -249
  9. package/docs/adr/ADR-004-cli-architecture.md +2 -2
  10. package/docs/adr/ADR-006-shell-selection.md +2 -2
  11. package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
  12. package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
  13. package/docs/adr/README.md +2 -3
  14. package/docs/architecture/ARCHITECTURE.md +113 -0
  15. package/docs/architecture/INTEROP.md +36 -0
  16. package/docs/architecture/REPO_LAYOUT.md +237 -0
  17. package/docs/architecture/WALKTHROUGH.md +82 -0
  18. package/docs/architecture/fleet-deployment.md +73 -0
  19. package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
  20. package/docs/archive/MILESTONE_v0.2.493.md +43 -0
  21. package/docs/{PLAN.md → archive/PLAN.md} +1 -1
  22. package/docs/guides/INSTALL.md +140 -0
  23. package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
  24. package/docs/guides/THEMING.md +222 -0
  25. package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
  26. package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
  27. package/docs/index.md +39 -0
  28. package/docs/interop/A2A.md +32 -0
  29. package/docs/manual/00-introduction.md +85 -0
  30. package/docs/manual/01-concepts/01-architecture.md +134 -0
  31. package/docs/manual/01-concepts/02-trust-model.md +178 -0
  32. package/docs/manual/01-concepts/03-theme-engine.md +182 -0
  33. package/docs/manual/01-concepts/04-fleet.md +142 -0
  34. package/docs/manual/01-concepts/05-self-healing.md +197 -0
  35. package/docs/manual/02-tutorials/01-first-install.md +192 -0
  36. package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
  37. package/docs/manual/02-tutorials/03-create-profile.md +238 -0
  38. package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
  39. package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
  40. package/docs/manual/03-reference/01-dot-cli.md +413 -0
  41. package/docs/manual/03-reference/02-config-files.md +259 -0
  42. package/docs/manual/03-reference/03-environment.md +120 -0
  43. package/docs/manual/03-reference/04-templates.md +184 -0
  44. package/docs/manual/03-reference/05-feature-flags.md +118 -0
  45. package/docs/manual/04-cookbook/01-recipes.md +281 -0
  46. package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
  47. package/docs/manual/04-cookbook/03-faq.md +167 -0
  48. package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
  49. package/docs/manual/05-appendices/B-security-checklist.md +78 -0
  50. package/docs/manual/05-appendices/C-glossary.md +36 -0
  51. package/docs/manual/05-appendices/D-bibliography.md +54 -0
  52. package/docs/manual/05-appendices/E-license.md +34 -0
  53. package/docs/manual/_toc.yml +58 -0
  54. package/docs/manual/command-index.md +58 -0
  55. package/docs/manual/concept-index.md +164 -0
  56. package/docs/operations/ATTESTATION.md +39 -0
  57. package/docs/operations/MAINTENANCE.md +59 -0
  58. package/docs/operations/MIGRATION.md +101 -0
  59. package/docs/operations/OPERATIONS.md +164 -0
  60. package/docs/operations/RELIABILITY.md +116 -0
  61. package/docs/{ROADMAP.md → operations/ROADMAP.md} +11 -11
  62. package/docs/operations/TESTING.md +195 -0
  63. package/docs/operations/TRACEABILITY.md +31 -0
  64. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
  65. package/docs/operations/VERSION_SYNC.md +344 -0
  66. package/docs/{ALIASES.md → reference/ALIASES.md} +2 -6
  67. package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
  68. package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
  69. package/docs/reference/FEATURES.md +62 -0
  70. package/docs/reference/FONTS.md +108 -0
  71. package/docs/reference/PROFILES.md +65 -0
  72. package/docs/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
  73. package/docs/reference/SCRIPTS.md +67 -0
  74. package/docs/reference/SUPPORT_MATRIX.md +74 -0
  75. package/docs/reference/THEMES.md +113 -0
  76. package/docs/reference/TOOLS.md +105 -0
  77. package/docs/reference/UTILS.md +151 -0
  78. package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
  79. package/docs/security/AUTOMATION_SECRETS.md +22 -0
  80. package/docs/security/COMPLIANCE.md +453 -0
  81. package/docs/security/ENCRYPTION.md +52 -0
  82. package/docs/security/FMEA.md +155 -0
  83. package/docs/security/INCIDENT_RESPONSE.md +575 -0
  84. package/docs/security/KEYS.md +45 -0
  85. package/docs/security/MCP_POLICY.md +69 -0
  86. package/docs/security/POLICY_RELEASES.md +33 -0
  87. package/docs/security/README.md +24 -0
  88. package/docs/security/SECRETS.md +146 -0
  89. package/docs/security/SECURITY.md +41 -0
  90. package/docs/security/SECURITY_CHECKLIST.md +44 -0
  91. package/docs/security/SOUP_REGISTER.md +32 -0
  92. package/docs/security/THREAT_MODEL.md +120 -0
  93. package/docs/security/VERIFICATION_VALIDATION.md +224 -0
  94. package/docs/themes/README.md +3 -17
  95. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
  96. package/docs/themes/hero-shot.svg +78 -0
  97. package/dot_config/.module-manifest.json +69 -0
  98. package/dot_config/ai/identity.md +20 -0
  99. package/dot_config/ai/patterns/architect.md +14 -0
  100. package/dot_config/ai/patterns/hardener.md +13 -0
  101. package/dot_config/ai/patterns/refactor.md +13 -0
  102. package/dot_config/aider/aider.conf.yml +1 -1
  103. package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
  104. package/dot_config/atuin/config.toml +18 -1
  105. package/dot_config/bat/config +16 -1
  106. package/dot_config/claude/mcp_servers.json +3 -32
  107. package/dot_config/dotfiles/agent-card.json +29 -0
  108. package/dot_config/dotfiles/agent-profiles.json +92 -0
  109. package/dot_config/dotfiles/boot/README.md +1 -1
  110. package/dot_config/dotfiles/grub/README.md +1 -1
  111. package/dot_config/dotfiles/lock/README.md +1 -1
  112. package/dot_config/dotfiles/mcp-lock.json +33 -0
  113. package/dot_config/dotfiles/mcp-policy.json +52 -0
  114. package/dot_config/dotfiles/mcp-registry.json +47 -0
  115. package/dot_config/dotfiles/model-registry.json +20 -0
  116. package/dot_config/dotfiles/policy-bundles.json +38 -0
  117. package/dot_config/dotfiles/prompt-registry.json +16 -0
  118. package/dot_config/dotfiles/versions.env +18 -0
  119. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  120. package/dot_config/environment.d/90-wayland.conf +19 -0
  121. package/dot_config/firefox/user.js.tmpl +58 -0
  122. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  123. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  124. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  125. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  126. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  127. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  128. package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
  129. package/dot_config/fish/config.fish.tmpl +44 -0
  130. package/dot_config/fish/fish_plugins +1 -0
  131. package/dot_config/fish/functions/_.fish +3 -0
  132. package/dot_config/fish/functions/_cached_eval.fish +58 -0
  133. package/dot_config/fish/functions/als.fish +46 -0
  134. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  135. package/dot_config/fish/functions/c.fish +3 -0
  136. package/dot_config/fish/functions/cat.fish +9 -0
  137. package/dot_config/fish/functions/d.fish +7 -0
  138. package/dot_config/fish/functions/dot.fish +34 -0
  139. package/dot_config/fish/functions/h.fish +3 -0
  140. package/dot_config/fish/functions/l.fish +7 -0
  141. package/dot_config/fish/functions/la.fish +7 -0
  142. package/dot_config/fish/functions/ll.fish +7 -0
  143. package/dot_config/fish/functions/log_error.fish +13 -0
  144. package/dot_config/fish/functions/log_info.fish +13 -0
  145. package/dot_config/fish/functions/lr.fish +7 -0
  146. package/dot_config/fish/functions/lra.fish +7 -0
  147. package/dot_config/fish/functions/ls.fish +7 -0
  148. package/dot_config/fish/functions/lt.fish +7 -0
  149. package/dot_config/fish/functions/lta.fish +7 -0
  150. package/dot_config/fish/functions/notify-run.fish +11 -0
  151. package/dot_config/fish/functions/q.fish +3 -0
  152. package/dot_config/fish/functions/silent-run.fish +7 -0
  153. package/dot_config/fish/functions/yy.fish +8 -0
  154. package/dot_config/fontconfig/fonts.conf.tmpl +13 -0
  155. package/dot_config/foot/foot.ini.tmpl +33 -0
  156. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  157. package/dot_config/fzf/fzf.zsh +48 -0
  158. package/dot_config/ghostty/config.tmpl +69 -565
  159. package/dot_config/git/allowed_signers.tmpl +18 -0
  160. package/dot_config/git/commit-template +10 -0
  161. package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
  162. package/dot_config/goose/config.yaml +2 -2
  163. package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
  164. package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
  165. package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
  166. package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
  167. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  168. package/dot_config/just/justfile +18 -0
  169. package/dot_config/kanshi/config.tmpl +22 -0
  170. package/dot_config/kitty/kitty.conf.tmpl +44 -508
  171. package/dot_config/lazygit/config.yml +18 -6
  172. package/dot_config/mako/config +47 -0
  173. package/dot_config/micro/settings.json +3 -0
  174. package/dot_config/mimeapps.list +77 -0
  175. package/dot_config/mise/config.toml +63 -5
  176. package/dot_config/mongosh/mongoshrc.js +1 -0
  177. package/dot_config/mpv/input.conf +47 -0
  178. package/dot_config/mpv/mpv.conf +47 -0
  179. package/dot_config/niri/config.kdl.tmpl +327 -0
  180. package/dot_config/nushell/aliases.nu +18 -0
  181. package/dot_config/nushell/completions.nu.tmpl +52 -0
  182. package/dot_config/nushell/config.nu.tmpl +86 -0
  183. package/dot_config/nushell/env.nu.tmpl +94 -0
  184. package/dot_config/nushell/functions.nu.tmpl +17 -0
  185. package/dot_config/nvim/init.lua +14 -0
  186. package/dot_config/nvim/lazy-lock.json +45 -14
  187. package/dot_config/nvim/lua/config/autocmds.lua +45 -1
  188. package/dot_config/nvim/lua/config/keymaps.lua +13 -8
  189. package/dot_config/nvim/lua/config/lazy.lua +22 -12
  190. package/dot_config/nvim/lua/config/options.lua +1 -0
  191. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  192. package/dot_config/nvim/lua/plugins/coding.lua +11 -29
  193. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  194. package/dot_config/nvim/lua/plugins/dap.lua +215 -4
  195. package/dot_config/nvim/lua/plugins/editor.lua +6 -10
  196. package/dot_config/nvim/lua/plugins/git.lua +1 -0
  197. package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
  198. package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
  199. package/dot_config/nvim/lua/plugins/rust.lua +1 -0
  200. package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
  201. package/dot_config/nvim/lua/plugins/ui.lua +23 -51
  202. package/dot_config/paru/paru.conf +10 -0
  203. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  204. package/dot_config/pueue/pueue.yml +34 -0
  205. package/dot_config/raycast/README.md +1 -1
  206. package/dot_config/ripgrep/ripgreprc +21 -0
  207. package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
  208. package/dot_config/shell/05-core-safety.sh +47 -0
  209. package/dot_config/shell/10-secrets.sh +40 -0
  210. package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
  211. package/dot_config/shell/40-ls-colors.sh +48 -0
  212. package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
  213. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
  214. package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
  215. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
  216. package/dot_config/shell/Brewfile.cli +8 -0
  217. package/dot_config/shell/README.md +9 -9
  218. package/dot_config/shell/als_data.txt.tmpl +65 -0
  219. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  220. package/dot_config/shell/custom/context_suggest.zsh +50 -50
  221. package/dot_config/shell/custom/error_analysis.zsh +29 -29
  222. package/dot_config/starship.toml.tmpl +85 -7
  223. package/dot_config/swaylock/config +43 -0
  224. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  225. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  226. package/dot_config/systemd/user/pueued.service +12 -0
  227. package/dot_config/systemd/user/ssh-agent.service +12 -0
  228. package/dot_config/tmux/tmux.conf.tmpl +80 -38
  229. package/dot_config/topgrade.toml.tmpl +54 -0
  230. package/dot_config/user-dirs.dirs +9 -0
  231. package/dot_config/vscode/settings.json.tmpl +9 -50
  232. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  233. package/dot_config/waybar/style.css.tmpl +211 -0
  234. package/dot_config/wezterm/wezterm.lua.tmpl +31 -203
  235. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  236. package/dot_config/yazi/keymap.toml +67 -0
  237. package/dot_config/yazi/theme.toml +102 -0
  238. package/dot_config/zathura/zathurarc +52 -0
  239. package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
  240. package/dot_config/zsh/dot_zprofile +1 -7
  241. package/dot_config/zsh/dot_zshenv +2 -3
  242. package/dot_config/zsh/dot_zshrc.tmpl +368 -69
  243. package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
  244. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
  245. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
  246. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  247. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
  248. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  249. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
  250. package/dot_local/bin/executable_ai-update +195 -0
  251. package/dot_local/bin/executable_ai_core +113 -91
  252. package/dot_local/bin/executable_antigravity +11 -0
  253. package/dot_local/bin/executable_b64 +61 -36
  254. package/dot_local/bin/executable_bm +77 -0
  255. package/dot_local/bin/executable_cb +39 -0
  256. package/dot_local/bin/executable_dot +543 -132
  257. package/dot_local/bin/executable_dot-ai +36 -0
  258. package/dot_local/bin/executable_dot-bootstrap +77 -0
  259. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  260. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  261. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  262. package/dot_local/bin/executable_dot-theme-sync +952 -0
  263. package/dot_local/bin/executable_dot_completion +2 -0
  264. package/dot_local/bin/executable_dtags +28 -0
  265. package/dot_local/bin/executable_epoch +43 -38
  266. package/dot_local/bin/executable_extract +32 -99
  267. package/dot_local/bin/executable_gbd +52 -0
  268. package/dot_local/bin/executable_gd +42 -0
  269. package/dot_local/bin/executable_git-ai-commit +35 -20
  270. package/dot_local/bin/executable_git-ai-diff +33 -18
  271. package/dot_local/bin/executable_gl +101 -0
  272. package/dot_local/bin/executable_hash +56 -18
  273. package/dot_local/bin/executable_hashsum +160 -0
  274. package/dot_local/bin/executable_hex +44 -8
  275. package/dot_local/bin/executable_jsonv +34 -10
  276. package/dot_local/bin/executable_jwt +22 -6
  277. package/dot_local/bin/executable_kill-port +18 -2
  278. package/dot_local/bin/executable_lorem +21 -6
  279. package/dot_local/bin/executable_mkscript +35 -0
  280. package/dot_local/bin/executable_monitor +56 -0
  281. package/dot_local/bin/{executable_ip → executable_myip} +16 -2
  282. package/dot_local/bin/executable_notify +22 -0
  283. package/dot_local/bin/executable_open +36 -0
  284. package/dot_local/bin/executable_pw +27 -0
  285. package/dot_local/bin/executable_rec-start +46 -0
  286. package/dot_local/bin/executable_rec-stop +35 -0
  287. package/dot_local/bin/executable_regex +49 -13
  288. package/dot_local/bin/executable_start-niri +8 -0
  289. package/dot_local/bin/executable_tmux-sessionizer +276 -149
  290. package/dot_local/bin/executable_tour +112 -74
  291. package/dot_local/bin/executable_up +21 -0
  292. package/dot_local/bin/executable_update +45 -11
  293. package/dot_local/bin/executable_uuid +37 -7
  294. package/dot_local/bin/executable_win +32 -0
  295. package/dot_local/bin/executable_yamlv +25 -7
  296. package/dot_local/share/bash-completion/completions/dot +62 -44
  297. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  298. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  299. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  300. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  301. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  302. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  303. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  304. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  305. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  306. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  307. package/dot_local/share/man/man1/dot.1 +149 -0
  308. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  309. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  310. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  311. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  312. package/dot_local/share/zsh/completions/_dot +283 -0
  313. package/install.sh +297 -210
  314. package/package.json +17 -5
  315. package/scripts/ci/check-copyright-headers.sh +96 -0
  316. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  317. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  318. package/scripts/ci/validate-ci-config.sh +41 -39
  319. package/scripts/demo/record.sh +3 -2
  320. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  321. package/scripts/diagnostics/alias-governance.sh +137 -0
  322. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  323. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  324. package/scripts/diagnostics/benchmark.sh +209 -29
  325. package/scripts/diagnostics/conflicts.sh +72 -0
  326. package/scripts/diagnostics/doctor-unified.sh +38 -0
  327. package/scripts/diagnostics/doctor.sh +491 -65
  328. package/scripts/diagnostics/drift-dashboard.sh +17 -6
  329. package/scripts/diagnostics/health.sh +351 -110
  330. package/scripts/diagnostics/history-analysis.sh +12 -4
  331. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  332. package/scripts/diagnostics/perf.sh +225 -0
  333. package/scripts/diagnostics/scorecard.sh +118 -0
  334. package/scripts/diagnostics/secret-governance.sh +58 -0
  335. package/scripts/diagnostics/security-score.sh +139 -93
  336. package/scripts/diagnostics/smoke-test.sh +87 -0
  337. package/scripts/diagnostics/snapshot.sh +89 -0
  338. package/scripts/diagnostics/verify.sh +107 -0
  339. package/scripts/diagnostics/verify_state.sh +2 -2
  340. package/scripts/diagnostics/version-locks.sh +79 -0
  341. package/scripts/diagnostics/workstation-attestation.sh +181 -0
  342. package/scripts/docs/build-manual.sh +883 -0
  343. package/scripts/docs/check-manual.sh +213 -0
  344. package/scripts/dot/commands/agent.sh +465 -0
  345. package/scripts/dot/commands/ai.sh +416 -0
  346. package/scripts/dot/commands/aliases.sh +250 -0
  347. package/scripts/dot/commands/appearance.sh +21 -4
  348. package/scripts/dot/commands/core.sh +59 -4
  349. package/scripts/dot/commands/diagnostics.sh +132 -3
  350. package/scripts/dot/commands/fleet.sh +399 -0
  351. package/scripts/dot/commands/lint.sh +177 -0
  352. package/scripts/dot/commands/manual.sh +168 -0
  353. package/scripts/dot/commands/meta.sh +148 -17
  354. package/scripts/dot/commands/patterns.sh +54 -0
  355. package/scripts/dot/commands/restore.sh +57 -35
  356. package/scripts/dot/commands/secrets.sh +151 -9
  357. package/scripts/dot/commands/security.sh +3 -0
  358. package/scripts/dot/commands/tools.sh +268 -27
  359. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  360. package/scripts/dot/lib/bento.sh +49 -0
  361. package/scripts/dot/lib/log.sh +194 -0
  362. package/scripts/dot/lib/platform.sh +98 -0
  363. package/scripts/dot/lib/ui.sh +507 -0
  364. package/scripts/dot/lib/utils.sh +318 -18
  365. package/scripts/fonts/install-nerd-fonts.sh +19 -10
  366. package/scripts/fonts/patch-fonts.sh +1 -0
  367. package/scripts/git-hooks/install.sh +11 -0
  368. package/scripts/git-hooks/pre-commit +12 -0
  369. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  370. package/scripts/git-hooks/pre-push +29 -0
  371. package/scripts/git-hooks/prepare-commit-msg +29 -0
  372. package/scripts/lib/secrets_provider.sh +158 -0
  373. package/scripts/maintenance/check-updates.sh +131 -0
  374. package/scripts/ops/ai-setup.sh +55 -0
  375. package/scripts/ops/bundle.sh +77 -0
  376. package/scripts/ops/chaos.sh +49 -0
  377. package/scripts/ops/chezmoi-apply.sh +245 -17
  378. package/scripts/ops/chezmoi-diff.sh +1 -0
  379. package/scripts/ops/chezmoi-remove.sh +2 -0
  380. package/scripts/ops/chezmoi-update.sh +34 -2
  381. package/scripts/ops/heal-chezmoi.sh +51 -0
  382. package/scripts/ops/heal-system.sh +128 -0
  383. package/scripts/ops/heal-tools.sh +340 -0
  384. package/scripts/ops/heal.sh +98 -342
  385. package/scripts/ops/post-apply-repair.sh +106 -0
  386. package/scripts/ops/prewarm.sh +127 -0
  387. package/scripts/ops/release.sh +252 -0
  388. package/scripts/ops/rollback.sh +86 -28
  389. package/scripts/ops/setup.sh +137 -0
  390. package/scripts/ops/teleport.sh +2 -1
  391. package/scripts/qa/coverage-baseline.sh +60 -0
  392. package/scripts/qa/docs-coverage.sh +111 -0
  393. package/scripts/qa/reliability-audit.sh +138 -0
  394. package/scripts/qa/traceability-coverage.sh +116 -0
  395. package/scripts/qa/validate-examples.sh +26 -0
  396. package/scripts/qa/wsl-contract.sh +11 -0
  397. package/scripts/release/package-policy-bundles.sh +125 -0
  398. package/scripts/secrets/age-init.sh +1 -0
  399. package/scripts/secrets/create-secrets-file.sh +1 -0
  400. package/scripts/secrets/encrypt-ssh-key.sh +1 -0
  401. package/scripts/security/backup.sh +44 -4
  402. package/scripts/security/dns-doh.sh +36 -14
  403. package/scripts/security/encryption-check.sh +27 -12
  404. package/scripts/security/enforce-policies.sh +11 -16
  405. package/scripts/security/firewall.sh +76 -20
  406. package/scripts/security/lock-configs.sh +2 -2
  407. package/scripts/security/lock-screen.sh +40 -18
  408. package/scripts/security/manage-secrets.sh +42 -29
  409. package/scripts/security/ssh-cert.sh +203 -0
  410. package/scripts/security/telemetry-kill.sh +40 -18
  411. package/scripts/security/usb-safety.sh +37 -15
  412. package/scripts/theme/apply-gnome-theme.sh +87 -56
  413. package/scripts/theme/extract-theme.py +677 -0
  414. package/scripts/theme/install-boot-logo.sh +1 -0
  415. package/scripts/theme/install-catppuccin-themes.sh +57 -33
  416. package/scripts/theme/install-cursors.sh +1 -0
  417. package/scripts/theme/install-file-icons.sh +1 -0
  418. package/scripts/theme/install-grub-theme.sh +11 -1
  419. package/scripts/theme/install-lock-icon.sh +1 -0
  420. package/scripts/theme/merge-wallpaper.sh +141 -0
  421. package/scripts/theme/rebuild-themes.sh +309 -0
  422. package/scripts/theme/switch.sh +308 -137
  423. package/scripts/theme/wallpaper-rotate.sh +66 -12
  424. package/scripts/theme/wallpaper-sync.sh +386 -31
  425. package/scripts/tools/cmatrix.sh +1 -0
  426. package/scripts/tools/detect-collisions.py +1 -1
  427. package/scripts/tools/emoji-picker.sh +4 -1
  428. package/scripts/tools/figlet-banner.sh +1 -0
  429. package/scripts/tools/log-rotate.sh +2 -1
  430. package/scripts/tools/lolcat-wrap.sh +1 -0
  431. package/scripts/tools/pipes.sh +1 -0
  432. package/scripts/tuning/linux.sh +23 -13
  433. package/scripts/tuning/macos.sh +13 -4
  434. package/scripts/uninstall.sh +85 -0
  435. package/scripts/version-sync.sh +487 -0
  436. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  437. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  438. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  439. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  440. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  441. package/templates/projects/go/README.md +1 -1
  442. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  443. package/templates/projects/go/go.sum +0 -0
  444. package/templates/projects/molecule/README.md +1 -1
  445. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  446. package/templates/projects/node/README.md +1 -1
  447. package/templates/projects/node/package-lock.json +12 -0
  448. package/templates/projects/node/src/index.js +1 -0
  449. package/templates/projects/packer/README.md +1 -1
  450. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  451. package/templates/projects/python/README.md +1 -1
  452. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  453. package/templates/projects/python/tests/test_basic.py +1 -0
  454. package/docs/ARCHITECTURE.md +0 -229
  455. package/docs/COMPLIANCE.md +0 -47
  456. package/docs/FEATURES.md +0 -166
  457. package/docs/FONTS.md +0 -147
  458. package/docs/INSTALL.md +0 -119
  459. package/docs/KEYS.md +0 -40
  460. package/docs/OPERATIONS.md +0 -130
  461. package/docs/PR_DESCRIPTION.md +0 -149
  462. package/docs/SECRETS.md +0 -76
  463. package/docs/SECURITY.md +0 -30
  464. package/docs/SECURITY_CHECKLIST.md +0 -25
  465. package/docs/TASK.md +0 -99
  466. package/docs/TESTING.md +0 -190
  467. package/docs/TOOLS.md +0 -146
  468. package/docs/UTILS.md +0 -105
  469. package/docs/WALKTHROUGH.md +0 -165
  470. package/dot_config/clippy.toml +0 -55
  471. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  472. package/dot_config/firefox/user.js +0 -8
  473. package/dot_config/git/config.tmpl +0 -77
  474. package/dot_config/go/aliases.sh +0 -61
  475. package/dot_config/go/env.sh +0 -24
  476. package/dot_config/ice/README.md +0 -13
  477. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  478. package/dot_config/lsd/config.yaml +0 -19
  479. package/dot_config/nvim/snippets/all.lua +0 -9
  480. package/dot_config/nvim/snippets/python.lua +0 -16
  481. package/dot_config/shell/00-container-detect.sh +0 -53
  482. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  483. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  484. package/dot_config/shell/90-theme-switch.sh +0 -70
  485. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  486. package/dot_config/waybar/style.css +0 -8
  487. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  488. package/dot_local/bin/executable_zig-install +0 -89
  489. package/dot_local/bin/voice_ops +0 -7
  490. package/scripts/ops/health-check.sh +0 -380
  491. package/scripts/tests/README.md +0 -241
  492. package/scripts/tests/benchmark.sh +0 -91
  493. package/scripts/tests/framework/assertions.sh +0 -283
  494. package/scripts/tests/framework/mocks.sh +0 -201
  495. package/scripts/tests/framework/test_runner.sh +0 -189
  496. package/scripts/tests/integration/test_install.sh +0 -237
  497. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  498. package/scripts/tests/performance/regression_check.sh +0 -73
  499. package/scripts/tests/performance/stress_test.sh +0 -65
  500. package/scripts/tests/test-aliases.sh +0 -25
  501. package/scripts/tests/test-docker.sh +0 -48
  502. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  503. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  504. package/scripts/tests/unit/test_backup.sh +0 -227
  505. package/scripts/tests/unit/test_case_functions.sh +0 -238
  506. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  507. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  508. package/scripts/tests/unit/test_encode64.sh +0 -67
  509. package/scripts/tests/unit/test_environment.sh +0 -78
  510. package/scripts/tests/unit/test_extract.sh +0 -163
  511. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  512. package/scripts/tests/unit/test_genpass.sh +0 -298
  513. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  514. package/scripts/tests/unit/test_installers.sh +0 -172
  515. package/scripts/tests/unit/test_keygen.sh +0 -68
  516. package/scripts/tests/unit/test_logging.sh +0 -96
  517. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  518. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  519. package/scripts/tests/unit/test_prependpath.sh +0 -66
  520. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  521. package/scripts/tests/unit/test_rd.sh +0 -230
  522. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  523. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  524. package/scripts/tests/unit/test_template_validation.sh +0 -238
  525. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  526. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  527. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  528. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  529. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  530. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  531. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  532. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  533. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  534. package/scripts/tests/unit/test_zipf.sh +0 -76
  535. /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
  536. /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
  537. /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
  538. /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
  539. /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
  540. /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
  541. /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
  542. /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
  543. /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
  544. /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
  545. /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
  546. /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
@@ -0,0 +1,85 @@
1
+ # ADR-008: Alias System Architecture
2
+
3
+ ## Status
4
+
5
+ Accepted
6
+
7
+ ## Date
8
+
9
+ 2026-03-08
10
+
11
+ ## Context
12
+
13
+ The dotfiles manage 98 alias files across 30+ categories (git, docker, kubernetes, python, security, etc.). These need to load fast, support per-machine toggling, and work across Zsh, Bash, Fish, and Nushell.
14
+
15
+ **Design questions:**
16
+ 1. How to organize alias files for maintainability?
17
+ 2. How to control which aliases load on which machines?
18
+ 3. How to balance startup speed with alias availability?
19
+ 4. How to bridge POSIX aliases to non-POSIX shells?
20
+
21
+ ## Decision
22
+
23
+ ### Organization
24
+
25
+ Aliases are organized by tool/domain in `.chezmoitemplates/aliases/<category>/<name>.aliases.sh`:
26
+
27
+ ```text
28
+ aliases/
29
+ git/git.aliases.sh, signing.aliases.sh
30
+ docker/docker.aliases.sh
31
+ kubernetes/kubernetes.aliases.sh
32
+ security/crypto-utils.aliases.sh, ssh-keys.aliases.sh, ...
33
+ default/default.aliases.sh
34
+ ...
35
+ ```
36
+
37
+ ### Profile Tiers
38
+
39
+ Three profiles control alias scope (set in `.chezmoidata.toml`):
40
+
41
+ | Profile | Scope | Use Case |
42
+ |---------|-------|----------|
43
+ | `minimal` | Core only, excludes interactive/sudo | Servers, containers |
44
+ | `standard` | All core + selected ecosystem | Laptops, workstations |
45
+ | `full` | Everything including heavy/specialized | Dev machines |
46
+
47
+ ### Bucket Toggles
48
+
49
+ Per-category flags in `.chezmoidata.toml` under `[aliases.buckets]`:
50
+ ```toml
51
+ [aliases.buckets]
52
+ system = true
53
+ svn = false # disable on machines without SVN
54
+ ```
55
+
56
+ ### Two-Phase Loading
57
+
58
+ 1. **Eager (90-ux-aliases.sh):** Core categories loaded at shell startup (~40KB). Includes: archives, cd, clear, configuration, default, diagnostics, disk-usage, editor, git, interactive, installer, mkdir, modern, ps, rsync, sudo, system.
59
+
60
+ 2. **Lazy (91-ux-aliases-lazy.sh):** Ecosystem aliases deferred until first prompt via `precmd` hook. Includes: docker, kubernetes, terraform, gcloud, python, npm, rust, security, etc.
61
+
62
+ ### Function Groups (groups.json)
63
+
64
+ Functions use a parallel system with `groups.json` as a registry:
65
+ - Groups: api, curl, text, system, files, interactive, nav, security, misc
66
+ - Lazy-loaded per group on first invocation
67
+ - Stub functions replaced with real implementations on first call
68
+
69
+ ## Consequences
70
+
71
+ ### Positive
72
+ - Adding aliases is self-service: create a file in the right category
73
+ - Per-machine customization without forking
74
+ - Lazy loading keeps startup under 200ms even with 98 alias files
75
+ - `groups.json` enables automated bridge generation for Fish/Nushell
76
+
77
+ ### Negative
78
+ - Alias definitions wrap in functions (`set_default_aliases()`) for sourcing safety, adding complexity
79
+ - Two-phase loading means some aliases aren't available until after first prompt
80
+ - Profile/bucket system requires understanding .chezmoidata.toml
81
+
82
+ ### Trade-offs
83
+ - Chose file-per-category over monolithic alias file for maintainability
84
+ - Chose runtime extraction for Fish/Nushell over maintaining parallel definitions
85
+ - Chose lazy loading over compile-time bundling for flexibility
@@ -13,6 +13,8 @@ significant architectural decisions made in this project.
13
13
  | [ADR-004](ADR-004-cli-architecture.md) | Chezmoi + Custom CLI Wrapper Architecture | Accepted |
14
14
  | [ADR-005](ADR-005-chezmoi-choice.md) | Chezmoi as Dotfiles Manager | Accepted |
15
15
  | [ADR-006](ADR-006-shell-selection.md) | Zsh as Default Shell | Accepted |
16
+ | [ADR-007](ADR-007-multi-shell-parity.md) | Multi-Shell Parity Strategy | Accepted |
17
+ | [ADR-008](ADR-008-alias-system-architecture.md) | Alias System Architecture | Accepted |
16
18
 
17
19
  ## ADR Format
18
20
 
@@ -28,6 +30,3 @@ Each ADR follows this structure:
28
30
  - [Documenting Architecture Decisions](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions)
29
31
  - [ADR Tools](https://github.com/npryce/adr-tools)
30
32
 
31
- ---
32
-
33
- Made with ❤️ by [Sebastien Rousseau](https://github.com/sebastienrousseau)
@@ -0,0 +1,113 @@
1
+ # Architecture
2
+
3
+ Core architectural decisions and system design of the dotfiles shell distribution.
4
+
5
+ ---
6
+
7
+ ## Philosophy
8
+
9
+ - **XDG-First**: Configuration lives under `~/.config/` to keep the home directory clean.
10
+ - **Multi-Shell**: First-class support for Zsh, Fish, and Nushell with a shared logic core.
11
+ - **Fast Startup**: Heavy features are deferred or autoloaded to keep the first prompt under 50ms.
12
+ - **Deterministic**: Nix Flakes provide bit-for-bit identical environments across machines.
13
+ - **Non-Blocking**: Background daemons (Pueue) handle upgrades and builds without stalling the shell.
14
+
15
+ ## System Layout
16
+
17
+ ```text
18
+ ~/.dotfiles/
19
+ ├── dot_config/ # Managed application configurations (~/.config/)
20
+ │ ├── zsh/ # Modular Zsh rc.d architecture
21
+ │ ├── fish/ # Autoloading Fish configuration
22
+ │ ├── nushell/ # Structured data shell config
23
+ │ ├── shell/ # Shared logic (aliases, paths, functions)
24
+ │ └── ... # 50+ tool configurations (nvim, tmux, ghostty, etc.)
25
+ ├── dot_local/ # Local binaries and scripts (~/.local/bin/)
26
+ ├── .chezmoitemplates/ # Unified source for aliases, functions, and paths
27
+ ├── scripts/ # Internal libraries and diagnostics
28
+ ├── nix/ # Nix Flake for deterministic toolchains
29
+ ├── lib/wasm-tools/ # Rust source for Wasm utilities
30
+ └── install.sh # Universal bootstrap script (zero dependencies)
31
+ ```
32
+
33
+ ---
34
+
35
+ ## Shell Startup Strategies
36
+
37
+ ### Shared: `_cached_eval`
38
+
39
+ Across Zsh, Fish, and Bash, an idempotent caching wrapper avoids redundant tool initialization (Starship, Zoxide, Atuin).
40
+
41
+ 1. **Intercept** — check if a cached version of the tool's `eval` output exists in `~/.cache/shell/`.
42
+ 2. **Validate** — compare the cache timestamp against the tool binary's mtime.
43
+ 3. **Bypass** — if valid, `source` the cached text directly, saving 20-50ms per tool.
44
+
45
+ ### Lazy-Hydration Model
46
+
47
+ To reach a fluid first-prompt target (< 50ms), the shell uses a three-phase startup:
48
+
49
+ 1. **Phase 1 (Visual Paint)** — render the prompt immediately using static escape codes.
50
+ 2. **Phase 2 (Async Hydration)** — dispatch tool initializations (mise, atuin, etc.) to background workers.
51
+ 3. **Phase 3 (On-Demand Activation)** — environment hydration occurs on first user interaction or after 500ms of idle time.
52
+
53
+ ---
54
+
55
+ ## Artifact Mode
56
+
57
+ A minimal environment triggered by `DOTFILES_ARTIFACT_MODE=1`.
58
+
59
+ - **Minimalist UI** — strips prompt complexity, leaving only a green `->`.
60
+ - **Intelligence Surface** — an async Bento-style dashboard rendered via `bento.sh` that provides environment context (Node version, cloud status, Git health) without blocking the main thread.
61
+ - **Redraw Signaling** — uses `SIGWINCH` to return control after background hydration completes.
62
+
63
+ ---
64
+
65
+ ## Ultra-Fast Mode
66
+
67
+ Set `DOTFILES_ULTRA_FAST=1` to skip all non-essential initialization. Only core paths, aliases, and the prompt are loaded. Useful for:
68
+
69
+ - CI/CD pipelines where full shell setup is unnecessary
70
+ - Rapid scripting sessions where startup latency matters
71
+ - Benchmarking baseline shell performance
72
+
73
+ ---
74
+
75
+ ## Debug and Trace Modes
76
+
77
+ ### DOTFILES_DEBUG=1
78
+
79
+ Enables verbose diagnostic output during shell startup. Prints which files are sourced and their load times.
80
+
81
+ ### DOTFILES_TRACE=1
82
+
83
+ Enables `set -x` tracing for the entire shell startup sequence. Output is written to `~/.local/state/dotfiles/debug.log` for post-mortem analysis.
84
+
85
+ ---
86
+
87
+ ## Function Groups (groups.json)
88
+
89
+ Functions are organized into groups defined in `.chezmoitemplates/functions/groups.json`:
90
+
91
+ | Group | Functions | Description |
92
+ |-------|-----------|-------------|
93
+ | `api` | apihealth, apilatency, apiload | API testing utilities |
94
+ | `curl` | curlheader, curlstatus, curltime, httpdebug | HTTP debugging |
95
+ | `text` | encode64, kebabcase, lowercase, titlecase, ... | Text transformation |
96
+ | `system` | environment, freespace, hostinfo, myproc, sysinfo | System introspection |
97
+ | `files` | backup, extract, hexdump, hiddenfiles, size, zipf | File operations |
98
+ | `interactive` | banner, emoji, matrix, rainbow, stopwatch | Terminal fun |
99
+ | `nav` | cdls, goto, ql | Navigation shortcuts |
100
+ | `security` | genpass, keygen, mount_read_only | Security utilities |
101
+ | `misc` | dothelp, view-source, prependpath, caffeine | Miscellaneous |
102
+
103
+ Groups are lazy-loaded: stub functions are defined at startup, and the real implementation is loaded on first invocation. This keeps startup fast while providing 52+ functions on demand.
104
+
105
+ The `groups.json` schema maps group names to arrays of relative paths (including subdirectory):
106
+
107
+ ```json
108
+ {
109
+ "group_name": ["group_name/function1.sh", "group_name/function2.sh"]
110
+ }
111
+ ```
112
+
113
+ Each `.sh` file lives in a subdirectory matching its group and defines a single function with the same name as the file (minus `.sh` extension).
@@ -0,0 +1,36 @@
1
+ # Cross-Platform Interoperability
2
+
3
+ How dotfiles commands and shims map across macOS, Linux, and WSL2.
4
+
5
+ ## Command Mapping
6
+
7
+ | Alias / Command | macOS | Linux (Debian/Arch) | WSL2 (Windows Host) |
8
+ | :--- | :--- | :--- | :--- |
9
+ | `cb` (Clipboard) | `pbcopy` / `pbpaste` | `xclip` / `wl-copy` | `clip.exe` / `powershell.exe` |
10
+ | `open` | `open` | `xdg-open` | `wslview` / `explorer.exe` |
11
+ | `notify` | `osascript` (AppleScript) | `notify-send` / `gum log` | `powershell.exe` (Toast) / `gum` |
12
+ | `win` (Paths) | N/A | N/A | `wslpath` |
13
+ | `browser` | `open` | `xdg-open` | `powershell.exe Start-Process` |
14
+
15
+ ## Infrastructure Parity
16
+
17
+ | Feature | macOS | Linux | WSL2 |
18
+ | :--- | :--- | :--- | :--- |
19
+ | **Package Manager** | Homebrew (`brew`) | `apt` / `pacman` / `nix` | `apt` + Windows binaries |
20
+ | **Shell Startup** | Async lazy-hydration | Async lazy-hydration | Async (optimized for IO) |
21
+ | **Environment** | native plist / launchctl | systemd / dbus | systemd (if enabled) / init |
22
+ | **Hardware** | Secure Enclave | TPM 2.0 / LUKS | Windows Hello bridge |
23
+
24
+ ## Troubleshooting
25
+
26
+ ### WSL2 IO Latency
27
+ Keep projects in the Linux filesystem (`~/...`), not under `/mnt/c/`.
28
+
29
+ ### WSL2 Windows Binary Path
30
+ If you've disabled WSL path sharing, make sure Windows-side binaries like `clip.exe` and `explorer.exe` are still reachable in `$PATH`.
31
+
32
+ ### macOS Permissions
33
+ Grant your terminal "Full Disk Access" in System Settings so dotfiles can manage all configurations.
34
+
35
+ ### Linux GUI Fallbacks
36
+ In headless environments, GUI commands like `cb` and `open` fall back to `gum log` or terminal bell instead of hanging.
@@ -0,0 +1,237 @@
1
+ <!-- Copyright (c) 2015-2026 Dotfiles. All rights reserved. -->
2
+
3
+ # Repository Layout
4
+
5
+ A map of every top-level folder and file in this repo, grouped by purpose.
6
+ Use this when you're not sure where something belongs or why a particular
7
+ directory exists.
8
+
9
+ For naming conventions (file prefixes, run-script numbering tiers), see
10
+ [`../NAMING_CONVENTIONS.md`](../NAMING_CONVENTIONS.md). For the broader
11
+ architectural rationale (philosophy, startup model, flake strategy), see
12
+ [`ARCHITECTURE.md`](ARCHITECTURE.md). For the configuration-management
13
+ strategy at a higher level, see [`../../CONFIG_STRATEGY.md`](../../CONFIG_STRATEGY.md).
14
+
15
+ ---
16
+
17
+ ## 1. Chezmoi source tree — the actual dotfiles
18
+
19
+ Chezmoi reads this directory and deploys to `$HOME`. Filename **prefixes**
20
+ carry semantics:
21
+
22
+ | Prefix | Effect | Example |
23
+ |------------------|---------------------------------------------|----------------------------------------------------|
24
+ | `dot_` | Deployed with a leading `.` | `dot_gitconfig.tmpl` → `~/.gitconfig` |
25
+ | `private_` | Sets `0600` perms on deploy | `private_dot_ssh/` → `~/.ssh/` |
26
+ | `executable_` | Sets `+x` on deploy | `executable_dot` → `~/.local/bin/dot` |
27
+ | `run_onchange_` | Runs once when its content hash changes | `run_onchange_20-ghostty-config.sh.tmpl` |
28
+ | `.tmpl` | Rendered as a Go template at apply time | `dot_npmrc.tmpl` |
29
+
30
+ > **Gotcha:** `executable_dot_foo` deploys as `.foo` (not `dot_foo`). Chezmoi
31
+ > consumes the `dot_` prefix even when stacked with `executable_`.
32
+
33
+ ### Chezmoi data and templates
34
+
35
+ | Path | Role |
36
+ |-----------------------------|----------------------------------------------------------------------------------------------|
37
+ | `.chezmoi.toml.tmpl` | Init-time prompts (name, email, signing key). |
38
+ | `.chezmoidata.toml` | **Source of truth** for version, profile, default theme, shell, feature flags. |
39
+ | `.chezmoidata/` | Split data files: `themes.toml`, `keybinds.toml`, `hardware.toml`. |
40
+ | `.chezmoiignore.tmpl` | Feature-flag-gated "don't deploy these to `$HOME`" list. |
41
+ | `.chezmoitemplates/` | Reusable template partials (`aliases/`, `functions/`, `paths/`, `desktop/`). Not deployed. |
42
+
43
+ ### Shell rc files (root level)
44
+
45
+ | Path | Target | Purpose |
46
+ |---|---|---|
47
+ | `dot_bashrc`, `dot_profile` | `~/.bashrc`, `~/.profile` | Bash startup |
48
+ | `dot_zshenv`, `dot_zprofile`, `dot_zshrc` | `~/.zshenv` etc. | Zsh startup chain (see [`ARCHITECTURE.md`](ARCHITECTURE.md) for order) |
49
+ | `dot_vimrc`, `dot_inputrc`, `dot_psqlrc`, `dot_sqliterc`, `dot_Xresources` | `~/.*` | Classic per-tool dotfiles |
50
+ | `dot_gitconfig.tmpl`, `dot_npmrc.tmpl` | `~/.gitconfig`, `~/.npmrc` | Templated — identity/tokens injected at apply |
51
+ | `dot_cargo/config.toml.tmpl` | `~/.cargo/config.toml` | Rust build dirs redirected to `/tmp` |
52
+ | `dot_fdignore`, `dot_noderc`, `dot_rustfmt.toml` | `~/.*` | Per-tool config |
53
+ | `private_dot_netrc.tmpl`, `private_dot_ssh/` | `~/.netrc`, `~/.ssh/` | 0600 files |
54
+
55
+ ### Large chezmoi directories
56
+
57
+ | Path | Target | Notes |
58
+ |---------------|-------------------|----------------------------------------------------------------------------------------------|
59
+ | `dot_config/` | `~/.config/` | **Largest** — fish, zsh, nvim, ghostty, tmux, niri, mise, and ~90 other app configs. |
60
+ | `dot_local/bin/` | `~/.local/bin/` | Every `dot-*` subcommand and helper script (the `dot` CLI lives here). |
61
+ | `dot_local/share/` | `~/.local/share/` | Fonts and shared data. |
62
+ | `dot_etc/opt/chrome/policies/` | `~/etc/opt/chrome/policies/` | Managed Chrome enterprise policies. |
63
+
64
+ ### `run_onchange_*` hooks at the root
65
+
66
+ Scripts triggered when their content changes. Numbering follows the
67
+ convention in [`../NAMING_CONVENTIONS.md`](../NAMING_CONVENTIONS.md):
68
+
69
+ - `run_onchange_20-ghostty-config.sh.tmpl` — re-renders Ghostty config
70
+ - `run_onchange_21-topgrade-config.sh.tmpl` — refreshes topgrade config
71
+ - `run_onchange_after_fonts.sh` — post-deploy font cache refresh
72
+
73
+ ---
74
+
75
+ ## 2. AI-assistant files — **three** files, three distinct roles
76
+
77
+ This is the most common source of confusion in the repo. All three files
78
+ exist on purpose and don't overlap:
79
+
80
+ | File | Deployed to | Audience | Scope |
81
+ |-------------------------------|-----------------------|------------------------------------------------------------------|-------------------------------|
82
+ | `dot_claude/CLAUDE.md` | `~/.claude/CLAUDE.md` | Claude Code, in **any** cwd on this machine | Personal, cross-project |
83
+ | `CLAUDE.md` (repo root) | Not deployed | Claude Code, when cwd is **this** repo | Repo-scoped guidance |
84
+ | `OPENCODE.md` (repo root) | Not deployed | OpenCode CLI, when cwd is **this** repo | Repo-scoped guidance (mirror) |
85
+ | `.claude/settings.local.json` | Not deployed, **not tracked** | Claude Code | Per-machine permission allowlist |
86
+
87
+ Each of the three tracked files carries a header comment explaining its
88
+ role to prevent drift. Keep that header in place when editing.
89
+
90
+ ---
91
+
92
+ ## 3. Agent-protocol surface
93
+
94
+ Standards-compliant discovery endpoints that let external agents and tools
95
+ find this workstation's agent capabilities:
96
+
97
+ | Path | Purpose |
98
+ |-------------------------------------|-----------------------------------------------------------------------------|
99
+ | `.well-known/agent-card.json` | A2A v0.3 agent card — skills, capabilities, URL |
100
+ | `.well-known/agent.json` | Legacy pointer card, kept for back-compat |
101
+ | `.well-known/mcp/server-card.json` | MCP server discovery manifest |
102
+
103
+ ---
104
+
105
+ ## 4. CI/CD and repo metadata
106
+
107
+ | Path | Purpose |
108
+ |------------------------------------------------------------------|----------------------------------------------------------------|
109
+ | `.github/workflows/` | 20+ workflows: `ci.yml`, `ci-enforced.yml`, reusable lints, release pipelines |
110
+ | `.github/workflows/reusable-*.yml` | Shared workflow fragments (`shell-lint`, `lua-lint`, `nix-lint`, `copyright-lint`, `test-suite`, `secrets-scan`, `security-baseline`) |
111
+ | `.github/ISSUE_TEMPLATE/`, `PULL_REQUEST_TEMPLATE.md`, `CODEOWNERS`, `SECURITY.md`, `CONTRIBUTING.md`, `CODE-OF-CONDUCT.md`, `FUNDING.yml` | Standard GitHub metadata |
112
+ | `.github/security-policies/` | Org-level security policy files |
113
+ | `.github/branch-protection-config.json`, `BRANCH_PROTECTION.md` | Codified branch-protection settings |
114
+ | `.github/dependabot.yml` | Dependency bump schedule |
115
+ | `.devcontainer/` | GitHub Codespaces + VS Code dev container |
116
+ | `Dockerfile.test`, `tests/Dockerfile.sandbox` | Ubuntu sandboxes for integration / e2e tests |
117
+
118
+ ---
119
+
120
+ ## 5. Build, bootstrap, and dev tooling
121
+
122
+ | Path | Purpose |
123
+ |-----------------------------------------|--------------------------------------------------------------------------------|
124
+ | `install.sh` | Top-level one-liner installer |
125
+ | `install/provision/`, `install/lib/` | Platform-specific install helpers invoked by `install.sh` |
126
+ | `Makefile`, `Justfile.tmpl`, `treefmt.toml` | Convenience runners |
127
+ | `mise.toml`, `mise-versions.lock.json` | Mise toolchain versions (locked) |
128
+ | `flake.nix`, `flake.lock` (root) | Root Nix flake for `direnv` + repo dev shell |
129
+ | `nix/flake.nix`, `nix/home.nix` | Separate flake for Home Manager activation (used by `dot upgrade` and `ci-enforced.yml → lint-nix`) |
130
+ | `lib/wasm-tools/` | Vendored WebAssembly tooling (build output gitignored) |
131
+ | `.envrc` | `direnv` hook into the root flake |
132
+
133
+ ---
134
+
135
+ ## 6. Scripts (`scripts/`) — repo-local, never deployed
136
+
137
+ Nothing under `scripts/` ends up in `$HOME`. It's all tooling for running
138
+ the repo itself.
139
+
140
+ | Subdir | Purpose |
141
+ |-------------------------------------------|-----------------------------------------------------------------|
142
+ | `scripts/ci/` | CI helpers (`check-copyright-headers.sh`, `install-chezmoi-verified.sh`, `validate-ci-config.sh`) |
143
+ | `scripts/dot/commands/` | Subcommand implementations for the `dot` CLI |
144
+ | `scripts/docs/` | Manual build pipeline (`build-manual.sh`, `check-manual.sh`) |
145
+ | `scripts/theme/` | K-Means CIELAB theme engine + HEIC merge/convert |
146
+ | `scripts/ops/`, `scripts/maintenance/`, `scripts/release/` | Operator tooling |
147
+ | `scripts/diagnostics/`, `scripts/qa/`, `scripts/security/`, `scripts/secrets/` | Domain-scoped scripts |
148
+ | `scripts/fonts/`, `scripts/demo/`, `scripts/git-hooks/`, `scripts/tools/`, `scripts/tuning/`, `scripts/lib/` | Supporting scripts |
149
+ | `scripts/uninstall.sh`, `scripts/version-sync.sh` | Top-level ops entrypoints |
150
+
151
+ ---
152
+
153
+ ## 7. Documentation (`docs/`)
154
+
155
+ | Path | Purpose |
156
+ |---------------------------------------|----------------------------------------------------------------------------|
157
+ | `docs/manual/` | 26-page GNU-Stow-style reference manual (the v0.2.500 feature) |
158
+ | `docs/architecture/` | This file + core architecture docs (ARCHITECTURE, INTEROP, fleet, walkthrough) |
159
+ | `docs/operations/` | Runbooks, traceability matrix, migration notes |
160
+ | `docs/reference/` | Command/config reference material |
161
+ | `docs/guides/` | Long-form how-tos |
162
+ | `docs/security/` | Threat model, disclosure policy, audit records |
163
+ | `docs/adr/` | Architecture Decision Records |
164
+ | `docs/themes/` | Theme catalogue / screenshots |
165
+ | `docs/interop/` | Agent/MCP interop notes |
166
+ | `docs/archive/` | Superseded docs kept for history |
167
+ | `docs/NAMING_CONVENTIONS.md` | Naming bible (file prefixes, run-script numbering tiers) |
168
+ | `docs/index.md`, `docs/README.md`, `docs/AI.md`, `docs/COPYRIGHT` | Entry points |
169
+
170
+ ---
171
+
172
+ ## 8. Tests (`tests/`)
173
+
174
+ | Path | Purpose |
175
+ |-------------------------------------------|--------------------------------------------------------------------------------------------|
176
+ | `tests/framework/` | `test_runner.sh`, `assertions.sh`, `mocks.sh` — the custom shell-test framework |
177
+ | `tests/unit/` | Unit tests organised by domain: `aliases/`, `ci/`, `docs/`, `dot-cli/`, `fish/`, `functions/`, `install/`, `nvim/`, `ops/`, `secrets/`, `security/`, `shell/`, `theme/`, `tools/`, `diagnostics/`, `misc/`, `nushell/` |
178
+ | `tests/integration/` | End-to-end install and apply flows |
179
+ | `tests/regression/` | Guardrail tests for previously-broken behaviours |
180
+ | `tests/performance/` | `benchmark_runner.sh` and friends |
181
+ | `tests/benchmark.sh`, `tests/test-aliases.sh`, `tests/test-docker.sh` | Top-level entrypoints |
182
+ | `tests/Dockerfile.sandbox` | Fresh-Ubuntu sandbox image for integration tests |
183
+
184
+ Tests execute shell source files directly — **do not** use Go template
185
+ syntax in non-`.tmpl` files, or the test framework will choke on the curly
186
+ braces.
187
+
188
+ ---
189
+
190
+ ## 9. Other top-level
191
+
192
+ | Path | Purpose |
193
+ |-------------------------------------------|------------------------------------------------------------------------------|
194
+ | `config/` | Repo-local tool configs: `cliff.toml` (changelog), `gitleaks.toml`, `pre-commit-config.yaml`, `stylua.toml`, `trivyignore` |
195
+ | `templates/chezmoi-data/`, `templates/projects/` | Starter scaffolding for new machines / new projects |
196
+ | `examples/` | 14 standalone demo scripts used by the manual and tutorials |
197
+ | `CHANGELOG.md`, `LICENSE`, `README.md` | Standard |
198
+ | `CONFIG_STRATEGY.md` | High-level "how configuration management works here" overview |
199
+ | `.gitattributes`, `.gitignore`, `.gitleaksignore`, `.editorconfig`, `.secrets.baseline`, `.sops.yaml`, `.luacheckrc` | Repo-level tool configs |
200
+ | `.pre-commit-config.yaml` → `config/pre-commit-config.yaml` | Symlink so `pre-commit` finds the canonical config |
201
+
202
+ ---
203
+
204
+ ## 10. Local-only artefacts (gitignored — if you see them, don't commit them)
205
+
206
+ The following paths can appear during local work but are excluded from
207
+ version control. If one of them ever shows up in `git status`, check the
208
+ `.gitignore` entry rather than adding the file:
209
+
210
+ | Path | Source |
211
+ |--------------------------|------------------------------------------------------------------------------|
212
+ | `_build/` | Output of `scripts/docs/build-manual.sh` |
213
+ | `.pnpm-store/` | pnpm's content-addressable store (should never appear here) |
214
+ | `.claude/` | Claude Code per-machine state (`settings.local.json` permission allowlists) |
215
+ | `node_modules/` | Node dependency trees from repo-local scripts |
216
+ | `.version-sync-backup/` | Timestamped backups from `version-sync.sh` |
217
+ | `lib/wasm-tools/target/` | Rust build artefacts for the vendored wasm tooling |
218
+ | `dot_etc/machines/` | Host-specific installer overrides |
219
+
220
+ ---
221
+
222
+ ## How to decide where a new file belongs
223
+
224
+ A quick decision tree for common cases:
225
+
226
+ - **New app config that lives under `~/.config/<app>/`** → `dot_config/<app>/` (see `docs/NAMING_CONVENTIONS.md` → "Adding New Modules").
227
+ - **New user-facing CLI script** → `dot_local/bin/executable_<name>`.
228
+ - **New `dot` subcommand** → implementation in `scripts/dot/commands/<name>.sh`, routing in `dot_local/bin/executable_dot`.
229
+ - **New repo-only automation** (CI helper, maintenance task, release step) → `scripts/<domain>/<name>.sh`.
230
+ - **New test** → `tests/unit/<domain>/test_<feature>.sh` (follow `test_{domain}_{feature}.sh` naming).
231
+ - **New doc** → pick the narrowest of `docs/architecture/`, `docs/reference/`, `docs/guides/`, `docs/operations/`, `docs/security/`.
232
+ - **New alias file** → `.chezmoitemplates/aliases/<category>/<tool>.aliases.sh` (see conventions doc).
233
+ - **New run-once hook** → `run_onchange_<NN>-<verb>-<noun>.sh.tmpl` at the root, using the numbering tier appropriate to its category.
234
+
235
+ If none of the above fits, stop and ask in an issue or PR before
236
+ introducing a new top-level directory. The current layout is deliberate
237
+ and one-off additions cost everyone later.
@@ -0,0 +1,82 @@
1
+ # Walkthrough
2
+
3
+ A hands-on tour of the dotfiles after installation. Run each step in your terminal to get comfortable with what's available.
4
+
5
+ ## Step 1: Verify Installation
6
+
7
+ Make sure everything landed correctly:
8
+
9
+ ```bash
10
+ dot --version
11
+ dot doctor
12
+ dot status
13
+ ```
14
+
15
+ `dot doctor` catches common problems early. If something's off, it'll tell you.
16
+
17
+ ## Step 2: Explore the Shell
18
+
19
+ The shell ships with modern replacements wired in:
20
+
21
+ ```bash
22
+ z dotfiles # Jump to ~/.dotfiles (zoxide)
23
+ z - # Go back
24
+
25
+ <Ctrl-R> # Fuzzy search command history (fzf)
26
+ <Ctrl-T> # Fuzzy find files
27
+
28
+ ls # Aliased to eza
29
+ cat file.txt # Aliased to bat
30
+ ```
31
+
32
+ ## Step 3: Git Workflow
33
+
34
+ ```bash
35
+ gst # git status
36
+ lg # Pretty log graph
37
+ ga . # git add
38
+ gcm "message" # git commit -m
39
+ lgui # Launch lazygit
40
+ ```
41
+
42
+ ## Step 4: Tmux
43
+
44
+ Prefix is `Ctrl-a`:
45
+
46
+ ```bash
47
+ <Ctrl-a> c # New window
48
+ <Ctrl-a> | # Split vertically
49
+ <Ctrl-a> - # Split horizontally
50
+ <Ctrl-a> h/j/k/l # Navigate panes (vim-style)
51
+ <Ctrl-a> f # Fuzzy session switcher
52
+ ```
53
+
54
+ ## Step 5: Neovim
55
+
56
+ ```bash
57
+ nvim .
58
+
59
+ # Inside Neovim:
60
+ <Space> # Leader — shows command palette
61
+ <Space>ff # Find files
62
+ <Space>fg # Live grep
63
+ <Space>e # Toggle file tree
64
+ ```
65
+
66
+ ## Step 6: Docker
67
+
68
+ ```bash
69
+ dps # List running containers
70
+ dco up -d # docker compose up
71
+ dlogsf container # Follow container logs
72
+ lzd # Launch lazydocker
73
+ ```
74
+
75
+ ## Step 7: Kubernetes (if enabled)
76
+
77
+ ```bash
78
+ k get pods # kubectl
79
+ kctx # Switch context
80
+ kn # Switch namespace
81
+ k9 # Launch k9s
82
+ ```
@@ -0,0 +1,73 @@
1
+ # Fleet Deployment Architecture
2
+
3
+ ## Deployment Flow
4
+
5
+ ```mermaid
6
+ ---
7
+ title: Fleet Deployment Architecture
8
+ ---
9
+ flowchart TD
10
+ subgraph repo["Git Repository (SSOT)"]
11
+ data[".chezmoidata.toml<br/>theme, profile, machine, features"]
12
+ wallpapers["~/Pictures/Wallpapers/ + System<br/>wallpapers (source of truth)"]
13
+ engine_k["K-Means CIELAB engine<br/>extract-theme.py + rebuild-themes.sh"]
14
+ themes[".chezmoidata/themes.toml<br/>auto-generated, WCAG AAA"]
15
+ hw[".chezmoidata/hardware.toml<br/>machine presets: T2, Surface, Geekom"]
16
+ keys[".chezmoidata/keybinds.toml<br/>modifier hierarchy matrix"]
17
+ tpl[".chezmoitemplates/<br/>reusable partials"]
18
+ configs["dot_config/<br/>50+ app configs as .tmpl"]
19
+ wallpapers --> engine_k --> themes
20
+ end
21
+
22
+ repo --> engine["Chezmoi Template Engine<br/>chezmoi apply"]
23
+
24
+ engine --> t2["MacBook T2<br/>scale 2.0 | macOS"]
25
+ engine --> sp["Surface Pro<br/>scale 1.5 | Linux"]
26
+ engine --> gk["Geekom A9<br/>scale 1.0 | Linux"]
27
+
28
+ subgraph apps["App Configs (per machine)"]
29
+ niri["Niri (WM)"]
30
+ ghostty["Ghostty (Term)"]
31
+ tmux["Tmux (Mux)"]
32
+ nvim["Neovim (Edit)"]
33
+ gtk["GTK (UI)"]
34
+ end
35
+
36
+ t2 --> apps
37
+ sp --> apps
38
+ gk --> apps
39
+
40
+ themes -. "colors" .-> niri & ghostty & tmux & nvim & gtk
41
+
42
+ subgraph hotreload["IPC Hot-Reload Path"]
43
+ direction LR
44
+ user(["User runs dot-theme-sync"]) --> ipc["dot-theme-sync<br/>writes theme choice"]
45
+ ipc --> reload_niri["niri: IPC reload"]
46
+ ipc --> reload_ghostty["ghostty: config reload"]
47
+ ipc --> reload_gtk["GTK: gsettings"]
48
+ ipc --> reload_tmux["tmux: source-file"]
49
+ ipc --> reload_nvim["nvim: RPC colorscheme"]
50
+ end
51
+
52
+ style repo fill:#313244,stroke:#cba6f7,color:#cdd6f4
53
+ style engine fill:#45475a,stroke:#89b4fa,color:#cdd6f4
54
+ style apps fill:#313244,stroke:#a6e3a1,color:#cdd6f4
55
+ style hotreload fill:#313244,stroke:#f9e2af,color:#cdd6f4
56
+ ```
57
+
58
+ > **Note — Keybind Modifier Hierarchy:** Each input layer owns a
59
+ > non-overlapping modifier prefix. The compositor (Super) never collides
60
+ > with the multiplexer (Ctrl+a prefix), which never collides with the
61
+ > editor (Space leader). `Ctrl+h/j/k/l` is the sole shared binding,
62
+ > resolved by `tmux-vim-navigator` interop.
63
+
64
+ ## Keybind Conflict Resolution Matrix
65
+
66
+ | Modifier | Layer | Owner | Examples |
67
+ |---|---|---|---|
68
+ | `Super` (Mod) | Compositor | Niri | `Super+1`-`9` workspaces, `Super+Enter` terminal |
69
+ | `Alt` | Window Switch | Niri | `Alt+Tab`, `Alt+grave` |
70
+ | `Ctrl+a` prefix | Multiplexer | Tmux | `Ctrl+a h/j/k/l` panes, `Ctrl+a N` new window |
71
+ | `Ctrl+h/j/k/l` | Smart Navigation | Tmux / Neovim | Seamless pane/split traversal |
72
+ | `Ctrl+c/v/t/w` | Terminal | Ghostty | Copy, paste, new tab, close |
73
+ | `Space` (leader) | Editor | Neovim | `Space+ff` find, `Space+ca` code action |