@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,283 @@
1
+ #compdef dot
2
+
3
+ # Zsh completion for the dot CLI (dotfiles manager)
4
+ # Installed to: ~/.local/share/zsh/completions/_dot
5
+
6
+ _dot() {
7
+ local -a commands
8
+
9
+ commands=(
10
+ # Core
11
+ 'apply:Apply dotfiles via chezmoi'
12
+ 'sync:Apply dotfiles (alias of apply)'
13
+ 'update:Pull latest changes and apply them'
14
+ 'clean-cache:Clear shell initialization caches'
15
+ 'prewarm:Regenerate shell caches for ultra-fast startup'
16
+ 'cl:Claude CLI with context patterns'
17
+ 'copilot:GitHub Copilot CLI with context patterns'
18
+ 'gemini:Gemini CLI with context patterns'
19
+ 'kiro:Kiro CLI with context patterns'
20
+ 'sgpt:Shell-GPT with context patterns'
21
+ 'ollama:Ollama with context patterns'
22
+ 'opencode:OpenCode with context patterns'
23
+ 'aider:Aider with context patterns'
24
+ 'add:Add a file to chezmoi source'
25
+ 'diff:Show chezmoi diff with exclusions'
26
+ 'status:Show configuration drift'
27
+ 'remove:Safely remove a managed file'
28
+ 'cd:Print source directory path'
29
+ 'edit:Open chezmoi source in \$EDITOR'
30
+ 'commit:AI-powered conventional commit'
31
+ 'patterns:Manage AI steering patterns'
32
+
33
+ # Diagnostics
34
+ 'doctor:Check system health and configuration'
35
+ 'heal:Auto-repair common dotfiles issues'
36
+ 'health:Run comprehensive health check'
37
+ 'smoke-test:Run automated toolchain verification'
38
+ 'chaos:Simulate config corruption to test self-healing'
39
+ 'scorecard:Unified health/security/performance scorecard'
40
+ 'security-score:Analyze infrastructure security score'
41
+ 'intelligence:Show Dotfiles Intelligence Surface'
42
+ 'rollback:Rollback dotfiles to a previous state'
43
+ 'drift:Drift dashboard (detailed chezmoi status)'
44
+ 'history:Shell history analysis'
45
+ 'benchmark:Run shell startup benchmark'
46
+ 'perf:Show performance mode and timing'
47
+ 'load:Preload heavy shell layers'
48
+ 'load-bench:Measure time to heavy-layer readiness'
49
+ 'load-bench-pty:Measure background prewarm via PTY'
50
+ 'ai:Show AI helper status'
51
+ 'ai-setup:Interactive setup for all AI CLI tools'
52
+ 'ai-query:Context-aware RAG query over your dotfiles'
53
+ 'conflicts:Report alias/command conflicts'
54
+ 'locks:Show version locks for key tools'
55
+ 'snapshot:Capture baseline system snapshot'
56
+ 'verify:Run post-merge verification checks'
57
+
58
+ # Tools
59
+ 'tools:Show or install nix packages'
60
+ 'new:Create a new project from a template'
61
+ 'sandbox:Launch a safe sandbox preview'
62
+ 'keys:Show keybindings catalog'
63
+ 'aliases:List/search/explain aliases and tiers'
64
+ 'learn:Start the interactive tour'
65
+ 'docs:Show repo README'
66
+ 'log-rotate:Rotate dotfiles log'
67
+ 'setup:Interactive setup (profile, features, secrets)'
68
+
69
+ # Appearance
70
+ 'theme:Switch terminal theme'
71
+ 'wallpaper:Apply a wallpaper'
72
+ 'fonts:Install Nerd Fonts'
73
+ 'tune:Apply OS tuning'
74
+
75
+ # Secrets
76
+ 'secrets-init:Initialize age key for secrets'
77
+ 'secrets:Manage secrets (edit|set|get|list|load|provider)'
78
+ 'secrets-create:Create an encrypted secrets file'
79
+ 'ssh-key:Encrypt an SSH key with age'
80
+ 'ssh-cert:Manage short-lived SSH certificates'
81
+ 'env:Load environment buckets from managed secrets'
82
+
83
+ # Security
84
+ 'backup:Create a compressed backup of home'
85
+ 'bundle:Create offline archive of dotfiles environment'
86
+ 'encrypt-check:Check disk encryption status'
87
+ 'firewall:Apply firewall hardening'
88
+ 'telemetry:Disable OS telemetry'
89
+ 'dns-doh:Enable DNS-over-HTTPS'
90
+ 'lock-screen:Enforce lock screen idle settings'
91
+ 'usb-safety:Disable automount for removable media'
92
+
93
+ # Meta
94
+ 'upgrade:Update flake, plugins, and dotfiles'
95
+ 'packages:List installed packages'
96
+ 'version:Show version information'
97
+ '--version:Show version information'
98
+ 'help:Show help message'
99
+ )
100
+
101
+ _arguments -C \
102
+ '1:command:->cmds' \
103
+ '*::arg:->args'
104
+
105
+ case "$state" in
106
+ cmds)
107
+ _describe -t commands 'dot command' commands
108
+ ;;
109
+ args)
110
+ case "$words[1]" in
111
+ new)
112
+ if ((CURRENT == 2)); then
113
+ local -a templates=(python go node packer molecule)
114
+ _describe -t templates 'project template' templates
115
+ else
116
+ _files
117
+ fi
118
+ ;;
119
+ add | remove)
120
+ _files
121
+ ;;
122
+ keys)
123
+ _message 'search pattern (optional)'
124
+ ;;
125
+ perf)
126
+ local -a perf_opts=(
127
+ '--json:Output as JSON'
128
+ '-j:Output as JSON'
129
+ '--profile:Include profile output'
130
+ '-p:Include profile output'
131
+ '--runs:Set the number of runs'
132
+ '-r:Set the number of runs'
133
+ '--target:Set the timing target in milliseconds'
134
+ '-t:Set the timing target in milliseconds'
135
+ )
136
+ _describe -t options 'perf option' perf_opts
137
+ ;;
138
+ doctor)
139
+ local -a doctor_opts=(
140
+ '--heal:Auto-repair common issues'
141
+ '-H:Auto-repair common issues'
142
+ '--score:Show score output'
143
+ '-s:Show score output'
144
+ '--json:Emit JSON summary'
145
+ '-j:Emit JSON summary'
146
+ '--ai:Include AI diagnostics'
147
+ '-A:Include AI diagnostics'
148
+ )
149
+ _describe -t options 'doctor option' doctor_opts
150
+ ;;
151
+ attest)
152
+ local -a attest_opts=(
153
+ '--json:Emit JSON output'
154
+ '-j:Emit JSON output'
155
+ '--write:Write attestation to a file'
156
+ '-w:Write attestation to a file'
157
+ )
158
+ _describe -t options 'attest option' attest_opts
159
+ ;;
160
+ lint)
161
+ local -a lint_opts=(
162
+ '--check:Run check-only mode'
163
+ '-c:Run check-only mode'
164
+ '--fix:Apply safe fixes'
165
+ '-f:Apply safe fixes'
166
+ )
167
+ _describe -t options 'lint option' lint_opts
168
+ ;;
169
+ mcp)
170
+ local -a mcp_opts=(
171
+ 'registry:Show the MCP registry'
172
+ '--strict:Treat policy warnings as errors'
173
+ '-s:Treat policy warnings as errors'
174
+ '--json:Emit JSON summary'
175
+ '-j:Emit JSON summary'
176
+ )
177
+ _describe -t options 'mcp option' mcp_opts
178
+ ;;
179
+ health)
180
+ local -a health_opts=(
181
+ '--verbose:Show detailed checks'
182
+ '-v:Show detailed checks'
183
+ '--json:Emit JSON summary'
184
+ '-j:Emit JSON summary'
185
+ '--fix:Apply common fixes'
186
+ '-f:Apply common fixes'
187
+ '--force:Apply fixes without prompts'
188
+ '-F:Apply fixes without prompts'
189
+ )
190
+ _describe -t options 'health option' health_opts
191
+ ;;
192
+ security-score)
193
+ local -a security_opts=(
194
+ '--verbose:Show detailed scoring'
195
+ '-v:Show detailed scoring'
196
+ '--quiet:Reduce output noise'
197
+ '-q:Reduce output noise'
198
+ '--json:Emit JSON summary'
199
+ '-j:Emit JSON summary'
200
+ )
201
+ _describe -t options 'security-score option' security_opts
202
+ ;;
203
+ snapshot)
204
+ local -a snapshot_opts=(
205
+ '--baseline:Capture the baseline snapshot'
206
+ '-b:Capture the baseline snapshot'
207
+ '--force:Overwrite an existing snapshot'
208
+ '-f:Overwrite an existing snapshot'
209
+ )
210
+ _describe -t options 'snapshot option' snapshot_opts
211
+ ;;
212
+ verify)
213
+ local -a verify_opts=(
214
+ '--security:Run security verification'
215
+ '-s:Run security verification'
216
+ )
217
+ _describe -t options 'verify option' verify_opts
218
+ ;;
219
+ restore)
220
+ local -a restore_opts=(
221
+ '--list:List available backups'
222
+ '-l:List available backups'
223
+ '--latest:Restore the latest backup'
224
+ '-L:Restore the latest backup'
225
+ '--git:Restore from a git ref'
226
+ '-g:Restore from a git ref'
227
+ '--diff:Show a diff for a git ref'
228
+ '-d:Show a diff for a git ref'
229
+ '--dry-run:Preview the restore'
230
+ '-n:Preview the restore'
231
+ )
232
+ _describe -t options 'restore option' restore_opts
233
+ ;;
234
+ load)
235
+ local -a load_opts=('--background:Load in background' '--status:Show load status')
236
+ _describe -t options 'load option' load_opts
237
+ ;;
238
+ tools)
239
+ local -a tool_cmds=('install:Enter Nix development shell')
240
+ _describe -t subcommands 'tools subcommand' tool_cmds
241
+ ;;
242
+ theme)
243
+ local -a themes=(dark light)
244
+ _describe -t themes 'theme mode' themes
245
+ ;;
246
+ ssh-cert)
247
+ local -a cert_cmds=(
248
+ 'issue:Request a short-lived SSH certificate'
249
+ 'status:Show current certificate status'
250
+ 'revoke:Revoke an active certificate'
251
+ )
252
+ _describe -t subcommands 'ssh-cert subcommand' cert_cmds
253
+ ;;
254
+ secrets)
255
+ local -a secrets_cmds=(
256
+ 'edit:Edit encrypted secrets'
257
+ 'set:Set a secret value'
258
+ 'get:Get a secret value'
259
+ 'list:List secret keys'
260
+ 'load:Load secrets into environment'
261
+ 'provider:Show/switch secrets provider'
262
+ )
263
+ _describe -t subcommands 'secrets subcommand' secrets_cmds
264
+ ;;
265
+ cl | copilot | gemini | kiro | sgpt | ollama | opencode | aider)
266
+ _arguments -C \
267
+ '(--pattern -p)'{--pattern,-p}'[Specify steering pattern]:pattern:->patterns' \
268
+ '*:prompt: '
269
+ if [[ "$state" == "patterns" ]]; then
270
+ local -a patterns
271
+ patterns=($(ls -1 "${XDG_CONFIG_HOME:-$HOME/.config}/ai/patterns" 2>/dev/null | sed 's/\.md$//'))
272
+ _describe -t patterns 'AI pattern' patterns
273
+ fi
274
+ ;;
275
+ *)
276
+ _default
277
+ ;;
278
+ esac
279
+ ;;
280
+ esac
281
+ }
282
+
283
+ _dot "$@"
package/install.sh ADDED
@@ -0,0 +1,342 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ # Universal Dotfiles Installer (Zero-Dependency)
4
+ # Usage: bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)"
5
+ # (or ./install.sh locally)
6
+
7
+ set -euo pipefail
8
+
9
+ # ANSI Colors
10
+ RED='\033[0;31m'
11
+ GREEN='\033[0;32m'
12
+ BLUE='\033[0;34m'
13
+ CYAN='\033[0;36m'
14
+ BOLD='\033[1m'
15
+ NC='\033[0m'
16
+
17
+ # Paths
18
+ SOURCE_DIR="${SOURCE_DIR:-$HOME/.dotfiles}"
19
+ LEGACY_SOURCE_DIR="$HOME/.local/share/chezmoi"
20
+ CHEZMOI_CONFIG_DIR="$HOME/.config/chezmoi"
21
+ CHEZMOI_CONFIG_FILE="$CHEZMOI_CONFIG_DIR/chezmoi.toml"
22
+
23
+ # Utility Functions
24
+ step() {
25
+ if [[ "${DOTFILES_SILENT:-0}" != "1" ]]; then
26
+ printf '%b\n' "${BOLD}${BLUE}==>${NC} ${BOLD}$1${NC}"
27
+ fi
28
+ }
29
+
30
+ error() {
31
+ printf '%b\n' "${RED}Error:${NC} $1" >&2
32
+ exit 1
33
+ }
34
+
35
+ success() {
36
+ if [[ "${DOTFILES_SILENT:-0}" != "1" ]]; then
37
+ printf '%b\n' "${GREEN}Success!${NC} $1"
38
+ fi
39
+ }
40
+
41
+ # Cross-platform sed in-place (BSD vs GNU)
42
+ sed_in_place() {
43
+ if sed --version >/dev/null 2>&1; then
44
+ sed -i "$@" # GNU
45
+ else
46
+ sed -i '' "$@" # BSD (macOS)
47
+ fi
48
+ }
49
+
50
+ show_help() {
51
+ cat <<EOF
52
+ Usage: install.sh [version] [options]
53
+
54
+ Arguments:
55
+ version The version (tag or branch) to install (default: v0.2.500)
56
+
57
+ Options:
58
+ --help Show this help message
59
+ --force Non-interactive mode (sets DOTFILES_NONINTERACTIVE=1)
60
+ --silent Quiet mode (sets DOTFILES_SILENT=1)
61
+ --minimal Minimal profile (disable nvim, tmux, zellij)
62
+
63
+ EOF
64
+ }
65
+
66
+ main() {
67
+ local version="v0.2.500"
68
+ local version_set=0
69
+ local minimal=0
70
+ local _cleanup_files=()
71
+ trap 'set +u; rm -f "${_cleanup_files[@]}" 2>/dev/null; set -u' EXIT
72
+
73
+ for arg in "$@"; do
74
+ case "$arg" in
75
+ --help)
76
+ show_help
77
+ exit 0
78
+ ;;
79
+ --silent) export DOTFILES_SILENT=1 ;;
80
+ --force) export DOTFILES_NONINTERACTIVE=1 ;;
81
+ --minimal) minimal=1 ;;
82
+ --*)
83
+ error "Unknown option: $arg"
84
+ ;;
85
+ *)
86
+ if [[ $version_set -eq 1 ]]; then
87
+ error "Multiple versions specified: $version and $arg"
88
+ fi
89
+ version="$arg"
90
+ version_set=1
91
+ ;;
92
+ esac
93
+ done
94
+
95
+ # 2. Check Prerequisites & Bootstrap Package Managers
96
+ step "Checking Prerequisites..."
97
+
98
+ # Detect Operating System
99
+ OS="$(uname -s)"
100
+ case "$OS" in
101
+ Darwin) target_os="macos" ;;
102
+ Linux)
103
+ if grep -qi microsoft /proc/version 2>/dev/null; then
104
+ target_os="wsl2"
105
+ elif [ -f /etc/debian_version ]; then
106
+ target_os="debian"
107
+ elif [ -f /etc/fedora-release ]; then
108
+ target_os="fedora"
109
+ elif [ -f /etc/arch-release ]; then
110
+ target_os="arch"
111
+ else
112
+ target_os="linux"
113
+ fi
114
+ ;;
115
+ *) target_os="unknown" ;;
116
+ esac
117
+
118
+ # Bootstrap gum for a better UI if available or install it
119
+ bootstrap_gum() {
120
+ if command -v gum >/dev/null 2>&1; then return 0; fi
121
+ if [[ "${DOTFILES_SILENT:-0}" == "1" ]]; then return 0; fi
122
+
123
+ echo " Bootstrapping UI components (gum)..."
124
+ if [[ "$OS" == "Darwin" ]] && command -v brew >/dev/null; then
125
+ brew install gum >/dev/null 2>&1
126
+ elif [[ "$target_os" == "debian" || "$target_os" == "wsl2" ]]; then
127
+ sudo mkdir -p /etc/apt/keyrings
128
+ curl -fsSL https://repo.charm.sh/apt/gpg.key |
129
+ sudo gpg --batch --yes --dearmor -o /etc/apt/keyrings/charm.gpg
130
+ # Verify Charm GPG key fingerprint
131
+ if ! gpg --no-default-keyring --keyring /etc/apt/keyrings/charm.gpg \
132
+ --list-keys --with-colons 2>/dev/null | grep -q "fid:"; then
133
+ echo "Warning: Could not verify Charm GPG key" >&2
134
+ fi
135
+ echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list
136
+ sudo apt-get update && sudo apt-get install gum -y >/dev/null 2>&1
137
+ fi
138
+ }
139
+
140
+ # 3. Install Chezmoi (in parallel with other checks where possible)
141
+ install_chezmoi() {
142
+ if command -v chezmoi >/dev/null; then
143
+ echo " chezmoi already installed: $(chezmoi --version)"
144
+ return 0
145
+ fi
146
+
147
+ if command -v brew >/dev/null; then
148
+ echo " Installing chezmoi via Homebrew..."
149
+ brew install chezmoi >/dev/null 2>&1
150
+ else
151
+ bin_dir="$HOME/.local/bin"
152
+ mkdir -p "$bin_dir"
153
+ echo " Installing chezmoi via binary download..."
154
+
155
+ # Prefer verified installer with SHA256 checksum when available
156
+ local verified_installer
157
+ verified_installer="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/scripts/ci/install-chezmoi-verified.sh"
158
+ if [[ -x "$verified_installer" ]] || [[ -f "$verified_installer" ]]; then
159
+ echo " Using checksum-verified installer..."
160
+ if ! bash "$verified_installer" "${CHEZMOI_VERSION:-2.47.1}" "$bin_dir"; then
161
+ echo " Verified installer failed, falling back to get.chezmoi.io" >&2
162
+ else
163
+ return 0
164
+ fi
165
+ fi
166
+
167
+ # Fallback: download installer with size/shebang validation
168
+ local installer
169
+ installer=$(umask 077 && mktemp)
170
+ if ! curl -fsSL -o "$installer" https://get.chezmoi.io; then
171
+ rm -f "$installer"
172
+ echo " Failed to download chezmoi installer" >&2
173
+ return 1
174
+ fi
175
+ # Validate: must be a shell script and not suspiciously large
176
+ if [[ "$(wc -c <"$installer")" -gt 102400 ]]; then
177
+ rm -f "$installer"
178
+ echo " Chezmoi installer suspiciously large. Aborting." >&2
179
+ return 1
180
+ fi
181
+ if ! head -1 "$installer" | grep -q '^#!/'; then
182
+ rm -f "$installer"
183
+ echo " Chezmoi installer doesn't look like a shell script. Aborting." >&2
184
+ return 1
185
+ fi
186
+ if ! BINDIR="$bin_dir" sh "$installer"; then
187
+ rm -f "$installer"
188
+ echo " chezmoi binary installer failed" >&2
189
+ return 1
190
+ fi
191
+ rm -f "$installer"
192
+ fi
193
+ }
194
+
195
+ # Parallel execution of bootstrapping components
196
+ local pid_gum pid_cm
197
+ (bootstrap_gum) &
198
+ pid_gum=$!
199
+ (install_chezmoi) &
200
+ pid_cm=$!
201
+
202
+ # Wait and check exit codes
203
+ wait "$pid_gum" || true # gum is optional
204
+ wait "$pid_cm" || error "chezmoi installation failed"
205
+
206
+ # Critical: Add to PATH for the rest of the script to see it
207
+ bin_dir="$HOME/.local/bin"
208
+ export PATH="$bin_dir:$PATH"
209
+
210
+ # 4. Prepare source directory
211
+ step "Preparing source directory..."
212
+
213
+ # VERSION pinning for supply-chain security
214
+ VERSION="$version"
215
+
216
+ ensure_chezmoi_source() {
217
+ local dir="$1"
218
+ mkdir -p "$CHEZMOI_CONFIG_DIR"
219
+ # Escape sed metacharacters in replacement string
220
+ local escaped_dir
221
+ escaped_dir=$(printf '%s\n' "$dir" | sed -e 's/[\/&]/\\&/g')
222
+ if [[ -f "$CHEZMOI_CONFIG_FILE" ]] && grep -q '^sourceDir' "$CHEZMOI_CONFIG_FILE"; then
223
+ sed_in_place "s,^sourceDir.*$,sourceDir = \"$escaped_dir\"," "$CHEZMOI_CONFIG_FILE"
224
+ else
225
+ printf 'sourceDir = "%s"\n' "$dir" >"$CHEZMOI_CONFIG_FILE"
226
+ fi
227
+ }
228
+
229
+ apply_minimal_profile_overrides() {
230
+ local data_file="$1"
231
+ [[ -f "$data_file" ]] || return 0
232
+ sed_in_place 's/^profile = ".*"/profile = "minimal"/' "$data_file"
233
+ sed_in_place 's/^nvim = true/nvim = false/' "$data_file"
234
+ sed_in_place 's/^tmux = true/tmux = false/' "$data_file"
235
+ sed_in_place 's/^zellij = true/zellij = false/' "$data_file"
236
+ }
237
+
238
+ # 5. Backup existing dotfiles that chezmoi will overwrite
239
+ step "Backing up existing dotfiles..."
240
+ BACKUP_DIR="$HOME/.dotfiles.bak.$(date +"%Y%m%d_%H%M%S")"
241
+ backup_count=0
242
+
243
+ # Determine the source directory for chezmoi to diff against
244
+ if [[ -d "$SOURCE_DIR/.git" ]]; then
245
+ ensure_chezmoi_source "$SOURCE_DIR"
246
+ elif [[ -d "$LEGACY_SOURCE_DIR/.git" ]]; then
247
+ ensure_chezmoi_source "$LEGACY_SOURCE_DIR"
248
+ fi
249
+
250
+ # Back up any existing files that chezmoi would overwrite
251
+ if command -v chezmoi >/dev/null && [[ -f "$CHEZMOI_CONFIG_FILE" ]]; then
252
+ while IFS= read -r file; do
253
+ [[ -z "$file" ]] && continue
254
+ if [[ -e "$file" ]]; then
255
+ rel="${file#"$HOME"/}"
256
+ mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
257
+ cp -a "$file" "$BACKUP_DIR/$rel"
258
+ backup_count=$((backup_count + 1))
259
+ fi
260
+ done < <(chezmoi managed --path-style=absolute 2>/dev/null || true)
261
+ fi
262
+
263
+ if [[ "$backup_count" -gt 0 ]]; then
264
+ echo " Backed up $backup_count files to $BACKUP_DIR"
265
+ else
266
+ echo " No existing dotfiles to back up."
267
+ rm -rf "$BACKUP_DIR" 2>/dev/null || true
268
+ fi
269
+
270
+ # Detect devcontainer/Codespaces environment
271
+ if [[ -f /.dockerenv ]] || [[ -n "${CODESPACES:-}" ]] || [[ -n "${REMOTE_CONTAINERS:-}" ]]; then
272
+ DOTFILES_MINIMAL=1
273
+ step "Detected container environment — using minimal profile"
274
+ fi
275
+
276
+ # Apply --minimal overrides if requested
277
+ if [[ $minimal -eq 1 ]] || [[ "${DOTFILES_MINIMAL:-0}" = "1" ]]; then
278
+ step "Applying minimal profile overrides..."
279
+ apply_minimal_profile_overrides "$SOURCE_DIR/.chezmoidata.toml"
280
+ fi
281
+
282
+ # 6. Initialize & Apply
283
+ step "Applying Configuration..."
284
+
285
+ # If we are running from a local source, just apply
286
+ if [[ -d "$SOURCE_DIR/.git" ]]; then
287
+ echo " Applying from local source: $SOURCE_DIR"
288
+ ensure_chezmoi_source "$SOURCE_DIR"
289
+ APPLY_FLAGS=()
290
+ if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
291
+ APPLY_FLAGS=(--force --no-tty)
292
+ fi
293
+ chezmoi apply "${APPLY_FLAGS[@]}"
294
+ elif [[ -d "$LEGACY_SOURCE_DIR/.git" ]]; then
295
+ echo " Migrating from legacy source: $LEGACY_SOURCE_DIR"
296
+ mv "$LEGACY_SOURCE_DIR" "$SOURCE_DIR"
297
+ ensure_chezmoi_source "$SOURCE_DIR"
298
+ APPLY_FLAGS=()
299
+ if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
300
+ APPLY_FLAGS=(--force --no-tty)
301
+ fi
302
+ chezmoi apply "${APPLY_FLAGS[@]}"
303
+ else
304
+ echo " Initializing from GitHub (Branch/Tag: $VERSION)..."
305
+ printf '%b\n' "${CYAN} SECURITY NOTE: Cloning pinned version $VERSION for supply-chain safety${NC}"
306
+
307
+ # STRICT MODE: We pin to the specific tag to avoid 'main' branch drift
308
+ git clone --depth 1 --branch "$VERSION" https://github.com/sebastienrousseau/dotfiles.git "$SOURCE_DIR" 2>/dev/null ||
309
+ { git clone https://github.com/sebastienrousseau/dotfiles.git "$SOURCE_DIR" && (cd "$SOURCE_DIR" && git checkout "$VERSION"); }
310
+
311
+ # Verify the checkout succeeded and we're on the expected version
312
+ ACTUAL_REF=$(
313
+ cd "$SOURCE_DIR" || exit 1
314
+ if ! git describe --tags --exact-match 2>/dev/null; then
315
+ git rev-parse --short HEAD
316
+ fi
317
+ )
318
+ if [[ "$ACTUAL_REF" != "$VERSION" ]] && [[ "${ACTUAL_REF#v}" != "${VERSION#v}" ]]; then
319
+ printf '%b\n' "${RED} WARNING: Checked out ref $ACTUAL_REF (requested: $VERSION) — version mismatch${NC}" >&2
320
+ fi
321
+
322
+ if [[ $minimal -eq 1 ]]; then
323
+ step "Applying minimal profile overrides..."
324
+ apply_minimal_profile_overrides "$SOURCE_DIR/.chezmoidata.toml"
325
+ fi
326
+
327
+ ensure_chezmoi_source "$SOURCE_DIR"
328
+ APPLY_FLAGS=()
329
+ if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
330
+ APPLY_FLAGS=(--force --no-tty)
331
+ fi
332
+ chezmoi apply "${APPLY_FLAGS[@]}"
333
+ fi
334
+
335
+ success "Configuration loaded. Please restart your shell."
336
+ step "Run 'dot learn' for an interactive tour of your new dotfiles."
337
+ }
338
+
339
+ # Run main if executed directly (or via bash -c where BASH_SOURCE is unset)
340
+ if [[ "${BASH_SOURCE[0]:-}" == "${0:-}" ]] || [[ -z "${BASH_SOURCE[0]:-}" ]]; then
341
+ main "$@"
342
+ fi
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebastienrousseau/dotfiles",
3
- "version": "0.2.499",
3
+ "version": "0.2.500",
4
4
  "description": "The Trusted Shell Platform — Universal dotfiles managed by Chezmoi. Features Bash & Zsh for macOS, Linux & WSL. Rust modern tooling & enterprise-grade security.",
5
5
  "main": "install.sh",
6
6
  "bin": {