BETA

Command Palette

Search for a command to run...

Terminal18 min read

Level Up Your Terminal

Step-by-step guide to setting up a fast, minimal, and IDE-like terminal using Zsh, Oh My Zsh plugins, and the Starship prompt.

ADJ

Anirban Das Joy

Terminal screenshot showing Zsh with Starship prompt, syntax highlighting, and a clean minimalist setup with directory path and git branch indicator

We'll build a practical terminal using Zsh (smarter than Bash), Oh My Zsh (plugins only, no heavy themes), and Starship prompt (fast, minimal, and written in Rust).

This setup gives you: - Fast startup - Clean and minimal prompt (directory + git info) - Command autosuggestions - Syntax highlighting - IDE-like terminal experience - Perfect for daily use, scripting, and screen recording

What you'll learn in this blog: - Why Zsh is better than Bash for daily work - How to use Oh My Zsh correctly (plugins only) - How to install and configure Starship prompt - Fix common issues like broken icons using Nerd Fonts - How to keep your terminal minimal and fast

⚠️ Important: Commands are provided below. Pause and follow slowly if needed. It is recommended to create a Timeshift backup before making any system changes.

STEP 0: Update System & Install Requirements

bash
sudo apt update
sudo apt install git curl -y

STEP 1: Install Zsh

bash
sudo apt install zsh -y
zsh --version
chsh -s $(which zsh)

After running these commands, log out and log back in. This is important — Zsh won't become your default shell until you do.

STEP 2: Install Oh My Zsh (Plugins Only)

bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

We are NOT using Oh My Zsh themes. Starship will handle the prompt entirely. Oh My Zsh is only here for its plugin ecosystem.

STEP 3: Install Zsh Plugins Manually

Install zsh-autosuggestions — gives you fish-like command suggestions as you type.

Using HTTPS:

bash
git clone https://github.com/zsh-users/zsh-autosuggestions.git $HOME/.oh-my-zsh/custom/plugins/zsh-autosuggestions

Using SSH:

bash
git clone git@github.com:zsh-users/zsh-autosuggestions.git $HOME/.oh-my-zsh/custom/plugins/zsh-autosuggestions

Install zsh-syntax-highlighting — highlights valid commands in green and invalid ones in red, right as you type.

Using HTTPS:

bash
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting

Using SSH:

bash
git clone git@github.com:zsh-users/zsh-syntax-highlighting.git $HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting

STEP 4: Configure Oh My Zsh (Minimal Setup)

Open your Zsh config file:

bash
nano ~/.zshrc

After opening the file, save and exit nano when done: - Press Ctrl + O to save - Press Enter to confirm the filename - Press Ctrl + X to exit

Find the ZSH_THEME line and disable it by setting it to empty. This lets Starship take over the prompt:

bash
ZSH_THEME=""

Find the plugins line and update it like this. Note: zsh-syntax-highlighting must always be last:

bash
plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
)
           
# Load NVM (if Node installed via NVM)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"

# Ensure system-wide node/npm/other global binaries are in PATH
export PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/snap/bin:$HOME/.local/bin

STEP 5: Install Starship Prompt

bash
curl -sS https://starship.rs/install.sh | sh

Now add Starship initialization at the very bottom of your ~/.zshrc file:

bash
eval "$(starship init zsh)"

Apply the changes:

bash
source ~/.zshrc

STEP 6: Install Nerd Font (IMPORTANT)

Without a Nerd Font, all the icons in the prompt will appear as broken boxes or question marks. You must install one and set it in your terminal preferences. Recommended fonts: - JetBrainsMono Nerd Font - FiraCode Nerd Font - Hack Nerd Font Download from: https://www.nerdfonts.com/font-downloads After downloading and installing the font: 1. Open your terminal preferences or settings 2. Change the font to your chosen Nerd Font 3. Restart the terminal

STEP 7: Create Starship Config

Create the config directory and file:

bash
mkdir -p ~/.config
nano ~/.config/starship.toml

Paste the config below. Once done, save and exit nano: - Press Ctrl + O to save - Press Enter to confirm the filename - Press Ctrl + X to exit

This gives you a clean Catppuccin Macchiato themed prompt with username, directory, git branch, git status, and command duration:

toml
"$schema" = 'https://starship.rs/config-schema.json'
add_newline = false
format = "[█](surface0)[󰌽 ](bg:surface0 fg:text)$username[](bg:blue fg:surface0)$directory[](fg:blue bg:green)$git_branch$git_status[](fg:green)$cmd_duration "
right_format = ""
palette = 'catppuccin_macchiato'

[palettes.catppuccin_macchiato]
rosewater = "#f4dbd6"
flamingo = "#f0c6c6"
pink = "#f5bde6"
mauve = "#c6a0f6"
red = "#ed8796"
maroon = "#ee99a0"
peach = "#f5a97f"
yellow = "#eed49f"
green = "#a6da95"
teal = "#8bd5ca"
sky = "#91d7e3"
sapphire = "#7dc4e4"
blue = "#8aadf4"
lavender = "#b7bdf8"
text = "#cad3f5"
subtext1 = "#b8c0e0"
subtext0 = "#a5adcb"
overlay2 = "#939ab7"
overlay1 = "#8087a2"
overlay0 = "#6e738d"
surface2 = "#5b6078"
surface1 = "#494d64"
surface0 = "#363a4f"
base = "#24273a"
mantle = "#1e2030"
crust = "#181926"

[username]
show_always = true
style_user = "bg:surface0 fg:text"
style_root = "bg:surface0 fg:text"
format = '[ $user ]($style)'

[directory]
style = "fg:mantle bg:blue"
format = "[ $path ]($style)"
truncation_length = 10
truncation_symbol = "…/"
truncate_to_repo = false

[git_branch]
symbol = ""
style = "bg:teal"
format = '[[ $symbol $branch ](fg:base bg:green)]($style)'

[git_status]
style = "bg:teal"
format = '[[($all_status$ahead_behind )](fg:base bg:green)]($style)'

[cmd_duration]
min_time = 2_000
style = "fg:yellow"
format = '[ 󱦟 $duration]($style)'

[status]
disabled = true

[kubernetes]
disabled = true

[time]
disabled = true

Your terminal is now clean, fast, and IDE-like. Every command that takes more than 2 seconds will automatically show how long it took — right in the prompt.