@sebastienrousseau/dotfiles 0.2.481 → 0.2.499

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 (317) hide show
  1. package/docs/ARCHITECTURE.md +29 -196
  2. package/docs/COMPLIANCE.md +10 -10
  3. package/docs/COPYRIGHT +3 -4
  4. package/docs/OPERATIONS.md +38 -65
  5. package/docs/PLAN.md +3 -3
  6. package/docs/PR_DESCRIPTION.md +85 -84
  7. package/docs/ROADMAP.md +11 -11
  8. package/docs/ROADMAP_legacy.md +556 -0
  9. package/docs/SECURITY_CHECKLIST.md +1 -1
  10. package/docs/TASK.md +4 -4
  11. package/docs/WALKTHROUGH.md +33 -152
  12. package/package.json +17 -5
  13. package/scripts/backup.sh +142 -0
  14. package/scripts/banner.sh +20 -0
  15. package/scripts/benchmark.sh +20 -0
  16. package/scripts/build.sh +41 -0
  17. package/scripts/clean.sh +31 -0
  18. package/scripts/compile.sh +54 -0
  19. package/scripts/copy.sh +108 -0
  20. package/scripts/{tools/detect-collisions.py → detect-collisions.py} +1 -1
  21. package/scripts/doctor.sh +79 -0
  22. package/scripts/dotfiles.sh +63 -0
  23. package/scripts/download.sh +35 -0
  24. package/scripts/help.sh +57 -0
  25. package/scripts/lock-configs.sh +57 -0
  26. package/scripts/package.sh +46 -0
  27. package/scripts/ssh.sh +55 -0
  28. package/scripts/teleport.sh +23 -0
  29. package/scripts/{tests/test-aliases.sh → test-aliases.sh} +3 -3
  30. package/scripts/test_smoke.sh +88 -0
  31. package/scripts/unpack.sh +28 -0
  32. package/scripts/{diagnostics/verify_state.sh → verify_state.sh} +21 -21
  33. package/templates/projects/go/README.md +0 -4
  34. package/templates/projects/node/README.md +0 -4
  35. package/templates/projects/python/README.md +0 -4
  36. package/templates/projects/python/pyproject.toml +0 -15
  37. package/CHANGELOG.md +0 -285
  38. package/LICENSE +0 -1283
  39. package/README.md +0 -315
  40. package/docs/ALIASES.md +0 -128
  41. package/docs/FEATURES.md +0 -166
  42. package/docs/FONTS.md +0 -147
  43. package/docs/INSTALL.md +0 -119
  44. package/docs/KEYS.md +0 -40
  45. package/docs/KEY_ROTATION.md +0 -219
  46. package/docs/LEGACY_ROADMAP.md +0 -142
  47. package/docs/NEOVIM_IDE_GUIDE.md +0 -52
  48. package/docs/README.md +0 -269
  49. package/docs/REPO_AUDIT.md +0 -23
  50. package/docs/SCREENSHOTS.md +0 -116
  51. package/docs/SECRETS.md +0 -76
  52. package/docs/SECURITY.md +0 -30
  53. package/docs/TESTING.md +0 -190
  54. package/docs/TOOLS.md +0 -146
  55. package/docs/TROUBLESHOOTING.md +0 -112
  56. package/docs/UTILS.md +0 -105
  57. package/docs/WSL2_NIX_TROUBLESHOOTING.md +0 -723
  58. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -101
  59. package/docs/adr/ADR-002-shell-performance.md +0 -121
  60. package/docs/adr/ADR-003-security-first.md +0 -140
  61. package/docs/adr/ADR-004-cli-architecture.md +0 -157
  62. package/docs/adr/ADR-005-chezmoi-choice.md +0 -89
  63. package/docs/adr/ADR-006-shell-selection.md +0 -115
  64. package/docs/adr/README.md +0 -33
  65. package/docs/themes/README.md +0 -20
  66. package/dot_config/aider/aider.conf.yml +0 -32
  67. package/dot_config/alacritty/alacritty.toml.tmpl +0 -483
  68. package/dot_config/ansible/ansible.cfg.tmpl +0 -11
  69. package/dot_config/atuin/config.toml +0 -23
  70. package/dot_config/bat/config +0 -8
  71. package/dot_config/brave-flags.conf.tmpl +0 -7
  72. package/dot_config/btop/btop.conf +0 -16
  73. package/dot_config/btop/themes/tokyonight.theme +0 -34
  74. package/dot_config/bun/bunfig.toml.tmpl +0 -33
  75. package/dot_config/claude/mcp_servers.json +0 -49
  76. package/dot_config/clippy.toml +0 -55
  77. package/dot_config/containers/containers.conf +0 -14
  78. package/dot_config/curl/dot_curlrc +0 -18
  79. package/dot_config/dlv/config.yml +0 -39
  80. package/dot_config/docker/config.json.tmpl +0 -15
  81. package/dot_config/dotfiles/boot/README.md +0 -11
  82. package/dot_config/dotfiles/grub/README.md +0 -11
  83. package/dot_config/dotfiles/lock/README.md +0 -11
  84. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  85. package/dot_config/duf/duf.conf +0 -6
  86. package/dot_config/duti/defaults.duti +0 -5
  87. package/dot_config/emoji/emoji.txt +0 -34
  88. package/dot_config/fastfetch/config.jsonc +0 -28
  89. package/dot_config/firefox/user.js +0 -8
  90. package/dot_config/flatpak/flatpak.list +0 -4
  91. package/dot_config/fontconfig/fonts.conf.tmpl +0 -44
  92. package/dot_config/gem/gemrc +0 -9
  93. package/dot_config/gh/config.yml +0 -12
  94. package/dot_config/ghostty/config.tmpl +0 -661
  95. package/dot_config/git/attributes +0 -12
  96. package/dot_config/git/config.tmpl +0 -77
  97. package/dot_config/git/ignore +0 -27
  98. package/dot_config/gnupg/gpg-agent.conf.tmpl +0 -11
  99. package/dot_config/go/aliases.sh +0 -61
  100. package/dot_config/go/env.sh +0 -24
  101. package/dot_config/go/golangci.yml +0 -118
  102. package/dot_config/go/gopls.json +0 -30
  103. package/dot_config/goose/config.yaml +0 -29
  104. package/dot_config/gtk-3.0/gtk.css.tmpl +0 -305
  105. package/dot_config/gtk-3.0/settings.ini.tmpl +0 -66
  106. package/dot_config/gtk-4.0/gtk.css.tmpl +0 -309
  107. package/dot_config/gtk-4.0/settings.ini.tmpl +0 -21
  108. package/dot_config/htop/htoprc +0 -20
  109. package/dot_config/ice/README.md +0 -13
  110. package/dot_config/inputrc +0 -2
  111. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  112. package/dot_config/just/justfile +0 -104
  113. package/dot_config/k9s/config.yaml.tmpl +0 -65
  114. package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
  115. package/dot_config/karabiner/karabiner.json +0 -14
  116. package/dot_config/kitty/kitty.conf.tmpl +0 -517
  117. package/dot_config/lazydocker/config.yml +0 -186
  118. package/dot_config/lazygit/config.yml +0 -23
  119. package/dot_config/lsd/config.yaml +0 -19
  120. package/dot_config/mas/masapps.txt +0 -5
  121. package/dot_config/minikube/config.json +0 -13
  122. package/dot_config/mise/config.toml +0 -41
  123. package/dot_config/mongosh/mongoshrc.js +0 -67
  124. package/dot_config/mycli/myclirc +0 -67
  125. package/dot_config/nano/nanorc +0 -28
  126. package/dot_config/ncdu/config +0 -12
  127. package/dot_config/nvim/init.lua +0 -4
  128. package/dot_config/nvim/lazy-lock.json +0 -27
  129. package/dot_config/nvim/lua/config/autocmds.lua +0 -63
  130. package/dot_config/nvim/lua/config/keymaps.lua +0 -87
  131. package/dot_config/nvim/lua/config/lazy.lua +0 -34
  132. package/dot_config/nvim/lua/config/options.lua +0 -48
  133. package/dot_config/nvim/lua/plugins/coding.lua +0 -234
  134. package/dot_config/nvim/lua/plugins/dap.lua +0 -201
  135. package/dot_config/nvim/lua/plugins/editor.lua +0 -59
  136. package/dot_config/nvim/lua/plugins/git.lua +0 -9
  137. package/dot_config/nvim/lua/plugins/lsp.lua +0 -221
  138. package/dot_config/nvim/lua/plugins/markdown.lua +0 -17
  139. package/dot_config/nvim/lua/plugins/rust.lua +0 -33
  140. package/dot_config/nvim/lua/plugins/sessions.lua +0 -32
  141. package/dot_config/nvim/lua/plugins/ui.lua +0 -537
  142. package/dot_config/nvim/snippets/all.lua +0 -9
  143. package/dot_config/nvim/snippets/python.lua +0 -16
  144. package/dot_config/pip/pip.conf.tmpl +0 -32
  145. package/dot_config/pypoetry/config.toml.tmpl +0 -6
  146. package/dot_config/pyrightconfig.json.tmpl +0 -5
  147. package/dot_config/raycast/README.md +0 -13
  148. package/dot_config/redis/redisclirc +0 -41
  149. package/dot_config/shell/00-container-detect.sh +0 -53
  150. package/dot_config/shell/00-core-paths.sh.tmpl +0 -95
  151. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  152. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  153. package/dot_config/shell/50-logic-functions.sh.tmpl +0 -10
  154. package/dot_config/shell/90-theme-switch.sh +0 -70
  155. package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -35
  156. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -23
  157. package/dot_config/shell/Brewfile +0 -207
  158. package/dot_config/shell/Brewfile.cask +0 -92
  159. package/dot_config/shell/Brewfile.cli +0 -119
  160. package/dot_config/shell/README.md +0 -267
  161. package/dot_config/shell/custom/context_suggest.zsh +0 -68
  162. package/dot_config/shell/custom/error_analysis.zsh +0 -45
  163. package/dot_config/sops/dot_sops.yaml +0 -23
  164. package/dot_config/starship.toml.tmpl +0 -124
  165. package/dot_config/task/Taskfile.yml +0 -86
  166. package/dot_config/tflint/tflint.hcl.tmpl +0 -9
  167. package/dot_config/tmux/tmux.conf.tmpl +0 -181
  168. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  169. package/dot_config/vscode/extensions.txt +0 -11
  170. package/dot_config/vscode/settings.json.tmpl +0 -123
  171. package/dot_config/waybar/style.css +0 -8
  172. package/dot_config/wezterm/wezterm.lua.tmpl +0 -236
  173. package/dot_config/wget/wgetrc +0 -12
  174. package/dot_config/yarn/yarnrc.yml.tmpl +0 -36
  175. package/dot_config/yazi/yazi.toml +0 -40
  176. package/dot_config/zellij/config.kdl +0 -79
  177. package/dot_config/zsh/dot_zprofile +0 -13
  178. package/dot_config/zsh/dot_zshenv +0 -6
  179. package/dot_config/zsh/dot_zshrc.tmpl +0 -199
  180. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -5
  181. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
  182. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  183. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -123
  184. package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +0 -20
  185. package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +0 -9
  186. package/dot_local/bin/executable_ai_core +0 -130
  187. package/dot_local/bin/executable_b64 +0 -59
  188. package/dot_local/bin/executable_dot +0 -178
  189. package/dot_local/bin/executable_dot_completion +0 -55
  190. package/dot_local/bin/executable_epoch +0 -62
  191. package/dot_local/bin/executable_extract +0 -108
  192. package/dot_local/bin/executable_git-ai-commit +0 -160
  193. package/dot_local/bin/executable_git-ai-diff +0 -154
  194. package/dot_local/bin/executable_hash +0 -123
  195. package/dot_local/bin/executable_hex +0 -79
  196. package/dot_local/bin/executable_ip +0 -37
  197. package/dot_local/bin/executable_jsonv +0 -54
  198. package/dot_local/bin/executable_jwt +0 -78
  199. package/dot_local/bin/executable_kill-port +0 -59
  200. package/dot_local/bin/executable_lorem +0 -103
  201. package/dot_local/bin/executable_regex +0 -96
  202. package/dot_local/bin/executable_tmux-sessionizer +0 -187
  203. package/dot_local/bin/executable_tour +0 -137
  204. package/dot_local/bin/executable_update +0 -108
  205. package/dot_local/bin/executable_uuid +0 -57
  206. package/dot_local/bin/executable_yamlv +0 -39
  207. package/dot_local/bin/executable_zig-install +0 -89
  208. package/dot_local/bin/voice_ops +0 -7
  209. package/dot_local/share/bash-completion/completions/dot +0 -54
  210. package/dot_local/share/zsh/completions/.keep +0 -0
  211. package/install.sh +0 -255
  212. package/scripts/ci/validate-ci-config.sh +0 -222
  213. package/scripts/demo/record.sh +0 -41
  214. package/scripts/diagnostics/benchmark.sh +0 -201
  215. package/scripts/diagnostics/doctor.sh +0 -115
  216. package/scripts/diagnostics/drift-dashboard.sh +0 -26
  217. package/scripts/diagnostics/health.sh +0 -356
  218. package/scripts/diagnostics/history-analysis.sh +0 -77
  219. package/scripts/diagnostics/security-score.sh +0 -392
  220. package/scripts/dot/commands/appearance.sh +0 -63
  221. package/scripts/dot/commands/core.sh +0 -130
  222. package/scripts/dot/commands/diagnostics.sh +0 -100
  223. package/scripts/dot/commands/meta.sh +0 -117
  224. package/scripts/dot/commands/restore.sh +0 -209
  225. package/scripts/dot/commands/secrets.sh +0 -81
  226. package/scripts/dot/commands/security.sh +0 -73
  227. package/scripts/dot/commands/tools.sh +0 -228
  228. package/scripts/dot/lib/utils.sh +0 -72
  229. package/scripts/fonts/install-nerd-fonts.sh +0 -59
  230. package/scripts/fonts/patch-fonts.sh +0 -34
  231. package/scripts/ops/chezmoi-apply.sh +0 -42
  232. package/scripts/ops/chezmoi-diff.sh +0 -14
  233. package/scripts/ops/chezmoi-remove.sh +0 -43
  234. package/scripts/ops/chezmoi-update.sh +0 -16
  235. package/scripts/ops/heal.sh +0 -466
  236. package/scripts/ops/health-check.sh +0 -380
  237. package/scripts/ops/rollback.sh +0 -531
  238. package/scripts/ops/teleport.sh +0 -32
  239. package/scripts/secrets/age-init.sh +0 -69
  240. package/scripts/secrets/create-secrets-file.sh +0 -44
  241. package/scripts/secrets/encrypt-ssh-key.sh +0 -42
  242. package/scripts/security/backup.sh +0 -17
  243. package/scripts/security/dns-doh.sh +0 -29
  244. package/scripts/security/encryption-check.sh +0 -39
  245. package/scripts/security/enforce-policies.sh +0 -339
  246. package/scripts/security/firewall.sh +0 -34
  247. package/scripts/security/lock-configs.sh +0 -57
  248. package/scripts/security/lock-screen.sh +0 -33
  249. package/scripts/security/manage-secrets.sh +0 -415
  250. package/scripts/security/telemetry-kill.sh +0 -28
  251. package/scripts/security/usb-safety.sh +0 -29
  252. package/scripts/tests/README.md +0 -241
  253. package/scripts/tests/benchmark.sh +0 -91
  254. package/scripts/tests/framework/assertions.sh +0 -283
  255. package/scripts/tests/framework/mocks.sh +0 -201
  256. package/scripts/tests/framework/test_runner.sh +0 -189
  257. package/scripts/tests/integration/test_install.sh +0 -237
  258. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  259. package/scripts/tests/performance/regression_check.sh +0 -73
  260. package/scripts/tests/performance/stress_test.sh +0 -65
  261. package/scripts/tests/test-docker.sh +0 -48
  262. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  263. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  264. package/scripts/tests/unit/test_backup.sh +0 -227
  265. package/scripts/tests/unit/test_case_functions.sh +0 -238
  266. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  267. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  268. package/scripts/tests/unit/test_encode64.sh +0 -67
  269. package/scripts/tests/unit/test_environment.sh +0 -78
  270. package/scripts/tests/unit/test_extract.sh +0 -163
  271. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  272. package/scripts/tests/unit/test_genpass.sh +0 -298
  273. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  274. package/scripts/tests/unit/test_installers.sh +0 -172
  275. package/scripts/tests/unit/test_keygen.sh +0 -68
  276. package/scripts/tests/unit/test_logging.sh +0 -96
  277. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  278. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  279. package/scripts/tests/unit/test_prependpath.sh +0 -66
  280. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  281. package/scripts/tests/unit/test_rd.sh +0 -230
  282. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  283. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  284. package/scripts/tests/unit/test_template_validation.sh +0 -238
  285. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  286. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  287. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  288. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  289. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  290. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  291. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  292. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  293. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  294. package/scripts/tests/unit/test_zipf.sh +0 -76
  295. package/scripts/theme/apply-gnome-theme.sh +0 -297
  296. package/scripts/theme/install-boot-logo.sh +0 -61
  297. package/scripts/theme/install-catppuccin-themes.sh +0 -346
  298. package/scripts/theme/install-cursors.sh +0 -24
  299. package/scripts/theme/install-file-icons.sh +0 -25
  300. package/scripts/theme/install-grub-theme.sh +0 -51
  301. package/scripts/theme/install-lock-icon.sh +0 -29
  302. package/scripts/theme/switch.sh +0 -250
  303. package/scripts/theme/wallpaper-rotate.sh +0 -82
  304. package/scripts/theme/wallpaper-sync.sh +0 -42
  305. package/scripts/tools/cmatrix.sh +0 -20
  306. package/scripts/tools/emoji-picker.sh +0 -45
  307. package/scripts/tools/figlet-banner.sh +0 -17
  308. package/scripts/tools/log-rotate.sh +0 -29
  309. package/scripts/tools/lolcat-wrap.sh +0 -18
  310. package/scripts/tools/pipes.sh +0 -47
  311. package/scripts/tuning/linux.sh +0 -175
  312. package/scripts/tuning/macos.sh +0 -46
  313. package/templates/projects/molecule/README.md +0 -7
  314. package/templates/projects/molecule/converge.yml +0 -7
  315. package/templates/projects/molecule/molecule.yml +0 -16
  316. package/templates/projects/packer/README.md +0 -15
  317. package/templates/projects/packer/main.pkr.hcl +0 -15
