How to Install Nushell on Ubuntu: A Shell Built Around Structured Data
Nushell, run as nu, is a shell for people who are tired of gluing together grep, awk, sed, and cut just to slice a bit of output. Instead of moving unstructured text between commands, Nushell moves structured data: tables, records, and lists. Run ls and you get a table you can sort and filter; run ps and you get rows you can query; pipe JSON from a web request straight into filtering commands with no parsing gymnastics.
It effectively turns your terminal into a small, consistent data language. The same operators that filter a directory listing also filter API responses, CSV files, and system tables, which makes complex one-liners far easier to read and reason about.
Ubuntu does not ship Nushell in its default archives, and compiling it yourself means bringing in the whole Rust toolchain. The unofficial deb.griffo.io repository avoids that entirely, delivering a current prebuilt package you can install with apt.
What Makes Nushell Special?
- ๐ Structured pipelines - Every command emits tables and records rather than plain text.
- ๐ Data-first commands -
where,select,sort-by,group-by, andeachfeel like querying a dataset. - ๐งฉ Built-in format parsers - Read and write JSON, YAML, TOML, and CSV with
from/toandopen. - ๐ก๏ธ Typed values - Ints, strings, dates, and filesizes carry types so mistakes surface early.
- ๐ Same shell everywhere - Scripts behave identically on Ubuntu, macOS, and Windows.
- โ๏ธ Custom commands and modules - Build reusable, importable commands with typed arguments.
- ๐จ Helpful error messages - Errors highlight the exact expression that went wrong.
- โก Rust-powered - Fast, safe, and shipped as a single binary.
Why Use the deb.griffo.io Repository?
- Straightforward installs and upgrades through APT, just like any Ubuntu package.
- Automatic dependency management provided by the packaging.
- Tracks upstream releases closely, so updates land promptly.
- No source builds and no Rust toolchain to install or maintain.
- Supports current Ubuntu releases (Jammy, Noble, and newer).
Prerequisites
Before you begin, make sure you have:
- An Ubuntu system (Jammy 22.04 LTS, Noble 24.04 LTS, or newer)
sudoprivilegescurlinstalled (sudo apt install curlif needed)
Step 1: Add the deb.griffo.io Repository
Register the key and repository with APT:
# 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 the breakdown:
- Creates the keyrings directory at
/etc/apt/keyringswith the right permissions. - Downloads and de-armours the GPG key so APT can validate package signatures.
- Adds the sources entry bound to that key, auto-detecting your Ubuntu codename.
- Refreshes the package index so APT sees the new packages.
Step 2: Update the Package List
If you skipped the last command, run it now:
sudo apt update
Step 3: Install Nushell
Install with APT:
sudo apt install nushell
The latest packaged Nushell and its dependencies are installed automatically.
Step 4: Verify the Installation
The executable is named nu, not nushell:
nu --version
You should see output similar to:
0.95.0
Drop into an interactive session whenever you like:
nu
Getting Started with Nushell
Your First Structured Pipeline
Start with ls, which returns a genuine table:
# Show the ten largest files
ls | sort-by size --reverse | first 10
# Only directories
ls | where type == dir
# Keep just a couple of columns
ls | select name size
Since every command speaks the same structured language, these snippets chain together cleanly.
Parsing and Emitting Data
Nushell understands common formats natively:
# Open a JSON file and inspect its keys
open package.json | columns
# Filter a CSV and export the result as JSON
open data.csv | where status == "active" | to json
# Query a live API response
http get https://api.github.com/repos/nushell/nushell | select name forks_count
Defining Custom Commands
Custom commands accept typed parameters and behave like built-ins:
def welcome [name: string] {
$"Welcome to Nushell, ($name)!"
}
welcome "Ubuntu"
Collect related commands into a module and load it with use tools.nu.
Configuration Files
Nushell stores configuration under the XDG config directory. On Ubuntu that means:
~/.config/nushell/config.nu # settings, aliases, keybindings
~/.config/nushell/env.nu # environment and PATH setup
Open them directly from within Nushell:
config nu
config env
Setting Nushell as Your Default Shell
To use Nushell as your interactive login shell:
# Register nu as a valid shell
command -v nu | sudo tee -a /etc/shells
# Make it your login shell
chsh -s "$(command -v nu)"
Log out and back in to apply the change. Keep in mind that Nushell is not POSIX-compatible, so existing bash scripts will not run under it unchanged.
Keeping Nushell Updated
As a package from the repository, Nushell updates with everything else:
sudo apt update && sudo apt upgrade
Other Tools from deb.griffo.io
The repository packages several complementary shell tools:
- starship - A fast, customisable prompt with first-class Nushell support.
- zoxide - A smarter
cdthat ranks directories by use. - atuin - Searchable, synced shell history with context.
- eza - A modern, colourful
lsreplacement with Git integration.
Troubleshooting
GPG or Key Errors
If APT says the repository is not signed, re-import the key:
sudo rm -f /etc/apt/keyrings/deb.griffo.io.gpg
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Package Not Found
If APT cannot find the nushell package:
- Re-run
sudo apt updateto refresh the index. - Confirm your Ubuntu release is supported (Jammy, Noble, or newer).
- Check the sources entry:
cat /etc/apt/sources.list.d/deb.griffo.io.list
Familiar Bash Syntax Fails
Nushell is not POSIX, so export, &&, and command substitution with $(...) differ from bash. Lean on the built-in help to find the Nushell way:
help commands
help select
Uninstalling
To remove Nushell:
sudo apt remove nushell
If you made it your login shell, switch back to bash first:
chsh -s /bin/bash
To remove the repository as well:
sudo rm -f /etc/apt/sources.list.d/deb.griffo.io.list
sudo rm -f /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Conclusion
Nushell brings structured, queryable data to the command line, replacing brittle text munging with pipelines that read almost like plain English. On Ubuntu, installing it from deb.griffo.io gives you a current build that stays up to date through your normal apt upgrade routine.
Adopt it as a daily driver or keep it in your back pocket for data-heavy tasks; either way, Nushell makes the terminal a noticeably more capable place to work.
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 Nushell project.