@fredlackey/devutils 0.0.18 → 0.1.0

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 (447) hide show
  1. package/README.md +214 -141
  2. package/package.json +8 -83
  3. package/src/api/loader.js +229 -0
  4. package/src/api/registry.json +62 -0
  5. package/src/cli.js +293 -60
  6. package/src/commands/ai/index.js +16 -0
  7. package/src/commands/ai/launch.js +112 -0
  8. package/src/commands/ai/list.js +54 -0
  9. package/src/commands/ai/resume.js +70 -0
  10. package/src/commands/ai/sessions.js +121 -0
  11. package/src/commands/ai/set.js +131 -0
  12. package/src/commands/ai/show.js +74 -0
  13. package/src/commands/ai/tools.js +46 -0
  14. package/src/commands/alias/add.js +93 -0
  15. package/src/commands/alias/helpers.js +107 -0
  16. package/src/commands/alias/index.js +14 -0
  17. package/src/commands/alias/list.js +55 -0
  18. package/src/commands/alias/remove.js +62 -0
  19. package/src/commands/alias/sync.js +109 -0
  20. package/src/commands/api/disable.js +73 -0
  21. package/src/commands/api/enable.js +148 -0
  22. package/src/commands/api/index.js +15 -0
  23. package/src/commands/api/list.js +66 -0
  24. package/src/commands/api/update.js +87 -0
  25. package/src/commands/auth/index.js +15 -0
  26. package/src/commands/auth/list.js +49 -0
  27. package/src/commands/auth/login.js +384 -0
  28. package/src/commands/auth/logout.js +111 -0
  29. package/src/commands/auth/refresh.js +184 -0
  30. package/src/commands/auth/services.js +169 -0
  31. package/src/commands/auth/status.js +104 -0
  32. package/src/commands/config/export.js +224 -0
  33. package/src/commands/config/get.js +52 -0
  34. package/src/commands/config/import.js +308 -0
  35. package/src/commands/config/index.js +17 -0
  36. package/src/commands/config/init.js +143 -0
  37. package/src/commands/config/reset.js +57 -0
  38. package/src/commands/config/set.js +93 -0
  39. package/src/commands/config/show.js +35 -0
  40. package/src/commands/help.js +338 -0
  41. package/src/commands/identity/add.js +133 -0
  42. package/src/commands/identity/index.js +17 -0
  43. package/src/commands/identity/link.js +76 -0
  44. package/src/commands/identity/list.js +48 -0
  45. package/src/commands/identity/remove.js +72 -0
  46. package/src/commands/identity/show.js +65 -0
  47. package/src/commands/identity/sync.js +172 -0
  48. package/src/commands/identity/unlink.js +57 -0
  49. package/src/commands/ignore/add.js +165 -0
  50. package/src/commands/ignore/index.js +14 -0
  51. package/src/commands/ignore/list.js +89 -0
  52. package/src/commands/ignore/markers.js +43 -0
  53. package/src/commands/ignore/remove.js +164 -0
  54. package/src/commands/ignore/show.js +169 -0
  55. package/src/commands/machine/detect.js +122 -0
  56. package/src/commands/machine/index.js +14 -0
  57. package/src/commands/machine/list.js +74 -0
  58. package/src/commands/machine/set.js +106 -0
  59. package/src/commands/machine/show.js +35 -0
  60. package/src/commands/schema.js +152 -0
  61. package/src/commands/search/collections.js +134 -0
  62. package/src/commands/search/get.js +71 -0
  63. package/src/commands/search/index-cmd.js +54 -0
  64. package/src/commands/search/index.js +21 -0
  65. package/src/commands/search/keyword.js +60 -0
  66. package/src/commands/search/qmd.js +70 -0
  67. package/src/commands/search/query.js +64 -0
  68. package/src/commands/search/semantic.js +62 -0
  69. package/src/commands/search/status.js +46 -0
  70. package/src/commands/status.js +224 -171
  71. package/src/commands/tools/check.js +79 -0
  72. package/src/commands/tools/index.js +14 -0
  73. package/src/commands/tools/install.js +110 -0
  74. package/src/commands/tools/list.js +91 -0
  75. package/src/commands/tools/search.js +60 -0
  76. package/src/commands/update.js +83 -112
  77. package/src/commands/util/add.js +151 -0
  78. package/src/commands/util/index.js +15 -0
  79. package/src/commands/util/list.js +97 -0
  80. package/src/commands/util/remove.js +76 -0
  81. package/src/commands/util/run.js +79 -0
  82. package/src/commands/util/show.js +67 -0
  83. package/src/commands/version.js +21 -88
  84. package/src/installers/_template.js +104 -0
  85. package/src/installers/git.js +150 -0
  86. package/src/installers/homebrew.js +190 -0
  87. package/src/installers/node.js +223 -0
  88. package/src/installers/registry.json +29 -0
  89. package/src/lib/config.js +125 -0
  90. package/src/lib/detect.js +74 -0
  91. package/src/lib/errors.js +114 -0
  92. package/src/lib/github.js +315 -0
  93. package/src/lib/installer.js +225 -0
  94. package/src/lib/output.js +239 -0
  95. package/src/lib/platform.js +112 -0
  96. package/src/lib/platforms/amazon-linux.js +41 -0
  97. package/src/lib/platforms/gitbash.js +46 -0
  98. package/src/lib/platforms/macos.js +45 -0
  99. package/src/lib/platforms/raspbian.js +41 -0
  100. package/src/lib/platforms/ubuntu.js +39 -0
  101. package/src/lib/platforms/windows.js +45 -0
  102. package/src/lib/prompt.js +161 -0
  103. package/src/lib/schema.js +211 -0
  104. package/src/lib/shell.js +75 -0
  105. package/src/patterns/gitignore/claude-code.txt +25 -0
  106. package/src/patterns/gitignore/docker.txt +15 -0
  107. package/src/patterns/gitignore/go.txt +24 -0
  108. package/src/patterns/gitignore/java.txt +38 -0
  109. package/src/patterns/gitignore/jetbrains.txt +26 -0
  110. package/src/patterns/gitignore/linux.txt +18 -0
  111. package/src/patterns/gitignore/macos.txt +27 -0
  112. package/src/patterns/gitignore/node.txt +51 -0
  113. package/src/patterns/gitignore/python.txt +55 -0
  114. package/src/patterns/gitignore/rust.txt +14 -0
  115. package/src/patterns/gitignore/terraform.txt +30 -0
  116. package/src/patterns/gitignore/vscode.txt +15 -0
  117. package/src/patterns/gitignore/windows.txt +25 -0
  118. package/src/utils/clone/index.js +165 -0
  119. package/src/utils/git-push/index.js +230 -0
  120. package/src/utils/git-status/index.js +116 -0
  121. package/src/utils/git-status/unix.sh +75 -0
  122. package/src/utils/registry.json +41 -0
  123. package/bin/dev.js +0 -16
  124. package/files/README.md +0 -0
  125. package/files/claude/.claude/commands/setup-context.md +0 -3
  126. package/files/monorepos/_archive/README.md +0 -36
  127. package/files/monorepos/_legacy/README.md +0 -36
  128. package/files/monorepos/ai-docs/README.md +0 -33
  129. package/files/monorepos/apps/README.md +0 -24
  130. package/files/monorepos/docs/README.md +0 -40
  131. package/files/monorepos/packages/README.md +0 -25
  132. package/files/monorepos/research/README.md +0 -29
  133. package/files/monorepos/scripts/README.md +0 -24
  134. package/src/commands/README.md +0 -41
  135. package/src/commands/configure.js +0 -199
  136. package/src/commands/identity.js +0 -1630
  137. package/src/commands/ignore.js +0 -247
  138. package/src/commands/install.js +0 -526
  139. package/src/commands/setup.js +0 -246
  140. package/src/completion.js +0 -284
  141. package/src/constants.js +0 -45
  142. package/src/ignore/claude-code.txt +0 -10
  143. package/src/ignore/docker.txt +0 -18
  144. package/src/ignore/linux.txt +0 -23
  145. package/src/ignore/macos.txt +0 -36
  146. package/src/ignore/node.txt +0 -55
  147. package/src/ignore/terraform.txt +0 -37
  148. package/src/ignore/vscode.txt +0 -18
  149. package/src/ignore/windows.txt +0 -35
  150. package/src/index.js +0 -0
  151. package/src/installs/README.md +0 -399
  152. package/src/installs/adobe-creative-cloud.js +0 -546
  153. package/src/installs/adobe-creative-cloud.md +0 -605
  154. package/src/installs/appcleaner.js +0 -321
  155. package/src/installs/appcleaner.md +0 -699
  156. package/src/installs/apt-transport-https.js +0 -390
  157. package/src/installs/apt-transport-https.md +0 -678
  158. package/src/installs/atomicparsley.js +0 -642
  159. package/src/installs/atomicparsley.md +0 -795
  160. package/src/installs/aws-cli.js +0 -797
  161. package/src/installs/aws-cli.md +0 -727
  162. package/src/installs/balena-etcher.js +0 -710
  163. package/src/installs/balena-etcher.md +0 -761
  164. package/src/installs/bambu-studio.js +0 -1143
  165. package/src/installs/bambu-studio.md +0 -780
  166. package/src/installs/bash-completion.js +0 -575
  167. package/src/installs/bash-completion.md +0 -833
  168. package/src/installs/bash.js +0 -417
  169. package/src/installs/bash.md +0 -993
  170. package/src/installs/beyond-compare.js +0 -603
  171. package/src/installs/beyond-compare.md +0 -813
  172. package/src/installs/brave-browser.js +0 -968
  173. package/src/installs/brave-browser.md +0 -650
  174. package/src/installs/build-essential.js +0 -529
  175. package/src/installs/build-essential.md +0 -977
  176. package/src/installs/ca-certificates.js +0 -618
  177. package/src/installs/ca-certificates.md +0 -937
  178. package/src/installs/caffeine.js +0 -508
  179. package/src/installs/caffeine.md +0 -839
  180. package/src/installs/camtasia.js +0 -596
  181. package/src/installs/camtasia.md +0 -762
  182. package/src/installs/chatgpt.js +0 -476
  183. package/src/installs/chatgpt.md +0 -814
  184. package/src/installs/chocolatey.js +0 -456
  185. package/src/installs/chocolatey.md +0 -661
  186. package/src/installs/chrome-canary.js +0 -419
  187. package/src/installs/chrome-canary.md +0 -641
  188. package/src/installs/chromium.js +0 -667
  189. package/src/installs/chromium.md +0 -838
  190. package/src/installs/claude-code.js +0 -576
  191. package/src/installs/claude-code.md +0 -1173
  192. package/src/installs/cloudflare-warp.js +0 -900
  193. package/src/installs/cloudflare-warp.md +0 -1047
  194. package/src/installs/comet-browser.js +0 -588
  195. package/src/installs/comet-browser.md +0 -731
  196. package/src/installs/curl.js +0 -379
  197. package/src/installs/curl.md +0 -714
  198. package/src/installs/cursor.js +0 -579
  199. package/src/installs/cursor.md +0 -970
  200. package/src/installs/dbeaver.js +0 -924
  201. package/src/installs/dbeaver.md +0 -939
  202. package/src/installs/dbschema.js +0 -692
  203. package/src/installs/dbschema.md +0 -925
  204. package/src/installs/dependencies.md +0 -453
  205. package/src/installs/development-tools.js +0 -600
  206. package/src/installs/development-tools.md +0 -977
  207. package/src/installs/docker.js +0 -1029
  208. package/src/installs/docker.md +0 -1109
  209. package/src/installs/drawio.js +0 -1019
  210. package/src/installs/drawio.md +0 -795
  211. package/src/installs/elmedia-player.js +0 -347
  212. package/src/installs/elmedia-player.md +0 -556
  213. package/src/installs/ffmpeg.js +0 -889
  214. package/src/installs/ffmpeg.md +0 -852
  215. package/src/installs/file.js +0 -464
  216. package/src/installs/file.md +0 -987
  217. package/src/installs/gemini-cli.js +0 -811
  218. package/src/installs/gemini-cli.md +0 -1153
  219. package/src/installs/git.js +0 -400
  220. package/src/installs/git.md +0 -907
  221. package/src/installs/gitego.js +0 -949
  222. package/src/installs/gitego.md +0 -1172
  223. package/src/installs/go.js +0 -931
  224. package/src/installs/go.md +0 -958
  225. package/src/installs/google-antigravity.js +0 -913
  226. package/src/installs/google-antigravity.md +0 -1075
  227. package/src/installs/google-chrome.js +0 -833
  228. package/src/installs/google-chrome.md +0 -862
  229. package/src/installs/gpg.js +0 -480
  230. package/src/installs/gpg.md +0 -1056
  231. package/src/installs/homebrew.js +0 -1028
  232. package/src/installs/homebrew.md +0 -988
  233. package/src/installs/imageoptim.js +0 -968
  234. package/src/installs/imageoptim.md +0 -1119
  235. package/src/installs/installers.json +0 -4032
  236. package/src/installs/installers.json.tmp +0 -3953
  237. package/src/installs/jq.js +0 -400
  238. package/src/installs/jq.md +0 -809
  239. package/src/installs/keyboard-maestro.js +0 -719
  240. package/src/installs/keyboard-maestro.md +0 -825
  241. package/src/installs/kiro.js +0 -864
  242. package/src/installs/kiro.md +0 -1015
  243. package/src/installs/latex.js +0 -789
  244. package/src/installs/latex.md +0 -1095
  245. package/src/installs/lftp.js +0 -356
  246. package/src/installs/lftp.md +0 -907
  247. package/src/installs/lsb-release.js +0 -346
  248. package/src/installs/lsb-release.md +0 -814
  249. package/src/installs/messenger.js +0 -847
  250. package/src/installs/messenger.md +0 -900
  251. package/src/installs/microsoft-office.js +0 -568
  252. package/src/installs/microsoft-office.md +0 -760
  253. package/src/installs/microsoft-teams.js +0 -801
  254. package/src/installs/microsoft-teams.md +0 -886
  255. package/src/installs/moom.js +0 -326
  256. package/src/installs/moom.md +0 -570
  257. package/src/installs/node.js +0 -904
  258. package/src/installs/node.md +0 -1153
  259. package/src/installs/nordpass.js +0 -716
  260. package/src/installs/nordpass.md +0 -921
  261. package/src/installs/nordvpn.js +0 -892
  262. package/src/installs/nordvpn.md +0 -1052
  263. package/src/installs/nvm.js +0 -995
  264. package/src/installs/nvm.md +0 -1057
  265. package/src/installs/ohmyzsh.js +0 -529
  266. package/src/installs/ohmyzsh.md +0 -1094
  267. package/src/installs/openssh.js +0 -804
  268. package/src/installs/openssh.md +0 -1056
  269. package/src/installs/pandoc.js +0 -662
  270. package/src/installs/pandoc.md +0 -1036
  271. package/src/installs/parallels-desktop.js +0 -431
  272. package/src/installs/parallels-desktop.md +0 -446
  273. package/src/installs/pinentry.js +0 -510
  274. package/src/installs/pinentry.md +0 -1142
  275. package/src/installs/pngyu.js +0 -869
  276. package/src/installs/pngyu.md +0 -896
  277. package/src/installs/postman.js +0 -799
  278. package/src/installs/postman.md +0 -940
  279. package/src/installs/procps.js +0 -425
  280. package/src/installs/procps.md +0 -851
  281. package/src/installs/safari-tech-preview.js +0 -374
  282. package/src/installs/safari-tech-preview.md +0 -533
  283. package/src/installs/sfnt2woff.js +0 -658
  284. package/src/installs/sfnt2woff.md +0 -795
  285. package/src/installs/shellcheck.js +0 -481
  286. package/src/installs/shellcheck.md +0 -1005
  287. package/src/installs/slack.js +0 -741
  288. package/src/installs/slack.md +0 -865
  289. package/src/installs/snagit.js +0 -585
  290. package/src/installs/snagit.md +0 -844
  291. package/src/installs/software-properties-common.js +0 -372
  292. package/src/installs/software-properties-common.md +0 -805
  293. package/src/installs/spotify.js +0 -877
  294. package/src/installs/spotify.md +0 -901
  295. package/src/installs/studio-3t.js +0 -823
  296. package/src/installs/studio-3t.md +0 -918
  297. package/src/installs/sublime-text.js +0 -804
  298. package/src/installs/sublime-text.md +0 -914
  299. package/src/installs/superwhisper.js +0 -706
  300. package/src/installs/superwhisper.md +0 -630
  301. package/src/installs/tailscale.js +0 -745
  302. package/src/installs/tailscale.md +0 -1100
  303. package/src/installs/tar.js +0 -389
  304. package/src/installs/tar.md +0 -946
  305. package/src/installs/termius.js +0 -798
  306. package/src/installs/termius.md +0 -844
  307. package/src/installs/terraform.js +0 -779
  308. package/src/installs/terraform.md +0 -899
  309. package/src/installs/tfenv.js +0 -778
  310. package/src/installs/tfenv.md +0 -1091
  311. package/src/installs/tidal.js +0 -771
  312. package/src/installs/tidal.md +0 -864
  313. package/src/installs/tmux.js +0 -346
  314. package/src/installs/tmux.md +0 -1030
  315. package/src/installs/tree.js +0 -411
  316. package/src/installs/tree.md +0 -833
  317. package/src/installs/unzip.js +0 -460
  318. package/src/installs/unzip.md +0 -879
  319. package/src/installs/vim.js +0 -421
  320. package/src/installs/vim.md +0 -1040
  321. package/src/installs/vlc.js +0 -821
  322. package/src/installs/vlc.md +0 -927
  323. package/src/installs/vscode.js +0 -843
  324. package/src/installs/vscode.md +0 -1002
  325. package/src/installs/wget.js +0 -420
  326. package/src/installs/wget.md +0 -791
  327. package/src/installs/whatsapp.js +0 -729
  328. package/src/installs/whatsapp.md +0 -854
  329. package/src/installs/winpty.js +0 -352
  330. package/src/installs/winpty.md +0 -620
  331. package/src/installs/woff2.js +0 -553
  332. package/src/installs/woff2.md +0 -977
  333. package/src/installs/wsl.js +0 -572
  334. package/src/installs/wsl.md +0 -699
  335. package/src/installs/xcode-clt.js +0 -520
  336. package/src/installs/xcode-clt.md +0 -351
  337. package/src/installs/xcode.js +0 -560
  338. package/src/installs/xcode.md +0 -573
  339. package/src/installs/yarn.js +0 -824
  340. package/src/installs/yarn.md +0 -1074
  341. package/src/installs/yq.js +0 -654
  342. package/src/installs/yq.md +0 -944
  343. package/src/installs/yt-dlp.js +0 -701
  344. package/src/installs/yt-dlp.md +0 -946
  345. package/src/installs/yum-utils.js +0 -297
  346. package/src/installs/yum-utils.md +0 -648
  347. package/src/installs/zoom.js +0 -759
  348. package/src/installs/zoom.md +0 -884
  349. package/src/installs/zsh.js +0 -455
  350. package/src/installs/zsh.md +0 -1008
  351. package/src/scripts/README.md +0 -617
  352. package/src/scripts/STATUS.md +0 -208
  353. package/src/scripts/afk.js +0 -411
  354. package/src/scripts/backup-all.js +0 -746
  355. package/src/scripts/backup-source.js +0 -727
  356. package/src/scripts/brewd.js +0 -389
  357. package/src/scripts/brewi.js +0 -520
  358. package/src/scripts/brewr.js +0 -527
  359. package/src/scripts/brews.js +0 -477
  360. package/src/scripts/brewu.js +0 -504
  361. package/src/scripts/c.js +0 -201
  362. package/src/scripts/ccurl.js +0 -341
  363. package/src/scripts/certbot-crontab-init.js +0 -504
  364. package/src/scripts/certbot-init.js +0 -657
  365. package/src/scripts/ch.js +0 -355
  366. package/src/scripts/claude-danger.js +0 -268
  367. package/src/scripts/clean-dev.js +0 -435
  368. package/src/scripts/clear-dns-cache.js +0 -541
  369. package/src/scripts/clone.js +0 -435
  370. package/src/scripts/code-all.js +0 -437
  371. package/src/scripts/count-files.js +0 -211
  372. package/src/scripts/count-folders.js +0 -211
  373. package/src/scripts/count.js +0 -264
  374. package/src/scripts/d.js +0 -219
  375. package/src/scripts/datauri.js +0 -389
  376. package/src/scripts/delete-files.js +0 -380
  377. package/src/scripts/docker-clean.js +0 -426
  378. package/src/scripts/dp.js +0 -442
  379. package/src/scripts/e.js +0 -390
  380. package/src/scripts/empty-trash.js +0 -513
  381. package/src/scripts/evm.js +0 -444
  382. package/src/scripts/fetch-github-repos.js +0 -456
  383. package/src/scripts/get-channel.js +0 -345
  384. package/src/scripts/get-course.js +0 -399
  385. package/src/scripts/get-dependencies.js +0 -306
  386. package/src/scripts/get-folder.js +0 -799
  387. package/src/scripts/get-tunes.js +0 -426
  388. package/src/scripts/get-video.js +0 -367
  389. package/src/scripts/git-backup.js +0 -577
  390. package/src/scripts/git-clone.js +0 -493
  391. package/src/scripts/git-pup.js +0 -319
  392. package/src/scripts/git-push.js +0 -396
  393. package/src/scripts/h.js +0 -622
  394. package/src/scripts/hide-desktop-icons.js +0 -499
  395. package/src/scripts/hide-hidden-files.js +0 -538
  396. package/src/scripts/install-dependencies-from.js +0 -456
  397. package/src/scripts/ips.js +0 -663
  398. package/src/scripts/iso.js +0 -370
  399. package/src/scripts/killni.js +0 -577
  400. package/src/scripts/ll.js +0 -467
  401. package/src/scripts/local-ip.js +0 -325
  402. package/src/scripts/m.js +0 -524
  403. package/src/scripts/map.js +0 -309
  404. package/src/scripts/mkd.js +0 -351
  405. package/src/scripts/ncu-update-all.js +0 -457
  406. package/src/scripts/nginx-init.js +0 -718
  407. package/src/scripts/npmi.js +0 -382
  408. package/src/scripts/o.js +0 -511
  409. package/src/scripts/org-by-date.js +0 -338
  410. package/src/scripts/p.js +0 -224
  411. package/src/scripts/packages.js +0 -330
  412. package/src/scripts/path.js +0 -225
  413. package/src/scripts/ports.js +0 -597
  414. package/src/scripts/q.js +0 -305
  415. package/src/scripts/refresh-files.js +0 -394
  416. package/src/scripts/remove-smaller-files.js +0 -516
  417. package/src/scripts/rename-files-with-date.js +0 -533
  418. package/src/scripts/resize-image.js +0 -539
  419. package/src/scripts/rm-safe.js +0 -669
  420. package/src/scripts/s.js +0 -540
  421. package/src/scripts/set-git-public.js +0 -365
  422. package/src/scripts/show-desktop-icons.js +0 -475
  423. package/src/scripts/show-hidden-files.js +0 -472
  424. package/src/scripts/tpa.js +0 -280
  425. package/src/scripts/tpo.js +0 -280
  426. package/src/scripts/u.js +0 -505
  427. package/src/scripts/vpush.js +0 -437
  428. package/src/scripts/y.js +0 -283
  429. package/src/utils/README.md +0 -95
  430. package/src/utils/common/apps.js +0 -143
  431. package/src/utils/common/display.js +0 -157
  432. package/src/utils/common/network.js +0 -185
  433. package/src/utils/common/os.js +0 -294
  434. package/src/utils/common/package-manager.js +0 -301
  435. package/src/utils/common/privileges.js +0 -138
  436. package/src/utils/common/shell.js +0 -261
  437. package/src/utils/macos/apps.js +0 -228
  438. package/src/utils/macos/brew.js +0 -315
  439. package/src/utils/ubuntu/apt.js +0 -307
  440. package/src/utils/ubuntu/desktop.js +0 -292
  441. package/src/utils/ubuntu/snap.js +0 -344
  442. package/src/utils/ubuntu/systemd.js +0 -286
  443. package/src/utils/windows/choco.js +0 -465
  444. package/src/utils/windows/env.js +0 -246
  445. package/src/utils/windows/registry.js +0 -269
  446. package/src/utils/windows/shell.js +0 -240
  447. package/src/utils/windows/winget.js +0 -489
