@fredlackey/devutils 0.0.11 → 0.0.13

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.
@@ -0,0 +1,1094 @@
1
+ # Installing Oh My Zsh
2
+
3
+ ## Overview
4
+
5
+ Oh My Zsh is an open-source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, plugins, themes, and features that make working in the terminal more efficient and enjoyable. With over 2,400 contributors and 300+ plugins, Oh My Zsh has become the most popular Zsh configuration framework.
6
+
7
+ Oh My Zsh provides:
8
+
9
+ - **300+ plugins** for common tools (git, docker, npm, kubectl, aws, and many more)
10
+ - **140+ themes** for customizing your terminal prompt appearance
11
+ - **Auto-update mechanism** to keep your installation current
12
+ - **Plugin management** for easy addition and removal of functionality
13
+ - **Aliases and functions** for common commands and workflows
14
+
15
+ This guide documents Oh My Zsh installation procedures for all platforms supported by DevUtils CLI. Because Oh My Zsh is a Zsh configuration framework, Zsh must be installed as a prerequisite on all platforms.
16
+
17
+ ## Dependencies
18
+
19
+ ### macOS (Homebrew)
20
+ - **Required:**
21
+ - `zsh` - Pre-installed on macOS 10.15 (Catalina) and later as the default shell. For older macOS versions, install via `brew install --quiet zsh`
22
+ - `curl` - Pre-installed on macOS. For the latest version, install via `brew install --quiet curl` or run `dev install curl`
23
+ - `git` - Pre-installed via Xcode Command Line Tools or install via `brew install --quiet git` or run `dev install git`
24
+ - **Optional:** None
25
+ - **Auto-installed:**
26
+ - Oh My Zsh plugins directory structure
27
+ - Default `.zshrc` configuration file (backs up existing `.zshrc` to `.zshrc.pre-oh-my-zsh`)
28
+
29
+ ### Ubuntu/Debian (APT)
30
+ - **Required:**
31
+ - `zsh` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh`
32
+ - `curl` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl` or run `dev install curl`
33
+ - `git` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git` or run `dev install git`
34
+ - **Optional:** None
35
+ - **Auto-installed:**
36
+ - Oh My Zsh plugins directory structure
37
+ - Default `.zshrc` configuration file
38
+
39
+ ### Raspberry Pi OS (APT)
40
+ - **Required:**
41
+ - `zsh` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh`
42
+ - `curl` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl` or run `dev install curl`
43
+ - `git` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git` or run `dev install git`
44
+ - **Optional:** None
45
+ - **Auto-installed:**
46
+ - Oh My Zsh plugins directory structure
47
+ - Default `.zshrc` configuration file
48
+
49
+ ### Amazon Linux/RHEL/Fedora (DNF/YUM)
50
+ - **Required:**
51
+ - `zsh` - Install via `sudo dnf install -y zsh` (AL2023/RHEL 8+/Fedora) or `sudo yum install -y zsh` (AL2/RHEL 7)
52
+ - `curl` - Install via `sudo dnf install -y curl` or `sudo yum install -y curl` or run `dev install curl`
53
+ - `git` - Install via `sudo dnf install -y git` or `sudo yum install -y git` or run `dev install git`
54
+ - **Optional:** None
55
+ - **Auto-installed:**
56
+ - Oh My Zsh plugins directory structure
57
+ - Default `.zshrc` configuration file
58
+
59
+ ### WSL (Ubuntu)
60
+ - **Required:**
61
+ - `zsh` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh`
62
+ - `curl` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl` or run `dev install curl`
63
+ - `git` - Install via `sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git` or run `dev install git`
64
+ - **Optional:** None
65
+ - **Auto-installed:**
66
+ - Oh My Zsh plugins directory structure
67
+ - Default `.zshrc` configuration file
68
+
69
+ **Note**: Oh My Zsh is not supported on native Windows (PowerShell, Command Prompt) or Git Bash environments. For Windows users, install Oh My Zsh within WSL (Windows Subsystem for Linux) instead.
70
+
71
+ ## Prerequisites
72
+
73
+ Before installing Oh My Zsh on any platform, ensure:
74
+
75
+ 1. **Internet connectivity** - Required to download Oh My Zsh from GitHub
76
+ 2. **Terminal access** - Command line interface to run installation commands
77
+ 3. **sudo privileges** - Required for installing Zsh if not already present (Linux platforms)
78
+ 4. **Zsh shell** - Must be installed before Oh My Zsh (installation steps provided below)
79
+ 5. **curl or wget** - Required for downloading the installation script
80
+ 6. **git** - Required for cloning the Oh My Zsh repository
81
+
82
+ **Important**: The Oh My Zsh installer will:
83
+ - Back up your existing `~/.zshrc` to `~/.zshrc.pre-oh-my-zsh`
84
+ - Create a new `~/.zshrc` with Oh My Zsh configuration
85
+ - Clone the Oh My Zsh repository to `~/.oh-my-zsh`
86
+
87
+ ## Platform-Specific Installation
88
+
89
+ ### macOS (Homebrew)
90
+
91
+ #### Prerequisites
92
+
93
+ - macOS 10.15 (Catalina) or later (macOS 14 Sonoma or later recommended)
94
+ - Homebrew package manager installed
95
+ - Terminal access via Terminal.app or iTerm2
96
+
97
+ macOS 10.15 (Catalina) and later include Zsh as the default shell. You can verify this by running `echo $SHELL`. If it shows `/bin/zsh`, Zsh is already your default shell.
98
+
99
+ If Homebrew is not installed, install it first:
100
+
101
+ ```bash
102
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
103
+ ```
104
+
105
+ #### Installation Steps
106
+
107
+ **Step 1: Verify Zsh is installed and set as default shell**
108
+
109
+ ```bash
110
+ zsh --version
111
+ ```
112
+
113
+ Expected output (version numbers may vary):
114
+
115
+ ```
116
+ zsh 5.9 (x86_64-apple-darwin23.0)
117
+ ```
118
+
119
+ If Zsh is not installed (older macOS versions), install it:
120
+
121
+ ```bash
122
+ brew install --quiet zsh
123
+ ```
124
+
125
+ **Step 2: Ensure curl and git are available**
126
+
127
+ These are typically pre-installed on macOS. Verify:
128
+
129
+ ```bash
130
+ curl --version && git --version
131
+ ```
132
+
133
+ If either is missing, install via Homebrew:
134
+
135
+ ```bash
136
+ brew install --quiet curl git
137
+ ```
138
+
139
+ **Step 3: Install Oh My Zsh non-interactively**
140
+
141
+ Run the following command for a fully unattended installation:
142
+
143
+ ```bash
144
+ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
145
+ ```
146
+
147
+ The `--unattended` flag:
148
+ - Prevents the installer from changing your default shell automatically
149
+ - Does not launch Zsh after installation
150
+ - Enables fully non-interactive execution suitable for scripts and automation
151
+
152
+ **Step 4: Set Zsh as your default shell (if not already)**
153
+
154
+ Check your current default shell:
155
+
156
+ ```bash
157
+ echo $SHELL
158
+ ```
159
+
160
+ If it does not show `/bin/zsh`, set Zsh as your default:
161
+
162
+ ```bash
163
+ sudo chsh -s /bin/zsh $(whoami)
164
+ ```
165
+
166
+ **Step 5: Apply the configuration**
167
+
168
+ Start a new Zsh session or source the configuration:
169
+
170
+ ```bash
171
+ source ~/.zshrc
172
+ ```
173
+
174
+ #### Verification
175
+
176
+ Confirm Oh My Zsh is installed correctly:
177
+
178
+ ```bash
179
+ ls ~/.oh-my-zsh
180
+ ```
181
+
182
+ Expected output should show directories including `plugins`, `themes`, `lib`, `templates`, and others.
183
+
184
+ Verify the Oh My Zsh configuration is loaded:
185
+
186
+ ```bash
187
+ echo $ZSH
188
+ ```
189
+
190
+ Expected output:
191
+
192
+ ```
193
+ /Users/<your-username>/.oh-my-zsh
194
+ ```
195
+
196
+ Check that plugins and themes are available:
197
+
198
+ ```bash
199
+ ls ~/.oh-my-zsh/plugins | head -10
200
+ ```
201
+
202
+ This should list plugin directories like `git`, `docker`, `npm`, etc.
203
+
204
+ #### Troubleshooting
205
+
206
+ **Problem**: `zsh: command not found: omz` after installation
207
+
208
+ **Solution**: Oh My Zsh does not provide an `omz` command by default in older versions. Source your configuration:
209
+
210
+ ```bash
211
+ source ~/.zshrc
212
+ ```
213
+
214
+ **Problem**: Existing `.zshrc` customizations are lost
215
+
216
+ **Solution**: Oh My Zsh backs up your original configuration. Restore customizations from the backup:
217
+
218
+ ```bash
219
+ cat ~/.zshrc.pre-oh-my-zsh
220
+ ```
221
+
222
+ Copy any custom settings from the backup into your new `~/.zshrc` file.
223
+
224
+ **Problem**: Oh My Zsh installation fails with "git clone failed"
225
+
226
+ **Solution**: Ensure git is installed and you have internet connectivity:
227
+
228
+ ```bash
229
+ brew install --quiet git
230
+ ping -c 3 github.com
231
+ ```
232
+
233
+ **Problem**: Themes or prompts do not display correctly (missing symbols)
234
+
235
+ **Solution**: Install a Nerd Font or Powerline-compatible font. Many Oh My Zsh themes require special font glyphs. Install a compatible font:
236
+
237
+ ```bash
238
+ brew tap homebrew/cask-fonts
239
+ brew install --cask font-meslo-lg-nerd-font
240
+ ```
241
+
242
+ Then configure your terminal to use the installed font.
243
+
244
+ ---
245
+
246
+ ### Ubuntu/Debian (APT)
247
+
248
+ #### Prerequisites
249
+
250
+ - Ubuntu 20.04 LTS or later, or Debian 11 (Bullseye) or later
251
+ - sudo privileges
252
+ - Internet connectivity
253
+
254
+ Ubuntu and Debian use Bash as the default shell. You must install Zsh before installing Oh My Zsh.
255
+
256
+ #### Installation Steps
257
+
258
+ **Step 1: Update package lists and install Zsh**
259
+
260
+ ```bash
261
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
262
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh
263
+ ```
264
+
265
+ Verify Zsh installation:
266
+
267
+ ```bash
268
+ zsh --version
269
+ ```
270
+
271
+ Expected output (version numbers may vary):
272
+
273
+ ```
274
+ zsh 5.9 (x86_64-ubuntu-linux-gnu)
275
+ ```
276
+
277
+ **Step 2: Install curl and git**
278
+
279
+ ```bash
280
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl git
281
+ ```
282
+
283
+ **Step 3: Install Oh My Zsh non-interactively**
284
+
285
+ ```bash
286
+ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
287
+ ```
288
+
289
+ **Step 4: Set Zsh as your default shell**
290
+
291
+ ```bash
292
+ sudo chsh -s $(which zsh) $(whoami)
293
+ ```
294
+
295
+ **Step 5: Start a new Zsh session**
296
+
297
+ Log out and log back in, or start a new terminal session. Alternatively, start Zsh manually:
298
+
299
+ ```bash
300
+ zsh
301
+ ```
302
+
303
+ Then source the configuration:
304
+
305
+ ```bash
306
+ source ~/.zshrc
307
+ ```
308
+
309
+ #### Verification
310
+
311
+ Confirm Oh My Zsh is installed:
312
+
313
+ ```bash
314
+ ls ~/.oh-my-zsh
315
+ ```
316
+
317
+ Expected output should show directories including `plugins`, `themes`, `lib`, `templates`.
318
+
319
+ Verify the ZSH variable is set:
320
+
321
+ ```bash
322
+ echo $ZSH
323
+ ```
324
+
325
+ Expected output:
326
+
327
+ ```
328
+ /home/<your-username>/.oh-my-zsh
329
+ ```
330
+
331
+ Verify Zsh is your default shell:
332
+
333
+ ```bash
334
+ echo $SHELL
335
+ ```
336
+
337
+ Expected output:
338
+
339
+ ```
340
+ /usr/bin/zsh
341
+ ```
342
+
343
+ #### Troubleshooting
344
+
345
+ **Problem**: `chsh: PAM: Authentication failure`
346
+
347
+ **Solution**: The `chsh` command requires your password. For automated scripts, you can modify `/etc/passwd` directly with sudo:
348
+
349
+ ```bash
350
+ sudo sed -i "s|$(whoami):/bin/bash|$(whoami):$(which zsh)|" /etc/passwd
351
+ ```
352
+
353
+ **Problem**: Oh My Zsh is not loaded in new sessions
354
+
355
+ **Solution**: Ensure Zsh is your default shell and `.zshrc` exists:
356
+
357
+ ```bash
358
+ cat ~/.zshrc | head -5
359
+ ```
360
+
361
+ The file should contain `export ZSH="$HOME/.oh-my-zsh"` near the top.
362
+
363
+ **Problem**: `E: Unable to locate package zsh`
364
+
365
+ **Solution**: Update your package lists:
366
+
367
+ ```bash
368
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
369
+ ```
370
+
371
+ **Problem**: Slow shell startup after installing Oh My Zsh
372
+
373
+ **Solution**: Disable plugins you do not use. Edit `~/.zshrc` and reduce the plugins list:
374
+
375
+ ```bash
376
+ # In ~/.zshrc, change:
377
+ plugins=(git)
378
+ # Instead of:
379
+ plugins=(git docker npm node kubectl aws gcloud ...)
380
+ ```
381
+
382
+ ---
383
+
384
+ ### Raspberry Pi OS (APT)
385
+
386
+ #### Prerequisites
387
+
388
+ - Raspberry Pi OS (Bookworm, Bullseye, or Buster) - 32-bit or 64-bit
389
+ - Raspberry Pi 2 or later (Raspberry Pi 3B+ or later recommended)
390
+ - sudo privileges
391
+ - Internet connectivity
392
+
393
+ Raspberry Pi OS is based on Debian, so the installation follows the same APT-based process.
394
+
395
+ #### Installation Steps
396
+
397
+ **Step 1: Verify your architecture**
398
+
399
+ ```bash
400
+ uname -m
401
+ ```
402
+
403
+ - `aarch64` = 64-bit ARM (Raspberry Pi 3/4/5 with 64-bit OS)
404
+ - `armv7l` = 32-bit ARM (Raspberry Pi 2/3/4 with 32-bit OS)
405
+ - `armv6l` = 32-bit ARM (Raspberry Pi Zero/1)
406
+
407
+ All architectures are supported for Oh My Zsh.
408
+
409
+ **Step 2: Update package lists and install Zsh**
410
+
411
+ ```bash
412
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
413
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh
414
+ ```
415
+
416
+ Verify Zsh installation:
417
+
418
+ ```bash
419
+ zsh --version
420
+ ```
421
+
422
+ **Step 3: Install curl and git**
423
+
424
+ ```bash
425
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl git
426
+ ```
427
+
428
+ **Step 4: Install Oh My Zsh non-interactively**
429
+
430
+ ```bash
431
+ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
432
+ ```
433
+
434
+ **Step 5: Set Zsh as your default shell**
435
+
436
+ ```bash
437
+ sudo chsh -s $(which zsh) $(whoami)
438
+ ```
439
+
440
+ **Step 6: Apply the configuration**
441
+
442
+ Log out and log back in, or start Zsh manually:
443
+
444
+ ```bash
445
+ zsh
446
+ source ~/.zshrc
447
+ ```
448
+
449
+ #### Verification
450
+
451
+ Confirm Oh My Zsh is installed:
452
+
453
+ ```bash
454
+ ls ~/.oh-my-zsh
455
+ ```
456
+
457
+ Verify the ZSH variable is set:
458
+
459
+ ```bash
460
+ echo $ZSH
461
+ ```
462
+
463
+ Expected output:
464
+
465
+ ```
466
+ /home/pi/.oh-my-zsh
467
+ ```
468
+
469
+ (Replace `pi` with your username if different.)
470
+
471
+ #### Troubleshooting
472
+
473
+ **Problem**: Installation is very slow
474
+
475
+ **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.
476
+
477
+ **Problem**: Oh My Zsh themes cause slow prompt rendering
478
+
479
+ **Solution**: Some complex themes (like Powerlevel10k) can be slow on older Raspberry Pi models. Use a simpler theme:
480
+
481
+ ```bash
482
+ # Edit ~/.zshrc and change ZSH_THEME
483
+ ZSH_THEME="robbyrussell"
484
+ ```
485
+
486
+ **Problem**: Fonts do not display correctly over SSH
487
+
488
+ **Solution**: Terminal fonts are rendered by your local machine, not the Raspberry Pi. Install a Nerd Font on your local machine and configure your SSH client to use it.
489
+
490
+ **Problem**: `git clone` fails during installation
491
+
492
+ **Solution**: Check your internet connection. If using WiFi, consider using Ethernet for more stable connectivity:
493
+
494
+ ```bash
495
+ ping -c 3 github.com
496
+ ```
497
+
498
+ ---
499
+
500
+ ### Amazon Linux/RHEL/Fedora (DNF/YUM)
501
+
502
+ #### Prerequisites
503
+
504
+ - Amazon Linux 2023 (AL2023), Amazon Linux 2 (AL2), RHEL 8+, or Fedora 38+
505
+ - sudo privileges
506
+ - Internet connectivity
507
+
508
+ Amazon Linux 2023 and RHEL 8+ use DNF. Amazon Linux 2 and RHEL 7 use YUM.
509
+
510
+ **Important**: Amazon Linux 2 reaches end of support on June 30, 2026. Consider migrating to Amazon Linux 2023.
511
+
512
+ #### Installation Steps
513
+
514
+ **Step 1: Install Zsh**
515
+
516
+ For Amazon Linux 2023 / RHEL 8+ / Fedora:
517
+
518
+ ```bash
519
+ sudo dnf install -y zsh
520
+ ```
521
+
522
+ For Amazon Linux 2 / RHEL 7:
523
+
524
+ ```bash
525
+ sudo yum install -y zsh
526
+ ```
527
+
528
+ Verify Zsh installation:
529
+
530
+ ```bash
531
+ zsh --version
532
+ ```
533
+
534
+ Expected output (version numbers may vary):
535
+
536
+ ```
537
+ zsh 5.9 (x86_64-redhat-linux-gnu)
538
+ ```
539
+
540
+ **Step 2: Install curl and git**
541
+
542
+ For DNF-based systems:
543
+
544
+ ```bash
545
+ sudo dnf install -y curl git
546
+ ```
547
+
548
+ For YUM-based systems:
549
+
550
+ ```bash
551
+ sudo yum install -y curl git
552
+ ```
553
+
554
+ **Step 3: Install Oh My Zsh non-interactively**
555
+
556
+ ```bash
557
+ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
558
+ ```
559
+
560
+ **Step 4: Set Zsh as your default shell**
561
+
562
+ For Fedora (recent versions use `lchsh`):
563
+
564
+ ```bash
565
+ sudo lchsh $(whoami)
566
+ ```
567
+
568
+ When prompted, enter `/usr/bin/zsh`.
569
+
570
+ For Amazon Linux / RHEL:
571
+
572
+ ```bash
573
+ sudo chsh -s $(which zsh) $(whoami)
574
+ ```
575
+
576
+ **Step 5: Apply the configuration**
577
+
578
+ Log out and log back in, or start Zsh manually:
579
+
580
+ ```bash
581
+ zsh
582
+ source ~/.zshrc
583
+ ```
584
+
585
+ #### Verification
586
+
587
+ Confirm Oh My Zsh is installed:
588
+
589
+ ```bash
590
+ ls ~/.oh-my-zsh
591
+ ```
592
+
593
+ Verify the ZSH variable is set:
594
+
595
+ ```bash
596
+ echo $ZSH
597
+ ```
598
+
599
+ Expected output:
600
+
601
+ ```
602
+ /home/ec2-user/.oh-my-zsh
603
+ ```
604
+
605
+ (Username varies: `ec2-user` on EC2, `fedora` on Fedora Cloud, or your custom username.)
606
+
607
+ Verify Zsh is your default shell:
608
+
609
+ ```bash
610
+ echo $SHELL
611
+ ```
612
+
613
+ Expected output:
614
+
615
+ ```
616
+ /usr/bin/zsh
617
+ ```
618
+
619
+ #### Troubleshooting
620
+
621
+ **Problem**: `lchsh: command not found` on older Fedora
622
+
623
+ **Solution**: Use `chsh` instead:
624
+
625
+ ```bash
626
+ sudo chsh -s $(which zsh) $(whoami)
627
+ ```
628
+
629
+ **Problem**: `chsh` requires password in automation scripts
630
+
631
+ **Solution**: Modify `/etc/passwd` directly:
632
+
633
+ ```bash
634
+ sudo sed -i "s|$(whoami):/bin/bash|$(whoami):$(which zsh)|" /etc/passwd
635
+ ```
636
+
637
+ **Problem**: `No match for argument: zsh` on Amazon Linux 2
638
+
639
+ **Solution**: Update the yum cache:
640
+
641
+ ```bash
642
+ sudo yum makecache
643
+ sudo yum install -y zsh
644
+ ```
645
+
646
+ **Problem**: Oh My Zsh not loaded in new SSH sessions on EC2
647
+
648
+ **Solution**: Ensure `.bashrc` or `.bash_profile` is not overriding the shell. Verify your default shell:
649
+
650
+ ```bash
651
+ grep $(whoami) /etc/passwd
652
+ ```
653
+
654
+ The last field should be `/usr/bin/zsh` or `/bin/zsh`.
655
+
656
+ ---
657
+
658
+ ### WSL (Ubuntu)
659
+
660
+ #### Prerequisites
661
+
662
+ - Windows 10 version 2004 or higher, or Windows 11
663
+ - WSL 2 enabled with Ubuntu distribution installed
664
+ - sudo privileges within WSL
665
+
666
+ WSL runs a full Linux environment. The installation follows the Ubuntu/Debian process.
667
+
668
+ #### Installation Steps
669
+
670
+ **Step 1: Update package lists and install Zsh**
671
+
672
+ Open your WSL Ubuntu terminal and run:
673
+
674
+ ```bash
675
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
676
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y zsh
677
+ ```
678
+
679
+ Verify Zsh installation:
680
+
681
+ ```bash
682
+ zsh --version
683
+ ```
684
+
685
+ **Step 2: Install curl and git**
686
+
687
+ ```bash
688
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl git
689
+ ```
690
+
691
+ **Step 3: Install Oh My Zsh non-interactively**
692
+
693
+ ```bash
694
+ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
695
+ ```
696
+
697
+ **Step 4: Set Zsh as your default shell**
698
+
699
+ ```bash
700
+ sudo chsh -s $(which zsh) $(whoami)
701
+ ```
702
+
703
+ **Step 5: Configure Windows Terminal (optional but recommended)**
704
+
705
+ To have WSL launch Zsh by default in Windows Terminal, you can add this to the end of your `~/.bashrc`:
706
+
707
+ ```bash
708
+ # Auto-launch Zsh in WSL
709
+ if [ -t 1 ] && [ -x /usr/bin/zsh ]; then
710
+ exec /usr/bin/zsh
711
+ fi
712
+ ```
713
+
714
+ Alternatively, close and reopen WSL. The new default shell should be Zsh.
715
+
716
+ **Step 6: Apply the configuration**
717
+
718
+ ```bash
719
+ zsh
720
+ source ~/.zshrc
721
+ ```
722
+
723
+ #### Verification
724
+
725
+ Confirm Oh My Zsh is installed:
726
+
727
+ ```bash
728
+ ls ~/.oh-my-zsh
729
+ ```
730
+
731
+ Verify the ZSH variable is set:
732
+
733
+ ```bash
734
+ echo $ZSH
735
+ ```
736
+
737
+ Expected output:
738
+
739
+ ```
740
+ /home/<your-wsl-username>/.oh-my-zsh
741
+ ```
742
+
743
+ Verify Zsh is running:
744
+
745
+ ```bash
746
+ echo $0
747
+ ```
748
+
749
+ Expected output:
750
+
751
+ ```
752
+ zsh
753
+ ```
754
+
755
+ #### Troubleshooting
756
+
757
+ **Problem**: `chsh` does not work in WSL
758
+
759
+ **Solution**: WSL may not respect `chsh` changes. Add the auto-launch snippet to `~/.bashrc`:
760
+
761
+ ```bash
762
+ cat >> ~/.bashrc << 'EOF'
763
+
764
+ # Auto-launch Zsh in WSL
765
+ if [ -t 1 ] && [ -x /usr/bin/zsh ]; then
766
+ exec /usr/bin/zsh
767
+ fi
768
+ EOF
769
+ ```
770
+
771
+ **Problem**: Windows Terminal still shows Bash prompt
772
+
773
+ **Solution**: Close all WSL terminals and restart WSL:
774
+
775
+ ```powershell
776
+ # In Windows PowerShell
777
+ wsl --shutdown
778
+ wsl
779
+ ```
780
+
781
+ **Problem**: Oh My Zsh themes display incorrectly in Windows Terminal
782
+
783
+ **Solution**: Install a Nerd Font on Windows and configure Windows Terminal to use it:
784
+
785
+ 1. Download a Nerd Font from https://www.nerdfonts.com/font-downloads (MesloLGS NF recommended)
786
+ 2. Install the font on Windows by double-clicking the .ttf file
787
+ 3. Open Windows Terminal settings (Ctrl+,)
788
+ 4. Select your Ubuntu profile
789
+ 5. Under "Appearance", set "Font face" to your installed Nerd Font
790
+
791
+ **Problem**: Slow startup in WSL
792
+
793
+ **Solution**: Windows Defender scanning can slow WSL. Add exclusions for WSL directories:
794
+
795
+ ```powershell
796
+ # Run in Windows PowerShell as Administrator
797
+ Add-MpPreference -ExclusionPath "\\wsl$\Ubuntu"
798
+ Add-MpPreference -ExclusionPath "$env:LOCALAPPDATA\Packages\*Ubuntu*"
799
+ ```
800
+
801
+ ---
802
+
803
+ ### Git Bash (Not Supported)
804
+
805
+ #### Platform Status
806
+
807
+ Oh My Zsh is **not supported** on Git Bash (Windows).
808
+
809
+ Oh My Zsh is a framework specifically designed for the Zsh shell, which is not available on native Windows environments. Git Bash uses a MinGW-based Bash shell and does not support Zsh.
810
+
811
+ #### Recommended Alternatives
812
+
813
+ **Option 1: Use WSL (Windows Subsystem for Linux)**
814
+
815
+ WSL provides a full Linux environment where you can install and use Oh My Zsh. See the WSL installation section above.
816
+
817
+ To install WSL from an Administrator PowerShell:
818
+
819
+ ```powershell
820
+ wsl --install
821
+ ```
822
+
823
+ After installation and reboot, follow the WSL (Ubuntu) installation steps.
824
+
825
+ **Option 2: Use Oh My Bash**
826
+
827
+ If you prefer to stay in Git Bash, consider [Oh My Bash](https://github.com/ohmybash/oh-my-bash), which provides similar functionality for Bash:
828
+
829
+ ```bash
830
+ bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
831
+ ```
832
+
833
+ **Option 3: Use PowerShell with Oh My Posh**
834
+
835
+ For a modern Windows shell experience, consider [Oh My Posh](https://ohmyposh.dev/) with PowerShell:
836
+
837
+ ```powershell
838
+ winget install --id JanDeDobbeleer.OhMyPosh --silent --accept-package-agreements --accept-source-agreements
839
+ ```
840
+
841
+ ---
842
+
843
+ ## Post-Installation Configuration
844
+
845
+ After installing Oh My Zsh on any platform, consider these common configurations.
846
+
847
+ ### Changing the Theme
848
+
849
+ Oh My Zsh includes 140+ themes. View available themes:
850
+
851
+ ```bash
852
+ ls ~/.oh-my-zsh/themes
853
+ ```
854
+
855
+ Change your theme by editing `~/.zshrc`:
856
+
857
+ ```bash
858
+ # Edit ~/.zshrc and change ZSH_THEME
859
+ ZSH_THEME="agnoster"
860
+ ```
861
+
862
+ Popular themes include:
863
+ - `robbyrussell` (default) - Simple and clean
864
+ - `agnoster` - Informative with git status (requires Powerline font)
865
+ - `avit` - Minimal two-line prompt
866
+ - `bira` - Colorful with user/host info
867
+
868
+ Apply the change:
869
+
870
+ ```bash
871
+ source ~/.zshrc
872
+ ```
873
+
874
+ ### Enabling Plugins
875
+
876
+ Oh My Zsh includes 300+ plugins. View available plugins:
877
+
878
+ ```bash
879
+ ls ~/.oh-my-zsh/plugins
880
+ ```
881
+
882
+ Enable plugins by editing the `plugins` line in `~/.zshrc`:
883
+
884
+ ```bash
885
+ plugins=(git docker npm node kubectl aws)
886
+ ```
887
+
888
+ Commonly used plugins:
889
+ - `git` - Git aliases and functions (enabled by default)
890
+ - `docker` - Docker command completion
891
+ - `npm` / `yarn` - Node.js package manager completions
892
+ - `kubectl` - Kubernetes command completion
893
+ - `aws` - AWS CLI completions
894
+ - `z` - Directory jumping based on frecency
895
+ - `history` - History search shortcuts
896
+
897
+ Apply the change:
898
+
899
+ ```bash
900
+ source ~/.zshrc
901
+ ```
902
+
903
+ ### Installing Custom Plugins
904
+
905
+ Install third-party plugins to the custom plugins directory:
906
+
907
+ **zsh-autosuggestions** (suggests commands as you type):
908
+
909
+ ```bash
910
+ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
911
+ ```
912
+
913
+ **zsh-syntax-highlighting** (highlights valid commands in green):
914
+
915
+ ```bash
916
+ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
917
+ ```
918
+
919
+ Then add them to your plugins list in `~/.zshrc`:
920
+
921
+ ```bash
922
+ plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
923
+ ```
924
+
925
+ ### Updating Oh My Zsh
926
+
927
+ Oh My Zsh can update itself. Run:
928
+
929
+ ```bash
930
+ omz update
931
+ ```
932
+
933
+ Or for unattended updates, call the upgrade script directly:
934
+
935
+ ```bash
936
+ $ZSH/tools/upgrade.sh
937
+ ```
938
+
939
+ To enable automatic updates, ensure this line is in your `~/.zshrc`:
940
+
941
+ ```bash
942
+ zstyle ':omz:update' mode auto
943
+ ```
944
+
945
+ ### Uninstalling Oh My Zsh
946
+
947
+ To completely remove Oh My Zsh:
948
+
949
+ ```bash
950
+ uninstall_oh_my_zsh
951
+ ```
952
+
953
+ This will:
954
+ - Remove the `~/.oh-my-zsh` directory
955
+ - Restore your original `~/.zshrc` from the backup
956
+
957
+ ---
958
+
959
+ ## Common Issues
960
+
961
+ ### Issue: "zsh: command not found" for Various Commands
962
+
963
+ **Symptoms**: Commands that work in Bash do not work in Zsh.
964
+
965
+ **Solution**: Your PATH may not be configured correctly. Ensure your PATH includes standard directories:
966
+
967
+ ```bash
968
+ export PATH="$HOME/bin:/usr/local/bin:$PATH"
969
+ ```
970
+
971
+ Add this line to the top of your `~/.zshrc` if missing.
972
+
973
+ ### Issue: "compinit: insecure directories" Warning
974
+
975
+ **Symptoms**: Warning message about insecure directories on shell startup.
976
+
977
+ **Solution**: Fix directory permissions:
978
+
979
+ ```bash
980
+ compaudit | xargs chmod g-w,o-w
981
+ ```
982
+
983
+ Or suppress the warning by adding this before `source $ZSH/oh-my-zsh.sh` in `~/.zshrc`:
984
+
985
+ ```bash
986
+ ZSH_DISABLE_COMPFIX=true
987
+ ```
988
+
989
+ ### Issue: Slow Shell Startup
990
+
991
+ **Symptoms**: New terminal windows take several seconds to load.
992
+
993
+ **Solutions**:
994
+
995
+ 1. **Reduce plugins**: Disable unused plugins in `~/.zshrc`
996
+
997
+ 2. **Use a simpler theme**: Complex themes like Powerlevel10k with extensive git status checks can be slow
998
+
999
+ 3. **Profile startup time**:
1000
+
1001
+ ```bash
1002
+ time zsh -i -c exit
1003
+ ```
1004
+
1005
+ 4. **Lazy-load NVM and similar tools**: See the NVM documentation for lazy-loading configuration
1006
+
1007
+ ### Issue: Oh My Zsh Not Loading in SSH Sessions
1008
+
1009
+ **Symptoms**: SSH sessions start with plain Zsh, not Oh My Zsh.
1010
+
1011
+ **Solution**: Ensure your default shell is set correctly:
1012
+
1013
+ ```bash
1014
+ grep $(whoami) /etc/passwd
1015
+ ```
1016
+
1017
+ The line should end with `/bin/zsh` or `/usr/bin/zsh`.
1018
+
1019
+ Also verify `~/.zshrc` is being sourced. For non-login shells, create `~/.zshenv` with:
1020
+
1021
+ ```bash
1022
+ source ~/.zshrc
1023
+ ```
1024
+
1025
+ ### Issue: Themes Display Broken Characters
1026
+
1027
+ **Symptoms**: Prompt shows boxes, question marks, or garbled characters.
1028
+
1029
+ **Solution**: Install a Nerd Font or Powerline-compatible font:
1030
+
1031
+ **On macOS:**
1032
+
1033
+ ```bash
1034
+ brew tap homebrew/cask-fonts
1035
+ brew install --cask font-meslo-lg-nerd-font
1036
+ ```
1037
+
1038
+ **On Linux:**
1039
+
1040
+ ```bash
1041
+ mkdir -p ~/.local/share/fonts
1042
+ cd ~/.local/share/fonts
1043
+ curl -fLo "MesloLGS NF Regular.ttf" https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf
1044
+ fc-cache -fv
1045
+ ```
1046
+
1047
+ Then configure your terminal emulator to use the installed font.
1048
+
1049
+ ### Issue: Git Plugin Shows Wrong Branch or Status
1050
+
1051
+ **Symptoms**: Git information in prompt is incorrect or outdated.
1052
+
1053
+ **Solution**: The git plugin caches information for performance. Force a refresh:
1054
+
1055
+ ```bash
1056
+ source ~/.zshrc
1057
+ ```
1058
+
1059
+ Or check if you are in a git repository:
1060
+
1061
+ ```bash
1062
+ git rev-parse --is-inside-work-tree
1063
+ ```
1064
+
1065
+ ### Issue: Arrow Keys Not Working in Terminal
1066
+
1067
+ **Symptoms**: Arrow keys print escape sequences instead of navigating.
1068
+
1069
+ **Solution**: Your terminal may not be set up correctly. Add to `~/.zshrc`:
1070
+
1071
+ ```bash
1072
+ bindkey -e # Use Emacs key bindings
1073
+ # Or for vi mode:
1074
+ # bindkey -v
1075
+ ```
1076
+
1077
+ ---
1078
+
1079
+ ## References
1080
+
1081
+ - [Oh My Zsh Official Website](https://ohmyz.sh/)
1082
+ - [Oh My Zsh GitHub Repository](https://github.com/ohmyzsh/ohmyzsh)
1083
+ - [Oh My Zsh Wiki - Installing ZSH](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH)
1084
+ - [Oh My Zsh Wiki - Plugins](https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins)
1085
+ - [Oh My Zsh Wiki - Themes](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)
1086
+ - [Zsh Official Website](https://www.zsh.org/)
1087
+ - [Zsh Documentation](https://zsh.sourceforge.io/Doc/)
1088
+ - [Homebrew Zsh Formula](https://formulae.brew.sh/formula/zsh)
1089
+ - [Nerd Fonts](https://www.nerdfonts.com/)
1090
+ - [zsh-autosuggestions Plugin](https://github.com/zsh-users/zsh-autosuggestions)
1091
+ - [zsh-syntax-highlighting Plugin](https://github.com/zsh-users/zsh-syntax-highlighting)
1092
+ - [Powerlevel10k Theme](https://github.com/romkatv/powerlevel10k)
1093
+ - [Oh My Bash (Alternative for Bash)](https://github.com/ohmybash/oh-my-bash)
1094
+ - [Oh My Posh (Alternative for PowerShell)](https://ohmyposh.dev/)