Zsh + Oh My Zsh turns a plain terminal into a fast, autocompleting, good-looking shell. This is the guide I keep coming back to — freshly revised for 2026, covering both Linux and macOS, with the plugins and fonts that actually make a difference.
Revised (July 2026): rewritten with separate Linux/macOS tracks, current install commands, Nerd Fonts, and the two plugins I install on every machine.
Jump to your platform:
- 🐧 Linux (Ubuntu / Debian)
- 🍎 macOS
- ⚙️ Configure & make it yours — themes, plugins, fonts (same on both)
🐧 Linux — Ubuntu / Debian
Tested on Ubuntu 20.04, 22.04 and 24.04 (and Debian 11/12). Everything here is apt-based.
1. Update the system
sudo apt update && sudo apt full-upgrade -y
2. Install Zsh and dependencies
sudo apt install -y zsh git curl
Confirm it installed:
zsh --version
# zsh 5.9 (x86_64-ubuntu-linux-gnu)
3. Install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
The installer offers to make Zsh your default shell — say yes. If you skipped it (or it couldn’t), set it manually:
chsh -s "$(which zsh)"
Log out and back in (or open a new terminal) for the default-shell change to take effect.
Now jump to Configure & make it yours — the setup from here is identical on every OS.
🍎 macOS
Since macOS Catalina (10.15), Zsh is already the default shell — you may not need to install anything. The one thing worth doing is installing Homebrew so you can manage the newest Zsh, fonts, and tools.
1. Check what you already have
zsh --version # macOS ships a recent Zsh out of the box
echo "$SHELL" # /bin/zsh means Zsh is already your login shell
If $SHELL isn’t /bin/zsh, set it:
chsh -s /bin/zsh
2. Install Homebrew (recommended)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
On Apple Silicon, follow the post-install hint to add Homebrew to your PATH (it lives in /opt/homebrew):
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
3. (Optional) Get the newest Zsh + install Oh My Zsh
Apple’s bundled Zsh is fine, but Homebrew keeps you on the latest:
brew install zsh git curl
Then install Oh My Zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Continue to Configure & make it yours below.
⚙️ Configure & make it yours
Everything below works the same on Linux and macOS. Your config lives in ~/.zshrc:
nano ~/.zshrc # or: code ~/.zshrc / vim ~/.zshrc
After any change, reload the shell to apply it:
source ~/.zshrc
Pick a theme
Oh My Zsh ships with 150+ themes. Set ZSH_THEME in ~/.zshrc:
ZSH_THEME="robbyrussell" # the clean default
# ZSH_THEME="agnoster" # popular powerline-style (needs a Nerd Font, below)
Want the fast, highly-configurable prompt everyone’s using now? Try Powerlevel10k:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"
Then set ZSH_THEME="powerlevel10k/powerlevel10k" and reload — it runs a config wizard on first launch.
Install a Nerd Font (fixes icons/glyphs)
Powerline and Powerlevel10k themes use special glyphs. Install a Nerd Font and select it in your terminal’s settings.
Linux:
sudo apt install -y fonts-powerline
# For full Nerd Font glyphs, download one from nerdfonts.com and drop it in ~/.local/share/fonts, then:
fc-cache -f
macOS (Homebrew):
brew install --cask font-meslo-lg-nerd-font
The two plugins I install everywhere
These two transform daily use — autosuggestions (fish-style greyed-out completions from history) and syntax highlighting (commands turn green when valid, red when not).
git clone https://github.com/zsh-users/zsh-autosuggestions \
"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
git clone https://github.com/zsh-users/zsh-syntax-highlighting \
"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"
Then enable them in ~/.zshrc. Find the plugins=(...) line and update it:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
Order matters: keep
zsh-syntax-highlightinglast in the list — it needs to wrap everything else.
Reload once more and you’re done:
source ~/.zshrc
That’s it
You now have a modern Zsh setup — same muscle memory on Linux and macOS. From here, browse the plugin list and add ones for your stack (docker, kubectl, python, npm, …). Each just gets appended to the plugins=(...) line.
Handy references:
- Oh My Zsh install docs — https://ohmyz.sh/#install
- Themes wiki — https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
- Plugins wiki — https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins
- Nerd Fonts — https://www.nerdfonts.com/