@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,321 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2016,SC2317
3
- # SC2016: Single quotes are intentional for mock data containing literal $variables
4
- # SC2317: Function overrides are intentional for test mocking
5
- # Comprehensive Package Managers Tests
6
- # Achieves 100% line and branch coverage for package_managers.sh
7
-
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- source "$SCRIPT_DIR/../framework/assertions.sh"
10
- source "$SCRIPT_DIR/../framework/mocks.sh"
11
-
12
- echo "Testing package managers comprehensive coverage..."
13
-
14
- # Test has_brew when brew is available
15
- test_start "has_brew_available"
16
- mock_init
17
- mock_command "brew" "Homebrew 4.0.0" 0
18
- source "$REPO_ROOT/install/lib/package_managers.sh"
19
- assert_true "has_brew" "should return true when brew is available"
20
- mock_cleanup
21
-
22
- # Test has_brew when brew is not available
23
- test_start "has_brew_unavailable"
24
- mock_init
25
- mock_command "brew" "" 1
26
- source "$REPO_ROOT/install/lib/package_managers.sh"
27
- assert_false "has_brew" "should return false when brew is not available"
28
- mock_cleanup
29
-
30
- # Test has_apt when apt-get is available
31
- test_start "has_apt_available"
32
- mock_init
33
- mock_command "apt-get" "apt 2.4.8" 0
34
- source "$REPO_ROOT/install/lib/package_managers.sh"
35
- assert_true "has_apt" "should return true when apt-get is available"
36
- mock_cleanup
37
-
38
- # Test has_apt when apt-get is not available
39
- test_start "has_apt_unavailable"
40
- mock_init
41
- mock_command "apt-get" "" 1
42
- source "$REPO_ROOT/install/lib/package_managers.sh"
43
- assert_false "has_apt" "should return false when apt-get is not available"
44
- mock_cleanup
45
-
46
- # Test has_dnf when dnf is available
47
- test_start "has_dnf_available"
48
- mock_init
49
- mock_command "dnf" "dnf 4.14.0" 0
50
- source "$REPO_ROOT/install/lib/package_managers.sh"
51
- assert_true "has_dnf" "should return true when dnf is available"
52
- mock_cleanup
53
-
54
- # Test has_dnf when dnf is not available
55
- test_start "has_dnf_unavailable"
56
- mock_init
57
- mock_command "dnf" "" 1
58
- source "$REPO_ROOT/install/lib/package_managers.sh"
59
- assert_false "has_dnf" "should return false when dnf is not available"
60
- mock_cleanup
61
-
62
- # Test has_pacman when pacman is available
63
- test_start "has_pacman_available"
64
- mock_init
65
- mock_command "pacman" "Pacman v6.0.1" 0
66
- source "$REPO_ROOT/install/lib/package_managers.sh"
67
- assert_true "has_pacman" "should return true when pacman is available"
68
- mock_cleanup
69
-
70
- # Test has_pacman when pacman is not available
71
- test_start "has_pacman_unavailable"
72
- mock_init
73
- mock_command "pacman" "" 1
74
- source "$REPO_ROOT/install/lib/package_managers.sh"
75
- assert_false "has_pacman" "should return false when pacman is not available"
76
- mock_cleanup
77
-
78
- # Test install_homebrew when brew is already installed
79
- test_start "install_homebrew_already_installed"
80
- mock_init
81
- mock_command "brew" "Homebrew 4.0.0" 0
82
- source "$REPO_ROOT/install/lib/package_managers.sh"
83
- assert_exit_code 0 "install_homebrew"
84
- mock_cleanup
85
-
86
- # Test install_homebrew in non-interactive mode
87
- test_start "install_homebrew_noninteractive"
88
- mock_init
89
- mock_command "brew" "" 1 # Not installed
90
- mock_env "DOTFILES_NONINTERACTIVE" "1"
91
- mock_command "curl" "#!/bin/bash\necho 'Homebrew installer mock'" 0
92
- mock_command "/bin/bash" "Installation successful" 0
93
- mock_file "/opt/homebrew/bin/brew" ""
94
- mock_command "/opt/homebrew/bin/brew" "shellenv output" 0
95
- source "$REPO_ROOT/install/lib/package_managers.sh"
96
- # Should install without prompting
97
- assert_exit_code 0 "install_homebrew"
98
- mock_cleanup
99
-
100
- # Test install_homebrew with Apple Silicon path
101
- test_start "install_homebrew_apple_silicon"
102
- mock_init
103
- mock_command "brew" "" 1 # Not installed
104
- mock_env "DOTFILES_NONINTERACTIVE" "1"
105
- mock_command "curl" "#!/bin/bash\necho 'Homebrew installer mock'" 0
106
- mock_command "/bin/bash" "Installation successful" 0
107
- mock_file "/opt/homebrew/bin/brew" ""
108
- chmod +x "/opt/homebrew/bin/brew"
109
- mock_command "/opt/homebrew/bin/brew" 'export PATH="/opt/homebrew/bin:$PATH"' 0
110
- source "$REPO_ROOT/install/lib/package_managers.sh"
111
- assert_exit_code 0 "install_homebrew"
112
- # Verify Apple Silicon path is used
113
- assert_file_exists "/opt/homebrew/bin/brew" "Apple Silicon brew should exist"
114
- mock_cleanup
115
-
116
- # Test install_homebrew with Intel Mac path
117
- test_start "install_homebrew_intel_mac"
118
- mock_init
119
- mock_command "brew" "" 1 # Not installed
120
- mock_env "DOTFILES_NONINTERACTIVE" "1"
121
- mock_command "curl" "#!/bin/bash\necho 'Homebrew installer mock'" 0
122
- mock_command "/bin/bash" "Installation successful" 0
123
- # No Apple Silicon path, create Intel path
124
- mock_file "/usr/local/bin/brew" ""
125
- chmod +x "/usr/local/bin/brew"
126
- mock_command "/usr/local/bin/brew" 'export PATH="/usr/local/bin:$PATH"' 0
127
- source "$REPO_ROOT/install/lib/package_managers.sh"
128
- assert_exit_code 0 "install_homebrew"
129
- # Verify Intel path is used
130
- assert_file_exists "/usr/local/bin/brew" "Intel brew should exist"
131
- mock_cleanup
132
-
133
- # Test verify_package_manager for debian
134
- test_start "verify_package_manager_debian"
135
- mock_init
136
- mock_env "target_os" "debian"
137
- mock_command "apt-get" "apt 2.4.8" 0
138
- source "$REPO_ROOT/install/lib/package_managers.sh"
139
- assert_exit_code 0 "verify_package_manager"
140
- mock_cleanup
141
-
142
- # Test verify_package_manager for debian without apt
143
- test_start "verify_package_manager_debian_no_apt"
144
- mock_init
145
- mock_env "target_os" "debian"
146
- mock_command "apt-get" "" 1
147
- source "$REPO_ROOT/install/lib/package_managers.sh"
148
- assert_exit_code 1 "verify_package_manager"
149
- mock_cleanup
150
-
151
- # Test verify_package_manager for wsl2
152
- test_start "verify_package_manager_wsl2"
153
- mock_init
154
- mock_env "target_os" "wsl2"
155
- mock_command "apt-get" "apt 2.4.8" 0
156
- source "$REPO_ROOT/install/lib/package_managers.sh"
157
- assert_exit_code 0 "verify_package_manager"
158
- mock_cleanup
159
-
160
- # Test verify_package_manager for wsl2 without apt
161
- test_start "verify_package_manager_wsl2_no_apt"
162
- mock_init
163
- mock_env "target_os" "wsl2"
164
- mock_command "apt-get" "" 1
165
- source "$REPO_ROOT/install/lib/package_managers.sh"
166
- assert_exit_code 1 "verify_package_manager"
167
- mock_cleanup
168
-
169
- # Test verify_package_manager for fedora
170
- test_start "verify_package_manager_fedora"
171
- mock_init
172
- mock_env "target_os" "fedora"
173
- mock_command "dnf" "dnf 4.14.0" 0
174
- source "$REPO_ROOT/install/lib/package_managers.sh"
175
- assert_exit_code 0 "verify_package_manager"
176
- mock_cleanup
177
-
178
- # Test verify_package_manager for fedora without dnf
179
- test_start "verify_package_manager_fedora_no_dnf"
180
- mock_init
181
- mock_env "target_os" "fedora"
182
- mock_command "dnf" "" 1
183
- source "$REPO_ROOT/install/lib/package_managers.sh"
184
- assert_exit_code 1 "verify_package_manager"
185
- mock_cleanup
186
-
187
- # Test verify_package_manager for arch
188
- test_start "verify_package_manager_arch"
189
- mock_init
190
- mock_env "target_os" "arch"
191
- mock_command "pacman" "Pacman v6.0.1" 0
192
- source "$REPO_ROOT/install/lib/package_managers.sh"
193
- assert_exit_code 0 "verify_package_manager"
194
- mock_cleanup
195
-
196
- # Test verify_package_manager for arch without pacman
197
- test_start "verify_package_manager_arch_no_pacman"
198
- mock_init
199
- mock_env "target_os" "arch"
200
- mock_command "pacman" "" 1
201
- source "$REPO_ROOT/install/lib/package_managers.sh"
202
- assert_exit_code 1 "verify_package_manager"
203
- mock_cleanup
204
-
205
- # Test verify_package_manager for macos (should succeed without checks)
206
- test_start "verify_package_manager_macos"
207
- mock_init
208
- mock_env "target_os" "macos"
209
- source "$REPO_ROOT/install/lib/package_managers.sh"
210
- assert_exit_code 0 "verify_package_manager"
211
- mock_cleanup
212
-
213
- # Test verify_package_manager for unknown OS (should succeed)
214
- test_start "verify_package_manager_unknown"
215
- mock_init
216
- mock_env "target_os" "unknown"
217
- source "$REPO_ROOT/install/lib/package_managers.sh"
218
- assert_exit_code 0 "verify_package_manager"
219
- mock_cleanup
220
-
221
- # Test bootstrap_package_manager for macos with successful homebrew install
222
- test_start "bootstrap_package_manager_macos_success"
223
- mock_init
224
- mock_env "target_os" "macos"
225
- mock_env "DOTFILES_NONINTERACTIVE" "1"
226
- mock_command "brew" "" 1 # Not installed initially
227
- mock_command "curl" "#!/bin/bash\necho 'Homebrew installer'" 0
228
- mock_command "/bin/bash" "Installation successful" 0
229
- mock_file "/opt/homebrew/bin/brew" ""
230
- chmod +x "/opt/homebrew/bin/brew"
231
- mock_command "/opt/homebrew/bin/brew" 'export PATH="/opt/homebrew/bin:$PATH"' 0
232
- source "$REPO_ROOT/install/lib/package_managers.sh"
233
- assert_exit_code 0 "bootstrap_package_manager"
234
- mock_cleanup
235
-
236
- # Test bootstrap_package_manager for macos with failed homebrew install
237
- test_start "bootstrap_package_manager_macos_failure"
238
- mock_init
239
- mock_env "target_os" "macos"
240
- mock_env "DOTFILES_NONINTERACTIVE" "0" # Interactive mode
241
- mock_command "brew" "" 1 # Not installed
242
- # Mock user declining installation by making install_homebrew return 1
243
- # This simulates the user saying "no" to the prompt
244
- source "$REPO_ROOT/install/lib/package_managers.sh"
245
- # Override install_homebrew to return failure
246
- install_homebrew() { return 1; }
247
- assert_exit_code 1 "bootstrap_package_manager"
248
- mock_cleanup
249
-
250
- # Test bootstrap_package_manager for non-macos systems
251
- test_start "bootstrap_package_manager_linux"
252
- mock_init
253
- mock_env "target_os" "debian"
254
- mock_command "apt-get" "apt 2.4.8" 0
255
- source "$REPO_ROOT/install/lib/package_managers.sh"
256
- assert_exit_code 0 "bootstrap_package_manager"
257
- mock_cleanup
258
-
259
- # Test check_prerequisites with all commands available
260
- test_start "check_prerequisites_all_available"
261
- mock_init
262
- mock_command "curl" "curl 7.81.0" 0
263
- mock_command "git" "git version 2.34.1" 0
264
- source "$REPO_ROOT/install/lib/package_managers.sh"
265
- assert_exit_code 0 "check_prerequisites"
266
- mock_cleanup
267
-
268
- # Test check_prerequisites with missing curl
269
- test_start "check_prerequisites_missing_curl"
270
- mock_init
271
- mock_command "curl" "" 1
272
- mock_command "git" "git version 2.34.1" 0
273
- source "$REPO_ROOT/install/lib/package_managers.sh"
274
- assert_exit_code 1 "check_prerequisites"
275
- mock_cleanup
276
-
277
- # Test check_prerequisites with missing git
278
- test_start "check_prerequisites_missing_git"
279
- mock_init
280
- mock_command "curl" "curl 7.81.0" 0
281
- mock_command "git" "" 1
282
- source "$REPO_ROOT/install/lib/package_managers.sh"
283
- assert_exit_code 1 "check_prerequisites"
284
- mock_cleanup
285
-
286
- # Test check_prerequisites with missing both commands
287
- test_start "check_prerequisites_missing_both"
288
- mock_init
289
- mock_command "curl" "" 1
290
- mock_command "git" "" 1
291
- source "$REPO_ROOT/install/lib/package_managers.sh"
292
- assert_exit_code 1 "check_prerequisites"
293
- mock_cleanup
294
-
295
- # Test check_prerequisites error message contains missing commands
296
- test_start "check_prerequisites_error_message_curl"
297
- mock_init
298
- mock_command "curl" "" 1
299
- mock_command "git" "git version 2.34.1" 0
300
- source "$REPO_ROOT/install/lib/package_managers.sh"
301
- output=$(check_prerequisites 2>&1) || true
302
- assert_output_contains "Missing required commands: curl" "echo '$output'"
303
- mock_cleanup
304
-
305
- # Test check_prerequisites error message contains multiple missing commands
306
- test_start "check_prerequisites_error_message_both"
307
- mock_init
308
- mock_command "curl" "" 1
309
- mock_command "git" "" 1
310
- source "$REPO_ROOT/install/lib/package_managers.sh"
311
- output=$(check_prerequisites 2>&1) || true
312
- assert_output_contains "Missing required commands: curl git" "echo '$output'"
313
- mock_cleanup
314
-
315
- # Test OS detection dependency
316
- test_start "package_managers_sources_os_detection"
317
- source "$REPO_ROOT/install/lib/package_managers.sh"
318
- # Should have sourced os_detection.sh and have its functions available
319
- assert_true "command -v detect_os >/dev/null" "should have detect_os function from os_detection.sh"
320
-
321
- echo "Package managers comprehensive coverage tests completed."
@@ -1,66 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091
3
- # Unit tests for prependpath function
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
7
- source "$SCRIPT_DIR/../framework/assertions.sh"
8
-
9
- # Source the function
10
- FUNC_FILE="$REPO_ROOT/.chezmoitemplates/functions/prependpath.sh"
11
- if [[ -f "$FUNC_FILE" ]]; then
12
- source "$FUNC_FILE"
13
- else
14
- echo "SKIP: prependpath.sh not found at $FUNC_FILE"
15
- echo "RESULTS:0:0:0"
16
- exit 0
17
- fi
18
-
19
- echo "Testing prependpath function..."
20
-
21
- # Test function exists
22
- test_start "prependpath_function_exists"
23
- assert_true "type prependpath &>/dev/null" "prependpath function should exist"
24
-
25
- # Test adding new path
26
- test_start "prependpath_add_new"
27
- if type prependpath &>/dev/null; then
28
- OLD_PATH="$PATH"
29
- test_path="/test/unique/path/$$"
30
- prependpath "$test_path" 2>/dev/null || true
31
-
32
- if [[ "$PATH" == "$test_path:"* ]]; then
33
- assert_true "true" "new path should be prepended"
34
- else
35
- # Some implementations modify PATH differently
36
- assert_true "true" "prependpath executed"
37
- fi
38
- PATH="$OLD_PATH"
39
- fi
40
-
41
- # Test duplicate prevention
42
- test_start "prependpath_no_duplicate"
43
- if type prependpath &>/dev/null; then
44
- OLD_PATH="$PATH"
45
- test_path="/usr/bin" # Common path that likely exists
46
- original_count=$(echo "$PATH" | tr ':' '\n' | grep -c "^${test_path}$" || echo 0)
47
-
48
- prependpath "$test_path" 2>/dev/null || true
49
- new_count=$(echo "$PATH" | tr ':' '\n' | grep -c "^${test_path}$" || echo 0)
50
-
51
- # Should not have more occurrences than before (or at most 1 more)
52
- assert_true "[[ $new_count -le $((original_count + 1)) ]]" "should not create duplicates"
53
- PATH="$OLD_PATH"
54
- fi
55
-
56
- # Test empty argument
57
- test_start "prependpath_empty_arg"
58
- if type prependpath &>/dev/null; then
59
- OLD_PATH="$PATH"
60
- prependpath "" 2>/dev/null || true
61
- # Should not crash
62
- assert_true "true" "empty arg should not crash"
63
- PATH="$OLD_PATH"
64
- fi
65
-
66
- print_summary
@@ -1,89 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2016
3
- # Unit tests for the refactored prependpath function (string match version)
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
7
- source "$SCRIPT_DIR/../framework/assertions.sh"
8
-
9
- FUNC_FILE="$REPO_ROOT/.chezmoitemplates/functions/prependpath.sh"
10
-
11
- echo "Testing refactored prependpath function..."
12
-
13
- # Test: prependpath.sh has valid syntax
14
- test_start "prependpath_syntax"
15
- assert_exit_code 0 "bash -n '$FUNC_FILE'"
16
-
17
- # Test: uses string match (not pipe chain)
18
- test_start "prependpath_uses_string_match"
19
- assert_file_contains "$FUNC_FILE" '":${PATH}:"' "should use string match pattern"
20
-
21
- # Test: prependpath adds new directory
22
- test_start "prependpath_adds_new"
23
- result=$(bash -c '
24
- source "'"$FUNC_FILE"'"
25
- PATH="/usr/bin:/bin"
26
- prependpath "/opt/new"
27
- echo "$PATH"
28
- ')
29
- if [[ "$result" == "/opt/new:/usr/bin:/bin" ]]; then
30
- ((TESTS_PASSED++)) || true
31
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: prepends new directory"
32
- else
33
- ((TESTS_FAILED++)) || true
34
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should prepend new directory"
35
- echo -e " Actual: $result"
36
- fi
37
-
38
- # Test: prependpath does not duplicate existing directory
39
- test_start "prependpath_no_duplicate"
40
- result=$(bash -c '
41
- source "'"$FUNC_FILE"'"
42
- PATH="/usr/bin:/bin"
43
- prependpath "/usr/bin"
44
- echo "$PATH"
45
- ')
46
- if [[ "$result" == "/usr/bin:/bin" ]]; then
47
- ((TESTS_PASSED++)) || true
48
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: does not duplicate existing path"
49
- else
50
- ((TESTS_FAILED++)) || true
51
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should not duplicate existing path"
52
- echo -e " Actual: $result"
53
- fi
54
-
55
- # Test: prependpath handles path as substring correctly
56
- test_start "prependpath_substring_not_matched"
57
- result=$(bash -c '
58
- source "'"$FUNC_FILE"'"
59
- PATH="/usr/bin:/bin"
60
- prependpath "/usr/bi"
61
- echo "$PATH"
62
- ')
63
- if [[ "$result" == "/usr/bi:/usr/bin:/bin" ]]; then
64
- ((TESTS_PASSED++)) || true
65
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: partial match not treated as duplicate"
66
- else
67
- ((TESTS_FAILED++)) || true
68
- echo -e " ${RED}✗${NC} $CURRENT_TEST: partial match should not be treated as duplicate"
69
- echo -e " Actual: $result"
70
- fi
71
-
72
- # Test: prependpath handles empty PATH
73
- test_start "prependpath_empty_path"
74
- result=$(bash -c '
75
- source "'"$FUNC_FILE"'"
76
- PATH=""
77
- prependpath "/usr/bin"
78
- echo "$PATH"
79
- ')
80
- if [[ "$result" == "/usr/bin:" ]]; then
81
- ((TESTS_PASSED++)) || true
82
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: handles empty PATH"
83
- else
84
- ((TESTS_FAILED++)) || true
85
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should handle empty PATH"
86
- echo -e " Actual: $result"
87
- fi
88
-
89
- print_summary