@sebastienrousseau/dotfiles 0.2.469 → 0.2.481

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 (490) hide show
  1. package/CHANGELOG.md +285 -0
  2. package/README.md +236 -319
  3. package/docs/ALIASES.md +128 -0
  4. package/docs/ARCHITECTURE.md +229 -0
  5. package/docs/COMPLIANCE.md +47 -0
  6. package/docs/COPYRIGHT +7 -0
  7. package/docs/FEATURES.md +166 -0
  8. package/docs/FONTS.md +147 -0
  9. package/docs/INSTALL.md +119 -0
  10. package/docs/KEYS.md +40 -0
  11. package/docs/KEY_ROTATION.md +219 -0
  12. package/docs/LEGACY_ROADMAP.md +142 -0
  13. package/docs/NEOVIM_IDE_GUIDE.md +52 -0
  14. package/docs/OPERATIONS.md +130 -0
  15. package/docs/PLAN.md +161 -0
  16. package/docs/PR_DESCRIPTION.md +149 -0
  17. package/docs/README.md +269 -0
  18. package/docs/REPO_AUDIT.md +23 -0
  19. package/docs/ROADMAP.md +148 -0
  20. package/docs/SCREENSHOTS.md +116 -0
  21. package/docs/SECRETS.md +76 -0
  22. package/docs/SECURITY.md +30 -0
  23. package/docs/SECURITY_CHECKLIST.md +25 -0
  24. package/docs/TASK.md +99 -0
  25. package/docs/TESTING.md +190 -0
  26. package/docs/TOOLS.md +146 -0
  27. package/docs/TROUBLESHOOTING.md +112 -0
  28. package/docs/UTILS.md +105 -0
  29. package/docs/WALKTHROUGH.md +165 -0
  30. package/docs/WSL2_NIX_TROUBLESHOOTING.md +723 -0
  31. package/docs/adr/ADR-001-ci-cd-pipeline.md +101 -0
  32. package/docs/adr/ADR-002-shell-performance.md +121 -0
  33. package/docs/adr/ADR-003-security-first.md +140 -0
  34. package/docs/adr/ADR-004-cli-architecture.md +157 -0
  35. package/docs/adr/ADR-005-chezmoi-choice.md +89 -0
  36. package/docs/adr/ADR-006-shell-selection.md +115 -0
  37. package/docs/adr/README.md +33 -0
  38. package/docs/themes/README.md +20 -0
  39. package/dot_config/aider/aider.conf.yml +32 -0
  40. package/dot_config/alacritty/alacritty.toml.tmpl +483 -0
  41. package/dot_config/ansible/ansible.cfg.tmpl +11 -0
  42. package/dot_config/atuin/config.toml +23 -0
  43. package/dot_config/bat/config +8 -0
  44. package/dot_config/brave-flags.conf.tmpl +7 -0
  45. package/dot_config/btop/btop.conf +16 -0
  46. package/dot_config/btop/themes/tokyonight.theme +34 -0
  47. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  48. package/dot_config/claude/mcp_servers.json +49 -0
  49. package/dot_config/clippy.toml +55 -0
  50. package/dot_config/containers/containers.conf +14 -0
  51. package/dot_config/curl/dot_curlrc +18 -0
  52. package/dot_config/dlv/config.yml +39 -0
  53. package/dot_config/docker/config.json.tmpl +15 -0
  54. package/dot_config/dotfiles/boot/README.md +11 -0
  55. package/dot_config/dotfiles/grub/README.md +11 -0
  56. package/dot_config/dotfiles/lock/README.md +11 -0
  57. package/dot_config/dotfiles/versions.env.tmpl +19 -0
  58. package/dot_config/duf/duf.conf +6 -0
  59. package/dot_config/duti/defaults.duti +5 -0
  60. package/dot_config/emoji/emoji.txt +34 -0
  61. package/dot_config/fastfetch/config.jsonc +28 -0
  62. package/dot_config/firefox/user.js +8 -0
  63. package/dot_config/flatpak/flatpak.list +4 -0
  64. package/dot_config/fontconfig/fonts.conf.tmpl +44 -0
  65. package/dot_config/gh/config.yml +12 -0
  66. package/dot_config/ghostty/config.tmpl +661 -0
  67. package/dot_config/git/attributes +12 -0
  68. package/dot_config/git/config.tmpl +77 -0
  69. package/dot_config/git/ignore +27 -0
  70. package/dot_config/gnupg/gpg-agent.conf.tmpl +11 -0
  71. package/dot_config/go/aliases.sh +61 -0
  72. package/dot_config/go/env.sh +24 -0
  73. package/dot_config/go/golangci.yml +118 -0
  74. package/dot_config/go/gopls.json +30 -0
  75. package/dot_config/goose/config.yaml +29 -0
  76. package/dot_config/gtk-3.0/gtk.css.tmpl +305 -0
  77. package/dot_config/gtk-3.0/settings.ini.tmpl +66 -0
  78. package/dot_config/gtk-4.0/gtk.css.tmpl +309 -0
  79. package/dot_config/gtk-4.0/settings.ini.tmpl +21 -0
  80. package/dot_config/htop/htoprc +20 -0
  81. package/dot_config/ice/README.md +13 -0
  82. package/dot_config/inputrc +2 -0
  83. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +5 -0
  84. package/dot_config/just/justfile +104 -0
  85. package/dot_config/k9s/config.yaml.tmpl +65 -0
  86. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  87. package/dot_config/karabiner/karabiner.json +14 -0
  88. package/dot_config/kitty/kitty.conf.tmpl +517 -0
  89. package/dot_config/lazydocker/config.yml +186 -0
  90. package/dot_config/lazygit/config.yml +23 -0
  91. package/dot_config/lsd/config.yaml +19 -0
  92. package/dot_config/mas/masapps.txt +5 -0
  93. package/dot_config/minikube/config.json +13 -0
  94. package/dot_config/mise/config.toml +41 -0
  95. package/dot_config/mongosh/mongoshrc.js +67 -0
  96. package/dot_config/mycli/myclirc +67 -0
  97. package/dot_config/nano/nanorc +28 -0
  98. package/dot_config/ncdu/config +12 -0
  99. package/dot_config/nvim/init.lua +4 -0
  100. package/dot_config/nvim/lazy-lock.json +27 -0
  101. package/dot_config/nvim/lua/config/autocmds.lua +63 -0
  102. package/dot_config/nvim/lua/config/keymaps.lua +87 -0
  103. package/dot_config/nvim/lua/config/lazy.lua +34 -0
  104. package/dot_config/nvim/lua/config/options.lua +48 -0
  105. package/dot_config/nvim/lua/plugins/coding.lua +234 -0
  106. package/dot_config/nvim/lua/plugins/dap.lua +201 -0
  107. package/dot_config/nvim/lua/plugins/editor.lua +59 -0
  108. package/dot_config/nvim/lua/plugins/git.lua +9 -0
  109. package/dot_config/nvim/lua/plugins/lsp.lua +221 -0
  110. package/dot_config/nvim/lua/plugins/markdown.lua +17 -0
  111. package/dot_config/nvim/lua/plugins/rust.lua +33 -0
  112. package/dot_config/nvim/lua/plugins/sessions.lua +32 -0
  113. package/dot_config/nvim/lua/plugins/ui.lua +537 -0
  114. package/dot_config/nvim/snippets/all.lua +9 -0
  115. package/dot_config/nvim/snippets/python.lua +16 -0
  116. package/dot_config/pip/pip.conf.tmpl +32 -0
  117. package/dot_config/pypoetry/config.toml.tmpl +6 -0
  118. package/dot_config/pyrightconfig.json.tmpl +5 -0
  119. package/dot_config/raycast/README.md +13 -0
  120. package/dot_config/redis/redisclirc +41 -0
  121. package/dot_config/shell/00-container-detect.sh +53 -0
  122. package/dot_config/shell/00-core-paths.sh.tmpl +95 -0
  123. package/dot_config/shell/05-core-safety.sh.tmpl +13 -0
  124. package/dot_config/shell/40-ls-colors.sh.tmpl +31 -0
  125. package/dot_config/shell/50-logic-functions.sh.tmpl +10 -0
  126. package/dot_config/shell/90-theme-switch.sh +70 -0
  127. package/dot_config/shell/90-ux-aliases.sh.tmpl +35 -0
  128. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +23 -0
  129. package/dot_config/shell/Brewfile +207 -0
  130. package/dot_config/shell/Brewfile.cask +92 -0
  131. package/dot_config/shell/Brewfile.cli +119 -0
  132. package/dot_config/shell/README.md +267 -0
  133. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  134. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  135. package/dot_config/sops/dot_sops.yaml +23 -0
  136. package/dot_config/starship.toml.tmpl +124 -0
  137. package/dot_config/task/Taskfile.yml +86 -0
  138. package/dot_config/tflint/tflint.hcl.tmpl +9 -0
  139. package/dot_config/tmux/tmux.conf.tmpl +181 -0
  140. package/dot_config/topgrade/topgrade.toml.tmpl +42 -0
  141. package/dot_config/vscode/extensions.txt +11 -0
  142. package/dot_config/vscode/settings.json.tmpl +123 -0
  143. package/dot_config/waybar/style.css +8 -0
  144. package/dot_config/wezterm/wezterm.lua.tmpl +236 -0
  145. package/dot_config/wget/wgetrc +12 -0
  146. package/dot_config/yarn/yarnrc.yml.tmpl +36 -0
  147. package/dot_config/yazi/yazi.toml +40 -0
  148. package/dot_config/zellij/config.kdl +79 -0
  149. package/dot_config/zsh/dot_zprofile +13 -0
  150. package/dot_config/zsh/dot_zshenv +6 -0
  151. package/dot_config/zsh/dot_zshrc.tmpl +199 -0
  152. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +5 -0
  153. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  154. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +22 -0
  155. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +123 -0
  156. package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +20 -0
  157. package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +9 -0
  158. package/dot_local/bin/executable_ai_core +130 -0
  159. package/dot_local/bin/executable_b64 +59 -0
  160. package/dot_local/bin/executable_dot +178 -0
  161. package/dot_local/bin/executable_dot_completion +55 -0
  162. package/dot_local/bin/executable_epoch +62 -0
  163. package/dot_local/bin/executable_extract +108 -0
  164. package/dot_local/bin/executable_git-ai-commit +160 -0
  165. package/dot_local/bin/executable_git-ai-diff +154 -0
  166. package/dot_local/bin/executable_hash +123 -0
  167. package/dot_local/bin/executable_hex +79 -0
  168. package/dot_local/bin/executable_ip +37 -0
  169. package/dot_local/bin/executable_jsonv +54 -0
  170. package/dot_local/bin/executable_jwt +78 -0
  171. package/dot_local/bin/executable_kill-port +59 -0
  172. package/dot_local/bin/executable_lorem +103 -0
  173. package/dot_local/bin/executable_regex +96 -0
  174. package/dot_local/bin/executable_tmux-sessionizer +187 -0
  175. package/dot_local/bin/executable_tour +137 -0
  176. package/dot_local/bin/executable_update +108 -0
  177. package/dot_local/bin/executable_uuid +57 -0
  178. package/dot_local/bin/executable_yamlv +39 -0
  179. package/dot_local/bin/executable_zig-install +89 -0
  180. package/dot_local/bin/voice_ops +7 -0
  181. package/dot_local/share/bash-completion/completions/dot +54 -0
  182. package/dot_local/share/zsh/completions/.keep +0 -0
  183. package/install.sh +255 -0
  184. package/package.json +52 -76
  185. package/scripts/ci/validate-ci-config.sh +222 -0
  186. package/scripts/demo/record.sh +41 -0
  187. package/scripts/diagnostics/benchmark.sh +201 -0
  188. package/scripts/diagnostics/doctor.sh +115 -0
  189. package/scripts/diagnostics/drift-dashboard.sh +26 -0
  190. package/scripts/diagnostics/health.sh +356 -0
  191. package/scripts/diagnostics/history-analysis.sh +77 -0
  192. package/scripts/diagnostics/security-score.sh +392 -0
  193. package/scripts/diagnostics/verify_state.sh +60 -0
  194. package/scripts/dot/commands/appearance.sh +63 -0
  195. package/scripts/dot/commands/core.sh +130 -0
  196. package/scripts/dot/commands/diagnostics.sh +100 -0
  197. package/scripts/dot/commands/meta.sh +117 -0
  198. package/scripts/dot/commands/restore.sh +209 -0
  199. package/scripts/dot/commands/secrets.sh +81 -0
  200. package/scripts/dot/commands/security.sh +73 -0
  201. package/scripts/dot/commands/tools.sh +228 -0
  202. package/scripts/dot/lib/utils.sh +72 -0
  203. package/scripts/fonts/install-nerd-fonts.sh +59 -0
  204. package/scripts/fonts/patch-fonts.sh +34 -0
  205. package/scripts/ops/chezmoi-apply.sh +42 -0
  206. package/scripts/ops/chezmoi-diff.sh +14 -0
  207. package/scripts/ops/chezmoi-remove.sh +43 -0
  208. package/scripts/ops/chezmoi-update.sh +16 -0
  209. package/scripts/ops/heal.sh +466 -0
  210. package/scripts/ops/health-check.sh +380 -0
  211. package/scripts/ops/rollback.sh +531 -0
  212. package/scripts/ops/teleport.sh +32 -0
  213. package/scripts/secrets/age-init.sh +69 -0
  214. package/scripts/secrets/create-secrets-file.sh +44 -0
  215. package/scripts/secrets/encrypt-ssh-key.sh +42 -0
  216. package/scripts/security/backup.sh +17 -0
  217. package/scripts/security/dns-doh.sh +29 -0
  218. package/scripts/security/encryption-check.sh +39 -0
  219. package/scripts/security/enforce-policies.sh +339 -0
  220. package/scripts/security/firewall.sh +34 -0
  221. package/scripts/security/lock-configs.sh +57 -0
  222. package/scripts/security/lock-screen.sh +33 -0
  223. package/scripts/security/manage-secrets.sh +415 -0
  224. package/scripts/security/telemetry-kill.sh +28 -0
  225. package/scripts/security/usb-safety.sh +29 -0
  226. package/scripts/tests/README.md +241 -0
  227. package/scripts/tests/benchmark.sh +91 -0
  228. package/scripts/tests/framework/assertions.sh +283 -0
  229. package/scripts/tests/framework/mocks.sh +201 -0
  230. package/scripts/tests/framework/test_runner.sh +189 -0
  231. package/scripts/tests/integration/test_install.sh +237 -0
  232. package/scripts/tests/performance/benchmark_runner.sh +156 -0
  233. package/scripts/tests/performance/regression_check.sh +73 -0
  234. package/scripts/tests/performance/stress_test.sh +65 -0
  235. package/scripts/tests/test-aliases.sh +25 -0
  236. package/scripts/tests/test-docker.sh +48 -0
  237. package/scripts/tests/unit/test_ai_aliases.sh +158 -0
  238. package/scripts/tests/unit/test_ai_cli_checks.sh +47 -0
  239. package/scripts/tests/unit/test_backup.sh +227 -0
  240. package/scripts/tests/unit/test_case_functions.sh +238 -0
  241. package/scripts/tests/unit/test_cd_aliases.sh +367 -0
  242. package/scripts/tests/unit/test_dot_cli.sh +217 -0
  243. package/scripts/tests/unit/test_encode64.sh +67 -0
  244. package/scripts/tests/unit/test_environment.sh +78 -0
  245. package/scripts/tests/unit/test_extract.sh +163 -0
  246. package/scripts/tests/unit/test_framework_edge_cases.sh +113 -0
  247. package/scripts/tests/unit/test_genpass.sh +298 -0
  248. package/scripts/tests/unit/test_install_edge_cases.sh +167 -0
  249. package/scripts/tests/unit/test_installers.sh +172 -0
  250. package/scripts/tests/unit/test_keygen.sh +68 -0
  251. package/scripts/tests/unit/test_logging.sh +96 -0
  252. package/scripts/tests/unit/test_os_detection_comprehensive.sh +388 -0
  253. package/scripts/tests/unit/test_package_managers_comprehensive.sh +321 -0
  254. package/scripts/tests/unit/test_prependpath.sh +66 -0
  255. package/scripts/tests/unit/test_prependpath_refactored.sh +89 -0
  256. package/scripts/tests/unit/test_rd.sh +230 -0
  257. package/scripts/tests/unit/test_security_fixes.sh +130 -0
  258. package/scripts/tests/unit/test_security_scripts.sh +87 -0
  259. package/scripts/tests/unit/test_template_validation.sh +238 -0
  260. package/scripts/tests/unit/test_utility_functions.sh +144 -0
  261. package/scripts/tests/unit/test_wave1_alias_split.sh +132 -0
  262. package/scripts/tests/unit/test_wave1_ci_pinning.sh +61 -0
  263. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +52 -0
  264. package/scripts/tests/unit/test_wave1_heal_fixes.sh +97 -0
  265. package/scripts/tests/unit/test_wave1_install_gpg.sh +35 -0
  266. package/scripts/tests/unit/test_wave1_zshenv_path.sh +89 -0
  267. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +115 -0
  268. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +75 -0
  269. package/scripts/tests/unit/test_zipf.sh +76 -0
  270. package/scripts/theme/apply-gnome-theme.sh +297 -0
  271. package/scripts/theme/install-boot-logo.sh +61 -0
  272. package/scripts/theme/install-catppuccin-themes.sh +346 -0
  273. package/scripts/theme/install-cursors.sh +24 -0
  274. package/scripts/theme/install-file-icons.sh +25 -0
  275. package/scripts/theme/install-grub-theme.sh +51 -0
  276. package/scripts/theme/install-lock-icon.sh +29 -0
  277. package/scripts/theme/switch.sh +250 -0
  278. package/scripts/theme/wallpaper-rotate.sh +82 -0
  279. package/scripts/theme/wallpaper-sync.sh +42 -0
  280. package/scripts/tools/cmatrix.sh +20 -0
  281. package/scripts/tools/detect-collisions.py +84 -0
  282. package/scripts/tools/emoji-picker.sh +45 -0
  283. package/scripts/tools/figlet-banner.sh +17 -0
  284. package/scripts/tools/log-rotate.sh +29 -0
  285. package/scripts/tools/lolcat-wrap.sh +18 -0
  286. package/scripts/tools/pipes.sh +47 -0
  287. package/scripts/tuning/linux.sh +175 -0
  288. package/scripts/tuning/macos.sh +46 -0
  289. package/templates/projects/go/README.md +7 -0
  290. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +7 -0
  291. package/templates/projects/go/go.mod +3 -0
  292. package/templates/projects/molecule/README.md +7 -0
  293. package/templates/projects/molecule/converge.yml +7 -0
  294. package/templates/projects/molecule/molecule.yml +16 -0
  295. package/templates/projects/node/README.md +7 -0
  296. package/templates/projects/node/package.json +10 -0
  297. package/templates/projects/node/src/index.js +2 -0
  298. package/templates/projects/packer/README.md +15 -0
  299. package/templates/projects/packer/main.pkr.hcl +15 -0
  300. package/templates/projects/python/README.md +7 -0
  301. package/templates/projects/python/pyproject.toml +25 -0
  302. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  303. package/templates/projects/python/tests/test_basic.py +2 -0
  304. package/dist/Makefile +0 -140
  305. package/dist/bin/backup.d.ts +0 -3
  306. package/dist/bin/backup.d.ts.map +0 -1
  307. package/dist/bin/backup.js +0 -4
  308. package/dist/bin/backup.js.map +0 -1
  309. package/dist/bin/constants.d.ts +0 -7
  310. package/dist/bin/constants.d.ts.map +0 -1
  311. package/dist/bin/constants.js +0 -2
  312. package/dist/bin/constants.js.map +0 -1
  313. package/dist/bin/copy.d.ts +0 -3
  314. package/dist/bin/copy.d.ts.map +0 -1
  315. package/dist/bin/copy.js +0 -3
  316. package/dist/bin/copy.js.map +0 -1
  317. package/dist/bin/dotfiles.d.ts +0 -3
  318. package/dist/bin/dotfiles.d.ts.map +0 -1
  319. package/dist/bin/dotfiles.js +0 -2
  320. package/dist/bin/dotfiles.js.map +0 -1
  321. package/dist/bin/download.d.ts +0 -3
  322. package/dist/bin/download.d.ts.map +0 -1
  323. package/dist/bin/download.js +0 -2
  324. package/dist/bin/download.js.map +0 -1
  325. package/dist/bin/index.d.ts +0 -2
  326. package/dist/bin/index.d.ts.map +0 -1
  327. package/dist/bin/index.js +0 -1
  328. package/dist/bin/index.js.map +0 -1
  329. package/dist/bin/transfer.d.ts +0 -3
  330. package/dist/bin/transfer.d.ts.map +0 -1
  331. package/dist/bin/transfer.js +0 -4
  332. package/dist/bin/transfer.js.map +0 -1
  333. package/dist/bin/unpack.d.ts +0 -3
  334. package/dist/bin/unpack.d.ts.map +0 -1
  335. package/dist/bin/unpack.js +0 -3
  336. package/dist/bin/unpack.js.map +0 -1
  337. package/dist/filesizes.txt +0 -382
  338. package/dist/lib/README.md +0 -86
  339. package/dist/lib/aliases/README.md +0 -57
  340. package/dist/lib/aliases/archives/README.md +0 -145
  341. package/dist/lib/aliases/archives/archives.aliases.sh +0 -114
  342. package/dist/lib/aliases/cd/README.md +0 -146
  343. package/dist/lib/aliases/cd/cd.aliases.sh +0 -51
  344. package/dist/lib/aliases/chmod/README.md +0 -160
  345. package/dist/lib/aliases/chmod/chmod.aliases.sh +0 -107
  346. package/dist/lib/aliases/clear/README.md +0 -37
  347. package/dist/lib/aliases/clear/clear.aliases.sh +0 -71
  348. package/dist/lib/aliases/configuration/README.md +0 -39
  349. package/dist/lib/aliases/configuration/configuration.aliases.sh +0 -70
  350. package/dist/lib/aliases/default/README.md +0 -40
  351. package/dist/lib/aliases/default/default.aliases.sh +0 -139
  352. package/dist/lib/aliases/dig/README.md +0 -37
  353. package/dist/lib/aliases/dig/dig.aliases.sh +0 -43
  354. package/dist/lib/aliases/disk-usage/README.md +0 -36
  355. package/dist/lib/aliases/disk-usage/du.aliases.sh +0 -84
  356. package/dist/lib/aliases/editor/README.md +0 -53
  357. package/dist/lib/aliases/editor/editor.aliases.sh +0 -26
  358. package/dist/lib/aliases/find/README.md +0 -46
  359. package/dist/lib/aliases/find/find.aliases.sh +0 -60
  360. package/dist/lib/aliases/gcloud/README.md +0 -63
  361. package/dist/lib/aliases/gcloud/gcloud.aliases.sh +0 -335
  362. package/dist/lib/aliases/git/README.md +0 -153
  363. package/dist/lib/aliases/git/git.aliases.sh +0 -544
  364. package/dist/lib/aliases/gnu/README.md +0 -89
  365. package/dist/lib/aliases/gnu/gnucoreutils-aliases.sh +0 -150
  366. package/dist/lib/aliases/heroku/README.md +0 -430
  367. package/dist/lib/aliases/heroku/heroku.aliases.sh +0 -1053
  368. package/dist/lib/aliases/interactive/README.md +0 -55
  369. package/dist/lib/aliases/interactive/interactive.aliases.sh +0 -50
  370. package/dist/lib/aliases/list/README.md +0 -131
  371. package/dist/lib/aliases/list/list.aliases.sh +0 -132
  372. package/dist/lib/aliases/macOS/README.md +0 -42
  373. package/dist/lib/aliases/macOS/macos.aliases.sh +0 -65
  374. package/dist/lib/aliases/make/README.md +0 -32
  375. package/dist/lib/aliases/make/make.aliases.sh +0 -35
  376. package/dist/lib/aliases/mkdir/README.md +0 -30
  377. package/dist/lib/aliases/mkdir/mkdir.aliases.sh +0 -29
  378. package/dist/lib/aliases/npm/README.md +0 -41
  379. package/dist/lib/aliases/npm/npm.aliases.sh +0 -61
  380. package/dist/lib/aliases/permission/README.md +0 -47
  381. package/dist/lib/aliases/permission/permission.aliases.sh +0 -73
  382. package/dist/lib/aliases/pnpm/README.md +0 -53
  383. package/dist/lib/aliases/pnpm/pnpm.aliases.sh +0 -76
  384. package/dist/lib/aliases/ps/README.md +0 -29
  385. package/dist/lib/aliases/ps/ps.aliases.sh +0 -20
  386. package/dist/lib/aliases/python/python.aliases.sh +0 -141
  387. package/dist/lib/aliases/rsync/README.md +0 -25
  388. package/dist/lib/aliases/rsync/rsync.aliases.sh +0 -17
  389. package/dist/lib/aliases/rust/README.md +0 -182
  390. package/dist/lib/aliases/rust/rust.aliases.sh +0 -119
  391. package/dist/lib/aliases/subversion/README.md +0 -66
  392. package/dist/lib/aliases/subversion/subversion.aliases.sh +0 -47
  393. package/dist/lib/aliases/sudo/README.md +0 -27
  394. package/dist/lib/aliases/sudo/sudo.aliases.sh +0 -20
  395. package/dist/lib/aliases/tmux/README.md +0 -31
  396. package/dist/lib/aliases/tmux/tmux.aliases.sh +0 -36
  397. package/dist/lib/aliases/update/README.md +0 -38
  398. package/dist/lib/aliases/update/update.aliases.sh +0 -310
  399. package/dist/lib/aliases/uuid/README.md +0 -24
  400. package/dist/lib/aliases/uuid/uuid.aliases.sh +0 -19
  401. package/dist/lib/aliases/wget/README.md +0 -27
  402. package/dist/lib/aliases/wget/wget.aliases.sh +0 -22
  403. package/dist/lib/aliases.sh +0 -50
  404. package/dist/lib/configurations/README.md +0 -18
  405. package/dist/lib/configurations/bash/bashrc +0 -167
  406. package/dist/lib/configurations/curl/cacert.pem +0 -3460
  407. package/dist/lib/configurations/curl/curlrc +0 -53
  408. package/dist/lib/configurations/default/color.sh +0 -24
  409. package/dist/lib/configurations/default/constants.sh +0 -43
  410. package/dist/lib/configurations/default/editor.sh +0 -18
  411. package/dist/lib/configurations/default/prompt.sh +0 -48
  412. package/dist/lib/configurations/input/inputrc +0 -23
  413. package/dist/lib/configurations/jshint/jshintrc +0 -37
  414. package/dist/lib/configurations/nano/nanorc +0 -35
  415. package/dist/lib/configurations/profile/profile +0 -37
  416. package/dist/lib/configurations/prompt/prompt.sh +0 -81
  417. package/dist/lib/configurations/tmux/default +0 -18
  418. package/dist/lib/configurations/tmux/display +0 -30
  419. package/dist/lib/configurations/tmux/linux +0 -18
  420. package/dist/lib/configurations/tmux/navigation +0 -30
  421. package/dist/lib/configurations/tmux/panes +0 -10
  422. package/dist/lib/configurations/tmux/theme +0 -29
  423. package/dist/lib/configurations/tmux/tmux +0 -21
  424. package/dist/lib/configurations/vim/vimrc +0 -193
  425. package/dist/lib/configurations/wget/wgetrc +0 -40
  426. package/dist/lib/configurations/zsh/zshrc +0 -50
  427. package/dist/lib/configurations.sh +0 -45
  428. package/dist/lib/functions/README.md +0 -92
  429. package/dist/lib/functions/apihealth.sh +0 -277
  430. package/dist/lib/functions/apilatency.sh +0 -157
  431. package/dist/lib/functions/apiload.sh +0 -165
  432. package/dist/lib/functions/backup.sh +0 -143
  433. package/dist/lib/functions/cdls.sh +0 -60
  434. package/dist/lib/functions/curlheader.sh +0 -78
  435. package/dist/lib/functions/curlstatus.sh +0 -74
  436. package/dist/lib/functions/curltime.sh +0 -75
  437. package/dist/lib/functions/encode64.sh +0 -107
  438. package/dist/lib/functions/environment.sh +0 -78
  439. package/dist/lib/functions/extract.sh +0 -86
  440. package/dist/lib/functions/freespace.sh +0 -67
  441. package/dist/lib/functions/genpwd.sh +0 -105
  442. package/dist/lib/functions/goto.sh +0 -67
  443. package/dist/lib/functions/hexdump.sh +0 -96
  444. package/dist/lib/functions/hiddenfiles.sh +0 -77
  445. package/dist/lib/functions/hostinfo.sh +0 -98
  446. package/dist/lib/functions/hstats.sh +0 -75
  447. package/dist/lib/functions/httpdebug.sh +0 -113
  448. package/dist/lib/functions/kebabcase.sh +0 -61
  449. package/dist/lib/functions/keygen.sh +0 -194
  450. package/dist/lib/functions/last.sh +0 -112
  451. package/dist/lib/functions/logout.sh +0 -120
  452. package/dist/lib/functions/lowercase.sh +0 -61
  453. package/dist/lib/functions/matrix.sh +0 -216
  454. package/dist/lib/functions/mount_read_only.sh +0 -11
  455. package/dist/lib/functions/myproc.sh +0 -9
  456. package/dist/lib/functions/prependpath.sh +0 -21
  457. package/dist/lib/functions/ql.sh +0 -9
  458. package/dist/lib/functions/rd.sh +0 -17
  459. package/dist/lib/functions/remove_disk.sh +0 -11
  460. package/dist/lib/functions/ren.sh +0 -73
  461. package/dist/lib/functions/sentencecase.sh +0 -63
  462. package/dist/lib/functions/showhiddenfiles.sh +0 -14
  463. package/dist/lib/functions/size.sh +0 -16
  464. package/dist/lib/functions/snakecase.sh +0 -61
  465. package/dist/lib/functions/stopwatch.sh +0 -15
  466. package/dist/lib/functions/sysinfo.sh +0 -145
  467. package/dist/lib/functions/titlecase.sh +0 -65
  468. package/dist/lib/functions/uppercase.sh +0 -61
  469. package/dist/lib/functions/view-source.sh +0 -9
  470. package/dist/lib/functions/vscode.sh +0 -32
  471. package/dist/lib/functions/whoisport.sh +0 -14
  472. package/dist/lib/functions/zipf.sh +0 -16
  473. package/dist/lib/functions.sh +0 -46
  474. package/dist/lib/history.sh +0 -90
  475. package/dist/lib/paths/README.md +0 -52
  476. package/dist/lib/paths/custom.paths.sh +0 -40
  477. package/dist/lib/paths/default.paths.sh +0 -37
  478. package/dist/lib/paths.sh +0 -46
  479. package/dist/scripts/backup.sh +0 -95
  480. package/dist/scripts/banner.sh +0 -20
  481. package/dist/scripts/build.sh +0 -41
  482. package/dist/scripts/clean.sh +0 -31
  483. package/dist/scripts/compile.sh +0 -54
  484. package/dist/scripts/copy.sh +0 -108
  485. package/dist/scripts/dotfiles.sh +0 -63
  486. package/dist/scripts/download.sh +0 -35
  487. package/dist/scripts/help.sh +0 -57
  488. package/dist/scripts/ssh.sh +0 -55
  489. package/dist/scripts/unpack.sh +0 -28
  490. /package/{dist/lib/configurations → dot_config}/gem/gemrc +0 -0
