@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,397 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ # shellcheck source=../dot/lib/ui.sh
7
+ # shellcheck disable=SC1091
8
+ source "$SCRIPT_DIR/../dot/lib/ui.sh"
9
+
10
+ ui_init
11
+ ui_header "Wallpaper Sync"
12
+
13
+ WALLPAPER_DIR="${DOTFILES_WALLPAPER_DIR:-$HOME/Pictures/Wallpapers}"
14
+ CHEZMOI_CFG="${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi/chezmoi.toml"
15
+ DATA_FILE="${HOME}/.dotfiles/.chezmoidata.toml"
16
+
17
+ WALLPAPER_DIR_EXISTS=true
18
+ if [ ! -d "$WALLPAPER_DIR" ]; then
19
+ WALLPAPER_DIR_EXISTS=false
20
+ fi
21
+
22
+ # Detect current color scheme (light/dark)
23
+ detect_mode() {
24
+ if command -v dms &>/dev/null; then
25
+ local dms_mode
26
+ dms_mode="$(dms ipc theme getMode 2>/dev/null || true)"
27
+ case "$dms_mode" in
28
+ dark | light)
29
+ echo "$dms_mode"
30
+ return 0
31
+ ;;
32
+ esac
33
+ fi
34
+
35
+ if command -v gsettings &>/dev/null; then
36
+ local scheme
37
+ scheme="$(gsettings get org.gnome.desktop.interface color-scheme 2>/dev/null || echo "")"
38
+ case "$scheme" in
39
+ *dark*) echo "dark" ;;
40
+ *) echo "light" ;;
41
+ esac
42
+ else
43
+ echo "dark"
44
+ fi
45
+ }
46
+
47
+ MODE="$(detect_mode)"
48
+
49
+ current_theme() {
50
+ if [[ -f "$CHEZMOI_CFG" ]]; then
51
+ local chezmoi_theme
52
+ chezmoi_theme="$(awk -F'"' '/^theme =/ {print $2}' "$CHEZMOI_CFG" | head -n 1)"
53
+ if [[ -n "$chezmoi_theme" ]]; then
54
+ printf '%s\n' "$chezmoi_theme"
55
+ return 0
56
+ fi
57
+ fi
58
+
59
+ if [[ -f "$DATA_FILE" ]]; then
60
+ awk -F'"' '/^theme =/ {print $2}' "$DATA_FILE" | head -n 1
61
+ fi
62
+ }
63
+
64
+ wallpaper_for_theme() {
65
+ local theme="${1:-}"
66
+ local mode="${2:-}"
67
+ local candidate=""
68
+ local family=""
69
+
70
+ [[ -n "$theme" ]] || return 1
71
+ [[ -n "$mode" ]] || return 1
72
+
73
+ # 1. Check themes.toml for stored wallpaper path (set by extract-theme.py)
74
+ local themes_file="${HOME}/.dotfiles/.chezmoidata/themes.toml"
75
+ if [[ -f "$themes_file" ]]; then
76
+ local stored_wp
77
+ stored_wp="$(awk -v n="$theme" '
78
+ $0 == "[themes." n "]" { found=1; next }
79
+ /^\[/ { found=0 }
80
+ found && /^wallpaper/ { sub(/.*= *"/, ""); sub(/".*/, ""); print; exit }
81
+ ' "$themes_file")"
82
+ if [[ -n "$stored_wp" && -f "$stored_wp" ]]; then
83
+ printf '%s\n' "$stored_wp"
84
+ return 0
85
+ fi
86
+ fi
87
+
88
+ # 2. Check custom wallpaper directory
89
+ for ext in heic jpg png; do
90
+ candidate="$WALLPAPER_DIR/${theme}.${ext}"
91
+ if [[ -f "$candidate" ]]; then
92
+ printf '%s\n' "$candidate"
93
+ return 0
94
+ fi
95
+ done
96
+
97
+ family="${theme%-dark}"
98
+ if [[ "$family" == "$theme" ]]; then
99
+ family="${theme%-light}"
100
+ fi
101
+ for ext in heic jpg png; do
102
+ candidate="$WALLPAPER_DIR/${family}-${mode}.${ext}"
103
+ if [[ -f "$candidate" ]]; then
104
+ printf '%s\n' "$candidate"
105
+ return 0
106
+ fi
107
+ done
108
+
109
+ return 1
110
+ }
111
+
112
+ # Fallback: find a matching system wallpaper when no custom one exists.
113
+ # Maps theme names to platform-native wallpapers shipped with the OS.
114
+ system_wallpaper_for_theme() {
115
+ local theme="${1:-}"
116
+ local mode="${2:-}"
117
+ local SYS_MAC="/System/Library/Desktop Pictures"
118
+ local SYS_LINUX_DIRS=(
119
+ /usr/share/backgrounds
120
+ /usr/share/wallpapers
121
+ )
122
+
123
+ [[ -n "$theme" ]] || return 1
124
+
125
+ # macOS: map theme names to Apple system wallpapers
126
+ if [[ "$(uname -s)" == "Darwin" && -d "$SYS_MAC" ]]; then
127
+ local -A mac_map=(
128
+ [macos - sonoma]="$SYS_MAC/Sonoma.heic"
129
+ [macos - blue]="$SYS_MAC/Mac Blue.heic"
130
+ [macos - pink]="$SYS_MAC/Mac Pink.heic"
131
+ [macos - purple]="$SYS_MAC/Mac Purple.heic"
132
+ [macos - yellow]="$SYS_MAC/Mac Yellow.heic"
133
+ [macos - orange]="$SYS_MAC/iMac Orange.heic"
134
+ [macos - green]="$SYS_MAC/iMac Green.heic"
135
+ [macos - silver]="$SYS_MAC/iMac Silver.heic"
136
+ )
137
+
138
+ # Extract family from theme name (strip -dark/-light)
139
+ local family="${theme%-dark}"
140
+ [[ "$family" == "$theme" ]] && family="${theme%-light}"
141
+
142
+ local sys_wp="${mac_map[$family]:-}"
143
+ if [[ -n "$sys_wp" && -f "$sys_wp" ]]; then
144
+ printf '%s\n' "$sys_wp"
145
+ return 0
146
+ fi
147
+ fi
148
+
149
+ # Linux: search system background directories for keyword match
150
+ if [[ "$(uname -s)" == "Linux" ]]; then
151
+ local keyword="${theme#macos-}"
152
+ keyword="${keyword%-dark}"
153
+ keyword="${keyword%-light}"
154
+
155
+ for dir in "${SYS_LINUX_DIRS[@]}"; do
156
+ [[ -d "$dir" ]] || continue
157
+ local match
158
+ match="$(find "$dir" -maxdepth 3 -type f \( -name "*.jpg" -o -name "*.png" \) \
159
+ -iname "*${keyword}*" 2>/dev/null | head -1)"
160
+ if [[ -n "$match" ]]; then
161
+ printf '%s\n' "$match"
162
+ return 0
163
+ fi
164
+ done
165
+ fi
166
+
167
+ return 1
168
+ }
169
+
170
+ theme_wallpaper_pair() {
171
+ local theme="${1:-}"
172
+ local family=""
173
+ local light_wp=""
174
+ local dark_wp=""
175
+
176
+ [[ -n "$theme" ]] || return 1
177
+
178
+ family="${theme%-dark}"
179
+ if [[ "$family" == "$theme" ]]; then
180
+ family="${theme%-light}"
181
+ fi
182
+
183
+ light_wp="$(wallpaper_for_theme "${family}-light" "light" || true)"
184
+ dark_wp="$(wallpaper_for_theme "${family}-dark" "dark" || true)"
185
+
186
+ if [[ -n "$light_wp" && -n "$dark_wp" ]]; then
187
+ printf '%s\n%s\n' "$light_wp" "$dark_wp"
188
+ return 0
189
+ fi
190
+
191
+ return 1
192
+ }
193
+
194
+ # Pick a wallpaper matching the current mode
195
+ pick_wallpaper() {
196
+ local mode="$1"
197
+ local theme="${2:-}"
198
+ local files=()
199
+
200
+ if [[ -n "$theme" ]]; then
201
+ local matched
202
+ matched="$(wallpaper_for_theme "$theme" "$mode" || true)"
203
+ if [[ -n "$matched" ]]; then
204
+ printf '%s\n' "$matched"
205
+ return 0
206
+ fi
207
+ fi
208
+
209
+ while IFS= read -r line; do
210
+ files+=("$line")
211
+ done < <(find "$WALLPAPER_DIR" -maxdepth 1 -type f \( -iname "*-${mode}.jpg" -o -iname "*-${mode}.png" -o -iname "*-${mode}.heic" \) | sort)
212
+
213
+ if [[ ${#files[@]} -eq 0 ]]; then
214
+ return 1
215
+ fi
216
+
217
+ # Pick a random one
218
+ if command -v shuf &>/dev/null; then
219
+ printf '%s\n' "${files[@]}" | shuf -n 1
220
+ else
221
+ echo "${files[$RANDOM % ${#files[@]}]}"
222
+ fi
223
+ }
224
+
225
+ THEME="$(current_theme || true)"
226
+ WALLPAPER=""
227
+ if [[ "$WALLPAPER_DIR_EXISTS" == "true" ]]; then
228
+ WALLPAPER="$(pick_wallpaper "$MODE" "$THEME" || true)"
229
+ fi
230
+
231
+ # Fallback: try OS-native system wallpapers
232
+ if [[ -z "$WALLPAPER" ]]; then
233
+ WALLPAPER="$(system_wallpaper_for_theme "$THEME" "$MODE" || true)"
234
+ if [[ -n "$WALLPAPER" ]]; then
235
+ ui_info "Wallpaper" "using system wallpaper: $(basename "$WALLPAPER")"
236
+ fi
237
+ fi
238
+
239
+ if [[ -z "$WALLPAPER" ]]; then
240
+ ui_info "Wallpaper" "no wallpaper for ${THEME:-unknown} (skipping — theme colors still apply)"
241
+ exit 0
242
+ fi
243
+
244
+ # Convert .heic to .png on Linux (HEIC not universally supported)
245
+ ensure_linux_compatible() {
246
+ local wp="$1"
247
+ [[ "$(uname -s)" == "Linux" ]] || {
248
+ printf '%s\n' "$wp"
249
+ return
250
+ }
251
+ [[ "${wp##*.}" == "heic" ]] || {
252
+ printf '%s\n' "$wp"
253
+ return
254
+ }
255
+
256
+ local png="${wp%.heic}.png"
257
+ if [[ -f "$png" ]] && [[ "$png" -nt "$wp" ]]; then
258
+ printf '%s\n' "$png"
259
+ return
260
+ fi
261
+
262
+ if command -v magick &>/dev/null; then
263
+ magick "$wp" -quality 95 "$png" 2>/dev/null && {
264
+ printf '%s\n' "$png"
265
+ return
266
+ }
267
+ elif command -v heif-convert &>/dev/null; then
268
+ heif-convert "$wp" "$png" 2>/dev/null && {
269
+ printf '%s\n' "$png"
270
+ return
271
+ }
272
+ elif command -v convert &>/dev/null; then
273
+ convert "$wp" "$png" 2>/dev/null && {
274
+ printf '%s\n' "$png"
275
+ return
276
+ }
277
+ fi
278
+
279
+ # Fallback: use original and hope the DE supports it
280
+ printf '%s\n' "$wp"
281
+ }
282
+
283
+ # Apply wallpaper based on platform and compositor
284
+ apply_wallpaper() {
285
+ local wp="$1"
286
+ local mode="$2"
287
+
288
+ # Convert HEIC to PNG on Linux if needed
289
+ wp="$(ensure_linux_compatible "$wp")"
290
+ local wp_uri="file://${wp}"
291
+
292
+ case "$(uname -s)" in
293
+ Darwin)
294
+ osascript -e "tell application \"System Events\" to set picture of every desktop to POSIX file \"$wp\"" || true
295
+ ;;
296
+ Linux)
297
+ # Niri + DMS/Quickshell uses its own wallpaper state.
298
+ if command -v dms &>/dev/null; then
299
+ local dms_result current_outputs output current_dms_mode light_wp dark_wp
300
+ dms_result="$(dms ipc wallpaper set "$wp" 2>/dev/null || true)"
301
+ if [[ "$dms_result" == SUCCESS:* ]]; then
302
+ ui_info "Applied via" "dms ipc wallpaper set"
303
+ elif [[ "$dms_result" == ERROR:\ Per-monitor\ mode\ enabled* ]]; then
304
+ current_outputs="$(dms ipc outputs current 2>/dev/null | tr -d '[]"')"
305
+ for output in ${current_outputs//,/ }; do
306
+ [[ -n "$output" ]] || continue
307
+ dms ipc wallpaper setFor "$output" "$wp" >/dev/null 2>&1 || true
308
+ done
309
+ ui_info "Applied via" "dms ipc wallpaper setFor"
310
+ else
311
+ ui_warn "DMS wallpaper" "set failed, falling back"
312
+ fi
313
+
314
+ # Keep DMS light/dark wallpaper slots aligned with the theme family.
315
+ if [[ -n "${THEME:-}" ]] && mapfile -t _pair < <(theme_wallpaper_pair "$THEME"); then
316
+ light_wp="${_pair[0]:-}"
317
+ dark_wp="${_pair[1]:-}"
318
+ current_dms_mode="$(dms ipc theme getMode 2>/dev/null || printf '%s\n' "$mode")"
319
+
320
+ if [[ -n "$light_wp" && -n "$dark_wp" ]]; then
321
+ dms ipc theme light >/dev/null 2>&1 || true
322
+ dms ipc wallpaper set "$light_wp" >/dev/null 2>&1 || true
323
+
324
+ dms ipc theme dark >/dev/null 2>&1 || true
325
+ dms ipc wallpaper set "$dark_wp" >/dev/null 2>&1 || true
326
+
327
+ if [[ "$current_dms_mode" == "light" ]]; then
328
+ dms ipc theme light >/dev/null 2>&1 || true
329
+ else
330
+ dms ipc theme dark >/dev/null 2>&1 || true
331
+ fi
332
+ ui_info "DMS pair" "$(basename "$light_wp"), $(basename "$dark_wp")"
333
+ fi
334
+ fi
335
+ fi
336
+
337
+ # gsettings-based desktop state for GTK/freedesktop consumers
338
+ if command -v gsettings &>/dev/null; then
339
+ # Find the matching pair for picture-uri and picture-uri-dark
340
+ local light_wp dark_wp base ext
341
+ ext="${wp##*.}"
342
+ base="${wp%-${mode}.${ext}}"
343
+ if [[ -f "${base}-light.${ext}" ]] && [[ -f "${base}-dark.${ext}" ]]; then
344
+ light_wp="${base}-light.${ext}"
345
+ dark_wp="${base}-dark.${ext}"
346
+ elif [[ -f "${base}-light.heic" ]] && [[ -f "${base}-dark.heic" ]]; then
347
+ light_wp="${base}-light.heic"
348
+ dark_wp="${base}-dark.heic"
349
+ elif [[ -f "${base}-light.jpg" ]] && [[ -f "${base}-dark.jpg" ]]; then
350
+ light_wp="${base}-light.jpg"
351
+ dark_wp="${base}-dark.jpg"
352
+ elif [[ -f "${base}-light.png" ]] && [[ -f "${base}-dark.png" ]]; then
353
+ light_wp="${base}-light.png"
354
+ dark_wp="${base}-dark.png"
355
+ else
356
+ light_wp=""
357
+ dark_wp=""
358
+ fi
359
+
360
+ if [[ -n "$light_wp" ]] && [[ -n "$dark_wp" ]]; then
361
+ light_wp="$(ensure_linux_compatible "$light_wp")"
362
+ dark_wp="$(ensure_linux_compatible "$dark_wp")"
363
+ gsettings set org.gnome.desktop.background picture-uri "file://${light_wp}"
364
+ gsettings set org.gnome.desktop.background picture-uri-dark "file://${dark_wp}"
365
+ gsettings set org.gnome.desktop.screensaver picture-uri "file://${light_wp}"
366
+ else
367
+ gsettings set org.gnome.desktop.background picture-uri "$wp_uri"
368
+ gsettings set org.gnome.desktop.background picture-uri-dark "$wp_uri"
369
+ gsettings set org.gnome.desktop.screensaver picture-uri "$wp_uri"
370
+ fi
371
+ gsettings set org.gnome.desktop.background picture-options "zoom"
372
+ ui_info "Applied via" "gsettings"
373
+ elif command -v swaybg &>/dev/null; then
374
+ pkill swaybg || true
375
+ swaybg -i "$wp" -m fill &
376
+ ui_info "Applied via" "swaybg"
377
+ elif command -v feh &>/dev/null; then
378
+ feh --bg-fill "$wp"
379
+ ui_info "Applied via" "feh"
380
+ else
381
+ ui_err "Wallpaper setter" "not found (gsettings/swaybg/feh)"
382
+ return 1
383
+ fi
384
+ ;;
385
+ *)
386
+ ui_err "Unsupported OS" "wallpaper sync"
387
+ return 1
388
+ ;;
389
+ esac
390
+ }
391
+
392
+ apply_wallpaper "$WALLPAPER" "$MODE"
393
+ if [[ -n "$THEME" ]]; then
394
+ ui_ok "Wallpaper applied (${MODE})" "$(basename "$WALLPAPER") ← $THEME"
395
+ else
396
+ ui_ok "Wallpaper applied (${MODE})" "$(basename "$WALLPAPER")"
397
+ fi
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ if ! command -v cmatrix >/dev/null; then
6
+ echo "cmatrix not installed. Install it via brew/apt." >&2
7
+ exit 1
8
+ fi
9
+
10
+ color="${DOTFILES_CMATRIX_COLOR:-green}"
11
+ opts=("-b" "-C" "$color")
12
+
13
+ if [[ "${DOTFILES_CMATRIX_RAINBOW:-0}" = "1" ]]; then
14
+ opts+=("-r")
15
+ fi
16
+
17
+ if [[ "${DOTFILES_CMATRIX_ASYNC:-0}" = "1" ]]; then
18
+ opts+=("-a")
19
+ fi
20
+
21
+ exec cmatrix "${opts[@]}" "$@"
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env python3
2
2
  # MIT License
3
- # Copyright (c) 2026 Sebastien Rousseau
3
+ # Copyright (c) 2026
4
4
  # See LICENSE file for details.
5
5
 
6
6
  import os
7
7
  import re
8
8
  import sys
9
9
 
10
- BASE_DIR = os.path.expanduser("~/.local/share/chezmoi/.chezmoitemplates")
10
+ BASE_DIR = os.path.expanduser("~/.dotfiles/.chezmoitemplates")
11
11
  ALIASES_DIR = os.path.join(BASE_DIR, "aliases")
12
12
  FUNCTIONS_DIR = os.path.join(BASE_DIR, "functions")
13
13
 
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ EMOJI_FILE="${EMOJI_FILE:-$HOME/.config/emoji/emoji.txt}"
6
+
7
+ if [[ ! -f "$EMOJI_FILE" ]]; then
8
+ echo "Emoji list not found: $EMOJI_FILE" >&2
9
+ exit 1
10
+ fi
11
+
12
+ pick_with_fzf() {
13
+ fzf --prompt="emoji> " --height=40% --layout=reverse <"$EMOJI_FILE"
14
+ }
15
+
16
+ pick_with_select() {
17
+ local choice
18
+ local entries
19
+ IFS=$'\n' read -r -d '' -a entries < <(cat "$EMOJI_FILE" && printf '\0')
20
+ select choice in "${entries[@]}"; do
21
+ echo "$choice"
22
+ break
23
+ done
24
+ }
25
+
26
+ selection=""
27
+ if command -v fzf >/dev/null; then
28
+ selection=$(pick_with_fzf || true)
29
+ else
30
+ selection=$(pick_with_select || true)
31
+ fi
32
+
33
+ emoji=$(printf '%s' "$selection" | awk '{print $1}')
34
+ if [[ -z "$emoji" ]]; then
35
+ exit 1
36
+ fi
37
+
38
+ printf '%s' "$emoji"
39
+
40
+ if command -v cb >/dev/null; then
41
+ printf '%s' "$emoji" | cb
42
+ elif command -v pbcopy >/dev/null; then
43
+ printf '%s' "$emoji" | pbcopy
44
+ elif command -v wl-copy >/dev/null; then
45
+ printf '%s' "$emoji" | wl-copy
46
+ elif command -v xclip >/dev/null; then
47
+ printf '%s' "$emoji" | xclip -selection clipboard
48
+ fi
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ text="${*:-${USER:-dotfiles}}"
6
+ font="${DOTFILES_FIGLET_FONT:-slant}"
7
+
8
+ if command -v figlet >/dev/null; then
9
+ figlet -f "$font" "$text"
10
+ exit 0
11
+ fi
12
+
13
+ if command -v toilet >/dev/null; then
14
+ toilet -f "$font" "$text"
15
+ exit 0
16
+ fi
17
+
18
+ echo "$text"
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ LOG_DIR="${HOME}/.local/share"
6
+ LOG_FILE="${LOG_DIR}/dotfiles.log"
7
+ MAX_SIZE_BYTES=$((1024 * 1024))
8
+ ROTATIONS=3
9
+
10
+ if [[ ! -f "${LOG_FILE}" ]]; then
11
+ exit 0
12
+ fi
13
+
14
+ size=$(wc -c <"${LOG_FILE}" | tr -d ' ')
15
+ if [[ "${size}" -lt "${MAX_SIZE_BYTES}" ]]; then
16
+ exit 0
17
+ fi
18
+
19
+ for ((i = ROTATIONS; i >= 1; i--)); do
20
+ if [[ -f "${LOG_FILE}.${i}.gz" ]]; then
21
+ mv "${LOG_FILE}.${i}.gz" "${LOG_FILE}.$((i + 1)).gz"
22
+ elif [[ -f "${LOG_FILE}.${i}" ]]; then
23
+ mv "${LOG_FILE}.${i}" "${LOG_FILE}.$((i + 1))"
24
+ gzip -f "${LOG_FILE}.$((i + 1))"
25
+ fi
26
+ done
27
+
28
+ mv "${LOG_FILE}" "${LOG_FILE}.1"
29
+ gzip -f "${LOG_FILE}.1"
30
+ : >"${LOG_FILE}"
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ if command -v lolcat >/dev/null; then
6
+ if [[ $# -gt 0 ]]; then
7
+ cat "$@" | lolcat
8
+ else
9
+ lolcat
10
+ fi
11
+ exit 0
12
+ fi
13
+
14
+ # Fallback: plain output
15
+ if [[ $# -gt 0 ]]; then
16
+ cat "$@"
17
+ else
18
+ cat
19
+ fi
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ set -euo pipefail
4
+
5
+ # Simple terminal pipes screensaver
6
+ # Inspired by pipes.sh but kept minimal for portability
7
+
8
+ cols=$(tput cols 2>/dev/null || echo 80)
9
+ rows=$(tput lines 2>/dev/null || echo 24)
10
+
11
+ cleanup() {
12
+ tput cnorm 2>/dev/null || true
13
+ stty echo 2>/dev/null || true
14
+ clear
15
+ }
16
+
17
+ trap cleanup EXIT INT TERM
18
+
19
+ tput civis 2>/dev/null || true
20
+ stty -echo 2>/dev/null || true
21
+ clear
22
+
23
+ symbols=("|" "-" "+" "┘" "└" "┐" "┌")
24
+ colors=(31 32 33 34 35 36 37)
25
+
26
+ while true; do
27
+ x=$((RANDOM % cols + 1))
28
+ y=$((RANDOM % rows + 1))
29
+ sym=${symbols[$((RANDOM % ${#symbols[@]}))]}
30
+ color=${colors[$((RANDOM % ${#colors[@]}))]}
31
+ printf "\033[%s;%sH\033[%sm%s\033[0m" "$y" "$x" "$color" "$sym"
32
+ sleep 0.01
33
+ if [[ "$y" -ge "$rows" ]]; then
34
+ clear
35
+ fi
36
+ if [[ "$x" -ge "$cols" ]]; then
37
+ clear
38
+ fi
39
+ if [[ "$RANDOM" -gt 32000 ]]; then
40
+ clear
41
+ fi
42
+ # slow down slightly
43
+ sleep 0.01
44
+ # allow keypress to exit
45
+ if read -r -t 0.001; then
46
+ break
47
+ fi
48
+ done