← Back to posts

≈ 4 min

Setting Up a Beautiful Zsh Terminal (agnoster + MesloLGS NF + Colors)

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:

  1. Open your terminal settings → Preferences → Profile → Text
  2. Check “Custom font”
  3. Choose MesloLGS Nerd Font
  4. 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

PluginFeature
gitadds handy shortcuts for git status
zsh-autosuggestionsshows previous commands as grey hints as you type
zsh-syntax-highlightingcolors valid/invalid commands instantly
zsh-autocompleteadds 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-autocomplete can 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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *