@sebastienrousseau/dotfiles 0.2.469 → 0.2.481

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/CHANGELOG.md +285 -0
  2. package/README.md +236 -319
  3. package/docs/ALIASES.md +128 -0
  4. package/docs/ARCHITECTURE.md +229 -0
  5. package/docs/COMPLIANCE.md +47 -0
  6. package/docs/COPYRIGHT +7 -0
  7. package/docs/FEATURES.md +166 -0
  8. package/docs/FONTS.md +147 -0
  9. package/docs/INSTALL.md +119 -0
  10. package/docs/KEYS.md +40 -0
  11. package/docs/KEY_ROTATION.md +219 -0
  12. package/docs/LEGACY_ROADMAP.md +142 -0
  13. package/docs/NEOVIM_IDE_GUIDE.md +52 -0
  14. package/docs/OPERATIONS.md +130 -0
  15. package/docs/PLAN.md +161 -0
  16. package/docs/PR_DESCRIPTION.md +149 -0
  17. package/docs/README.md +269 -0
  18. package/docs/REPO_AUDIT.md +23 -0
  19. package/docs/ROADMAP.md +148 -0
  20. package/docs/SCREENSHOTS.md +116 -0
  21. package/docs/SECRETS.md +76 -0
  22. package/docs/SECURITY.md +30 -0
  23. package/docs/SECURITY_CHECKLIST.md +25 -0
  24. package/docs/TASK.md +99 -0
  25. package/docs/TESTING.md +190 -0
  26. package/docs/TOOLS.md +146 -0
  27. package/docs/TROUBLESHOOTING.md +112 -0
  28. package/docs/UTILS.md +105 -0
  29. package/docs/WALKTHROUGH.md +165 -0
  30. package/docs/WSL2_NIX_TROUBLESHOOTING.md +723 -0
  31. package/docs/adr/ADR-001-ci-cd-pipeline.md +101 -0
  32. package/docs/adr/ADR-002-shell-performance.md +121 -0
  33. package/docs/adr/ADR-003-security-first.md +140 -0
  34. package/docs/adr/ADR-004-cli-architecture.md +157 -0
  35. package/docs/adr/ADR-005-chezmoi-choice.md +89 -0
  36. package/docs/adr/ADR-006-shell-selection.md +115 -0
  37. package/docs/adr/README.md +33 -0
  38. package/docs/themes/README.md +20 -0
  39. package/dot_config/aider/aider.conf.yml +32 -0
  40. package/dot_config/alacritty/alacritty.toml.tmpl +483 -0
  41. package/dot_config/ansible/ansible.cfg.tmpl +11 -0
  42. package/dot_config/atuin/config.toml +23 -0
  43. package/dot_config/bat/config +8 -0
  44. package/dot_config/brave-flags.conf.tmpl +7 -0
  45. package/dot_config/btop/btop.conf +16 -0
  46. package/dot_config/btop/themes/tokyonight.theme +34 -0
  47. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  48. package/dot_config/claude/mcp_servers.json +49 -0
  49. package/dot_config/clippy.toml +55 -0
  50. package/dot_config/containers/containers.conf +14 -0
  51. package/dot_config/curl/dot_curlrc +18 -0
  52. package/dot_config/dlv/config.yml +39 -0
  53. package/dot_config/docker/config.json.tmpl +15 -0
  54. package/dot_config/dotfiles/boot/README.md +11 -0
  55. package/dot_config/dotfiles/grub/README.md +11 -0
  56. package/dot_config/dotfiles/lock/README.md +11 -0
  57. package/dot_config/dotfiles/versions.env.tmpl +19 -0
  58. package/dot_config/duf/duf.conf +6 -0
  59. package/dot_config/duti/defaults.duti +5 -0
  60. package/dot_config/emoji/emoji.txt +34 -0
  61. package/dot_config/fastfetch/config.jsonc +28 -0
  62. package/dot_config/firefox/user.js +8 -0
  63. package/dot_config/flatpak/flatpak.list +4 -0
  64. package/dot_config/fontconfig/fonts.conf.tmpl +44 -0
  65. package/dot_config/gh/config.yml +12 -0
  66. package/dot_config/ghostty/config.tmpl +661 -0
  67. package/dot_config/git/attributes +12 -0
  68. package/dot_config/git/config.tmpl +77 -0
  69. package/dot_config/git/ignore +27 -0
  70. package/dot_config/gnupg/gpg-agent.conf.tmpl +11 -0
  71. package/dot_config/go/aliases.sh +61 -0
  72. package/dot_config/go/env.sh +24 -0
  73. package/dot_config/go/golangci.yml +118 -0
  74. package/dot_config/go/gopls.json +30 -0
  75. package/dot_config/goose/config.yaml +29 -0
  76. package/dot_config/gtk-3.0/gtk.css.tmpl +305 -0
  77. package/dot_config/gtk-3.0/settings.ini.tmpl +66 -0
  78. package/dot_config/gtk-4.0/gtk.css.tmpl +309 -0
  79. package/dot_config/gtk-4.0/settings.ini.tmpl +21 -0
  80. package/dot_config/htop/htoprc +20 -0
  81. package/dot_config/ice/README.md +13 -0
  82. package/dot_config/inputrc +2 -0
  83. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +5 -0
  84. package/dot_config/just/justfile +104 -0
  85. package/dot_config/k9s/config.yaml.tmpl +65 -0
  86. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  87. package/dot_config/karabiner/karabiner.json +14 -0
  88. package/dot_config/kitty/kitty.conf.tmpl +517 -0
  89. package/dot_config/lazydocker/config.yml +186 -0
  90. package/dot_config/lazygit/config.yml +23 -0
  91. package/dot_config/lsd/config.yaml +19 -0
  92. package/dot_config/mas/masapps.txt +5 -0
  93. package/dot_config/minikube/config.json +13 -0
  94. package/dot_config/mise/config.toml +41 -0
  95. package/dot_config/mongosh/mongoshrc.js +67 -0
  96. package/dot_config/mycli/myclirc +67 -0
  97. package/dot_config/nano/nanorc +28 -0
  98. package/dot_config/ncdu/config +12 -0
  99. package/dot_config/nvim/init.lua +4 -0
  100. package/dot_config/nvim/lazy-lock.json +27 -0
  101. package/dot_config/nvim/lua/config/autocmds.lua +63 -0
  102. package/dot_config/nvim/lua/config/keymaps.lua +87 -0
  103. package/dot_config/nvim/lua/config/lazy.lua +34 -0
  104. package/dot_config/nvim/lua/config/options.lua +48 -0
  105. package/dot_config/nvim/lua/plugins/coding.lua +234 -0
  106. package/dot_config/nvim/lua/plugins/dap.lua +201 -0
  107. package/dot_config/nvim/lua/plugins/editor.lua +59 -0
  108. package/dot_config/nvim/lua/plugins/git.lua +9 -0
  109. package/dot_config/nvim/lua/plugins/lsp.lua +221 -0
  110. package/dot_config/nvim/lua/plugins/markdown.lua +17 -0
  111. package/dot_config/nvim/lua/plugins/rust.lua +33 -0
  112. package/dot_config/nvim/lua/plugins/sessions.lua +32 -0
  113. package/dot_config/nvim/lua/plugins/ui.lua +537 -0
  114. package/dot_config/nvim/snippets/all.lua +9 -0
  115. package/dot_config/nvim/snippets/python.lua +16 -0
  116. package/dot_config/pip/pip.conf.tmpl +32 -0
  117. package/dot_config/pypoetry/config.toml.tmpl +6 -0
  118. package/dot_config/pyrightconfig.json.tmpl +5 -0
  119. package/dot_config/raycast/README.md +13 -0
  120. package/dot_config/redis/redisclirc +41 -0
  121. package/dot_config/shell/00-container-detect.sh +53 -0
  122. package/dot_config/shell/00-core-paths.sh.tmpl +95 -0
  123. package/dot_config/shell/05-core-safety.sh.tmpl +13 -0
  124. package/dot_config/shell/40-ls-colors.sh.tmpl +31 -0
  125. package/dot_config/shell/50-logic-functions.sh.tmpl +10 -0
  126. package/dot_config/shell/90-theme-switch.sh +70 -0
  127. package/dot_config/shell/90-ux-aliases.sh.tmpl +35 -0
  128. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +23 -0
  129. package/dot_config/shell/Brewfile +207 -0
  130. package/dot_config/shell/Brewfile.cask +92 -0
  131. package/dot_config/shell/Brewfile.cli +119 -0
  132. package/dot_config/shell/README.md +267 -0
  133. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  134. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  135. package/dot_config/sops/dot_sops.yaml +23 -0
  136. package/dot_config/starship.toml.tmpl +124 -0
  137. package/dot_config/task/Taskfile.yml +86 -0
  138. package/dot_config/tflint/tflint.hcl.tmpl +9 -0
  139. package/dot_config/tmux/tmux.conf.tmpl +181 -0
  140. package/dot_config/topgrade/topgrade.toml.tmpl +42 -0
  141. package/dot_config/vscode/extensions.txt +11 -0
  142. package/dot_config/vscode/settings.json.tmpl +123 -0
  143. package/dot_config/waybar/style.css +8 -0
  144. package/dot_config/wezterm/wezterm.lua.tmpl +236 -0
  145. package/dot_config/wget/wgetrc +12 -0
  146. package/dot_config/yarn/yarnrc.yml.tmpl +36 -0
  147. package/dot_config/yazi/yazi.toml +40 -0
  148. package/dot_config/zellij/config.kdl +79 -0
  149. package/dot_config/zsh/dot_zprofile +13 -0
  150. package/dot_config/zsh/dot_zshenv +6 -0
  151. package/dot_config/zsh/dot_zshrc.tmpl +199 -0
  152. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +5 -0
  153. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  154. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +22 -0
  155. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +123 -0
  156. package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +20 -0
  157. package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +9 -0
  158. package/dot_local/bin/executable_ai_core +130 -0
  159. package/dot_local/bin/executable_b64 +59 -0
  160. package/dot_local/bin/executable_dot +178 -0
  161. package/dot_local/bin/executable_dot_completion +55 -0
  162. package/dot_local/bin/executable_epoch +62 -0
  163. package/dot_local/bin/executable_extract +108 -0
  164. package/dot_local/bin/executable_git-ai-commit +160 -0
  165. package/dot_local/bin/executable_git-ai-diff +154 -0
  166. package/dot_local/bin/executable_hash +123 -0
  167. package/dot_local/bin/executable_hex +79 -0
  168. package/dot_local/bin/executable_ip +37 -0
  169. package/dot_local/bin/executable_jsonv +54 -0
  170. package/dot_local/bin/executable_jwt +78 -0
  171. package/dot_local/bin/executable_kill-port +59 -0
  172. package/dot_local/bin/executable_lorem +103 -0
  173. package/dot_local/bin/executable_regex +96 -0
  174. package/dot_local/bin/executable_tmux-sessionizer +187 -0
  175. package/dot_local/bin/executable_tour +137 -0
  176. package/dot_local/bin/executable_update +108 -0
  177. package/dot_local/bin/executable_uuid +57 -0
  178. package/dot_local/bin/executable_yamlv +39 -0
  179. package/dot_local/bin/executable_zig-install +89 -0
  180. package/dot_local/bin/voice_ops +7 -0
  181. package/dot_local/share/bash-completion/completions/dot +54 -0
  182. package/dot_local/share/zsh/completions/.keep +0 -0
  183. package/install.sh +255 -0
  184. package/package.json +52 -76
  185. package/scripts/ci/validate-ci-config.sh +222 -0
  186. package/scripts/demo/record.sh +41 -0
  187. package/scripts/diagnostics/benchmark.sh +201 -0
  188. package/scripts/diagnostics/doctor.sh +115 -0
  189. package/scripts/diagnostics/drift-dashboard.sh +26 -0
  190. package/scripts/diagnostics/health.sh +356 -0
  191. package/scripts/diagnostics/history-analysis.sh +77 -0
  192. package/scripts/diagnostics/security-score.sh +392 -0
  193. package/scripts/diagnostics/verify_state.sh +60 -0
  194. package/scripts/dot/commands/appearance.sh +63 -0
  195. package/scripts/dot/commands/core.sh +130 -0
  196. package/scripts/dot/commands/diagnostics.sh +100 -0
  197. package/scripts/dot/commands/meta.sh +117 -0
  198. package/scripts/dot/commands/restore.sh +209 -0
  199. package/scripts/dot/commands/secrets.sh +81 -0
  200. package/scripts/dot/commands/security.sh +73 -0
  201. package/scripts/dot/commands/tools.sh +228 -0
  202. package/scripts/dot/lib/utils.sh +72 -0
  203. package/scripts/fonts/install-nerd-fonts.sh +59 -0
  204. package/scripts/fonts/patch-fonts.sh +34 -0
  205. package/scripts/ops/chezmoi-apply.sh +42 -0
  206. package/scripts/ops/chezmoi-diff.sh +14 -0
  207. package/scripts/ops/chezmoi-remove.sh +43 -0
  208. package/scripts/ops/chezmoi-update.sh +16 -0
  209. package/scripts/ops/heal.sh +466 -0
  210. package/scripts/ops/health-check.sh +380 -0
  211. package/scripts/ops/rollback.sh +531 -0
  212. package/scripts/ops/teleport.sh +32 -0
  213. package/scripts/secrets/age-init.sh +69 -0
  214. package/scripts/secrets/create-secrets-file.sh +44 -0
  215. package/scripts/secrets/encrypt-ssh-key.sh +42 -0
  216. package/scripts/security/backup.sh +17 -0
  217. package/scripts/security/dns-doh.sh +29 -0
  218. package/scripts/security/encryption-check.sh +39 -0
  219. package/scripts/security/enforce-policies.sh +339 -0
  220. package/scripts/security/firewall.sh +34 -0
  221. package/scripts/security/lock-configs.sh +57 -0
  222. package/scripts/security/lock-screen.sh +33 -0
  223. package/scripts/security/manage-secrets.sh +415 -0
  224. package/scripts/security/telemetry-kill.sh +28 -0
  225. package/scripts/security/usb-safety.sh +29 -0
  226. package/scripts/tests/README.md +241 -0
  227. package/scripts/tests/benchmark.sh +91 -0
  228. package/scripts/tests/framework/assertions.sh +283 -0
  229. package/scripts/tests/framework/mocks.sh +201 -0
  230. package/scripts/tests/framework/test_runner.sh +189 -0
  231. package/scripts/tests/integration/test_install.sh +237 -0
  232. package/scripts/tests/performance/benchmark_runner.sh +156 -0
  233. package/scripts/tests/performance/regression_check.sh +73 -0
  234. package/scripts/tests/performance/stress_test.sh +65 -0
  235. package/scripts/tests/test-aliases.sh +25 -0
  236. package/scripts/tests/test-docker.sh +48 -0
  237. package/scripts/tests/unit/test_ai_aliases.sh +158 -0
  238. package/scripts/tests/unit/test_ai_cli_checks.sh +47 -0
  239. package/scripts/tests/unit/test_backup.sh +227 -0
  240. package/scripts/tests/unit/test_case_functions.sh +238 -0
  241. package/scripts/tests/unit/test_cd_aliases.sh +367 -0
  242. package/scripts/tests/unit/test_dot_cli.sh +217 -0
  243. package/scripts/tests/unit/test_encode64.sh +67 -0
  244. package/scripts/tests/unit/test_environment.sh +78 -0
  245. package/scripts/tests/unit/test_extract.sh +163 -0
  246. package/scripts/tests/unit/test_framework_edge_cases.sh +113 -0
  247. package/scripts/tests/unit/test_genpass.sh +298 -0
  248. package/scripts/tests/unit/test_install_edge_cases.sh +167 -0
  249. package/scripts/tests/unit/test_installers.sh +172 -0
  250. package/scripts/tests/unit/test_keygen.sh +68 -0
  251. package/scripts/tests/unit/test_logging.sh +96 -0
  252. package/scripts/tests/unit/test_os_detection_comprehensive.sh +388 -0
  253. package/scripts/tests/unit/test_package_managers_comprehensive.sh +321 -0
  254. package/scripts/tests/unit/test_prependpath.sh +66 -0
  255. package/scripts/tests/unit/test_prependpath_refactored.sh +89 -0
  256. package/scripts/tests/unit/test_rd.sh +230 -0
  257. package/scripts/tests/unit/test_security_fixes.sh +130 -0
  258. package/scripts/tests/unit/test_security_scripts.sh +87 -0
  259. package/scripts/tests/unit/test_template_validation.sh +238 -0
  260. package/scripts/tests/unit/test_utility_functions.sh +144 -0
  261. package/scripts/tests/unit/test_wave1_alias_split.sh +132 -0
  262. package/scripts/tests/unit/test_wave1_ci_pinning.sh +61 -0
  263. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +52 -0
  264. package/scripts/tests/unit/test_wave1_heal_fixes.sh +97 -0
  265. package/scripts/tests/unit/test_wave1_install_gpg.sh +35 -0
  266. package/scripts/tests/unit/test_wave1_zshenv_path.sh +89 -0
  267. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +115 -0
  268. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +75 -0
  269. package/scripts/tests/unit/test_zipf.sh +76 -0
  270. package/scripts/theme/apply-gnome-theme.sh +297 -0
  271. package/scripts/theme/install-boot-logo.sh +61 -0
  272. package/scripts/theme/install-catppuccin-themes.sh +346 -0
  273. package/scripts/theme/install-cursors.sh +24 -0
  274. package/scripts/theme/install-file-icons.sh +25 -0
  275. package/scripts/theme/install-grub-theme.sh +51 -0
  276. package/scripts/theme/install-lock-icon.sh +29 -0
  277. package/scripts/theme/switch.sh +250 -0
  278. package/scripts/theme/wallpaper-rotate.sh +82 -0
  279. package/scripts/theme/wallpaper-sync.sh +42 -0
  280. package/scripts/tools/cmatrix.sh +20 -0
  281. package/scripts/tools/detect-collisions.py +84 -0
  282. package/scripts/tools/emoji-picker.sh +45 -0
  283. package/scripts/tools/figlet-banner.sh +17 -0
  284. package/scripts/tools/log-rotate.sh +29 -0
  285. package/scripts/tools/lolcat-wrap.sh +18 -0
  286. package/scripts/tools/pipes.sh +47 -0
  287. package/scripts/tuning/linux.sh +175 -0
  288. package/scripts/tuning/macos.sh +46 -0
  289. package/templates/projects/go/README.md +7 -0
  290. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +7 -0
  291. package/templates/projects/go/go.mod +3 -0
  292. package/templates/projects/molecule/README.md +7 -0
  293. package/templates/projects/molecule/converge.yml +7 -0
  294. package/templates/projects/molecule/molecule.yml +16 -0
  295. package/templates/projects/node/README.md +7 -0
  296. package/templates/projects/node/package.json +10 -0
  297. package/templates/projects/node/src/index.js +2 -0
  298. package/templates/projects/packer/README.md +15 -0
  299. package/templates/projects/packer/main.pkr.hcl +15 -0
  300. package/templates/projects/python/README.md +7 -0
  301. package/templates/projects/python/pyproject.toml +25 -0
  302. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  303. package/templates/projects/python/tests/test_basic.py +2 -0
  304. package/dist/Makefile +0 -140
  305. package/dist/bin/backup.d.ts +0 -3
  306. package/dist/bin/backup.d.ts.map +0 -1
  307. package/dist/bin/backup.js +0 -4
  308. package/dist/bin/backup.js.map +0 -1
  309. package/dist/bin/constants.d.ts +0 -7
  310. package/dist/bin/constants.d.ts.map +0 -1
  311. package/dist/bin/constants.js +0 -2
  312. package/dist/bin/constants.js.map +0 -1
  313. package/dist/bin/copy.d.ts +0 -3
  314. package/dist/bin/copy.d.ts.map +0 -1
  315. package/dist/bin/copy.js +0 -3
  316. package/dist/bin/copy.js.map +0 -1
  317. package/dist/bin/dotfiles.d.ts +0 -3
  318. package/dist/bin/dotfiles.d.ts.map +0 -1
  319. package/dist/bin/dotfiles.js +0 -2
  320. package/dist/bin/dotfiles.js.map +0 -1
  321. package/dist/bin/download.d.ts +0 -3
  322. package/dist/bin/download.d.ts.map +0 -1
  323. package/dist/bin/download.js +0 -2
  324. package/dist/bin/download.js.map +0 -1
  325. package/dist/bin/index.d.ts +0 -2
  326. package/dist/bin/index.d.ts.map +0 -1
  327. package/dist/bin/index.js +0 -1
  328. package/dist/bin/index.js.map +0 -1
  329. package/dist/bin/transfer.d.ts +0 -3
  330. package/dist/bin/transfer.d.ts.map +0 -1
  331. package/dist/bin/transfer.js +0 -4
  332. package/dist/bin/transfer.js.map +0 -1
  333. package/dist/bin/unpack.d.ts +0 -3
  334. package/dist/bin/unpack.d.ts.map +0 -1
  335. package/dist/bin/unpack.js +0 -3
  336. package/dist/bin/unpack.js.map +0 -1
  337. package/dist/filesizes.txt +0 -382
  338. package/dist/lib/README.md +0 -86
  339. package/dist/lib/aliases/README.md +0 -57
  340. package/dist/lib/aliases/archives/README.md +0 -145
  341. package/dist/lib/aliases/archives/archives.aliases.sh +0 -114
  342. package/dist/lib/aliases/cd/README.md +0 -146
  343. package/dist/lib/aliases/cd/cd.aliases.sh +0 -51
  344. package/dist/lib/aliases/chmod/README.md +0 -160
  345. package/dist/lib/aliases/chmod/chmod.aliases.sh +0 -107
  346. package/dist/lib/aliases/clear/README.md +0 -37
  347. package/dist/lib/aliases/clear/clear.aliases.sh +0 -71
  348. package/dist/lib/aliases/configuration/README.md +0 -39
  349. package/dist/lib/aliases/configuration/configuration.aliases.sh +0 -70
  350. package/dist/lib/aliases/default/README.md +0 -40
  351. package/dist/lib/aliases/default/default.aliases.sh +0 -139
  352. package/dist/lib/aliases/dig/README.md +0 -37
  353. package/dist/lib/aliases/dig/dig.aliases.sh +0 -43
  354. package/dist/lib/aliases/disk-usage/README.md +0 -36
  355. package/dist/lib/aliases/disk-usage/du.aliases.sh +0 -84
  356. package/dist/lib/aliases/editor/README.md +0 -53
  357. package/dist/lib/aliases/editor/editor.aliases.sh +0 -26
  358. package/dist/lib/aliases/find/README.md +0 -46
  359. package/dist/lib/aliases/find/find.aliases.sh +0 -60
  360. package/dist/lib/aliases/gcloud/README.md +0 -63
  361. package/dist/lib/aliases/gcloud/gcloud.aliases.sh +0 -335
  362. package/dist/lib/aliases/git/README.md +0 -153
  363. package/dist/lib/aliases/git/git.aliases.sh +0 -544
  364. package/dist/lib/aliases/gnu/README.md +0 -89
  365. package/dist/lib/aliases/gnu/gnucoreutils-aliases.sh +0 -150
  366. package/dist/lib/aliases/heroku/README.md +0 -430
  367. package/dist/lib/aliases/heroku/heroku.aliases.sh +0 -1053
  368. package/dist/lib/aliases/interactive/README.md +0 -55
  369. package/dist/lib/aliases/interactive/interactive.aliases.sh +0 -50
  370. package/dist/lib/aliases/list/README.md +0 -131
  371. package/dist/lib/aliases/list/list.aliases.sh +0 -132
  372. package/dist/lib/aliases/macOS/README.md +0 -42
  373. package/dist/lib/aliases/macOS/macos.aliases.sh +0 -65
  374. package/dist/lib/aliases/make/README.md +0 -32
  375. package/dist/lib/aliases/make/make.aliases.sh +0 -35
  376. package/dist/lib/aliases/mkdir/README.md +0 -30
  377. package/dist/lib/aliases/mkdir/mkdir.aliases.sh +0 -29
  378. package/dist/lib/aliases/npm/README.md +0 -41
  379. package/dist/lib/aliases/npm/npm.aliases.sh +0 -61
  380. package/dist/lib/aliases/permission/README.md +0 -47
  381. package/dist/lib/aliases/permission/permission.aliases.sh +0 -73
  382. package/dist/lib/aliases/pnpm/README.md +0 -53
  383. package/dist/lib/aliases/pnpm/pnpm.aliases.sh +0 -76
  384. package/dist/lib/aliases/ps/README.md +0 -29
  385. package/dist/lib/aliases/ps/ps.aliases.sh +0 -20
  386. package/dist/lib/aliases/python/python.aliases.sh +0 -141
  387. package/dist/lib/aliases/rsync/README.md +0 -25
  388. package/dist/lib/aliases/rsync/rsync.aliases.sh +0 -17
  389. package/dist/lib/aliases/rust/README.md +0 -182
  390. package/dist/lib/aliases/rust/rust.aliases.sh +0 -119
  391. package/dist/lib/aliases/subversion/README.md +0 -66
  392. package/dist/lib/aliases/subversion/subversion.aliases.sh +0 -47
  393. package/dist/lib/aliases/sudo/README.md +0 -27
  394. package/dist/lib/aliases/sudo/sudo.aliases.sh +0 -20
  395. package/dist/lib/aliases/tmux/README.md +0 -31
  396. package/dist/lib/aliases/tmux/tmux.aliases.sh +0 -36
  397. package/dist/lib/aliases/update/README.md +0 -38
  398. package/dist/lib/aliases/update/update.aliases.sh +0 -310
  399. package/dist/lib/aliases/uuid/README.md +0 -24
  400. package/dist/lib/aliases/uuid/uuid.aliases.sh +0 -19
  401. package/dist/lib/aliases/wget/README.md +0 -27
  402. package/dist/lib/aliases/wget/wget.aliases.sh +0 -22
  403. package/dist/lib/aliases.sh +0 -50
  404. package/dist/lib/configurations/README.md +0 -18
  405. package/dist/lib/configurations/bash/bashrc +0 -167
  406. package/dist/lib/configurations/curl/cacert.pem +0 -3460
  407. package/dist/lib/configurations/curl/curlrc +0 -53
  408. package/dist/lib/configurations/default/color.sh +0 -24
  409. package/dist/lib/configurations/default/constants.sh +0 -43
  410. package/dist/lib/configurations/default/editor.sh +0 -18
  411. package/dist/lib/configurations/default/prompt.sh +0 -48
  412. package/dist/lib/configurations/input/inputrc +0 -23
  413. package/dist/lib/configurations/jshint/jshintrc +0 -37
  414. package/dist/lib/configurations/nano/nanorc +0 -35
  415. package/dist/lib/configurations/profile/profile +0 -37
  416. package/dist/lib/configurations/prompt/prompt.sh +0 -81
  417. package/dist/lib/configurations/tmux/default +0 -18
  418. package/dist/lib/configurations/tmux/display +0 -30
  419. package/dist/lib/configurations/tmux/linux +0 -18
  420. package/dist/lib/configurations/tmux/navigation +0 -30
  421. package/dist/lib/configurations/tmux/panes +0 -10
  422. package/dist/lib/configurations/tmux/theme +0 -29
  423. package/dist/lib/configurations/tmux/tmux +0 -21
  424. package/dist/lib/configurations/vim/vimrc +0 -193
  425. package/dist/lib/configurations/wget/wgetrc +0 -40
  426. package/dist/lib/configurations/zsh/zshrc +0 -50
  427. package/dist/lib/configurations.sh +0 -45
  428. package/dist/lib/functions/README.md +0 -92
  429. package/dist/lib/functions/apihealth.sh +0 -277
  430. package/dist/lib/functions/apilatency.sh +0 -157
  431. package/dist/lib/functions/apiload.sh +0 -165
  432. package/dist/lib/functions/backup.sh +0 -143
  433. package/dist/lib/functions/cdls.sh +0 -60
  434. package/dist/lib/functions/curlheader.sh +0 -78
  435. package/dist/lib/functions/curlstatus.sh +0 -74
  436. package/dist/lib/functions/curltime.sh +0 -75
  437. package/dist/lib/functions/encode64.sh +0 -107
  438. package/dist/lib/functions/environment.sh +0 -78
  439. package/dist/lib/functions/extract.sh +0 -86
  440. package/dist/lib/functions/freespace.sh +0 -67
  441. package/dist/lib/functions/genpwd.sh +0 -105
  442. package/dist/lib/functions/goto.sh +0 -67
  443. package/dist/lib/functions/hexdump.sh +0 -96
  444. package/dist/lib/functions/hiddenfiles.sh +0 -77
  445. package/dist/lib/functions/hostinfo.sh +0 -98
  446. package/dist/lib/functions/hstats.sh +0 -75
  447. package/dist/lib/functions/httpdebug.sh +0 -113
  448. package/dist/lib/functions/kebabcase.sh +0 -61
  449. package/dist/lib/functions/keygen.sh +0 -194
  450. package/dist/lib/functions/last.sh +0 -112
  451. package/dist/lib/functions/logout.sh +0 -120
  452. package/dist/lib/functions/lowercase.sh +0 -61
  453. package/dist/lib/functions/matrix.sh +0 -216
  454. package/dist/lib/functions/mount_read_only.sh +0 -11
  455. package/dist/lib/functions/myproc.sh +0 -9
  456. package/dist/lib/functions/prependpath.sh +0 -21
  457. package/dist/lib/functions/ql.sh +0 -9
  458. package/dist/lib/functions/rd.sh +0 -17
  459. package/dist/lib/functions/remove_disk.sh +0 -11
  460. package/dist/lib/functions/ren.sh +0 -73
  461. package/dist/lib/functions/sentencecase.sh +0 -63
  462. package/dist/lib/functions/showhiddenfiles.sh +0 -14
  463. package/dist/lib/functions/size.sh +0 -16
  464. package/dist/lib/functions/snakecase.sh +0 -61
  465. package/dist/lib/functions/stopwatch.sh +0 -15
  466. package/dist/lib/functions/sysinfo.sh +0 -145
  467. package/dist/lib/functions/titlecase.sh +0 -65
  468. package/dist/lib/functions/uppercase.sh +0 -61
  469. package/dist/lib/functions/view-source.sh +0 -9
  470. package/dist/lib/functions/vscode.sh +0 -32
  471. package/dist/lib/functions/whoisport.sh +0 -14
  472. package/dist/lib/functions/zipf.sh +0 -16
  473. package/dist/lib/functions.sh +0 -46
  474. package/dist/lib/history.sh +0 -90
  475. package/dist/lib/paths/README.md +0 -52
  476. package/dist/lib/paths/custom.paths.sh +0 -40
  477. package/dist/lib/paths/default.paths.sh +0 -37
  478. package/dist/lib/paths.sh +0 -46
  479. package/dist/scripts/backup.sh +0 -95
  480. package/dist/scripts/banner.sh +0 -20
  481. package/dist/scripts/build.sh +0 -41
  482. package/dist/scripts/clean.sh +0 -31
  483. package/dist/scripts/compile.sh +0 -54
  484. package/dist/scripts/copy.sh +0 -108
  485. package/dist/scripts/dotfiles.sh +0 -63
  486. package/dist/scripts/download.sh +0 -35
  487. package/dist/scripts/help.sh +0 -57
  488. package/dist/scripts/ssh.sh +0 -55
  489. package/dist/scripts/unpack.sh +0 -28
  490. /package/{dist/lib/configurations → dot_config}/gem/gemrc +0 -0
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bash
2
+ # shellcheck disable=SC1090,SC1091,SC2034
3
+ # Unit tests for keygen 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/keygen.sh"
11
+ if [[ -f "$FUNC_FILE" ]]; then
12
+ source "$FUNC_FILE"
13
+ else
14
+ echo "SKIP: keygen.sh not found at $FUNC_FILE"
15
+ echo "RESULTS:0:0:0"
16
+ exit 0
17
+ fi
18
+
19
+ echo "Testing keygen function..."
20
+
21
+ # Test function exists
22
+ test_start "keygen_function_exists"
23
+ assert_true "type keygen &>/dev/null" "keygen function should exist"
24
+
25
+ # Test no arguments shows usage
26
+ test_start "keygen_no_args"
27
+ if type keygen &>/dev/null; then
28
+ output=$(keygen 2>&1 || true)
29
+ # Should show usage or error - use direct check to avoid eval issues
30
+ if [[ -n "$output" ]]; then
31
+ ((TESTS_PASSED++)) || true
32
+ echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no args should produce output"
33
+ else
34
+ ((TESTS_FAILED++)) || true
35
+ echo -e " ${RED}✗${NC} $CURRENT_TEST: no args should produce output"
36
+ fi
37
+ fi
38
+
39
+ # Test help flag
40
+ test_start "keygen_help_flag"
41
+ if type keygen &>/dev/null; then
42
+ output=$(keygen --help 2>&1 || keygen -h 2>&1 || echo "usage")
43
+ assert_true "true" "help flag check completed"
44
+ fi
45
+
46
+ # Test invalid key type
47
+ test_start "keygen_invalid_type"
48
+ if type keygen &>/dev/null; then
49
+ result=$(keygen --type invalid_type test_key 2>&1 || echo "error")
50
+ # Check for error messages (case insensitive)
51
+ if echo "$result" | grep -iqE "(error|invalid|unknown|usage)"; then
52
+ ((TESTS_PASSED++))
53
+ echo -e " ${GREEN}✓${NC} $CURRENT_TEST: invalid type shows error message"
54
+ else
55
+ ((TESTS_FAILED++))
56
+ echo -e " ${RED}✗${NC} $CURRENT_TEST: should show error for invalid type"
57
+ fi
58
+ fi
59
+
60
+ # Test output format (without actually creating keys)
61
+ test_start "keygen_dry_run"
62
+ if type keygen &>/dev/null; then
63
+ # Just verify it doesn't crash with common args
64
+ keygen --help 2>/dev/null || true
65
+ assert_true "true" "keygen help does not crash"
66
+ fi
67
+
68
+ print_summary
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env bash
2
+ # shellcheck disable=SC1090,SC1091
3
+ # Unit tests for install/lib/logging.sh
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
+ LOGGING_FILE="$REPO_ROOT/install/lib/logging.sh"
10
+
11
+ echo "Testing logging library..."
12
+
13
+ # Test: logging.sh exists
14
+ test_start "logging_file_exists"
15
+ assert_file_exists "$LOGGING_FILE" "logging.sh should exist"
16
+
17
+ # Test: logging.sh has valid syntax
18
+ test_start "logging_syntax"
19
+ assert_exit_code 0 "bash -n '$LOGGING_FILE'"
20
+
21
+ # Test: logging.sh has shebang
22
+ test_start "logging_shebang"
23
+ assert_file_contains "$LOGGING_FILE" "#!/usr/bin/env bash" "should have bash shebang"
24
+
25
+ # Test: logging.sh has double-source guard
26
+ test_start "logging_guard"
27
+ assert_file_contains "$LOGGING_FILE" "_DOTFILES_LOGGING_LOADED" "should have double-source guard"
28
+
29
+ # Test: log_info outputs to stdout with INFO prefix
30
+ test_start "log_info_output"
31
+ output=$(bash -c 'source "'"$LOGGING_FILE"'"; log_info "test message"' 2>&1)
32
+ if [[ "$output" == *"[INFO]"* && "$output" == *"test message"* ]]; then
33
+ ((TESTS_PASSED++)) || true
34
+ echo -e " ${GREEN}✓${NC} $CURRENT_TEST: log_info shows INFO prefix"
35
+ else
36
+ ((TESTS_FAILED++)) || true
37
+ echo -e " ${RED}✗${NC} $CURRENT_TEST: log_info should show INFO prefix"
38
+ echo -e " Output: $output"
39
+ fi
40
+
41
+ # Test: log_warn outputs with WARN prefix to stderr
42
+ test_start "log_warn_output"
43
+ output=$(bash -c 'source "'"$LOGGING_FILE"'"; log_warn "warn msg"' 2>&1)
44
+ if [[ "$output" == *"[WARN]"* && "$output" == *"warn msg"* ]]; then
45
+ ((TESTS_PASSED++)) || true
46
+ echo -e " ${GREEN}✓${NC} $CURRENT_TEST: log_warn shows WARN prefix"
47
+ else
48
+ ((TESTS_FAILED++)) || true
49
+ echo -e " ${RED}✗${NC} $CURRENT_TEST: log_warn should show WARN prefix"
50
+ echo -e " Output: $output"
51
+ fi
52
+
53
+ # Test: log_error outputs with ERROR prefix to stderr
54
+ test_start "log_error_output"
55
+ output=$(bash -c 'source "'"$LOGGING_FILE"'"; log_error "err msg"' 2>&1)
56
+ if [[ "$output" == *"[ERROR]"* && "$output" == *"err msg"* ]]; then
57
+ ((TESTS_PASSED++)) || true
58
+ echo -e " ${GREEN}✓${NC} $CURRENT_TEST: log_error shows ERROR prefix"
59
+ else
60
+ ((TESTS_FAILED++)) || true
61
+ echo -e " ${RED}✗${NC} $CURRENT_TEST: log_error should show ERROR prefix"
62
+ echo -e " Output: $output"
63
+ fi
64
+
65
+ # Test: die exits with code 1
66
+ test_start "die_exit_code"
67
+ assert_exit_code 1 "bash -c 'source \"$LOGGING_FILE\"; die \"fatal\"'"
68
+
69
+ # Test: die shows ERROR prefix
70
+ test_start "die_error_output"
71
+ output=$(bash -c 'source "'"$LOGGING_FILE"'"; die "fatal error"' 2>&1) || true
72
+ if [[ "$output" == *"[ERROR]"* && "$output" == *"fatal error"* ]]; then
73
+ ((TESTS_PASSED++)) || true
74
+ echo -e " ${GREEN}✓${NC} $CURRENT_TEST: die shows ERROR prefix"
75
+ else
76
+ ((TESTS_FAILED++)) || true
77
+ echo -e " ${RED}✗${NC} $CURRENT_TEST: die should show ERROR prefix"
78
+ echo -e " Output: $output"
79
+ fi
80
+
81
+ # Test: double-sourcing is idempotent
82
+ test_start "logging_idempotent"
83
+ output=$(bash -c '
84
+ source "'"$LOGGING_FILE"'"
85
+ source "'"$LOGGING_FILE"'"
86
+ log_info "still works"
87
+ ' 2>&1)
88
+ if [[ "$output" == *"still works"* ]]; then
89
+ ((TESTS_PASSED++)) || true
90
+ echo -e " ${GREEN}✓${NC} $CURRENT_TEST: double-sourcing is safe"
91
+ else
92
+ ((TESTS_FAILED++)) || true
93
+ echo -e " ${RED}✗${NC} $CURRENT_TEST: double-sourcing should be safe"
94
+ fi
95
+
96
+ print_summary
@@ -0,0 +1,388 @@
1
+ #!/usr/bin/env bash
2
+ # shellcheck disable=SC2016
3
+ # SC2016: Single quotes are intentional for mock data containing literal $variables
4
+ # Comprehensive OS Detection Tests
5
+ # Achieves 100% line and branch coverage for os_detection.sh
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ source "$SCRIPT_DIR/../framework/assertions.sh"
9
+ source "$SCRIPT_DIR/../framework/mocks.sh"
10
+
11
+ # Source the function being tested
12
+ source "$REPO_ROOT/install/lib/os_detection.sh"
13
+
14
+ echo "Testing OS detection comprehensive coverage..."
15
+
16
+ # Test Darwin/macOS detection
17
+ test_start "detect_os_macos"
18
+ mock_init
19
+ mock_command "uname" "Darwin" 0
20
+ mock_env "OS" ""
21
+ mock_env "ARCH" ""
22
+ mock_env "target_os" ""
23
+ detect_os
24
+ assert_equals "macos" "$target_os" "should detect macOS"
25
+ assert_equals "Darwin" "$OS" "should set OS to Darwin"
26
+ mock_cleanup
27
+
28
+ # Test Linux with Microsoft/WSL detection via /proc/version
29
+ test_start "detect_os_wsl2_microsoft"
30
+ mock_init
31
+ mock_command "uname" "Linux" 0
32
+ mock_file "microsoft linux subsystem" "/proc/version"
33
+ mock_env "OS" ""
34
+ mock_env "ARCH" ""
35
+ mock_env "target_os" ""
36
+ detect_os
37
+ assert_equals "wsl2" "$target_os" "should detect WSL2 with Microsoft"
38
+ mock_cleanup
39
+
40
+ # Test Linux with WSL detection via /proc/version
41
+ test_start "detect_os_wsl2_wsl_keyword"
42
+ mock_init
43
+ mock_command "uname" "Linux" 0
44
+ mock_file "WSL2 kernel" "/proc/version"
45
+ mock_env "OS" ""
46
+ mock_env "ARCH" ""
47
+ mock_env "target_os" ""
48
+ detect_os
49
+ assert_equals "wsl2" "$target_os" "should detect WSL2 with WSL keyword"
50
+ mock_cleanup
51
+
52
+ # Test Ubuntu detection via os-release
53
+ test_start "detect_os_ubuntu"
54
+ mock_init
55
+ mock_command "uname" "Linux" 0
56
+ mock_file "regular linux kernel" "/proc/version"
57
+ mock_file 'ID=ubuntu
58
+ NAME="Ubuntu"' "/etc/os-release"
59
+ mock_env "OS" ""
60
+ mock_env "ARCH" ""
61
+ mock_env "target_os" ""
62
+ detect_os
63
+ assert_equals "debian" "$target_os" "should detect Ubuntu as debian"
64
+ mock_cleanup
65
+
66
+ # Test Debian detection via os-release
67
+ test_start "detect_os_debian"
68
+ mock_init
69
+ mock_command "uname" "Linux" 0
70
+ mock_file "regular linux kernel" "/proc/version"
71
+ mock_file 'ID=debian
72
+ NAME="Debian"' "/etc/os-release"
73
+ mock_env "OS" ""
74
+ mock_env "ARCH" ""
75
+ mock_env "target_os" ""
76
+ detect_os
77
+ assert_equals "debian" "$target_os" "should detect Debian"
78
+ mock_cleanup
79
+
80
+ # Test Pop!_OS detection via os-release
81
+ test_start "detect_os_pop"
82
+ mock_init
83
+ mock_command "uname" "Linux" 0
84
+ mock_file "regular linux kernel" "/proc/version"
85
+ mock_file 'ID=pop
86
+ NAME="Pop!_OS"' "/etc/os-release"
87
+ mock_env "OS" ""
88
+ mock_env "ARCH" ""
89
+ mock_env "target_os" ""
90
+ detect_os
91
+ assert_equals "debian" "$target_os" "should detect Pop!_OS as debian"
92
+ mock_cleanup
93
+
94
+ # Test Linux Mint detection via os-release
95
+ test_start "detect_os_linuxmint"
96
+ mock_init
97
+ mock_command "uname" "Linux" 0
98
+ mock_file "regular linux kernel" "/proc/version"
99
+ mock_file 'ID=linuxmint
100
+ NAME="Linux Mint"' "/etc/os-release"
101
+ mock_env "OS" ""
102
+ mock_env "ARCH" ""
103
+ mock_env "target_os" ""
104
+ detect_os
105
+ assert_equals "debian" "$target_os" "should detect Linux Mint as debian"
106
+ mock_cleanup
107
+
108
+ # Test Elementary OS detection via os-release
109
+ test_start "detect_os_elementary"
110
+ mock_init
111
+ mock_command "uname" "Linux" 0
112
+ mock_file "regular linux kernel" "/proc/version"
113
+ mock_file 'ID=elementary
114
+ NAME="elementary OS"' "/etc/os-release"
115
+ mock_env "OS" ""
116
+ mock_env "ARCH" ""
117
+ mock_env "target_os" ""
118
+ detect_os
119
+ assert_equals "debian" "$target_os" "should detect Elementary as debian"
120
+ mock_cleanup
121
+
122
+ # Test Fedora detection via os-release
123
+ test_start "detect_os_fedora"
124
+ mock_init
125
+ mock_command "uname" "Linux" 0
126
+ mock_file "regular linux kernel" "/proc/version"
127
+ mock_file 'ID=fedora
128
+ NAME="Fedora"' "/etc/os-release"
129
+ mock_env "OS" ""
130
+ mock_env "ARCH" ""
131
+ mock_env "target_os" ""
132
+ detect_os
133
+ assert_equals "fedora" "$target_os" "should detect Fedora"
134
+ mock_cleanup
135
+
136
+ # Test RHEL detection via os-release
137
+ test_start "detect_os_rhel"
138
+ mock_init
139
+ mock_command "uname" "Linux" 0
140
+ mock_file "regular linux kernel" "/proc/version"
141
+ mock_file 'ID=rhel
142
+ NAME="Red Hat Enterprise Linux"' "/etc/os-release"
143
+ mock_env "OS" ""
144
+ mock_env "ARCH" ""
145
+ mock_env "target_os" ""
146
+ detect_os
147
+ assert_equals "fedora" "$target_os" "should detect RHEL as fedora"
148
+ mock_cleanup
149
+
150
+ # Test CentOS detection via os-release
151
+ test_start "detect_os_centos"
152
+ mock_init
153
+ mock_command "uname" "Linux" 0
154
+ mock_file "regular linux kernel" "/proc/version"
155
+ mock_file 'ID=centos
156
+ NAME="CentOS"' "/etc/os-release"
157
+ mock_env "OS" ""
158
+ mock_env "ARCH" ""
159
+ mock_env "target_os" ""
160
+ detect_os
161
+ assert_equals "fedora" "$target_os" "should detect CentOS as fedora"
162
+ mock_cleanup
163
+
164
+ # Test Rocky Linux detection via os-release
165
+ test_start "detect_os_rocky"
166
+ mock_init
167
+ mock_command "uname" "Linux" 0
168
+ mock_file "regular linux kernel" "/proc/version"
169
+ mock_file 'ID=rocky
170
+ NAME="Rocky Linux"' "/etc/os-release"
171
+ mock_env "OS" ""
172
+ mock_env "ARCH" ""
173
+ mock_env "target_os" ""
174
+ detect_os
175
+ assert_equals "fedora" "$target_os" "should detect Rocky as fedora"
176
+ mock_cleanup
177
+
178
+ # Test AlmaLinux detection via os-release
179
+ test_start "detect_os_alma"
180
+ mock_init
181
+ mock_command "uname" "Linux" 0
182
+ mock_file "regular linux kernel" "/proc/version"
183
+ mock_file 'ID=alma
184
+ NAME="AlmaLinux"' "/etc/os-release"
185
+ mock_env "OS" ""
186
+ mock_env "ARCH" ""
187
+ mock_env "target_os" ""
188
+ detect_os
189
+ assert_equals "fedora" "$target_os" "should detect AlmaLinux as fedora"
190
+ mock_cleanup
191
+
192
+ # Test Arch Linux detection via os-release
193
+ test_start "detect_os_arch"
194
+ mock_init
195
+ mock_command "uname" "Linux" 0
196
+ mock_file "regular linux kernel" "/proc/version"
197
+ mock_file 'ID=arch
198
+ NAME="Arch Linux"' "/etc/os-release"
199
+ mock_env "OS" ""
200
+ mock_env "ARCH" ""
201
+ mock_env "target_os" ""
202
+ detect_os
203
+ assert_equals "arch" "$target_os" "should detect Arch Linux"
204
+ mock_cleanup
205
+
206
+ # Test Manjaro detection via os-release
207
+ test_start "detect_os_manjaro"
208
+ mock_init
209
+ mock_command "uname" "Linux" 0
210
+ mock_file "regular linux kernel" "/proc/version"
211
+ mock_file 'ID=manjaro
212
+ NAME="Manjaro"' "/etc/os-release"
213
+ mock_env "OS" ""
214
+ mock_env "ARCH" ""
215
+ mock_env "target_os" ""
216
+ detect_os
217
+ assert_equals "arch" "$target_os" "should detect Manjaro as arch"
218
+ mock_cleanup
219
+
220
+ # Test EndeavourOS detection via os-release
221
+ test_start "detect_os_endeavouros"
222
+ mock_init
223
+ mock_command "uname" "Linux" 0
224
+ mock_file "regular linux kernel" "/proc/version"
225
+ mock_file 'ID=endeavouros
226
+ NAME="EndeavourOS"' "/etc/os-release"
227
+ mock_env "OS" ""
228
+ mock_env "ARCH" ""
229
+ mock_env "target_os" ""
230
+ detect_os
231
+ assert_equals "arch" "$target_os" "should detect EndeavourOS as arch"
232
+ mock_cleanup
233
+
234
+ # Test unknown Linux distribution via os-release
235
+ test_start "detect_os_unknown_linux_distro"
236
+ mock_init
237
+ mock_command "uname" "Linux" 0
238
+ mock_file "regular linux kernel" "/proc/version"
239
+ mock_file 'ID=unknown-distro
240
+ NAME="Unknown Distribution"' "/etc/os-release"
241
+ mock_env "OS" ""
242
+ mock_env "ARCH" ""
243
+ mock_env "target_os" ""
244
+ detect_os
245
+ assert_equals "linux" "$target_os" "should detect unknown distro as linux"
246
+ mock_cleanup
247
+
248
+ # Test Linux without os-release file
249
+ test_start "detect_os_linux_no_os_release"
250
+ mock_init
251
+ mock_command "uname" "Linux" 0
252
+ mock_file "regular linux kernel" "/proc/version"
253
+ # Don't create /etc/os-release file
254
+ mock_env "OS" ""
255
+ mock_env "ARCH" ""
256
+ mock_env "target_os" ""
257
+ detect_os
258
+ assert_equals "linux" "$target_os" "should detect linux without os-release"
259
+ mock_cleanup
260
+
261
+ # Test empty ID field in os-release
262
+ test_start "detect_os_empty_id_in_os_release"
263
+ mock_init
264
+ mock_command "uname" "Linux" 0
265
+ mock_file "regular linux kernel" "/proc/version"
266
+ mock_file 'NAME="Some Distribution"' "/etc/os-release"
267
+ mock_env "OS" ""
268
+ mock_env "ARCH" ""
269
+ mock_env "target_os" ""
270
+ detect_os
271
+ assert_equals "linux" "$target_os" "should default to linux with empty ID"
272
+ mock_cleanup
273
+
274
+ # Test unknown operating system (not Darwin or Linux)
275
+ test_start "detect_os_unknown_os"
276
+ mock_init
277
+ mock_command "uname" "FreeBSD" 0
278
+ mock_env "OS" ""
279
+ mock_env "ARCH" ""
280
+ mock_env "target_os" ""
281
+ detect_os
282
+ assert_equals "unknown" "$target_os" "should detect unknown OS"
283
+ assert_equals "FreeBSD" "$OS" "should set OS to FreeBSD"
284
+ mock_cleanup
285
+
286
+ # Test architecture detection
287
+ test_start "detect_os_sets_arch"
288
+ mock_init
289
+ mock_command "uname" -e 'if [ "$1" = "-s" ]; then echo "Linux"; elif [ "$1" = "-m" ]; then echo "x86_64"; fi' 0
290
+ mock_file "regular linux kernel" "/proc/version"
291
+ mock_file 'ID=ubuntu' "/etc/os-release"
292
+ mock_env "OS" ""
293
+ mock_env "ARCH" ""
294
+ mock_env "target_os" ""
295
+ detect_os
296
+ assert_equals "x86_64" "$ARCH" "should set ARCH variable"
297
+ mock_cleanup
298
+
299
+ # Test is_macos function when target_os is macos
300
+ test_start "is_macos_true"
301
+ target_os="macos"
302
+ assert_true "is_macos" "should return true when target_os is macos"
303
+
304
+ # Test is_macos function when target_os is not macos
305
+ test_start "is_macos_false"
306
+ target_os="linux"
307
+ assert_false "is_macos" "should return false when target_os is not macos"
308
+
309
+ # Test is_linux function when OS is Linux
310
+ test_start "is_linux_true"
311
+ OS="Linux"
312
+ assert_true "is_linux" "should return true when OS is Linux"
313
+
314
+ # Test is_linux function when OS is not Linux
315
+ test_start "is_linux_false"
316
+ OS="Darwin"
317
+ assert_false "is_linux" "should return false when OS is not Linux"
318
+
319
+ # Test is_wsl function when target_os is wsl2
320
+ test_start "is_wsl_true"
321
+ target_os="wsl2"
322
+ assert_true "is_wsl" "should return true when target_os is wsl2"
323
+
324
+ # Test is_wsl function when target_os is not wsl2
325
+ test_start "is_wsl_false"
326
+ target_os="linux"
327
+ assert_false "is_wsl" "should return false when target_os is not wsl2"
328
+
329
+ # Test is_debian function when target_os is debian
330
+ test_start "is_debian_true_debian"
331
+ target_os="debian"
332
+ assert_true "is_debian" "should return true when target_os is debian"
333
+
334
+ # Test is_debian function when target_os is wsl2 (also considered debian)
335
+ test_start "is_debian_true_wsl2"
336
+ target_os="wsl2"
337
+ assert_true "is_debian" "should return true when target_os is wsl2"
338
+
339
+ # Test is_debian function when target_os is not debian or wsl2
340
+ test_start "is_debian_false"
341
+ target_os="fedora"
342
+ assert_false "is_debian" "should return false when target_os is fedora"
343
+
344
+ # Test is_fedora function when target_os is fedora
345
+ test_start "is_fedora_true"
346
+ target_os="fedora"
347
+ assert_true "is_fedora" "should return true when target_os is fedora"
348
+
349
+ # Test is_fedora function when target_os is not fedora
350
+ test_start "is_fedora_false"
351
+ target_os="debian"
352
+ assert_false "is_fedora" "should return false when target_os is not fedora"
353
+
354
+ # Test is_arch function when target_os is arch
355
+ test_start "is_arch_true"
356
+ target_os="arch"
357
+ assert_true "is_arch" "should return true when target_os is arch"
358
+
359
+ # Test is_arch function when target_os is not arch
360
+ test_start "is_arch_false"
361
+ target_os="debian"
362
+ assert_false "is_arch" "should return false when target_os is not arch"
363
+
364
+ # Test print_os_info function
365
+ test_start "print_os_info_output"
366
+ OS="Linux"
367
+ ARCH="x86_64"
368
+ target_os="debian"
369
+ output=$(print_os_info)
370
+ assert_output_contains "OS: Linux" "echo '$output'"
371
+ assert_output_contains "Arch: x86_64" "echo '$output'"
372
+ assert_output_contains "Target: debian" "echo '$output'"
373
+
374
+ # Test variable export
375
+ test_start "detect_os_exports_variables"
376
+ mock_init
377
+ mock_command "uname" "Linux" 0
378
+ mock_file "regular linux kernel" "/proc/version"
379
+ mock_file 'ID=ubuntu' "/etc/os-release"
380
+ unset OS ARCH target_os
381
+ detect_os
382
+ # These should be set and exported after detect_os
383
+ assert_not_empty "$OS" "OS should be set"
384
+ assert_not_empty "$ARCH" "ARCH should be set"
385
+ assert_not_empty "$target_os" "target_os should be set"
386
+ mock_cleanup
387
+
388
+ echo "OS detection comprehensive coverage tests completed."