@@ -0,0 +1,101 @@
1
+ # ADR-001: Multi-stage CI/CD Pipeline Design
2
+
3
+ **Status**: Accepted
4
+ **Date**: 2026-02-09
5
+ **Authors**: @sebastienrousseau
6
+
7
+ ## Context
8
+
9
+ The dotfiles repository requires a CI/CD pipeline that:
10
+ - Validates changes across multiple platforms (Linux, macOS)
11
+ - Runs security scans to detect secrets and vulnerabilities
12
+ - Tests shell scripts, Lua configurations, and Nix expressions
13
+ - Maintains fast feedback loops for developers
14
+ - Minimizes GitHub Actions costs (runner minutes)
15
+
16
+ Traditional approaches run all checks on every commit, leading to:
17
+ - Wasted compute on unrelated changes (e.g., running Lua linting when only docs change)
18
+ - High costs from macOS runners ($0.08/min vs $0.008/min for Linux)
19
+ - Long feedback times from sequential job execution
20
+
21
+ ## Decision
22
+
23
+ Implement a **5-stage progressive CI pipeline** with path-based filtering:
24
+
25
+ ### Stage 1: Change Detection
26
+ Use `dorny/paths-filter` to detect which file categories changed:
27
+ - `shell`: *.sh, scripts/**, install/**
28
+ - `lua`: dot_config/nvim/**, *.lua
29
+ - `nix`: nix/**, *.nix
30
+ - `config`: dot_*/**, .chezmoitemplates/**
31
+
32
+ ### Stage 2: Lint (Parallel, Conditional)
33
+ - **lint-shell**: Only runs if shell files changed
34
+ - **lint-lua**: Only runs if Lua files changed
35
+ - Run in parallel to minimize wall-clock time
36
+
37
+ ### Stage 3: Security (Always on PRs)
38
+ - **secrets-scan**: Gitleaks on every PR (critical)
39
+ - **link-check**: Only on schedule (expensive)
40
+
41
+ ### Stage 4: Test (Conditional Matrix)
42
+ - Linux-only for PRs (cheapest)
43
+ - Full matrix (Linux + macOS) on schedule/manual trigger
44
+ - Docker container tests for installation validation
45
+
46
+ ### Stage 5: Quality (Schedule/Manual Only)
47
+ - Idempotency verification
48
+ - Performance benchmarks
49
+ - Nix flake checks
50
+
51
+ ### Cost Optimization Strategies
52
+
53
+ 1. **Path filters**: Skip jobs when files don't match
54
+ 2. **Concurrency groups**: Cancel in-progress runs on new pushes
55
+ 3. **Conditional matrices**: Expensive OS testing only on schedule
56
+ 4. **Aggressive caching**: Tools, dependencies, databases
57
+
58
+ ## Consequences
59
+
60
+ ### Positive
61
+ - ~50% reduction in GitHub Actions minutes
62
+ - Fast feedback for most changes (1-3 minutes)
63
+ - Comprehensive testing still available via schedule/manual
64
+ - Clear separation of concerns between stages
65
+
66
+ ### Negative
67
+ - Complexity in workflow configuration
68
+ - Some bugs might only surface in scheduled runs
69
+ - Path filter maintenance required as repo structure evolves
70
+
71
+ ### Neutral
72
+ - Developers can trigger full CI manually with `workflow_dispatch`
73
+ - Breaking changes to CI require testing across all stages
74
+
75
+ ## Implementation
76
+
77
+ ```yaml
78
+ # Key patterns used
79
+ on:
80
+ push:
81
+ paths:
82
+ - '**.sh' # Only trigger on shell changes
83
+
84
+ concurrency:
85
+ group: ${{ github.workflow }}-${{ github.ref }}
86
+ cancel-in-progress: true
87
+
88
+ jobs:
89
+ changes:
90
+ outputs:
91
+ shell: ${{ steps.filter.outputs.shell }}
92
+
93
+ lint-shell:
94
+ needs: changes
95
+ if: needs.changes.outputs.shell == 'true'
96
+ ```
97
+
98
+ ## References
99
+
100
+ - [GitHub Actions Path Filtering](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)
101
+ - [dorny/paths-filter](https://github.com/dorny/paths-filter)
@@ -0,0 +1,121 @@
1
+ # ADR-002: Shell Performance Optimization Strategy
2
+
3
+ **Status**: Accepted
4
+ **Date**: 2026-02-09
5
+ **Authors**: @sebastienrousseau
6
+
7
+ ## Context
8
+
9
+ Shell startup time directly impacts developer productivity. Every new terminal,
10
+ tmux pane, or shell command execution incurs this cost. With rich shell
11
+ configurations (completions, prompts, plugins), startup can easily exceed 1-2
12
+ seconds.
13
+
14
+ Goals:
15
+ - Target startup time: <500ms for interactive shells
16
+ - Maintain full functionality (completions, syntax highlighting, git info)
17
+ - Support both zsh and bash
18
+ - Work across macOS and Linux
19
+
20
+ ## Decision
21
+
22
+ Implement a **multi-layer performance optimization strategy**:
23
+
24
+ ### Layer 1: Compilation and Caching
25
+
26
+ ```bash
27
+ # Compile zsh files to .zwc format
28
+ _cached_eval() {
29
+ local cache="$HOME/.cache/zsh/$1.zwc"
30
+ if [[ ! -f "$cache" || "$2" -nt "$cache" ]]; then
31
+ eval "$($2)" > "$cache.tmp"
32
+ zcompile "$cache.tmp" "$cache"
33
+ fi
34
+ source "$cache"
35
+ }
36
+ ```
37
+
38
+ - Compile frequently-sourced files to bytecode
39
+ - Cache command output (brew shellenv, mise activate)
40
+ - Invalidate cache when source files change
41
+
42
+ ### Layer 2: Lazy Loading
43
+
44
+ Defer loading of heavy components until first use:
45
+
46
+ ```bash
47
+ # Lazy load completions
48
+ function kubectl() {
49
+ unfunction kubectl
50
+ source <(kubectl completion zsh)
51
+ kubectl "$@"
52
+ }
53
+ ```
54
+
55
+ - Completions loaded on first command use
56
+ - NVM/RVM loaded only when node/ruby commands invoked
57
+ - Heavy plugins deferred via zinit's `wait` modifier
58
+
59
+ ### Layer 3: Zinit Turbo Mode
60
+
61
+ ```zsh
62
+ zinit ice wait lucid
63
+ zinit light zsh-users/zsh-autosuggestions
64
+ ```
65
+
66
+ - Plugins load asynchronously after prompt
67
+ - Critical plugins (syntax highlighting) load synchronously
68
+ - Most plugins have 0ms impact on startup
69
+
70
+ ### Layer 4: Conditional Loading
71
+
72
+ ```bash
73
+ # Only load if command exists
74
+ [[ -x /opt/homebrew/bin/brew ]] && eval "$(/opt/homebrew/bin/brew shellenv)"
75
+
76
+ # Skip in non-interactive shells
77
+ [[ $- != *i* ]] && return
78
+ ```
79
+
80
+ - Platform-specific code guarded by OS detection
81
+ - Heavy features opt-in via environment variables
82
+ - Non-interactive shells get minimal config
83
+
84
+ ### Monitoring
85
+
86
+ Benchmark script to track startup time:
87
+ ```bash
88
+ hyperfine --warmup 3 --runs 10 "zsh -i -c exit"
89
+ ```
90
+
91
+ CI enforces 500ms threshold with warnings.
92
+
93
+ ## Consequences
94
+
95
+ ### Positive
96
+ - Consistent <500ms startup across platforms
97
+ - Full functionality preserved
98
+ - Easy to add new tools without performance regression
99
+ - Clear patterns for contributors to follow
100
+
101
+ ### Negative
102
+ - First invocation of lazy-loaded commands is slower
103
+ - Cache invalidation bugs can cause stale behavior
104
+ - Complexity in understanding load order
105
+
106
+ ### Neutral
107
+ - Profiling required when adding new plugins
108
+ - Trade-off between convenience and performance explicit
109
+
110
+ ## Measurements
111
+
112
+ | Configuration | Startup Time |
113
+ |---------------|--------------|
114
+ | Vanilla zsh | ~50ms |
115
+ | With oh-my-zsh | ~800ms |
116
+ | This approach | ~200-400ms |
117
+
118
+ ## References
119
+
120
+ - [Zsh Startup Optimization](https://htr3n.github.io/2018/07/faster-zsh/)
121
+ - [Zinit Turbo Mode](https://zdharma-continuum.github.io/zinit/wiki/INTRODUCTION/)
@@ -0,0 +1,140 @@
1
+ # ADR-003: Security-First Approach
2
+
3
+ **Status**: Accepted
4
+ **Date**: 2026-02-09
5
+ **Authors**: @sebastienrousseau
6
+
7
+ ## Context
8
+
9
+ Dotfiles repositories present unique security challenges:
10
+ - They configure system behavior and permissions
11
+ - They may contain or reference secrets (API keys, tokens)
12
+ - They execute scripts with user privileges
13
+ - They're often cloned to multiple machines
14
+
15
+ A security breach in dotfiles can compromise all systems using them.
16
+
17
+ ## Decision
18
+
19
+ Implement a **defense-in-depth security model** with multiple layers:
20
+
21
+ ### Layer 1: Secrets Protection
22
+
23
+ **Never commit secrets:**
24
+ ```bash
25
+ # .gitleaks.toml - block common secret patterns
26
+ [[rules]]
27
+ id = "generic-api-key"
28
+ regex = '''(?i)(api[_-]?key|apikey)\s*[:=]\s*['"]?([a-zA-Z0-9]{20,})'''
29
+ ```
30
+
31
+ **Encrypted secrets with age:**
32
+ ```bash
33
+ # Secrets stored encrypted, decrypted at apply time
34
+ chezmoi.encryption = "age"
35
+ chezmoi.age.identity = "~/.config/chezmoi/key.txt"
36
+ ```
37
+
38
+ **CI enforcement:**
39
+ - Gitleaks runs on every PR
40
+ - TruffleHog for verified secrets detection
41
+ - Block merge if secrets detected
42
+
43
+ ### Layer 2: Input Validation
44
+
45
+ **Path traversal prevention:**
46
+ ```bash
47
+ # Validate all user inputs
48
+ if [[ ! "$template_lang" =~ ^[a-zA-Z0-9_-]+$ ]]; then
49
+ die "Invalid template name: $template_lang"
50
+ fi
51
+ ```
52
+
53
+ **Safe file operations:**
54
+ ```bash
55
+ # Use absolute paths, validate before operations
56
+ local real_path
57
+ real_path="$(realpath -m "$user_input")"
58
+ if [[ "$real_path" != "$allowed_base"/* ]]; then
59
+ die "Path outside allowed directory"
60
+ fi
61
+ ```
62
+
63
+ ### Layer 3: Opt-in System Modifications
64
+
65
+ **Dangerous operations require explicit consent:**
66
+ ```bash
67
+ # Security scripts are opt-in
68
+ if [ "${DOTFILES_SECURITY:-0}" != "1" ]; then
69
+ echo "Security hardening is opt-in. Set DOTFILES_SECURITY=1 to enable."
70
+ exit 0
71
+ fi
72
+ ```
73
+
74
+ **Comprehensive logging:**
75
+ ```bash
76
+ # All system modifications logged
77
+ log_security_change() {
78
+ echo "[$(date -Iseconds)] $1" >> "$HOME/.local/share/dotfiles-security.log"
79
+ }
80
+ ```
81
+
82
+ ### Layer 4: CI Security Scanning
83
+
84
+ **Multi-tool approach:**
85
+ - **Gitleaks**: Secrets in git history
86
+ - **Shellcheck**: Shell script vulnerabilities
87
+ - **Checkov**: Infrastructure misconfigurations
88
+ - **Trivy**: Container vulnerabilities (when applicable)
89
+ - **CodeQL**: Static analysis for Python/JavaScript
90
+
91
+ **Weekly deep scans:**
92
+ ```yaml
93
+ schedule:
94
+ - cron: '0 2 * * 0' # Weekly security audit
95
+ ```
96
+
97
+ ### Layer 5: Minimal Privileges
98
+
99
+ **Scripts request only needed permissions:**
100
+ ```bash
101
+ # Don't run as root unless necessary
102
+ if [ "$(id -u)" = "0" ]; then
103
+ die "This script should not run as root"
104
+ fi
105
+
106
+ # Use sudo only for specific commands
107
+ sudo sysctl -w net.ipv4.tcp_keepalive_time=60
108
+ ```
109
+
110
+ ## Consequences
111
+
112
+ ### Positive
113
+ - Secrets never enter git history
114
+ - System modifications are auditable
115
+ - Multiple layers catch different vulnerability types
116
+ - Contributors have clear security patterns to follow
117
+
118
+ ### Negative
119
+ - Additional complexity in scripts
120
+ - Encrypted secrets require key management
121
+ - Some features disabled by default (friction)
122
+
123
+ ### Neutral
124
+ - Security vs convenience trade-offs explicit
125
+ - Regular security audits via scheduled CI
126
+
127
+ ## Security Checklist for Contributors
128
+
129
+ - [ ] No hardcoded secrets (use environment variables or age encryption)
130
+ - [ ] Validate all user inputs
131
+ - [ ] Use absolute paths for file operations
132
+ - [ ] Document any system modifications
133
+ - [ ] Test scripts with shellcheck
134
+ - [ ] Add appropriate permission checks
135
+
136
+ ## References
137
+
138
+ - [OWASP Secure Coding Practices](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/)
139
+ - [Age Encryption](https://github.com/FiloSottile/age)
140
+ - [Gitleaks](https://github.com/gitleaks/gitleaks)
@@ -0,0 +1,157 @@
1
+ # ADR-004: Chezmoi + Custom CLI Wrapper Architecture
2
+
3
+ **Status**: Accepted
4
+ **Date**: 2026-02-09
5
+ **Authors**: @sebastienrousseau
6
+
7
+ ## Context
8
+
9
+ Managing dotfiles requires:
10
+ - Tracking file changes and applying them consistently
11
+ - Handling platform-specific configurations
12
+ - Supporting encrypted secrets
13
+ - Providing a good developer experience
14
+
15
+ Options considered:
16
+ 1. **Bare git repository**: Simple but poor UX, no templating
17
+ 2. **GNU Stow**: Symlink-based, limited features
18
+ 3. **Chezmoi only**: Powerful but complex CLI
19
+ 4. **Custom from scratch**: High maintenance burden
20
+ 5. **Chezmoi + wrapper**: Best of both worlds
21
+
22
+ ## Decision
23
+
24
+ Use **Chezmoi as the core engine** with a **custom `dot` CLI wrapper** that:
25
+
26
+ ### Architecture
27
+
28
+ ```
29
+ ┌─────────────────────────────────────────────┐
30
+ │ dot CLI │
31
+ │ (User-friendly interface, custom commands) │
32
+ ├─────────────────────────────────────────────┤
33
+ │ Command Modules │
34
+ │ core │ diagnostics │ tools │ appearance │
35
+ │ secrets │ security │ meta │
36
+ ├─────────────────────────────────────────────┤
37
+ │ Shared Library │
38
+ │ utils.sh (resolve_source_dir, run_script) │
39
+ ├─────────────────────────────────────────────┤
40
+ │ Chezmoi │
41
+ │ (Template engine, state management, apply) │
42
+ └─────────────────────────────────────────────┘
43
+ ```
44
+
45
+ ### Core Principles
46
+
47
+ **1. Chezmoi handles complexity:**
48
+ - Template rendering with Go text/template
49
+ - Encrypted secrets with age
50
+ - State tracking (what's applied vs source)
51
+ - Cross-platform path handling
52
+
53
+ **2. dot CLI handles UX:**
54
+ - Memorable command names (`dot sync` vs `chezmoi apply`)
55
+ - Domain-specific commands (`dot doctor`, `dot theme`)
56
+ - Integration with external tools (Nix, Docker, Neovim)
57
+ - Consistent help and error messages
58
+
59
+ **3. Modular command structure:**
60
+ ```
61
+ scripts/dot/
62
+ ├── lib/
63
+ │ └── utils.sh # Shared functions
64
+ └── commands/
65
+ ├── core.sh # apply, sync, update, add, diff
66
+ ├── diagnostics.sh # doctor, heal, health, benchmark
67
+ ├── tools.sh # tools, new, packages
68
+ ├── appearance.sh # theme, wallpaper, fonts
69
+ ├── secrets.sh # secrets-init, secrets
70
+ ├── security.sh # firewall, backup, encrypt-check
71
+ └── meta.sh # upgrade, docs, learn
72
+ ```
73
+
74
+ **4. Delegation pattern:**
75
+ ```bash
76
+ # Main dispatcher in dot CLI
77
+ dispatch() {
78
+ local module="$1" cmd="$2"
79
+ shift 2
80
+ exec bash "$src_dir/scripts/dot/commands/$module.sh" "$cmd" "$@"
81
+ }
82
+ ```
83
+
84
+ ### Chezmoi Integration Points
85
+
86
+ | Feature | Chezmoi | dot CLI |
87
+ |---------|---------|---------|
88
+ | Apply changes | `chezmoi apply` | `dot sync` |
89
+ | View diff | `chezmoi diff` | `dot diff` |
90
+ | Edit secrets | `chezmoi edit --encrypted` | `dot secrets` |
91
+ | Source directory | `chezmoi source-path` | `dot cd` |
92
+ | Health check | `chezmoi doctor` | `dot doctor` (extended) |
93
+
94
+ ### Extension Points
95
+
96
+ Custom commands can:
97
+ 1. Wrap chezmoi commands with better defaults
98
+ 2. Add entirely new functionality (benchmarks, themes)
99
+ 3. Integrate with system tools (nix, docker, brew)
100
+ 4. Provide interactive experiences (tour, learn)
101
+
102
+ ## Consequences
103
+
104
+ ### Positive
105
+ - Leverage Chezmoi's battle-tested engine
106
+ - User-friendly interface for common tasks
107
+ - Easy to add domain-specific commands
108
+ - Modular structure enables testing and maintenance
109
+ - Single entry point (`dot`) for all operations
110
+
111
+ ### Negative
112
+ - Two layers to understand (chezmoi + dot)
113
+ - Version coupling between chezmoi and scripts
114
+ - Some chezmoi features not exposed via dot
115
+
116
+ ### Neutral
117
+ - Advanced users can still use chezmoi directly
118
+ - Documentation needed for both layers
119
+ - Upgrade path when chezmoi adds new features
120
+
121
+ ## Implementation Notes
122
+
123
+ ### Adding a New Command
124
+
125
+ 1. Identify the appropriate module (or create new one)
126
+ 2. Add function `cmd_<name>()` to module
127
+ 3. Add case to module's dispatch
128
+ 4. Add case to main dot CLI dispatcher
129
+ 5. Update help text
130
+ 6. Add tests if complex
131
+
132
+ ### Module Template
133
+
134
+ ```bash
135
+ #!/usr/bin/env bash
136
+ # Dotfiles CLI - <Category> Commands
137
+
138
+ set -e
139
+
140
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
141
+ source "$SCRIPT_DIR/../lib/utils.sh"
142
+
143
+ cmd_example() {
144
+ # Implementation
145
+ }
146
+
147
+ case "${1:-}" in
148
+ example) shift; cmd_example "$@" ;;
149
+ *) echo "Unknown command: ${1:-}" >&2; exit 1 ;;
150
+ esac
151
+ ```
152
+
153
+ ## References
154
+
155
+ - [Chezmoi Documentation](https://www.chezmoi.io/)
156
+ - [Command Pattern](https://refactoring.guru/design-patterns/command)
157
+ - [Unix Philosophy](https://en.wikipedia.org/wiki/Unix_philosophy)
@@ -0,0 +1,89 @@
1
+ # ADR-005: Chezmoi as Dotfiles Manager
2
+
3
+ **Status**: Accepted
4
+ **Date**: 2026-02-09
5
+ **Authors**: @sebastienrousseau
6
+
7
+ ## Context
8
+
9
+ Managing dotfiles across multiple machines requires:
10
+ - Version control for configuration files
11
+ - Template support for machine-specific values
12
+ - Cross-platform compatibility (macOS, Linux, WSL)
13
+ - Encrypted secrets management
14
+ - Easy installation and updates
15
+
16
+ Several approaches were considered for dotfiles management.
17
+
18
+ ## Decision
19
+
20
+ Use **chezmoi** as the primary dotfiles management tool.
21
+
22
+ ### Alternatives Considered
23
+
24
+ | Tool | Pros | Cons |
25
+ |------|------|------|
26
+ | **GNU Stow** | Simple, no dependencies | No templating, symlink-only |
27
+ | **yadm** | Git-based, encryption | Limited templating |
28
+ | **Bare Git** | Simple, no tools | No templating, manual management |
29
+ | **Ansible** | Powerful, idempotent | Heavy, complex for dotfiles |
30
+ | **Nix Home Manager** | Declarative, reproducible | Steep learning curve, Nix dependency |
31
+
32
+ ### Why Chezmoi
33
+
34
+ 1. **Template Support**: Go text/template for machine-specific configuration
35
+ 2. **Encryption**: Built-in age/gpg encryption for secrets
36
+ 3. **Cross-Platform**: Native support for macOS, Linux, Windows
37
+ 4. **Single Binary**: No runtime dependencies
38
+ 5. **Git Integration**: Works with any Git host
39
+ 6. **Dry-Run**: Preview changes before applying
40
+ 7. **Active Development**: Well-maintained with responsive maintainer
41
+
42
+ ## Implementation
43
+
44
+ ```bash
45
+ # Installation
46
+ sh -c "$(curl -fsLS get.chezmoi.io)"
47
+
48
+ # Initialize from repository
49
+ chezmoi init https://github.com/user/dotfiles.git
50
+
51
+ # Apply configuration
52
+ chezmoi apply
53
+ ```
54
+
55
+ ### Template Example
56
+
57
+ ```go
58
+ {{- if eq .chezmoi.os "darwin" }}
59
+ # macOS-specific configuration
60
+ {{- else if eq .chezmoi.os "linux" }}
61
+ # Linux-specific configuration
62
+ {{- end }}
63
+ ```
64
+
65
+ ## Consequences
66
+
67
+ ### Positive
68
+ - Consistent configuration across all machines
69
+ - Secure secrets management with age encryption
70
+ - Easy to add new machines to the fleet
71
+ - Template-driven configuration reduces duplication
72
+ - Built-in diff and dry-run for safe updates
73
+
74
+ ### Negative
75
+ - Learning curve for Go templates
76
+ - Additional abstraction layer over raw Git
77
+ - Requires chezmoi binary installation
78
+ - Some features (scripts) require careful ordering
79
+
80
+ ### Neutral
81
+ - Configuration stored in `~/.local/share/chezmoi` by default
82
+ - Custom wrapper CLI (`dot`) provides simpler interface
83
+ - Regular `git` commands still work in source directory
84
+
85
+ ## References
86
+
87
+ - [Chezmoi Documentation](https://www.chezmoi.io/)
88
+ - [Chezmoi Quick Start](https://www.chezmoi.io/quick-start/)
89
+ - [Comparison with Other Tools](https://www.chezmoi.io/comparison-table/)