@@ -1,1008 +0,0 @@
1
- # Installing Zsh
2
-
3
- ## Overview
4
-
5
- Zsh (Z Shell) is a powerful Unix shell and command interpreter designed for interactive use and scripting. It combines features from Bash, ksh, and tcsh while adding many original features. Zsh is renowned for its advanced tab completion, spelling correction, themeable prompts, and extensive plugin ecosystem.
6
-
7
- Key features of Zsh:
8
-
9
- - **Advanced tab completion** - Context-aware completions for commands, arguments, file paths, and more
10
- - **Spelling correction** - Automatic correction of typos in commands and paths
11
- - **Themeable prompts** - Highly customizable prompt with support for git status, colors, and special characters
12
- - **Plugin ecosystem** - Extensive plugins available through frameworks like Oh My Zsh
13
- - **Improved globbing** - Extended pattern matching and recursive globbing (`**/*.js`)
14
- - **Array and associative array support** - First-class support for complex data structures
15
- - **Shared history** - Command history shared across multiple terminal sessions
16
-
17
- Since macOS Catalina (10.15), Zsh has been the default shell on macOS. On Linux systems, Bash typically remains the default, but Zsh is readily available through standard package managers.
18
-
19
- **Platform Support Summary**:
20
-
21
- | Platform | Support Level | Package Manager | Default Shell |
22
- |----------|---------------|-----------------|---------------|
23
- | macOS (Intel/Apple Silicon) | Full | Homebrew / Pre-installed | Yes (Catalina+) |
24
- | Ubuntu/Debian (x86_64) | Full | APT | No (Bash default) |
25
- | Raspberry Pi OS (ARM) | Full | APT | No (Bash default) |
26
- | Amazon Linux / RHEL / Fedora | Full | DNF/YUM | No (Bash default) |
27
- | WSL (Ubuntu on Windows) | Full | APT | No (Bash default) |
28
- | Windows (Native) | Not Supported | N/A | N/A |
29
- | Git Bash | Not Supported | N/A | N/A |
30
-
31
- **Note**: Windows native environments and Git Bash do not support Zsh. Windows users should use WSL (Windows Subsystem for Linux) to run Zsh.
32
-
33
- ## Dependencies
34
-
35
- ### macOS (Homebrew)
36
- - **Required:**
37
- - Homebrew package manager - Install via `dev install homebrew` or directly from https://brew.sh (only needed for updating to a newer Zsh version)
38
- - Administrative privileges (sudo access) - Required for changing the default shell
39
- - **Optional:** None
40
- - **Auto-installed:**
41
- - Zsh is pre-installed on macOS Catalina (10.15) and later as the default shell
42
- - Homebrew handles Zsh dependencies (ncurses, pcre) transparently when installing via brew
43
-
44
- ### Ubuntu/Debian (APT)
45
- - **Required:**
46
- - APT package manager - Pre-installed on Ubuntu/Debian systems
47
- - sudo privileges - Required for package installation and changing the default shell
48
- - Internet connectivity - Required to download packages from APT repositories
49
- - **Optional:** None
50
- - **Auto-installed:**
51
- - Zsh dependencies (libc6, libcap2, libtinfo6, libgdbm6) - APT handles these transparently
52
-
53
- ### Raspberry Pi OS (APT)
54
- - **Required:**
55
- - APT package manager - Pre-installed on Raspberry Pi OS
56
- - sudo privileges - Required for package installation and changing the default shell
57
- - Internet connectivity - Required to download packages from APT repositories
58
- - **Optional:** None
59
- - **Auto-installed:**
60
- - Zsh dependencies - APT handles these for ARM architecture transparently
61
-
62
- ### Amazon Linux / RHEL / Fedora (DNF/YUM)
63
- - **Required:**
64
- - DNF (Amazon Linux 2023, RHEL 8+, Fedora) or YUM (Amazon Linux 2, RHEL 7) package manager - Pre-installed
65
- - sudo privileges - Required for package installation and changing the default shell
66
- - Internet connectivity - Required to download packages from distribution repositories
67
- - **Optional:** None
68
- - **Auto-installed:**
69
- - Zsh dependencies (glibc, ncurses-libs) - DNF/YUM handles these transparently
70
-
71
- ### WSL (Ubuntu)
72
- - **Required:**
73
- - WSL 2 with Ubuntu distribution installed
74
- - APT package manager - Pre-installed within WSL Ubuntu
75
- - sudo privileges within WSL - Required for package installation
76
- - **Optional:** None
77
- - **Auto-installed:**
78
- - Zsh dependencies - APT handles these transparently
79
-
80
- ### Windows (Native) / Git Bash
81
- - **Not Supported** - Zsh does not run on native Windows or Git Bash
82
- - **Alternative:** Use WSL (Windows Subsystem for Linux) with Ubuntu to run Zsh
83
-
84
- ## Prerequisites
85
-
86
- Before installing Zsh on any platform, ensure:
87
-
88
- 1. **Administrative/sudo privileges** - Required for package installation and shell registration
89
- 2. **Internet connectivity** - Required to download packages from repositories
90
- 3. **Existing shell access** - You need a working terminal to run installation commands
91
-
92
- ## Platform-Specific Installation
93
-
94
- ### macOS (Homebrew)
95
-
96
- #### Prerequisites
97
-
98
- - macOS 10.15 (Catalina) or later
99
- - Terminal access via Terminal.app, iTerm2, or another terminal emulator
100
-
101
- macOS Catalina and later include Zsh as the default shell. Newly created user accounts automatically use Zsh. Existing user accounts upgraded from older macOS versions may still use Bash and need to be switched manually.
102
-
103
- **Zsh Versions by macOS Release**:
104
- - macOS Sonoma (14.x): Zsh 5.9
105
- - macOS Ventura (13.x): Zsh 5.8.1 - 5.9
106
- - macOS Monterey (12.x): Zsh 5.8
107
- - macOS Big Sur (11.x): Zsh 5.8
108
- - macOS Catalina (10.15): Zsh 5.7.1
109
-
110
- #### Installation Steps
111
-
112
- **Step 1: Check if Zsh is already installed and its version**
113
-
114
- ```bash
115
- zsh --version
116
- ```
117
-
118
- Expected output (version numbers may vary):
119
-
120
- ```
121
- zsh 5.9 (x86_64-apple-darwin23.0)
122
- ```
123
-
124
- If Zsh is already installed and you are satisfied with the version, skip to Step 3 to verify or change your default shell.
125
-
126
- **Step 2: Install or update Zsh via Homebrew (optional)**
127
-
128
- To install the latest Zsh version from Homebrew (which may be newer than the system version):
129
-
130
- ```bash
131
- brew install --quiet zsh
132
- ```
133
-
134
- The `--quiet` flag suppresses non-essential output, making the command suitable for automation scripts.
135
-
136
- After installation, register the Homebrew Zsh as an allowed shell:
137
-
138
- ```bash
139
- # Add Homebrew Zsh to the list of allowed shells
140
- BREW_ZSH="$(brew --prefix)/bin/zsh"
141
- echo "$BREW_ZSH" | sudo tee -a /etc/shells >/dev/null
142
- ```
143
-
144
- **Note**: On Apple Silicon Macs (M1/M2/M3/M4), the path is `/opt/homebrew/bin/zsh`. On Intel Macs, the path is `/usr/local/bin/zsh`. The command above automatically detects the correct path.
145
-
146
- **Step 3: Set Zsh as your default shell (if not already)**
147
-
148
- Check your current default shell:
149
-
150
- ```bash
151
- echo "$SHELL"
152
- ```
153
-
154
- If the output is not `/bin/zsh` (or the Homebrew path), set Zsh as your default:
155
-
156
- ```bash
157
- # For system Zsh (recommended for most users)
158
- sudo chsh -s /bin/zsh "$USER"
159
-
160
- # Or for Homebrew Zsh (if you installed it in Step 2)
161
- sudo chsh -s "$(brew --prefix)/bin/zsh" "$USER"
162
- ```
163
-
164
- **Step 4: Suppress the Bash deprecation warning (for users switching from Bash)**
165
-
166
- If you occasionally use Bash and want to suppress the deprecation warning, add this line to your `~/.bash_profile`:
167
-
168
- ```bash
169
- echo 'export BASH_SILENCE_DEPRECATION_WARNING=1' >> ~/.bash_profile
170
- ```
171
-
172
- #### Verification
173
-
174
- Confirm Zsh is installed and configured correctly:
175
-
176
- ```bash
177
- # Check the installed version
178
- zsh --version
179
-
180
- # Verify the default shell
181
- echo "$SHELL"
182
-
183
- # Check if Zsh is in the allowed shells list
184
- grep zsh /etc/shells
185
- ```
186
-
187
- Expected output for the default shell (on Apple Silicon):
188
-
189
- ```
190
- /bin/zsh
191
- ```
192
-
193
- Or if using Homebrew Zsh:
194
-
195
- ```
196
- /opt/homebrew/bin/zsh
197
- ```
198
-
199
- #### Troubleshooting
200
-
201
- **Problem**: `chsh: /opt/homebrew/bin/zsh: non-standard shell`
202
-
203
- **Solution**: The Homebrew Zsh was not added to `/etc/shells`. Add it manually:
204
-
205
- ```bash
206
- echo "$(brew --prefix)/bin/zsh" | sudo tee -a /etc/shells >/dev/null
207
- ```
208
-
209
- **Problem**: Terminal still uses Bash after changing default shell
210
-
211
- **Solution**: Close all terminal windows and open a new one. The shell change only takes effect in new sessions. You may also need to log out and log back in.
212
-
213
- **Problem**: Homebrew Zsh not found after installation
214
-
215
- **Solution**: Homebrew may not be in your PATH. Add it by running:
216
-
217
- ```bash
218
- # For Apple Silicon Macs
219
- eval "$(/opt/homebrew/bin/brew shellenv)"
220
-
221
- # For Intel Macs
222
- eval "$(/usr/local/bin/brew shellenv)"
223
- ```
224
-
225
- **Problem**: System shows "The default interactive shell is now zsh" message
226
-
227
- **Solution**: This informational message appears for existing Bash users. To suppress it, either switch to Zsh as your default shell or add `export BASH_SILENCE_DEPRECATION_WARNING=1` to your `~/.bash_profile`.
228
-
229
- ---
230
-
231
- ### Ubuntu/Debian (APT)
232
-
233
- #### Prerequisites
234
-
235
- - Ubuntu 18.04 or later, or Debian 10 (Buster) or later (64-bit)
236
- - sudo privileges
237
- - Terminal access
238
-
239
- **Zsh Versions by Distribution**:
240
- - Ubuntu 24.04 LTS: Zsh 5.9
241
- - Ubuntu 22.04 LTS: Zsh 5.8.1
242
- - Ubuntu 20.04 LTS: Zsh 5.8
243
- - Debian 12 (Bookworm): Zsh 5.9
244
- - Debian 11 (Bullseye): Zsh 5.8
245
-
246
- #### Installation Steps
247
-
248
- **Step 1: Update package lists and install Zsh**
249
-
250
- ```bash
251
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
252
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh
253
- ```
254
-
255
- The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully non-interactive installation suitable for automation scripts.
256
-
257
- **Step 2: Verify Zsh installation**
258
-
259
- ```bash
260
- zsh --version
261
- ```
262
-
263
- Expected output (version numbers may vary):
264
-
265
- ```
266
- zsh 5.9 (x86_64-debian-linux-gnu)
267
- ```
268
-
269
- **Step 3: Set Zsh as your default shell**
270
-
271
- ```bash
272
- sudo chsh -s $(which zsh) "$USER"
273
- ```
274
-
275
- **Note**: The `chsh` command may prompt for your password. For fully non-interactive automation in scripts (where you have sudo access without a password), you can modify `/etc/passwd` directly:
276
-
277
- ```bash
278
- sudo usermod --shell $(which zsh) "$USER"
279
- ```
280
-
281
- **Step 4: Apply the change**
282
-
283
- Log out and log back in, or start a new terminal session. Alternatively, start Zsh manually:
284
-
285
- ```bash
286
- exec zsh
287
- ```
288
-
289
- #### Verification
290
-
291
- Confirm Zsh is installed and configured:
292
-
293
- ```bash
294
- # Check the installed version
295
- zsh --version
296
-
297
- # Verify Zsh is your default shell
298
- echo "$SHELL"
299
-
300
- # Check the shell entry in /etc/passwd
301
- grep "$USER" /etc/passwd | cut -d: -f7
302
- ```
303
-
304
- Expected output for the default shell:
305
-
306
- ```
307
- /usr/bin/zsh
308
- ```
309
-
310
- #### Troubleshooting
311
-
312
- **Problem**: `chsh: PAM: Authentication failure`
313
-
314
- **Solution**: The `chsh` command requires password authentication. Use `usermod` with sudo instead:
315
-
316
- ```bash
317
- sudo usermod --shell $(which zsh) "$USER"
318
- ```
319
-
320
- **Problem**: Zsh not loading configuration on login
321
-
322
- **Solution**: Ensure `~/.zshrc` exists. Create a minimal one if missing:
323
-
324
- ```bash
325
- touch ~/.zshrc
326
- ```
327
-
328
- **Problem**: `E: Unable to locate package zsh`
329
-
330
- **Solution**: Update your package lists:
331
-
332
- ```bash
333
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
334
- ```
335
-
336
- **Problem**: New Zsh session shows configuration wizard on first run
337
-
338
- **Solution**: The Zsh configuration wizard (`zsh-newuser-install`) runs when no `.zshrc` exists. Press `q` to quit and create your own configuration, or press `0` to create an empty `.zshrc` file. For non-interactive setup, create the file before first run:
339
-
340
- ```bash
341
- touch ~/.zshrc
342
- ```
343
-
344
- ---
345
-
346
- ### Raspberry Pi OS (APT)
347
-
348
- #### Prerequisites
349
-
350
- - Raspberry Pi OS (Bookworm, Bullseye, or Buster) - 32-bit or 64-bit
351
- - Raspberry Pi 2 or later (Raspberry Pi 3B+ or later recommended for adequate performance)
352
- - sudo privileges
353
- - Terminal access (via local monitor/keyboard or SSH)
354
-
355
- Raspberry Pi OS is based on Debian, so Zsh installation follows the same APT-based process.
356
-
357
- **Zsh Versions by Raspberry Pi OS Release**:
358
- - Raspberry Pi OS Bookworm: Zsh 5.9
359
- - Raspberry Pi OS Bullseye: Zsh 5.8
360
- - Raspberry Pi OS Buster: Zsh 5.7.1
361
-
362
- #### Installation Steps
363
-
364
- **Step 1: Verify your architecture**
365
-
366
- ```bash
367
- uname -m
368
- ```
369
-
370
- - `aarch64` = 64-bit ARM (Raspberry Pi 3/4/5 with 64-bit OS)
371
- - `armv7l` = 32-bit ARM (Raspberry Pi 2/3/4 with 32-bit OS)
372
- - `armv6l` = 32-bit ARM (Raspberry Pi Zero/1)
373
-
374
- All ARM architectures are supported for Zsh.
375
-
376
- **Step 2: Update package lists and install Zsh**
377
-
378
- ```bash
379
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
380
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh
381
- ```
382
-
383
- **Step 3: Verify Zsh installation**
384
-
385
- ```bash
386
- zsh --version
387
- ```
388
-
389
- Expected output on 64-bit Raspberry Pi OS:
390
-
391
- ```
392
- zsh 5.9 (aarch64-unknown-linux-gnu)
393
- ```
394
-
395
- Or on 32-bit:
396
-
397
- ```
398
- zsh 5.8 (arm-unknown-linux-gnueabihf)
399
- ```
400
-
401
- **Step 4: Set Zsh as your default shell**
402
-
403
- ```bash
404
- sudo usermod --shell $(which zsh) "$USER"
405
- ```
406
-
407
- **Step 5: Apply the change**
408
-
409
- Log out and log back in, or start Zsh manually:
410
-
411
- ```bash
412
- exec zsh
413
- ```
414
-
415
- #### Verification
416
-
417
- Confirm Zsh is installed and configured:
418
-
419
- ```bash
420
- # Check the installed version
421
- zsh --version
422
-
423
- # Verify Zsh is your default shell
424
- echo "$SHELL"
425
- ```
426
-
427
- Expected output:
428
-
429
- ```
430
- /usr/bin/zsh
431
- ```
432
-
433
- #### Troubleshooting
434
-
435
- **Problem**: Installation is very slow
436
-
437
- **Solution**: Raspberry Pi SD cards can be slow. Use a high-quality SD card (Class 10 or A1/A2 rated) or boot from USB/SSD for better performance. For headless installations over slow networks, be patient with package downloads.
438
-
439
- **Problem**: Package manager lock file errors
440
-
441
- **Solution**: Another process may be using apt. Wait for it to complete or remove stale lock files:
442
-
443
- ```bash
444
- sudo rm -f /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock*
445
- sudo dpkg --configure -a
446
- ```
447
-
448
- **Problem**: Zsh prompts are slow to render
449
-
450
- **Solution**: Complex Zsh prompts (especially those with git status) can be slow on older Raspberry Pi models. Use a simpler prompt configuration:
451
-
452
- ```bash
453
- # Add to ~/.zshrc for a minimal prompt
454
- PROMPT='%n@%m:%~%# '
455
- ```
456
-
457
- ---
458
-
459
- ### Amazon Linux / RHEL / Fedora (DNF/YUM)
460
-
461
- #### Prerequisites
462
-
463
- - Amazon Linux 2023 (AL2023), Amazon Linux 2 (AL2), RHEL 8+, or Fedora 38+
464
- - sudo privileges
465
- - Terminal access
466
-
467
- **Zsh Versions by Distribution**:
468
- - Amazon Linux 2023: Zsh 5.9
469
- - Amazon Linux 2: Zsh 5.8.1
470
- - RHEL 9: Zsh 5.8
471
- - RHEL 8: Zsh 5.5.1
472
- - Fedora 39/40: Zsh 5.9
473
-
474
- **Package Manager Notes**:
475
- - Amazon Linux 2023, RHEL 8+, and Fedora use DNF
476
- - Amazon Linux 2 and RHEL 7 use YUM
477
- - Amazon Linux 2023 provides a `yum` symlink that points to `dnf` for compatibility
478
-
479
- #### Installation Steps
480
-
481
- **Step 1: Install Zsh**
482
-
483
- For Amazon Linux 2023 / RHEL 8+ / Fedora (DNF):
484
-
485
- ```bash
486
- sudo dnf install -y zsh
487
- ```
488
-
489
- For Amazon Linux 2 / RHEL 7 (YUM):
490
-
491
- ```bash
492
- sudo yum install -y zsh
493
- ```
494
-
495
- The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
496
-
497
- **Step 2: Verify Zsh installation**
498
-
499
- ```bash
500
- zsh --version
501
- ```
502
-
503
- Expected output (version numbers may vary):
504
-
505
- ```
506
- zsh 5.9 (x86_64-redhat-linux-gnu)
507
- ```
508
-
509
- **Step 3: Set Zsh as your default shell**
510
-
511
- For Amazon Linux / RHEL:
512
-
513
- ```bash
514
- sudo usermod --shell $(which zsh) "$USER"
515
- ```
516
-
517
- For Fedora (recent versions may require `lchsh`):
518
-
519
- ```bash
520
- sudo usermod --shell $(which zsh) "$USER"
521
- ```
522
-
523
- **Note**: Some Fedora versions use `lchsh` instead of `chsh`. If `chsh` prompts for a password in automation scripts, use `usermod` with sudo as shown above.
524
-
525
- **Step 4: Apply the change**
526
-
527
- Log out and log back in, or start Zsh manually:
528
-
529
- ```bash
530
- exec zsh
531
- ```
532
-
533
- #### Verification
534
-
535
- Confirm Zsh is installed and configured:
536
-
537
- ```bash
538
- # Check the installed version
539
- zsh --version
540
-
541
- # Verify Zsh is your default shell
542
- echo "$SHELL"
543
-
544
- # Check the shell entry for your user
545
- grep "$USER" /etc/passwd | cut -d: -f7
546
- ```
547
-
548
- Expected output for the default shell:
549
-
550
- ```
551
- /usr/bin/zsh
552
- ```
553
-
554
- #### Troubleshooting
555
-
556
- **Problem**: `No match for argument: zsh` on Amazon Linux 2
557
-
558
- **Solution**: Update the yum cache and retry:
559
-
560
- ```bash
561
- sudo yum makecache
562
- sudo yum install -y zsh
563
- ```
564
-
565
- **Problem**: `chsh: command not found` on some minimal installations
566
-
567
- **Solution**: Install the `util-linux-user` package which provides `chsh`:
568
-
569
- ```bash
570
- # DNF-based systems
571
- sudo dnf install -y util-linux-user
572
-
573
- # YUM-based systems
574
- sudo yum install -y util-linux-user
575
- ```
576
-
577
- Alternatively, use `usermod` which is always available:
578
-
579
- ```bash
580
- sudo usermod --shell $(which zsh) "$USER"
581
- ```
582
-
583
- **Problem**: `lchsh: command not found` on Fedora
584
-
585
- **Solution**: Use `chsh` or `usermod` instead:
586
-
587
- ```bash
588
- sudo usermod --shell $(which zsh) "$USER"
589
- ```
590
-
591
- **Problem**: EC2 default user (ec2-user) cannot change shell
592
-
593
- **Solution**: On EC2 instances, you may need to set a password for the user first, or use `usermod` with sudo:
594
-
595
- ```bash
596
- sudo usermod --shell $(which zsh) ec2-user
597
- ```
598
-
599
- ---
600
-
601
- ### WSL (Ubuntu)
602
-
603
- #### Prerequisites
604
-
605
- - Windows 10 version 2004 or higher, or Windows 11
606
- - WSL 2 enabled with Ubuntu distribution installed
607
- - sudo privileges within the WSL distribution
608
-
609
- WSL provides a full Linux environment where Zsh runs natively. The installation follows the Ubuntu/Debian process.
610
-
611
- #### Installation Steps
612
-
613
- **Step 1: Open WSL Ubuntu terminal**
614
-
615
- From Windows, open PowerShell or Command Prompt and run:
616
-
617
- ```powershell
618
- wsl
619
- ```
620
-
621
- Or open the Ubuntu app from the Start menu.
622
-
623
- **Step 2: Update package lists and install Zsh**
624
-
625
- Within WSL Ubuntu:
626
-
627
- ```bash
628
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
629
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh
630
- ```
631
-
632
- **Step 3: Verify Zsh installation**
633
-
634
- ```bash
635
- zsh --version
636
- ```
637
-
638
- Expected output (version numbers may vary):
639
-
640
- ```
641
- zsh 5.9 (x86_64-ubuntu-linux-gnu)
642
- ```
643
-
644
- **Step 4: Set Zsh as your default shell**
645
-
646
- ```bash
647
- sudo usermod --shell $(which zsh) "$USER"
648
- ```
649
-
650
- **Step 5: Configure WSL to start Zsh automatically**
651
-
652
- WSL may not always respect the default shell setting. Add the following to the end of your `~/.bashrc` to ensure Zsh starts:
653
-
654
- ```bash
655
- cat >> ~/.bashrc << 'EOF'
656
-
657
- # Auto-launch Zsh in WSL
658
- if [ -t 1 ] && [ -x /usr/bin/zsh ]; then
659
- exec /usr/bin/zsh
660
- fi
661
- EOF
662
- ```
663
-
664
- This snippet checks if the session is interactive (`-t 1`) and if Zsh is executable, then replaces Bash with Zsh.
665
-
666
- **Step 6: Restart WSL**
667
-
668
- Close all WSL terminals and restart WSL from PowerShell:
669
-
670
- ```powershell
671
- wsl --shutdown
672
- wsl
673
- ```
674
-
675
- #### Verification
676
-
677
- Confirm Zsh is installed and running:
678
-
679
- ```bash
680
- # Check the Zsh version
681
- zsh --version
682
-
683
- # Verify the current shell
684
- echo $0
685
-
686
- # Check the configured default shell
687
- echo "$SHELL"
688
- ```
689
-
690
- Expected output for `echo $0`:
691
-
692
- ```
693
- zsh
694
- ```
695
-
696
- #### Troubleshooting
697
-
698
- **Problem**: WSL still starts Bash instead of Zsh
699
-
700
- **Solution**: Add the auto-launch snippet to `~/.bashrc` as shown in Step 5. WSL sometimes ignores the system default shell setting.
701
-
702
- **Problem**: Windows Terminal shows Bash prompt briefly before Zsh
703
-
704
- **Solution**: This is expected behavior when using the `~/.bashrc` auto-launch method. The brief Bash initialization is normal.
705
-
706
- **Problem**: Zsh configuration not loading
707
-
708
- **Solution**: Create a `~/.zshrc` file if it does not exist:
709
-
710
- ```bash
711
- touch ~/.zshrc
712
- ```
713
-
714
- **Problem**: `apt-get update` fails inside WSL
715
-
716
- **Solution**: DNS resolution may be failing. Create or modify `/etc/wsl.conf`:
717
-
718
- ```bash
719
- sudo tee /etc/wsl.conf > /dev/null << 'EOF'
720
- [network]
721
- generateResolvConf = false
722
- EOF
723
-
724
- sudo rm -f /etc/resolv.conf
725
- sudo tee /etc/resolv.conf > /dev/null << 'EOF'
726
- nameserver 8.8.8.8
727
- nameserver 8.8.4.4
728
- EOF
729
- ```
730
-
731
- Restart WSL from PowerShell:
732
-
733
- ```powershell
734
- wsl --shutdown
735
- ```
736
-
737
- ---
738
-
739
- ### Windows (Native) - Not Supported
740
-
741
- #### Platform Status
742
-
743
- Zsh is **not supported** on native Windows environments (PowerShell, Command Prompt).
744
-
745
- Zsh is a Unix shell that requires a POSIX-compatible environment. Windows does not natively provide this environment.
746
-
747
- #### Recommended Alternative
748
-
749
- Use WSL (Windows Subsystem for Linux) to run Zsh on Windows. WSL provides a full Linux environment where Zsh runs natively.
750
-
751
- To install WSL from an Administrator PowerShell:
752
-
753
- ```powershell
754
- wsl --install
755
- ```
756
-
757
- After installation and reboot, follow the WSL (Ubuntu) installation steps above.
758
-
759
- ---
760
-
761
- ### Git Bash - Not Supported
762
-
763
- #### Platform Status
764
-
765
- Zsh is **not supported** in Git Bash on Windows.
766
-
767
- Git Bash uses a MinGW-based environment that provides Bash, not Zsh. While Git Bash includes many Unix utilities, it does not support alternative shells like Zsh.
768
-
769
- #### Recommended Alternatives
770
-
771
- **Option 1: Use WSL (Windows Subsystem for Linux)**
772
-
773
- WSL provides a full Linux environment where you can install and use Zsh. See the WSL installation section above.
774
-
775
- ```powershell
776
- wsl --install
777
- ```
778
-
779
- **Option 2: Continue using Bash with enhancements**
780
-
781
- If you prefer to stay in Git Bash, consider enhancing it with:
782
-
783
- - [Oh My Bash](https://github.com/ohmybash/oh-my-bash) - A framework similar to Oh My Zsh but for Bash:
784
-
785
- ```bash
786
- bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
787
- ```
788
-
789
- **Option 3: Use PowerShell with Oh My Posh**
790
-
791
- For a modern Windows shell experience, consider [Oh My Posh](https://ohmyposh.dev/) with PowerShell:
792
-
793
- ```powershell
794
- winget install --id JanDeDobbeleer.OhMyPosh --silent --accept-package-agreements --accept-source-agreements
795
- ```
796
-
797
- ---
798
-
799
- ## Post-Installation Configuration
800
-
801
- After installing Zsh on any platform, consider these common configuration steps.
802
-
803
- ### Create Shell Configuration Files
804
-
805
- Zsh reads configuration files in a specific order. Create these files if they do not exist:
806
-
807
- ```bash
808
- # Main configuration file (loaded for interactive shells)
809
- touch ~/.zshrc
810
-
811
- # Environment variables (loaded for all shells, including scripts)
812
- touch ~/.zshenv
813
-
814
- # Login shell configuration
815
- touch ~/.zprofile
816
- ```
817
-
818
- ### Set Common Environment Variables
819
-
820
- Add useful environment variables to your `~/.zshrc`:
821
-
822
- ```bash
823
- cat >> ~/.zshrc << 'EOF'
824
-
825
- # History configuration
826
- export HISTSIZE=10000
827
- export HISTFILESIZE=20000
828
- export SAVEHIST=10000
829
- export HISTFILE=~/.zsh_history
830
- setopt SHARE_HISTORY # Share history between sessions
831
- setopt HIST_IGNORE_DUPS # Ignore duplicate commands
832
- setopt HIST_IGNORE_SPACE # Ignore commands starting with space
833
-
834
- # Better defaults
835
- export EDITOR=vim
836
- export VISUAL=vim
837
- export PAGER=less
838
-
839
- # Enable colors
840
- autoload -U colors && colors
841
- EOF
842
- ```
843
-
844
- ### Enable Zsh Completion System
845
-
846
- Zsh has a powerful completion system. Enable it by adding to `~/.zshrc`:
847
-
848
- ```bash
849
- cat >> ~/.zshrc << 'EOF'
850
-
851
- # Enable completion system
852
- autoload -Uz compinit && compinit
853
-
854
- # Case-insensitive completion
855
- zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
856
-
857
- # Menu-style completion
858
- zstyle ':completion:*' menu select
859
- EOF
860
- ```
861
-
862
- ### Install Oh My Zsh (Optional)
863
-
864
- Oh My Zsh is a popular framework that provides themes, plugins, and helpful defaults:
865
-
866
- ```bash
867
- sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
868
- ```
869
-
870
- The `--unattended` flag enables non-interactive installation suitable for automation.
871
-
872
- For detailed Oh My Zsh configuration, see the [Oh My Zsh documentation](https://github.com/ohmyzsh/ohmyzsh/wiki).
873
-
874
- ### Verify Configuration
875
-
876
- After making changes, reload your configuration:
877
-
878
- ```bash
879
- source ~/.zshrc
880
- ```
881
-
882
- Check that your settings are applied:
883
-
884
- ```bash
885
- echo "HISTSIZE: $HISTSIZE"
886
- echo "EDITOR: $EDITOR"
887
- ```
888
-
889
- ---
890
-
891
- ## Common Issues
892
-
893
- ### Issue: Scripts Written for Bash Fail in Zsh
894
-
895
- **Symptoms**: Shell scripts with `#!/bin/bash` work, but scripts with `#!/bin/sh` or no shebang fail with syntax errors.
896
-
897
- **Solution**: Zsh is not fully compatible with Bash or POSIX sh. Ensure scripts have the correct shebang:
898
-
899
- ```bash
900
- #!/bin/bash
901
- # For Bash scripts
902
-
903
- #!/bin/zsh
904
- # For Zsh scripts
905
-
906
- #!/bin/sh
907
- # For POSIX-compliant scripts
908
- ```
909
-
910
- Running scripts with an explicit interpreter bypasses the shell:
911
-
912
- ```bash
913
- bash ./script.sh
914
- zsh ./script.zsh
915
- ```
916
-
917
- ### Issue: Zsh Completion Not Working
918
-
919
- **Symptoms**: Tab completion does not work or shows errors.
920
-
921
- **Solution**: Initialize the completion system in your `~/.zshrc`:
922
-
923
- ```bash
924
- autoload -Uz compinit && compinit
925
- ```
926
-
927
- If you see "insecure directories" warnings:
928
-
929
- ```bash
930
- compaudit | xargs chmod g-w,o-w
931
- ```
932
-
933
- ### Issue: Arrow Keys Print Escape Codes
934
-
935
- **Symptoms**: Arrow keys print `^[[A`, `^[[B`, etc. instead of navigating history.
936
-
937
- **Solution**: Add key bindings to `~/.zshrc`:
938
-
939
- ```bash
940
- # Use Emacs-style key bindings
941
- bindkey -e
942
-
943
- # Or explicitly bind arrow keys
944
- bindkey '^[[A' up-line-or-history
945
- bindkey '^[[B' down-line-or-history
946
- bindkey '^[[C' forward-char
947
- bindkey '^[[D' backward-char
948
- ```
949
-
950
- ### Issue: Environment Variables from Bash Not Available
951
-
952
- **Symptoms**: Variables set in `~/.bashrc` or `~/.bash_profile` are not available in Zsh.
953
-
954
- **Solution**: Zsh uses different configuration files. Move or copy your environment variable exports to `~/.zshrc` or `~/.zshenv`:
955
-
956
- ```bash
957
- # Copy relevant exports from Bash config to Zsh config
958
- grep '^export' ~/.bashrc >> ~/.zshrc
959
- ```
960
-
961
- ### Issue: PATH Differs Between Bash and Zsh
962
-
963
- **Symptoms**: Commands available in Bash are not found in Zsh.
964
-
965
- **Solution**: Check and update your PATH in `~/.zshrc`:
966
-
967
- ```bash
968
- # Add common paths
969
- export PATH="$HOME/bin:/usr/local/bin:$PATH"
970
-
971
- # For Homebrew on Apple Silicon
972
- export PATH="/opt/homebrew/bin:$PATH"
973
- ```
974
-
975
- ### Issue: Shell Prompt Is Plain or Missing Colors
976
-
977
- **Symptoms**: Zsh prompt shows `%` without colors or customization.
978
-
979
- **Solution**: Configure a prompt in `~/.zshrc`:
980
-
981
- ```bash
982
- # Simple colorful prompt
983
- PROMPT='%F{green}%n@%m%f:%F{blue}%~%f%# '
984
-
985
- # Or enable colors first
986
- autoload -U colors && colors
987
- PROMPT="%{$fg[green]%}%n@%m%{$reset_color%}:%{$fg[blue]%}%~%{$reset_color%}%# "
988
- ```
989
-
990
- Or install Oh My Zsh for pre-configured themes.
991
-
992
- ---
993
-
994
- ## References
995
-
996
- - [Zsh Official Website](https://www.zsh.org/)
997
- - [Zsh Official Manual](https://zsh.sourceforge.io/Doc/Release/index.html)
998
- - [Zsh SourceForge Project](https://zsh.sourceforge.io/)
999
- - [Oh My Zsh Wiki - Installing Zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH)
1000
- - [Arch Wiki - Zsh](https://wiki.archlinux.org/title/Zsh)
1001
- - [Apple Terminal - Change Default Shell](https://support.apple.com/guide/terminal/change-the-default-shell-trml113/mac)
1002
- - [Homebrew Zsh Formula](https://formulae.brew.sh/formula/zsh)
1003
- - [Ubuntu Zsh Package](https://packages.ubuntu.com/zsh)
1004
- - [Fedora Magazine - Set Up Zsh](https://fedoramagazine.org/set-zsh-fedora-system/)
1005
- - [Amazon Linux Package Management](https://docs.aws.amazon.com/linux/al2023/ug/package-management.html)
1006
- - [Microsoft WSL Documentation](https://learn.microsoft.com/en-us/windows/wsl/install)
1007
- - [Oh My Zsh](https://ohmyz.sh/)
1008
- - [Zsh Users - GitHub Organization](https://github.com/zsh-users)