Customizing Ubuntu’s Terminal With Oh My Zsh
Ubuntu’s default Bash shell is reliable, familiar, and capable of handling almost any command-line task. For daily work, though, a plain prompt can make it difficult to see where you are, which Git branch you are using, or whether a command succeeded. Zsh, combined with the Oh My Zsh configuration framework, gives the terminal a more informative and comfortable interface.
Oh My Zsh does not replace Ubuntu’s terminal emulator. It changes the shell running inside that emulator and supplies sensible defaults, themes, plugins, aliases, and configuration helpers. You can still use GNOME Terminal, Konsole, Tilix, or a terminal window opened with Ctrl + Alt + T.
The customisation is useful for casual users and experienced Linux users alike. Someone managing files on a home computer in Melbourne can benefit from clearer prompts, while a developer working across Docker containers and Git repositories in Sydney may save time with command completion and shortcuts. The changes are reversible, provided your configuration files are backed up.
This guide covers installation, prompt design, plugins, aliases, performance, and troubleshooting on Ubuntu. The examples use Ubuntu’s standard package tools and work well on current desktop releases, including systems connected through Australian NBN services or a mobile connection in a regional town.
What Zsh Adds To The Ubuntu Terminal
Zsh is an interactive shell, much like Bash. It interprets commands, launches programs, expands wildcards, runs scripts, and reads configuration files. Its interactive features include more flexible tab completion, spelling correction, globbing options, and customisable prompts. Ubuntu can keep Bash installed while you use Zsh as your everyday login shell.
Oh My Zsh is a community-maintained collection of Zsh configuration files and extensions. It provides themes and plugins that would otherwise require considerable manual setup. The framework lives in your home directory, usually at ~/.oh-my-zsh, while your personal settings are stored in ~/.zshrc.
The distinction matters. Zsh itself is the shell; Oh My Zsh is a configuration layer for Zsh. You can remove Oh My Zsh without removing Zsh, and you can switch back to Bash without uninstalling either package. Your terminal application remains separate from both.
A themed prompt can show your username, computer name, current directory, Git branch, and the status of the previous command. That information is especially helpful when several terminal tabs are open, or when you are moving between a local Ubuntu installation and a remote server.
Installing Zsh And Oh My Zsh
First, update Ubuntu’s package information and install Zsh, Git, and a download utility:
sudo apt update
sudo apt install zsh git curl
Ubuntu normally selects a suitable package mirror automatically. If downloads are unusually slow, Australian users can sometimes get better results from an Australian Ubuntu mirror such as au.archive.ubuntu.com, although the default mirror selection is usually perfectly adequate. On a congested NBN connection, running the update outside the evening peak may also make the process feel faster.
Check the installed version:
zsh --version
Oh My Zsh provides an installation command using curl:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Read the command before running it, particularly if you are new to shell configuration. The installer creates the Oh My Zsh directory, makes a backup of an existing .zshrc when appropriate, and may ask whether Zsh should become your default shell. The project is widely used, but it is still sensible to inspect any remote script or download it for review before execution.
You can make Zsh the default shell manually with:
chsh -s "$(which zsh)"
Log out and back in, or restart the computer, for the change to take effect. To start Zsh temporarily without changing your login shell, run zsh in an existing terminal. If the new prompt appears, the installation is working.
Choosing A Theme And Reading The Prompt
Oh My Zsh’s default theme is robbyrussell, which displays the current directory and Git branch in a compact format. To choose another theme, open the configuration file:
nano ~/.zshrc
Find the theme setting:
ZSH_THEME="robbyrussell"
Replace the value with a theme such as agnoster, bira, avit, or gentoo. Save the file, then reload it:
source ~/.zshrc
Themes vary in how much information they display. A minimal theme is useful on a small laptop screen, while a Git-focused theme can be helpful for software projects. Some themes rely on special symbols, colours, or fonts. If you see empty squares or strange characters, the problem is usually a font issue rather than a fault with Zsh.
Powerlevel10k is a popular separate prompt theme with extensive configuration options. It is fast and highly configurable, but it is an additional project rather than a built-in Oh My Zsh theme. If you install it, follow its current documentation and run its configuration wizard. A plain theme remains a sensible choice for an older Ubuntu desktop or a low-powered machine.
Prompt information can expose details such as your username, hostname, directory names, and Git branch. Avoid displaying secrets or tokens through custom prompt commands. A readable prompt is more useful than a crowded one, particularly when you are troubleshooting a home server in Brisbane or connecting to a work machine over SSH.
Adding Plugins Without Creating Clutter
Plugins extend Zsh with completion rules, aliases, and small pieces of shell behaviour. The .zshrc file includes a setting similar to this:
plugins=(git)
You can add useful plugins by separating their names with spaces:
plugins=(git sudo ubuntu docker)
The git plugin supplies shortcuts such as gst for git status, gco for git checkout, and gaa for git add --all. The sudo plugin lets you press Esc twice to add sudo to the previous command, which is handy when a package or system file requires administrator privileges.
The ubuntu plugin includes shortcuts for common Ubuntu commands. The docker plugin can provide completion and aliases when Docker is installed. Plugin names must correspond to plugins available in your Oh My Zsh installation or an additional plugin directory. If a shell starts slowly after adding one, remove recent additions and test them individually.
More plugins do not automatically produce a better terminal. Each one can add completion rules or startup work, and overlapping aliases may make commands harder to remember. Git, sudo, and one or two tools you use regularly are a practical starting point. Plugins can also change expected command behaviour, so check an alias with which or alias before relying on it in a script.
For command suggestions based on your history, zsh-autosuggestions is a popular external plugin. zsh-syntax-highlighting colours commands as you type and can reveal misspelled or invalid commands before execution. Install external plugins according to their official instructions, and place syntax highlighting near the end of the plugin section so it loads after other completion-related settings.
Creating Aliases And Local Settings
Aliases turn long commands into short ones. Add personal aliases below the Oh My Zsh configuration in ~/.zshrc:
alias ll='ls -alF'
alias la='ls -A'
alias ..='cd ..'
alias c='clear'
alias update='sudo apt update && sudo apt upgrade'
The update alias is convenient for a personal Ubuntu machine, but remember that it can install packages and may ask for your password. Review commands before using them on a production server. You may prefer separate aliases for checking updates and installing them:
alias check-updates='apt list --upgradable'
alias upgrade-system='sudo apt update && sudo apt upgrade'
Aliases are intended for interactive use. Do not place a fragile alias inside a script that must run consistently, because scripts may use Bash or another shell and may not read your .zshrc. For reusable operations, a small executable script in ~/.local/bin is usually clearer.
You can also set your preferred editor and language settings:
export EDITOR="nano"
export VISUAL="nano"
export LANG="en_AU.UTF-8"
The en_AU.UTF-8 locale suits Australian spelling and regional formatting where it is installed. Check available locales with locale -a; if it is missing, generate it through Ubuntu’s regional settings or with the appropriate locale package tools. Locale changes can affect dates, sorting, and decimal formatting, so avoid applying them blindly to scripts that expect a fixed format.
Keep personal settings below the Oh My Zsh line in .zshrc. This makes the order easier to understand and reduces the chance that the framework overwrites your choices. Back up the file before experimenting:
cp ~/.zshrc ~/.zshrc.backup
Keeping The Shell Fast And Reliable
A custom shell should open quickly. If every new terminal takes several seconds, inspect the plugins and commands loaded from .zshrc. Large prompt themes, network checks, version managers, and unnecessary completion systems are common causes of delay. Disable one item at a time and open a fresh terminal to identify the source.
Oh My Zsh can be updated with:
omz update
The command downloads changes from the Oh My Zsh project. Review updates occasionally rather than treating them as a requirement every time you open a terminal. Before a major Ubuntu upgrade, copy your .zshrc and note any external plugins or themes so you can recreate the setup if needed.
If a theme displays a broken prompt, switch temporarily to the default:
sed -i 's/^ZSH_THEME=.*/ZSH_THEME="robbyrussell"/' ~/.zshrc
source ~/.zshrc
You can also start a clean Zsh session that ignores your normal configuration:
zsh -f
This is useful for separating a Zsh problem from an Oh My Zsh problem. If commands work in the clean session, inspect .zshrc for a typo, an unavailable plugin, or a command that assumes a program is installed.
To return to Bash as your default shell, use:
chsh -s "$(which bash)"
Existing terminals will not change until you start a new session. Your Oh My Zsh files can remain in your home directory, or you can remove them after backing up anything you want to keep. The important point is that shell customisation is a preference, not a permanent commitment.
A well-configured setup should make routine work feel calmer: the prompt identifies your location, completion reduces typing, and aliases remove repetition. For someone using Ubuntu on a Sydney commute, a home workstation in Perth, or a regional Australian connection where every download matters, small improvements add up. The best configuration is the one that stays readable, starts quickly, and remains understandable when something goes wrong.
Remember that Zsh provides the shell, Oh My Zsh organises its customisation, and your .zshrc is the personal control centre. Back it up, add features gradually, and keep the prompt useful rather than decorative.