🚀 Introduction
I recently made the leap from Linux Mint to Pop!_OS, and its default GNOME Terminal can feel pretty basic, especially if you’re coming from a setup like mine. On my macOS, I’ve long enjoyed a modern, visually rich, and highly customizable terminal experience, and I even had a similar setup on Linux Mint. Now, I want to show you how I brought that same level of polish to Pop!_OS using WezTerm. It’s a fantastic GPU-accelerated, feature-rich terminal emulator with awesome features like pane multiplexing, tab support, ligature rendering, and smooth performance across the board.
In this blog post, I’ll walk you through setting up a fantastic terminal environment in Linux using:
- WezTerm – a GPU-accelerated terminal emulator with modern features like ligature support, tabbed UI, and multiplexing.
- FiraCode Nerd Font – a developer-friendly font with support for programming ligatures and custom glyphs.
- Oh My Zsh – a community-driven framework for managing your Zsh configuration.
- Powerlevel10k theme – a sleek, fast theme for Zsh with support for icons, git status, and more.
- Useful Zsh plugins like
zsh-autosuggestions
andzsh-syntax-highlighting
.
Let’s build your dream terminal. 😎
1️⃣ Install WezTerm Terminal
# Debian/Ubuntu-based systems sudo apt update sudo apt install -y curl curl -LO https://github.com/wez/wezterm/releases/download/nightly/wezterm-nightly.Ubuntu22.04.deb sudo apt install ./wezterm-nightly.Ubuntu22.04.deb
You’ll need to visit their GitHub repository to download the appropriate binary file for your specific Linux distribution. For instance, I’m running Pop OS, which is built on Ubuntu 22.04.

Note: Upon successful installation, you should see the WezTerm icon like this.
2️⃣ Install FiraCode Nerd Fonts
mkdir -p ~/.local/share/fonts cd ~/.local/share/fonts wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraCode.zip unzip FiraCode.zip fc-cache -fv
Note: Upon successful installation, you should see in this directory listing.

Create a WezTerm config file:
# from nano editor nano ~/.wezterm.lua # from vim editor vim ~/.wezterm.lua
Then, set FiraCode Nerd Font as the font in WezTerm’s config file (~/.wezterm.lua
).
local wezterm = require 'wezterm' return { font = wezterm.font("FiraCode Nerd Font"), font_size = 14.0, window_decorations = "RESIZE", window_background_opacity = 0.8, enable_tab_bar = true, hide_tab_bar_if_only_one_tab = false, }
3️⃣ Install Oh My Zsh
sudo apt install -y zsh git curl sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
“Once Oh-My-Zsh is installed, your WezTerm will look like this:” (Slightly more predictive.)

4️⃣ Powerlevel10k Theme + Plugins
✅ Install Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
Edit ~/.zshrc
and set:
ZSH_THEME="powerlevel10k/powerlevel10k"

Restart the terminal and follow the configuration wizard.

Select Yes, the succeeding wizard question related to lock icon and upward arrow icon, select Yes

Select 1, It is pointing at ‘1’

Select Yes

Just select your prompt style to customize it further. In the next window select 1 for Unicode. In next windows select 1 for 256 colors.

Select if you want put a current time as part of your prompt customization. In the next window select if you want single or two lines. In my case I would prefer two lines. In the next windows is related to Prompt Connection please select which do you prefer.

In the Prompt Frame selection please select which do you prefer? In the next window it will ask Prompt spacing. In my case I would go for option 2 Sparse. In the last section is the Prompt Icons which do you prefer? In my case I select option 2 Many icons. In the next window it will ask Prompt flow, which do you prefer? In my case I select option 1 Concise. Next window will ask Enable Transient Prompt? I would preferred No option.

In this window select option 1 for Verbose. In the last window select option Yes to Save changes.

Overall this is my customized prompt setup. If you want to make some changes or modify your current prompt just type:
p10k configure
🔌 Add Plugins
# zsh-autosuggestions git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions # zsh-syntax-highlighting git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
In ~/.zshrc
, update your plugin list:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

5️⃣ Better History Search (Up/Down Arrow Magic)
Add this to the bottom of your ~/.zshrc
:
autoload -Uz up-line-or-search autoload -Uz down-line-or-search zle -N up-line-or-search zle -N down-line-or-search bindkey '^[[A' up-line-or-search bindkey '^[[B' down-line-or-search

This allows intuitive history searching as you type using the ↑ and ↓ arrows — much faster than hitting Up endlessly.
💡 Tips: WezTerm Split Pane Shortcuts
WezTerm has built-in support for split panes, just like tmux
, but with less config hassle.
Here are the default keyboard bindings to manage panes:
Action | Key Binding |
---|---|
Split horizontal | CTRL+SHIFT+" |
Split vertical | CTRL+SHIFT+% |
Move to next pane | CTRL+SHIFT+→/←/↑/↓ |
Close current pane | CTRL+SHIFT+W |
Open new tab | CTRL+SHIFT+T |
Move to next tab | CTRL+SHIFT+→ |
Move to previous tab | CTRL+SHIFT+← |
Update your .wezterm.lau file to have a default key bindings above setup.
local wezterm = require 'wezterm' return { font = wezterm.font("FiraCode Nerd Font"), font_size = 14.0, window_decorations = "RESIZE", window_background_opacity = 0.8, keys = { -- Split panes {key="%", mods="CTRL|SHIFT", action=wezterm.action{SplitHorizontal={domain="CurrentPaneDomain"}}}, {key="\"", mods="CTRL|SHIFT", action=wezterm.action{SplitVertical={domain="CurrentPaneDomain"}}}, -- Close pane {key="w", mods="CTRL|SHIFT", action=wezterm.action{CloseCurrentPane={confirm=true}}}, -- Move between panes {key="LeftArrow", mods="CTRL|SHIFT", action=wezterm.action{ActivatePaneDirection="Left"}}, {key="RightArrow", mods="CTRL|SHIFT", action=wezterm.action{ActivatePaneDirection="Right"}}, {key="UpArrow", mods="CTRL|SHIFT", action=wezterm.action{ActivatePaneDirection="Up"}}, {key="DownArrow", mods="CTRL|SHIFT", action=wezterm.action{ActivatePaneDirection="Down"}}, -- Tab management {key="t", mods="CTRL|SHIFT", action=wezterm.action{SpawnTab="CurrentPaneDomain"}}, {key="LeftArrow", mods="ALT", action=wezterm.action{ActivateTabRelative=-1}}, {key="RightArrow", mods="ALT", action=wezterm.action{ActivateTabRelative=1}}, }, enable_tab_bar = true, hide_tab_bar_if_only_one_tab = false, }
💡 You can customize all these shortcuts in your
~/.wezterm.lua
config file.
These shortcuts allow you to work in multiple shell sessions without ever leaving the terminal window — great for multitasking, development, and server work. Below is the sample screenshot with split screen.

✅ Final Thoughts
Now you have an amazing terminal setup that’s:
- Beautiful and fast (WezTerm + FiraCode)
- Highly productive (Oh My Zsh + plugins)
- Developer-friendly (Powerlevel10k)
- Intuitive (up/down history search)
This setup is excellent for developers, penetration testers, DevOps engineers, and Linux system administrators. Whether you’re writing code, managing servers, or automating tasks, this terminal will make your experience smoother and more enjoyable. 🎯
0 Comments