@sebastienrousseau/dotfiles 0.2.468 → 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 (489) 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 -57
  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 -380
  338. package/dist/lib/README.md +0 -12
  339. package/dist/lib/aliases/README.md +0 -55
  340. package/dist/lib/aliases/archives/README.md +0 -59
  341. package/dist/lib/aliases/archives/archives.aliases.sh +0 -157
  342. package/dist/lib/aliases/cd/README.md +0 -65
  343. package/dist/lib/aliases/cd/cd.aliases.sh +0 -73
  344. package/dist/lib/aliases/chmod/README.md +0 -109
  345. package/dist/lib/aliases/chmod/chmod.aliases.sh +0 -91
  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 -73
  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/jekyll/README.md +0 -41
  371. package/dist/lib/aliases/jekyll/jekyll.aliases.sh +0 -54
  372. package/dist/lib/aliases/list/README.md +0 -42
  373. package/dist/lib/aliases/list/list.aliases.sh +0 -86
  374. package/dist/lib/aliases/macOS/README.md +0 -42
  375. package/dist/lib/aliases/macOS/macos.aliases.sh +0 -65
  376. package/dist/lib/aliases/make/README.md +0 -32
  377. package/dist/lib/aliases/make/make.aliases.sh +0 -35
  378. package/dist/lib/aliases/mkdir/README.md +0 -30
  379. package/dist/lib/aliases/mkdir/mkdir.aliases.sh +0 -29
  380. package/dist/lib/aliases/npm/README.md +0 -41
  381. package/dist/lib/aliases/npm/npm.aliases.sh +0 -61
  382. package/dist/lib/aliases/permission/README.md +0 -47
  383. package/dist/lib/aliases/permission/permission.aliases.sh +0 -73
  384. package/dist/lib/aliases/pnpm/README.md +0 -53
  385. package/dist/lib/aliases/pnpm/pnpm.aliases.sh +0 -76
  386. package/dist/lib/aliases/ps/README.md +0 -29
  387. package/dist/lib/aliases/ps/ps.aliases.sh +0 -20
  388. package/dist/lib/aliases/rsync/README.md +0 -25
  389. package/dist/lib/aliases/rsync/rsync.aliases.sh +0 -17
  390. package/dist/lib/aliases/rust/README.md +0 -61
  391. package/dist/lib/aliases/rust/rust.aliases.sh +0 -127
  392. package/dist/lib/aliases/subversion/README.md +0 -66
  393. package/dist/lib/aliases/subversion/subversion.aliases.sh +0 -47
  394. package/dist/lib/aliases/sudo/README.md +0 -27
  395. package/dist/lib/aliases/sudo/sudo.aliases.sh +0 -20
  396. package/dist/lib/aliases/tmux/README.md +0 -31
  397. package/dist/lib/aliases/tmux/tmux.aliases.sh +0 -36
  398. package/dist/lib/aliases/update/README.md +0 -38
  399. package/dist/lib/aliases/update/update.aliases.sh +0 -69
  400. package/dist/lib/aliases/uuid/README.md +0 -24
  401. package/dist/lib/aliases/uuid/uuid.aliases.sh +0 -19
  402. package/dist/lib/aliases/wget/README.md +0 -27
  403. package/dist/lib/aliases/wget/wget.aliases.sh +0 -22
  404. package/dist/lib/aliases.sh +0 -50
  405. package/dist/lib/configurations/README.md +0 -18
  406. package/dist/lib/configurations/bash/bashrc +0 -39
  407. package/dist/lib/configurations/curl/cacert.pem +0 -3460
  408. package/dist/lib/configurations/curl/curlrc +0 -56
  409. package/dist/lib/configurations/default/color.sh +0 -24
  410. package/dist/lib/configurations/default/constants.sh +0 -43
  411. package/dist/lib/configurations/default/editor.sh +0 -18
  412. package/dist/lib/configurations/default/prompt.sh +0 -39
  413. package/dist/lib/configurations/input/inputrc +0 -23
  414. package/dist/lib/configurations/jshint/jshintrc +0 -37
  415. package/dist/lib/configurations/nano/nanorc +0 -35
  416. package/dist/lib/configurations/profile/profile +0 -37
  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 -73
  425. package/dist/lib/configurations/wget/wgetrc +0 -40
  426. package/dist/lib/configurations/zsh/zshrc +0 -51
  427. package/dist/lib/configurations.sh +0 -33
  428. package/dist/lib/functions/README.md +0 -78
  429. package/dist/lib/functions/cdls.sh +0 -14
  430. package/dist/lib/functions/curlheader.sh +0 -22
  431. package/dist/lib/functions/curlstatus.sh +0 -17
  432. package/dist/lib/functions/curltime.sh +0 -33
  433. package/dist/lib/functions/encode64.sh +0 -27
  434. package/dist/lib/functions/environment.sh +0 -38
  435. package/dist/lib/functions/extract.sh +0 -34
  436. package/dist/lib/functions/filehead.sh +0 -4
  437. package/dist/lib/functions/freespace.sh +0 -21
  438. package/dist/lib/functions/genpwd.sh +0 -41
  439. package/dist/lib/functions/goto.sh +0 -16
  440. package/dist/lib/functions/hidehiddenfiles.sh +0 -14
  441. package/dist/lib/functions/hostinfo.sh +0 -27
  442. package/dist/lib/functions/hstats.sh +0 -11
  443. package/dist/lib/functions/httpdebug.sh +0 -9
  444. package/dist/lib/functions/keygen.sh +0 -31
  445. package/dist/lib/functions/last.sh +0 -11
  446. package/dist/lib/functions/logout.sh +0 -12
  447. package/dist/lib/functions/lowercase.sh +0 -29
  448. package/dist/lib/functions/matrix.sh +0 -41
  449. package/dist/lib/functions/mount_read_only.sh +0 -11
  450. package/dist/lib/functions/myproc.sh +0 -9
  451. package/dist/lib/functions/prependpath.sh +0 -21
  452. package/dist/lib/functions/ql.sh +0 -9
  453. package/dist/lib/functions/rd.sh +0 -17
  454. package/dist/lib/functions/remove_disk.sh +0 -11
  455. package/dist/lib/functions/ren.sh +0 -13
  456. package/dist/lib/functions/showhiddenfiles.sh +0 -14
  457. package/dist/lib/functions/size.sh +0 -15
  458. package/dist/lib/functions/stopwatch.sh +0 -15
  459. package/dist/lib/functions/uppercase.sh +0 -29
  460. package/dist/lib/functions/view-source.sh +0 -9
  461. package/dist/lib/functions/vscode.sh +0 -32
  462. package/dist/lib/functions/whoisport.sh +0 -14
  463. package/dist/lib/functions/zipf.sh +0 -16
  464. package/dist/lib/functions.sh +0 -32
  465. package/dist/lib/history.sh +0 -142
  466. package/dist/lib/paths/ant/ant.paths.sh +0 -15
  467. package/dist/lib/paths/default/default.paths.sh +0 -19
  468. package/dist/lib/paths/homebrew/homebrew.paths.sh +0 -27
  469. package/dist/lib/paths/java/java.paths.sh +0 -19
  470. package/dist/lib/paths/maven/maven.paths.sh +0 -18
  471. package/dist/lib/paths/node/node.paths.sh +0 -15
  472. package/dist/lib/paths/nvm/nvm.paths.sh +0 -23
  473. package/dist/lib/paths/pnpm/pnpm.paths.sh +0 -15
  474. package/dist/lib/paths/python/python.paths.sh +0 -36
  475. package/dist/lib/paths/ruby/ruby.paths.sh +0 -25
  476. package/dist/lib/paths/tmux/tmux.paths.sh +0 -12
  477. package/dist/lib/paths.sh +0 -33
  478. package/dist/scripts/backup.sh +0 -95
  479. package/dist/scripts/banner.sh +0 -20
  480. package/dist/scripts/build.sh +0 -41
  481. package/dist/scripts/clean.sh +0 -31
  482. package/dist/scripts/compile.sh +0 -54
  483. package/dist/scripts/copy.sh +0 -108
  484. package/dist/scripts/dotfiles.sh +0 -63
  485. package/dist/scripts/download.sh +0 -35
  486. package/dist/scripts/help.sh +0 -57
  487. package/dist/scripts/ssh.sh +0 -55
  488. package/dist/scripts/unpack.sh +0 -28
  489. /package/{dist/lib/configurations → dot_config}/gem/gemrc +0 -0