@@ -1,380 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2015,SC2034
3
- # =============================================================================
4
- # Dotfiles Health Check Script
5
- # Verifies that dotfiles installation is functioning correctly
6
- # Usage: ./scripts/ops/health-check.sh [--verbose] [--json]
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
- CHEZMOI_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi"
15
- DOTFILES_SOURCE="${HOME}/.dotfiles"
16
-
17
- # Output control
18
- VERBOSE=0
19
- JSON_OUTPUT=0
20
- EXIT_CODE=0
21
-
22
- # Colors (disabled if not a terminal, JSON mode, or NO_COLOR set)
23
- if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]] && [[ "$JSON_OUTPUT" != "1" ]]; then
24
- RED='\033[0;31m'
25
- GREEN='\033[0;32m'
26
- YELLOW='\033[0;33m'
27
- BLUE='\033[0;34m'
28
- BOLD='\033[1m'
29
- NC='\033[0m'
30
- else
31
- RED='' GREEN='' YELLOW='' BLUE='' BOLD='' NC=''
32
- fi
33
-
34
- # Results collection for JSON
35
- declare -a RESULTS=()
36
-
37
- log_info() { [[ "$VERBOSE" == "1" ]] && echo -e "${BLUE}[INFO]${NC} $*" || true; }
38
- log_pass() { echo -e "${GREEN}[PASS]${NC} $*"; }
39
- log_fail() {
40
- echo -e "${RED}[FAIL]${NC} $*"
41
- EXIT_CODE=1
42
- }
43
- log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
44
-
45
- add_result() {
46
- local name="$1" status="$2" message="${3:-}"
47
- RESULTS+=("{\"check\": \"$name\", \"status\": \"$status\", \"message\": \"$message\"}")
48
- }
49
-
50
- # Parse arguments
51
- while [[ $# -gt 0 ]]; do
52
- case "$1" in
53
- -v | --verbose)
54
- VERBOSE=1
55
- shift
56
- ;;
57
- -j | --json)
58
- JSON_OUTPUT=1
59
- shift
60
- ;;
61
- -h | --help)
62
- echo "Usage: $(basename "$0") [OPTIONS]"
63
- echo ""
64
- echo "Options:"
65
- echo " -v, --verbose Show detailed output"
66
- echo " -j, --json Output results as JSON"
67
- echo " -h, --help Show this help message"
68
- exit 0
69
- ;;
70
- *)
71
- echo "Unknown option: $1"
72
- exit 1
73
- ;;
74
- esac
75
- done
76
-
77
- # =============================================================================
78
- # Health Check Functions
79
- # =============================================================================
80
-
81
- check_chezmoi_installed() {
82
- log_info "Checking chezmoi installation..."
83
- if command -v chezmoi >/dev/null 2>&1; then
84
- local version
85
- version=$(chezmoi --version 2>/dev/null | head -1)
86
- log_pass "chezmoi installed: $version"
87
- add_result "chezmoi_installed" "pass" "$version"
88
- return 0
89
- else
90
- log_fail "chezmoi not installed or not in PATH"
91
- add_result "chezmoi_installed" "fail" "not found"
92
- return 1
93
- fi
94
- }
95
-
96
- check_dotfiles_source() {
97
- log_info "Checking dotfiles source directory..."
98
- if [[ -d "$DOTFILES_SOURCE" ]]; then
99
- if [[ -d "$DOTFILES_SOURCE/.git" ]]; then
100
- log_pass "Source directory exists with git: $DOTFILES_SOURCE"
101
- add_result "dotfiles_source" "pass" "$DOTFILES_SOURCE"
102
- return 0
103
- else
104
- log_warn "Source directory exists but no .git: $DOTFILES_SOURCE"
105
- add_result "dotfiles_source" "warn" "no git"
106
- return 0
107
- fi
108
- else
109
- log_fail "Source directory not found: $DOTFILES_SOURCE"
110
- add_result "dotfiles_source" "fail" "not found"
111
- return 1
112
- fi
113
- }
114
-
115
- check_chezmoi_config() {
116
- log_info "Checking chezmoi configuration..."
117
- local config_file="$CHEZMOI_CONFIG_DIR/chezmoi.toml"
118
- if [[ -f "$config_file" ]]; then
119
- log_pass "chezmoi config exists: $config_file"
120
- add_result "chezmoi_config" "pass" "$config_file"
121
- return 0
122
- else
123
- log_warn "chezmoi config not found (using defaults)"
124
- add_result "chezmoi_config" "warn" "using defaults"
125
- return 0
126
- fi
127
- }
128
-
129
- check_critical_files() {
130
- log_info "Checking critical dotfiles..."
131
- local critical_files=(
132
- "$HOME/.bashrc"
133
- "$HOME/.zshrc"
134
- "$HOME/.profile"
135
- )
136
- local missing=0
137
-
138
- for file in "${critical_files[@]}"; do
139
- if [[ -f "$file" ]] || [[ -L "$file" ]]; then
140
- log_info " Found: $file"
141
- else
142
- log_warn " Missing: $file"
143
- ((missing++))
144
- fi
145
- done
146
-
147
- if [[ $missing -eq 0 ]]; then
148
- log_pass "All critical shell configs present"
149
- add_result "critical_files" "pass" "all present"
150
- return 0
151
- else
152
- log_warn "$missing critical file(s) missing"
153
- add_result "critical_files" "warn" "$missing missing"
154
- return 0
155
- fi
156
- }
157
-
158
- check_config_directories() {
159
- log_info "Checking config directories..."
160
- local config_dirs=(
161
- "$HOME/.config/shell"
162
- "$HOME/.config/nvim"
163
- "$HOME/.config/git"
164
- )
165
- local found=0 total=${#config_dirs[@]}
166
-
167
- for dir in "${config_dirs[@]}"; do
168
- if [[ -d "$dir" ]]; then
169
- log_info " Found: $dir"
170
- ((found++))
171
- else
172
- log_info " Missing: $dir"
173
- fi
174
- done
175
-
176
- if [[ $found -eq $total ]]; then
177
- log_pass "All expected config directories present"
178
- add_result "config_directories" "pass" "$found/$total"
179
- return 0
180
- elif [[ $found -gt 0 ]]; then
181
- log_warn "$found of $total config directories present"
182
- add_result "config_directories" "warn" "$found/$total"
183
- return 0
184
- else
185
- log_fail "No config directories found"
186
- add_result "config_directories" "fail" "0/$total"
187
- return 1
188
- fi
189
- }
190
-
191
- check_shell_startup_performance() {
192
- log_info "Checking shell startup performance..."
193
- local threshold_ms=500
194
- local shells=("bash" "zsh")
195
- local slow_shells=0
196
-
197
- for shell in "${shells[@]}"; do
198
- if command -v "$shell" >/dev/null 2>&1; then
199
- local start_ms end_ms duration_ms
200
- start_ms=$(($(date +%s%N) / 1000000))
201
- "$shell" -i -c 'exit' 2>/dev/null || true
202
- end_ms=$(($(date +%s%N) / 1000000))
203
- duration_ms=$((end_ms - start_ms))
204
-
205
- if [[ $duration_ms -gt $threshold_ms ]]; then
206
- log_warn "$shell startup: ${duration_ms}ms (threshold: ${threshold_ms}ms)"
207
- ((slow_shells++))
208
- else
209
- log_info " $shell startup: ${duration_ms}ms"
210
- fi
211
- fi
212
- done
213
-
214
- if [[ $slow_shells -eq 0 ]]; then
215
- log_pass "Shell startup performance OK"
216
- add_result "shell_performance" "pass" "under ${threshold_ms}ms"
217
- return 0
218
- else
219
- log_warn "$slow_shells shell(s) exceed startup threshold"
220
- add_result "shell_performance" "warn" "slow startup"
221
- return 0
222
- fi
223
- }
224
-
225
- check_chezmoi_status() {
226
- log_info "Checking chezmoi managed files status..."
227
- if ! command -v chezmoi >/dev/null 2>&1; then
228
- log_warn "Skipping chezmoi status (not installed)"
229
- add_result "chezmoi_status" "skip" "not installed"
230
- return 0
231
- fi
232
-
233
- local status_output
234
- status_output=$(chezmoi status 2>/dev/null || echo "")
235
-
236
- if [[ -z "$status_output" ]]; then
237
- log_pass "All managed files in sync"
238
- add_result "chezmoi_status" "pass" "in sync"
239
- return 0
240
- else
241
- local changes
242
- changes=$(echo "$status_output" | wc -l | tr -d ' ')
243
- log_warn "$changes file(s) out of sync with source"
244
- add_result "chezmoi_status" "warn" "$changes out of sync"
245
- return 0
246
- fi
247
- }
248
-
249
- check_git_status() {
250
- log_info "Checking git repository status..."
251
- if [[ ! -d "$DOTFILES_SOURCE/.git" ]]; then
252
- log_warn "Not a git repository"
253
- add_result "git_status" "skip" "not a repo"
254
- return 0
255
- fi
256
-
257
- local git_status
258
- git_status=$(cd "$DOTFILES_SOURCE" && git status --porcelain 2>/dev/null || echo "")
259
-
260
- if [[ -z "$git_status" ]]; then
261
- log_pass "Git working tree clean"
262
- add_result "git_status" "pass" "clean"
263
- return 0
264
- else
265
- local changes
266
- changes=$(echo "$git_status" | wc -l | tr -d ' ')
267
- log_warn "Git has $changes uncommitted change(s)"
268
- add_result "git_status" "warn" "$changes changes"
269
- return 0
270
- fi
271
- }
272
-
273
- check_dependencies() {
274
- log_info "Checking recommended dependencies..."
275
- local deps=(git curl zsh)
276
- local optional_deps=(ripgrep fd bat fzf eza jq claude gemini sgpt ollama opencode aider)
277
- local missing_required=0
278
- local missing_optional=0
279
-
280
- for dep in "${deps[@]}"; do
281
- if ! command -v "$dep" >/dev/null 2>&1; then
282
- log_fail "Required dependency missing: $dep"
283
- ((missing_required++))
284
- fi
285
- done
286
-
287
- for dep in "${optional_deps[@]}"; do
288
- if ! command -v "$dep" >/dev/null 2>&1; then
289
- log_info " Optional dependency missing: $dep"
290
- ((missing_optional++))
291
- fi
292
- done
293
-
294
- if [[ $missing_required -eq 0 ]]; then
295
- log_pass "All required dependencies present"
296
- add_result "dependencies" "pass" "optional: $missing_optional missing"
297
- return 0
298
- else
299
- log_fail "$missing_required required dependency(s) missing"
300
- add_result "dependencies" "fail" "$missing_required missing"
301
- return 1
302
- fi
303
- }
304
-
305
- check_symlinks_valid() {
306
- log_info "Checking symlink integrity..."
307
- local broken=0
308
-
309
- while IFS= read -r -d '' link; do
310
- if [[ ! -e "$link" ]]; then
311
- log_warn "Broken symlink: $link"
312
- ((broken++))
313
- fi
314
- done < <(find "$HOME" -maxdepth 2 -type l -print0 2>/dev/null)
315
-
316
- if [[ $broken -eq 0 ]]; then
317
- log_pass "No broken symlinks in home directory"
318
- add_result "symlinks" "pass" "all valid"
319
- return 0
320
- else
321
- log_warn "$broken broken symlink(s) found"
322
- add_result "symlinks" "warn" "$broken broken"
323
- return 0
324
- fi
325
- }
326
-
327
- # =============================================================================
328
- # Main Execution
329
- # =============================================================================
330
-
331
- main() {
332
- if [[ "$JSON_OUTPUT" != "1" ]]; then
333
- echo ""
334
- echo "=========================================="
335
- echo " Dotfiles Health Check"
336
- echo "=========================================="
337
- echo ""
338
- fi
339
-
340
- # Run all checks
341
- check_chezmoi_installed || true
342
- check_dotfiles_source || true
343
- check_chezmoi_config || true
344
- check_critical_files || true
345
- check_config_directories || true
346
- check_dependencies || true
347
- check_chezmoi_status || true
348
- check_git_status || true
349
- check_symlinks_valid || true
350
- check_shell_startup_performance || true
351
-
352
- if [[ "$JSON_OUTPUT" == "1" ]]; then
353
- echo "{"
354
- echo " \"timestamp\": \"$(date -Iseconds)\","
355
- echo " \"exit_code\": $EXIT_CODE,"
356
- echo " \"results\": ["
357
- local first=1
358
- for result in "${RESULTS[@]}"; do
359
- [[ $first -eq 0 ]] && echo ","
360
- echo -n " $result"
361
- first=0
362
- done
363
- echo ""
364
- echo " ]"
365
- echo "}"
366
- else
367
- echo ""
368
- echo "=========================================="
369
- if [[ $EXIT_CODE -eq 0 ]]; then
370
- echo -e "${GREEN}${BOLD}Health Check: PASSED${NC}"
371
- else
372
- echo -e "${RED}${BOLD}Health Check: FAILED${NC}"
373
- fi
374
- echo "=========================================="
375
- fi
376
-
377
- exit $EXIT_CODE
378
- }
379
-
380
- main "$@"