A lightweight Oh My Zsh setup that makes terminal work actually pleasant
When I switched from Bash to Zsh, I didn’t want a flashy spaceship-like prompt —
I wanted a fast, clean shell that makes me type less and see more.
After a few evenings of tuning, I ended up with a setup that feels minimal, predictable, and visually satisfying.
🧩 Idea & Goal
- Make the terminal feel instant — smart completions, syntax hints, history search.
- Use color only for meaning: errors, commands, and git status.
- Keep configuration under one file (
~/.zshrc) and depend only on apt-installable tools. - Ensure it works out of the box on any Debian/Ubuntu-based distro (Linux Mint, Pop!_OS, Ubuntu, etc.).
⚙️ Environment & Requirements
# base setup
sudo apt update
sudo apt install -y zsh git curl
# change default shell
chsh -s $(which zsh)
# install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Font
I’m using Meslo LGL Nerd Font — it includes Powerline symbols required by the agnoster theme.
cd ~/.local/share/fonts
curl -fLO https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/Meslo/S/Regular/MesloLGSNerdFont-Regular.ttf
fc-cache -fv
Then open your terminal preferences and set the font manually:
- Open your terminal settings → Preferences → Profile → Text
- Check “Custom font”
- Choose MesloLGS Nerd Font
- Restart the terminal
🎨 Theme
ZSH_THEME="agnoster"
Agnoster is included with Oh My Zsh — it’s simple, shows your user, current dir, and git branch, and plays nicely with Meslo fonts.
🔌 Plugins I Use
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
zsh-autocomplete
)
Installation
All plugins live under your custom folder:
cd ~/.oh-my-zsh/custom/plugins
git clone https://github.com/zsh-users/zsh-autosuggestions.git
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
git clone https://github.com/marlonrichert/zsh-autocomplete.git
Then restart your shell:
exec zsh
What They Do
| Plugin | Feature |
|---|---|
git | adds handy shortcuts for git status |
zsh-autosuggestions | shows previous commands as grey hints as you type |
zsh-syntax-highlighting | colors valid/invalid commands instantly |
zsh-autocomplete | adds a dropdown-style completion menu like in Fish shell |
⚡ Aliases & Shortcuts
I keep just a few:
alias ll='ls -lah --color=auto'
alias gs='git status'
alias update='sudo apt update && sudo apt upgrade -y'
…and a few keybindings for better navigation:
bindkey '^[[1;5D' backward-word # Ctrl+←
bindkey '^[[1;5C' forward-word # Ctrl+→
bindkey '^A' beginning-of-line
bindkey '^E' end-of-line
bindkey '^W' backward-kill-word
bindkey '^U' kill-whole-line
These let me jump between words or clear parts of a command line — no more holding backspace for 3 seconds.
🎯 Smart Completion Like Fish
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
This makes TAB completion case-insensitive and interactive — you can use arrows to navigate completion options.
🧠 Daily Workflow
- Type a few letters → autosuggestions finish the rest.
- Press
TAB→ get an interactive dropdown. - Syntax coloring keeps me from mistyping commands.
- Git branch and dirty state show up instantly in the prompt.
- Aliases shorten the commands I type every day.
Everything feels responsive and informative without noise.
🪄 Takeaways
What I liked:
- Instant command feedback — no more “command not found” surprises.
- Minimal startup time (~80 ms).
- Clean prompt with context-aware git info.
What I’d improve:
zsh-autocompletecan occasionally slow down on very large histories.- Some themes look broken if fonts aren’t configured properly.
🚀 Full config nano ~/.zshrc
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="agnoster"
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
zsh-autocomplete
)
source $ZSH/oh-my-zsh.sh
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
alias ll='ls -lah --color=auto'
alias gs='git status'
alias update='sudo apt update && sudo apt upgrade -y'
bindkey '^[[1;5D' backward-word # Ctrl+←
bindkey '^[[1;5C' forward-word # Ctrl+→
bindkey '^[[D' backward-char # ←
bindkey '^[[C' forward-char # →
bindkey '^[[A' up-line-or-history # ↑
bindkey '^[[B' down-line-or-history # ↓
bindkey '^A' beginning-of-line
bindkey '^E' end-of-line
bindkey '^W' backward-kill-word
bindkey '^U' kill-whole-line
bindkey -M menuselect '^[[D' .backward-char '^[OD' .backward-char
bindkey -M menuselect '^[[C' .forward-char '^[OC' .forward-char
Leave a Reply