@@ -0,0 +1,466 @@
1
+ #!/usr/bin/env bash
2
+ # shellcheck disable=SC2034
3
+ # =============================================================================
4
+ # Dotfiles Heal Script - Auto-repair common dotfiles issues
5
+ # Runs diagnostics and attempts automatic fixes
6
+ # Usage: ./scripts/ops/heal.sh [OPTIONS]
7
+ # =============================================================================
8
+
9
+ set -euo pipefail
10
+
11
+ # Configuration
12
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
14
+ DOTFILES_SOURCE="$REPO_ROOT"
15
+ BACKUP_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/dotfiles/backups"
16
+ STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles"
17
+ HEAL_LOG="$STATE_DIR/heal.log"
18
+
19
+ # Colors (respect NO_COLOR: https://no-color.org)
20
+ if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
21
+ RED='\033[0;31m'
22
+ GREEN='\033[0;32m'
23
+ YELLOW='\033[0;33m'
24
+ BLUE='\033[0;34m'
25
+ BOLD='\033[1m'
26
+ NC='\033[0m'
27
+ else
28
+ RED='' GREEN='' YELLOW='' BLUE='' BOLD='' NC=''
29
+ fi
30
+
31
+ # Logging
32
+ log() { echo -e "$*"; }
33
+ log_info() { log "${BLUE}[INFO]${NC} $*"; }
34
+ log_success() { log "${GREEN}[OK]${NC} $*"; }
35
+ log_warn() { log "${YELLOW}[WARN]${NC} $*"; }
36
+ log_error() { log "${RED}[ERROR]${NC} $*"; }
37
+ log_step() { log "\n${BOLD}==> $*${NC}"; }
38
+ log_dry() { log "${YELLOW}[DRY-RUN]${NC} Would: $*"; }
39
+
40
+ # Persistent logging
41
+ persist_log() {
42
+ mkdir -p "$STATE_DIR"
43
+ echo "[$(date -Iseconds)] $*" >>"$HEAL_LOG"
44
+ }
45
+
46
+ # Options
47
+ DRY_RUN=0
48
+ FORCE=0
49
+ FIXES_APPLIED=0
50
+ ISSUES_FOUND=0
51
+ CHEZMOI_APPLIED=0
52
+
53
+ usage() {
54
+ cat <<EOF
55
+ Dotfiles Heal - Auto-repair common issues
56
+
57
+ Usage: $(basename "$0") [OPTIONS]
58
+
59
+ Options:
60
+ -n, --dry-run Preview what would be fixed without making changes
61
+ -f, --force Skip confirmation prompts
62
+ -h, --help Show this help message
63
+
64
+ Repairs:
65
+ - Missing core dependencies (chezmoi, starship, rg, bat)
66
+ - Broken symlinks in \$HOME (depth 3)
67
+ - Chezmoi drift (re-applies dotfiles)
68
+ - Missing critical files (.zshrc, .bashrc, .profile)
69
+ - Missing XDG config directories
70
+
71
+ EOF
72
+ }
73
+
74
+ # Parse arguments
75
+ while [[ $# -gt 0 ]]; do
76
+ case "$1" in
77
+ -n | --dry-run)
78
+ DRY_RUN=1
79
+ shift
80
+ ;;
81
+ -f | --force)
82
+ FORCE=1
83
+ shift
84
+ ;;
85
+ -h | --help)
86
+ usage
87
+ exit 0
88
+ ;;
89
+ *)
90
+ log_error "Unknown option: $1"
91
+ usage
92
+ exit 1
93
+ ;;
94
+ esac
95
+ done
96
+
97
+ # =============================================================================
98
+ # Backup before making changes
99
+ # =============================================================================
100
+
101
+ create_pre_heal_backup() {
102
+ local rollback_script="$REPO_ROOT/scripts/ops/rollback.sh"
103
+ if [[ -f "$rollback_script" ]]; then
104
+ log_info "Creating backup before heal..."
105
+ bash "$rollback_script" backup --force 2>/dev/null || true
106
+ else
107
+ # Minimal inline backup
108
+ local timestamp
109
+ timestamp=$(date +"%Y%m%d_%H%M%S")
110
+ local backup_path="$BACKUP_DIR/backup_${timestamp}_pre_heal"
111
+ mkdir -p "$backup_path"
112
+ for f in "$HOME/.bashrc" "$HOME/.zshrc" "$HOME/.profile"; do
113
+ if [[ -f "$f" ]]; then
114
+ cp -a "$f" "$backup_path/" 2>/dev/null || true
115
+ fi
116
+ done
117
+ log_info "Backup created at $backup_path"
118
+ fi
119
+ }
120
+
121
+ # =============================================================================
122
+ # Repair Functions
123
+ # =============================================================================
124
+
125
+ detect_pkg_manager() {
126
+ if command -v brew >/dev/null 2>&1; then
127
+ echo "brew"
128
+ elif command -v apt-get >/dev/null 2>&1; then
129
+ echo "apt"
130
+ elif command -v dnf >/dev/null 2>&1; then
131
+ echo "dnf"
132
+ elif command -v pacman >/dev/null 2>&1; then
133
+ echo "pacman"
134
+ elif command -v nix-env >/dev/null 2>&1; then
135
+ echo "nix"
136
+ else
137
+ echo ""
138
+ fi
139
+ }
140
+
141
+ install_package() {
142
+ local pkg="$1"
143
+ local pkg_mgr
144
+ pkg_mgr=$(detect_pkg_manager)
145
+
146
+ case "$pkg_mgr" in
147
+ brew) brew install "$pkg" ;;
148
+ apt) sudo apt-get install -y "$pkg" ;;
149
+ dnf) sudo dnf install -y "$pkg" ;;
150
+ pacman) sudo pacman -S --noconfirm "$pkg" ;;
151
+ nix) nix-env -iA "nixpkgs.$pkg" ;;
152
+ *)
153
+ log_error "No supported package manager found. Install '$pkg' manually."
154
+ return 1
155
+ ;;
156
+ esac
157
+ }
158
+
159
+ # Map command names to package names per package manager
160
+ get_package_name() {
161
+ local cmd="$1"
162
+ local pkg_mgr
163
+ pkg_mgr=$(detect_pkg_manager)
164
+
165
+ case "$cmd" in
166
+ rg)
167
+ case "$pkg_mgr" in
168
+ apt | dnf) echo "ripgrep" ;;
169
+ *) echo "ripgrep" ;;
170
+ esac
171
+ ;;
172
+ bat)
173
+ case "$pkg_mgr" in
174
+ apt) echo "bat" ;;
175
+ *) echo "bat" ;;
176
+ esac
177
+ ;;
178
+ *) echo "$cmd" ;;
179
+ esac
180
+ }
181
+
182
+ heal_missing_dependencies() {
183
+ log_step "Checking core dependencies"
184
+ local deps=(chezmoi starship rg bat)
185
+ local missing=()
186
+
187
+ for cmd in "${deps[@]}"; do
188
+ if ! command -v "$cmd" >/dev/null 2>&1; then
189
+ missing+=("$cmd")
190
+ ISSUES_FOUND=$((ISSUES_FOUND + 1))
191
+ fi
192
+ done
193
+
194
+ if [[ ${#missing[@]} -eq 0 ]]; then
195
+ log_success "All core dependencies present"
196
+ return 0
197
+ fi
198
+
199
+ log_warn "Missing dependencies: ${missing[*]}"
200
+
201
+ local pkg_mgr
202
+ pkg_mgr=$(detect_pkg_manager)
203
+
204
+ if [[ -z "$pkg_mgr" ]]; then
205
+ log_error "No supported package manager detected. Install manually: ${missing[*]}"
206
+ return 1
207
+ fi
208
+
209
+ for cmd in "${missing[@]}"; do
210
+ local pkg
211
+ pkg=$(get_package_name "$cmd")
212
+
213
+ if [[ "$DRY_RUN" == "1" ]]; then
214
+ log_dry "install '$pkg' via $pkg_mgr"
215
+ else
216
+ log_info "Installing $pkg via $pkg_mgr..."
217
+ if install_package "$pkg"; then
218
+ log_success "Installed $pkg"
219
+ FIXES_APPLIED=$((FIXES_APPLIED + 1))
220
+ persist_log "HEAL: installed $pkg via $pkg_mgr"
221
+ else
222
+ log_error "Failed to install $pkg"
223
+ fi
224
+ fi
225
+ done
226
+ }
227
+
228
+ heal_broken_symlinks() {
229
+ log_step "Checking for broken symlinks"
230
+ local broken=()
231
+
232
+ while IFS= read -r -d '' link; do
233
+ if [[ ! -e "$link" ]]; then
234
+ broken+=("$link")
235
+ fi
236
+ done < <(find "$HOME" -maxdepth 3 -type l -print0 2>/dev/null)
237
+
238
+ if [[ ${#broken[@]} -eq 0 ]]; then
239
+ log_success "No broken symlinks found"
240
+ return 0
241
+ fi
242
+
243
+ ISSUES_FOUND=$((ISSUES_FOUND + ${#broken[@]}))
244
+ log_warn "${#broken[@]} broken symlink(s) found"
245
+
246
+ for link in "${broken[@]}"; do
247
+ local target
248
+ target=$(readlink "$link" 2>/dev/null || echo "unknown")
249
+ if [[ "$DRY_RUN" == "1" ]]; then
250
+ log_dry "remove broken symlink: $link -> $target"
251
+ else
252
+ if [[ "$FORCE" != "1" ]]; then
253
+ read -rp "Remove broken symlink $link -> $target? [y/N] " response
254
+ if [[ ! "$response" =~ ^[Yy]$ ]]; then
255
+ log_info "Skipped: $link"
256
+ continue
257
+ fi
258
+ fi
259
+ rm -f "$link"
260
+ log_success "Removed broken symlink: $link -> $target"
261
+ FIXES_APPLIED=$((FIXES_APPLIED + 1))
262
+ persist_log "HEAL: removed broken symlink $link"
263
+ fi
264
+ done
265
+ }
266
+
267
+ heal_chezmoi_drift() {
268
+ log_step "Checking chezmoi state"
269
+
270
+ if ! command -v chezmoi >/dev/null 2>&1; then
271
+ log_warn "chezmoi not installed, skipping drift check"
272
+ return 0
273
+ fi
274
+
275
+ local status_output
276
+ status_output=$(chezmoi status 2>/dev/null || echo "")
277
+
278
+ if [[ -z "$status_output" ]]; then
279
+ log_success "Chezmoi state is synchronized"
280
+ return 0
281
+ fi
282
+
283
+ local drift_count
284
+ drift_count=$(echo "$status_output" | wc -l | tr -d ' ')
285
+ ISSUES_FOUND=$((ISSUES_FOUND + 1))
286
+ log_warn "$drift_count file(s) out of sync"
287
+
288
+ if [[ "$DRY_RUN" == "1" ]]; then
289
+ log_dry "run 'chezmoi apply --force' to re-sync"
290
+ echo "$status_output" | while read -r line; do
291
+ log_info " $line"
292
+ done
293
+ else
294
+ log_info "Re-applying dotfiles with chezmoi..."
295
+ if chezmoi apply --force; then
296
+ log_success "Chezmoi re-applied successfully"
297
+ FIXES_APPLIED=$((FIXES_APPLIED + 1))
298
+ CHEZMOI_APPLIED=1
299
+ persist_log "HEAL: chezmoi apply --force ($drift_count files drifted)"
300
+ else
301
+ log_error "Chezmoi apply failed"
302
+ fi
303
+ fi
304
+ }
305
+
306
+ heal_missing_critical_files() {
307
+ log_step "Checking critical files"
308
+ local critical_files=(
309
+ "$HOME/.zshrc"
310
+ "$HOME/.bashrc"
311
+ "$HOME/.profile"
312
+ )
313
+ local missing=()
314
+
315
+ for file in "${critical_files[@]}"; do
316
+ if [[ ! -f "$file" ]] && [[ ! -L "$file" ]]; then
317
+ missing+=("$file")
318
+ ISSUES_FOUND=$((ISSUES_FOUND + 1))
319
+ fi
320
+ done
321
+
322
+ if [[ ${#missing[@]} -eq 0 ]]; then
323
+ log_success "All critical shell configs present"
324
+ return 0
325
+ fi
326
+
327
+ log_warn "Missing critical files: ${missing[*]}"
328
+
329
+ if ! command -v chezmoi >/dev/null 2>&1; then
330
+ log_error "chezmoi not available to regenerate files"
331
+ return 1
332
+ fi
333
+
334
+ if [[ "$DRY_RUN" == "1" ]]; then
335
+ log_dry "run 'chezmoi apply --force' to regenerate missing files"
336
+ elif [[ "$CHEZMOI_APPLIED" == "1" ]]; then
337
+ log_info "chezmoi already re-applied during drift repair, verifying files..."
338
+ local restored=0
339
+ for file in "${missing[@]}"; do
340
+ if [[ -f "$file" ]] || [[ -L "$file" ]]; then
341
+ log_success "Restored (via earlier apply): $file"
342
+ restored=$((restored + 1))
343
+ else
344
+ log_warn "Still missing after apply: $file"
345
+ fi
346
+ done
347
+ FIXES_APPLIED=$((FIXES_APPLIED + restored))
348
+ else
349
+ log_info "Re-applying chezmoi to regenerate missing files..."
350
+ if chezmoi apply --force; then
351
+ CHEZMOI_APPLIED=1
352
+ # Verify files were restored
353
+ local restored=0
354
+ for file in "${missing[@]}"; do
355
+ if [[ -f "$file" ]] || [[ -L "$file" ]]; then
356
+ log_success "Restored: $file"
357
+ restored=$((restored + 1))
358
+ else
359
+ log_warn "Still missing after apply: $file"
360
+ fi
361
+ done
362
+ FIXES_APPLIED=$((FIXES_APPLIED + restored))
363
+ persist_log "HEAL: regenerated $restored critical file(s)"
364
+ else
365
+ log_error "Chezmoi apply failed"
366
+ fi
367
+ fi
368
+ }
369
+
370
+ heal_missing_xdg_dirs() {
371
+ log_step "Checking XDG config directories"
372
+ local xdg_dirs=(
373
+ "$HOME/.config/shell"
374
+ "$HOME/.config/nvim"
375
+ "$HOME/.config/git"
376
+ )
377
+ local missing=()
378
+
379
+ for dir in "${xdg_dirs[@]}"; do
380
+ if [[ ! -d "$dir" ]]; then
381
+ missing+=("$dir")
382
+ ISSUES_FOUND=$((ISSUES_FOUND + 1))
383
+ fi
384
+ done
385
+
386
+ if [[ ${#missing[@]} -eq 0 ]]; then
387
+ log_success "All XDG config directories present"
388
+ return 0
389
+ fi
390
+
391
+ log_warn "Missing XDG directories: ${missing[*]}"
392
+
393
+ for dir in "${missing[@]}"; do
394
+ if [[ "$DRY_RUN" == "1" ]]; then
395
+ log_dry "create directory: $dir"
396
+ else
397
+ mkdir -p "$dir"
398
+ log_success "Created: $dir"
399
+ FIXES_APPLIED=$((FIXES_APPLIED + 1))
400
+ persist_log "HEAL: created directory $dir"
401
+ fi
402
+ done
403
+ }
404
+
405
+ # =============================================================================
406
+ # Main
407
+ # =============================================================================
408
+
409
+ main() {
410
+ echo ""
411
+ echo "=========================================="
412
+ echo " Dotfiles Heal - Auto-Repair"
413
+ echo "=========================================="
414
+
415
+ if [[ "$DRY_RUN" == "1" ]]; then
416
+ log_info "Running in dry-run mode (no changes will be made)"
417
+ fi
418
+
419
+ # Confirm before making changes (unless --force or --dry-run)
420
+ if [[ "$DRY_RUN" != "1" ]] && [[ "$FORCE" != "1" ]]; then
421
+ echo ""
422
+ log_warn "This will attempt to auto-repair your dotfiles environment."
423
+ log_info "A backup will be created before any changes are made."
424
+ read -rp "Continue? [y/N] " response
425
+ if [[ ! "$response" =~ ^[Yy]$ ]]; then
426
+ log_info "Aborted."
427
+ exit 0
428
+ fi
429
+ fi
430
+
431
+ # Create backup before making changes
432
+ if [[ "$DRY_RUN" != "1" ]]; then
433
+ create_pre_heal_backup
434
+ fi
435
+
436
+ # Run all repairs
437
+ heal_missing_dependencies || true
438
+ heal_broken_symlinks || true
439
+ heal_chezmoi_drift || true
440
+ heal_missing_critical_files || true
441
+ heal_missing_xdg_dirs || true
442
+
443
+ # Summary
444
+ echo ""
445
+ echo "=========================================="
446
+ if [[ "$DRY_RUN" == "1" ]]; then
447
+ if [[ $ISSUES_FOUND -eq 0 ]]; then
448
+ log_success "No issues found. System is healthy."
449
+ else
450
+ log_info "Found $ISSUES_FOUND issue(s). Run without --dry-run to apply fixes."
451
+ fi
452
+ else
453
+ if [[ $ISSUES_FOUND -eq 0 ]]; then
454
+ log_success "No issues found. System is healthy."
455
+ elif [[ $FIXES_APPLIED -gt 0 ]]; then
456
+ log_success "Applied $FIXES_APPLIED fix(es) for $ISSUES_FOUND issue(s) found."
457
+ persist_log "HEAL_COMPLETE: $FIXES_APPLIED fixes applied"
458
+ else
459
+ log_warn "Found $ISSUES_FOUND issue(s) but no fixes could be applied."
460
+ log_info "Try running 'dot doctor' for detailed diagnostics."
461
+ fi
462
+ fi
463
+ echo "=========================================="
464
+ }
465
+
466
+ main