How to Set Up Zsh With Oh My Zsh
A complete walkthrough installing Zsh as your shell, setting up Oh My Zsh, and configuring a theme and a first useful plugin — from a completely default shell to a genuinely productive one.
Oh My Zsh turns Zsh’s genuinely powerful but complex configuration system into something installable and usable within minutes — this walks through going from scratch to a working, themed setup.
Step 1: install Zsh if it isn’t already present
sudo apt install zsh # Debian/Ubuntu
brew install zsh # macOS (though Zsh ships by default since Catalina)
pkg install zsh # FreeBSD
Step 2: set Zsh as your default shell
chsh -s $(which zsh)
This changes your account’s default login shell — you’ll need to log out and back in (or open a new terminal session, depending on your system) for the change to take effect.
Step 3: install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
The installer backs up any existing .zshrc and replaces it with an Oh My Zsh-managed configuration file, then launches a new Zsh session automatically.
Step 4: choose a theme
# in ~/.zshrc
ZSH_THEME="robbyrussell"
robbyrussell is Oh My Zsh’s original default theme; dozens of others are bundled — browse the themes/ directory inside your Oh My Zsh installation, or check the project’s own theme gallery, to pick one matching your preferences.
Step 5: enable your first plugin
# in ~/.zshrc
plugins=(git)
The git plugin (enabled by default in most Oh My Zsh setups) adds numerous short aliases for common git commands and shows the current branch and status directly in your prompt.
Step 6: reload your configuration to apply changes
source ~/.zshrc
Step 7: add a useful additional plugin
# in ~/.zshrc
plugins=(git zsh-autosuggestions)
zsh-autosuggestions (installed separately as a custom plugin, per its own documentation) suggests commands as you type based on your history, a feature fish provides natively but Zsh needs a plugin for.
Step 8: keep your plugin list intentional, not exhaustive
Add plugins one at a time as you find you actually want their specific functionality, checking each addition’s effect on shell startup time — an overloaded plugin list is one of the most common causes of slow shell startup, and it’s easier to keep a lean, deliberate configuration from the start than to prune an accumulated one later.
Step 9: update Oh My Zsh periodically
omz update
Why starting minimal and adding deliberately beats copying someone else’s full configuration
A configuration copied wholesale from someone else’s dotfiles repository often includes plugins, aliases, and settings tuned for their specific workflow, not yours — starting from Oh My Zsh’s sensible defaults and adding features only as you discover you actually want them produces a configuration you understand completely and that stays fast, rather than one carrying invisible overhead from features you never use.