How to Install eza on Debian: A Modern Replacement for ls
eza is a modern, maintained replacement for the venerable ls command. It is a community fork of the now-unmaintained exa, written in Rust, and it ships with sensible defaults, colour-coded output, file type icons, tree views and first-class Git integration. If you spend a lot of time in the terminal, eza turns a bland directory listing into something you can actually read at a glance.
The trouble is that eza moves quickly and the official Debian repositories tend to lag behind, or omit it entirely on older releases. Compiling it yourself means pulling in a full Rust toolchain and remembering to rebuild every time a new version lands, which is exactly the kind of maintenance chore most people would rather avoid.
The unofficial deb.griffo.io repository solves this neatly. It provides an up-to-date, prebuilt .deb package for eza that installs with plain apt and updates alongside the rest of your system.
What Makes eza Special?
- 🎨 Colour-coded output - files, directories, symlinks and executables are colourised by type out of the box
- 🌳 Recursive tree view - the
--treeflag renders directory hierarchies without needing a separatetreebinary - 🔀 Git-aware listings -
--gitshows the Git status of each file directly in the listing - 📁 File type icons -
--iconsadds Nerd Font glyphs so directories, archives and source files are instantly recognisable - 📊 Human-friendly metadata - readable file sizes, extended attributes and inline permission grids
- ⚡ Fast and lightweight - written in Rust, it starts instantly even in large directories
- 🧩 Drop-in familiarity - the flags map closely to
ls, so muscle memory mostly carries over - 🔧 Actively maintained - a healthy community keeps it patched and moving, unlike the abandoned
exa
Why Use the deb.griffo.io Repository?
- Easy installation and updates straight through the APT package manager you already use
- Automatic dependency management handled entirely by Debian packaging
- Always tracks upstream releases so you get new eza features without waiting on the official archive
- No compiling from source and no need to install or maintain a Rust toolchain
- Works across supported Debian releases including Bookworm, Trixie and Sid
Prerequisites
Before you start, make sure you have:
- A Debian-based system (Bookworm 12, Trixie 13, or Sid)
sudoprivilegescurlinstalled (runsudo apt install curlif it is missing)
Step 1: Add the deb.griffo.io Repository
First, add the repository’s GPG key and source entry. Run the following in your terminal:
# Create the keyrings directory
sudo install -d -m 0755 /etc/apt/keyrings
# Download and install the repository GPG key
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
# Add the repository (auto-detects your distro codename)
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
# Update the package list
sudo apt update
Here is what each command does:
- Create the keyrings directory - ensures
/etc/apt/keyringsexists with the correct permissions for storing the signing key. - Install the GPG key - downloads the repository’s public key and dearmors it into a keyring APT can verify against.
- Add the repository - writes the source entry, using
lsb_release -scto fill in your Debian codename automatically. - Update the package list - refreshes APT so it knows about the newly available packages.
Step 2: Update the Package List
If you skipped the final command above, refresh the package index now:
sudo apt update
Step 3: Install eza
Install eza with a single command:
sudo apt install eza
APT will pull down the latest packaged version along with any required dependencies.
Step 4: Verify the Installation
Confirm eza is installed and on your PATH:
eza --version
You should see output similar to:
eza - A modern, maintained replacement for ls
v0.21.3 [+git]
https://github.com/eza-community/eza
Getting Started with eza
With eza installed, here are the features you will reach for most often.
Everyday Listings
eza works as a direct stand-in for ls, with a few flags that make the output far more useful:
# Simple listing
eza
# Long format with metadata
eza -l
# Include hidden dotfiles
eza -la
# Sort by size, largest last, with human-readable sizes
eza -l --sort=size
# Sort by modification time, newest last
eza -l --sort=modified
Icons and the Tree View
Two of eza’s standout features are file type icons and the built-in recursive tree. Icons require a Nerd Font installed and selected in your terminal:
# Long listing with icons
eza -l --icons
# Recursive tree of the current directory
eza --tree
# Limit the tree depth to two levels
eza --tree --level=2
# Tree with icons, ignoring node_modules
eza --tree --icons --ignore-glob="node_modules"
Git Integration
If you are inside a Git repository, eza can annotate each file with its Git status:
# Long listing with a Git status column
eza -l --git
# Combine Git status, icons and a header row
eza -l --git --icons --header
The status column marks new, modified and ignored files, which makes it easy to spot uncommitted work without switching to git status.
Handy Shell Aliases
Most people alias eza over ls so the improved output becomes the default. Add these to your ~/.bashrc (or ~/.zshrc):
# ~/.bashrc
alias ls='eza --icons --group-directories-first'
alias ll='eza -l --icons --git --group-directories-first'
alias la='eza -la --icons --git --group-directories-first'
alias lt='eza --tree --level=2 --icons'
Reload your shell with source ~/.bashrc and your usual ls, ll and la commands will now render eza’s colourised, Git-aware listings.
Keeping eza Updated
Because eza is installed through APT, updating it is part of your normal system maintenance:
sudo apt update && sudo apt upgrade
Whenever a new eza release is packaged upstream, this pulls it in automatically.
Other Tools from deb.griffo.io
The deb.griffo.io repository packages plenty of other modern command-line tools for Debian:
- zoxide - a smarter
cdthat learns your most-used directories - fzf - a blazing-fast command-line fuzzy finder
- starship - a minimal, customisable prompt for any shell
- lazygit - a terminal UI that makes Git a pleasure to use
Troubleshooting
GPG or Key Issues
If APT complains that the repository is not signed or the key cannot be verified, re-add the signing key:
# Re-download and install the repository GPG key
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
# Refresh the package list
sudo apt update
Package Not Found
If APT reports that it cannot find the eza package:
- Make sure you ran
sudo apt updateafter adding the repository. - Confirm your Debian release is supported (Bookworm, Trixie or Sid).
- Inspect the source entry to check it was written correctly:
cat /etc/apt/sources.list.d/deb.griffo.io.list
Icons Show as Boxes or Question Marks
If --icons renders empty boxes or question marks, your terminal is not using a font that includes the required glyphs. Install a Nerd Font, select it in your terminal’s font settings, and restart the terminal. Until then, simply drop the --icons flag and the rest of eza’s output still works perfectly.
Uninstalling
To remove eza:
sudo apt remove eza
If you also want to remove the repository itself:
sudo rm /etc/apt/sources.list.d/deb.griffo.io.list
sudo rm /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Remember to remove any eza aliases you added to your shell configuration.
Conclusion
eza is one of those small upgrades that pays for itself every single day. Colourised output, icons, a built-in tree view and inline Git status make directory listings genuinely informative rather than a wall of monochrome text, and because the flags mirror ls, adopting it costs almost nothing.
Installing it through the deb.griffo.io repository means you get a current build with a single apt install, and future updates arrive alongside the rest of your Debian packages. Set up a couple of aliases and you will wonder how you tolerated plain ls for so long.
Resources
Disclaimer: The deb.griffo.io repository is an unofficial community project and is not affiliated with the official Debian or Ubuntu projects, or with the upstream eza project.