How to Install Nushell on Debian: A Shell Built Around Structured Data

Nushell (invoked as nu) is a modern shell that rethinks the Unix pipeline. Where traditional shells pass around unstructured streams of text, Nushell passes structured data: tables, records, and lists. That means ls gives you a real table you can sort and filter, ps returns rows you can query, and pipelines compose like a small data language rather than a fragile chain of awk, sed, and cut.

The result is a shell that feels equal parts command line and query engine. You can pull JSON from an API, filter it, reshape it, and render it as a table in a single readable pipeline, all with consistent syntax that works the same across Linux, macOS, and Windows.

Nushell is not part of the official Debian repositories, and building it from source pulls in the Rust toolchain. The unofficial deb.griffo.io repository sidesteps all of that by providing an up-to-date prebuilt package you install with apt.

What Makes Nushell Special?

  • ๐Ÿ“Š Structured data pipelines - Commands emit tables and records, not raw text, so pipelines stay predictable.
  • ๐Ÿ”Ž Powerful built-in commands - where, select, sort-by, group-by, and each bring data-frame ergonomics to the shell.
  • ๐Ÿงฉ Native format support - Parse and emit JSON, YAML, TOML, CSV, and more with from and to commands.
  • ๐Ÿ›ก๏ธ Strong typing - Values carry types (int, string, date, filesize), catching mistakes before they run.
  • ๐ŸŒ Cross-platform - The exact same scripts run on Debian, macOS, and Windows.
  • โš™๏ธ Custom commands and modules - Define reusable commands and organise them into importable modules.
  • ๐ŸŽจ Rich errors - Compiler-style error messages point at the exact span that failed.
  • โšก Written in Rust - Fast, memory-safe, and distributed as a single binary.

Why Use the deb.griffo.io Repository?

  • Easy installation and updates through the familiar APT workflow.
  • Automatic dependency management handled by the package.
  • Always tracks upstream releases, so new Nushell versions arrive quickly.
  • No compiling from source and no need to install or maintain a Rust toolchain.
  • Works across supported Debian releases (Bookworm, Trixie, and Sid).

Prerequisites

Before starting, make sure you have:

  • A Debian-based system (Bookworm 12, Trixie 13, or Sid)
  • sudo privileges
  • curl installed (sudo apt install curl if it is missing)

Step 1: Add the deb.griffo.io Repository

Add the signing key and the repository to 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

What each command does:

  1. Create the keyrings directory - Prepares /etc/apt/keyrings with appropriate permissions.
  2. Install the GPG key - Downloads and de-armours the signing key so APT can verify packages.
  3. Add the repository - Writes a sources entry bound to that key, detecting your Debian codename automatically.
  4. Update the package list - Refreshes APT so the new packages become visible.

Step 2: Update the Package List

If you did not run the last line above, do it now:

sudo apt update

Step 3: Install Nushell

Install the package with APT:

sudo apt install nushell

This installs the latest packaged Nushell together with any dependencies.

Step 4: Verify the Installation

Note that the binary is nu, not nushell:

nu --version

You should see something like:

0.95.0

Start an interactive session at any time by running:

nu

Getting Started with Nushell

Exploring Structured Data

The first thing to try is ls, which returns a real table you can manipulate:

# Sort files by size, largest first
ls | sort-by size --reverse

# Only files bigger than 10 MB
ls | where size > 10mb

# Pick just the columns you care about
ls | select name size modified

Because every command speaks the same structured language, these pieces compose naturally.

Working with Formats

Nushell parses and emits common data formats out of the box:

# Read a JSON file and query it
open package.json | get dependencies | columns

# Convert CSV to a table, filter, and export as JSON
open data.csv | where age > 30 | to json

# Fetch JSON from an API and reshape it
http get https://api.github.com/repos/nushell/nushell | select name stargazers_count

Custom Commands

Define your own commands with typed parameters:

# Define a command in your config or a script
def greet [name: string] {
    $"Hello, ($name)!"
}

greet "Debian"

Group related commands into a module and import them with use my_module.nu.

Configuration

Nushell keeps its configuration in the XDG config directory. On Debian the files live at:

~/.config/nushell/config.nu   # general settings, aliases, keybindings
~/.config/nushell/env.nu      # environment variables and PATH

Edit them quickly with the built-in helpers:

config nu     # open config.nu in your editor
config env    # open env.nu in your editor

Making Nushell Your Login Shell

If you decide Nushell should be your default interactive shell, register it and switch:

# Add nu to the list of valid login shells
command -v nu | sudo tee -a /etc/shells

# Set it as your login shell
chsh -s "$(command -v nu)"

Log out and back in for the change to take effect. Note that Nushell is not POSIX, so scripts written for bash will not run unchanged.

Keeping Nushell Updated

Because Nushell came from the repository, updates are part of routine maintenance:

sudo apt update && sudo apt upgrade

Other Tools from deb.griffo.io

The repository packages several tools that pair well with a modern shell:

  • starship - A fast, customisable prompt that works natively with Nushell.
  • zoxide - A smarter cd that learns your most-used directories.
  • atuin - Searchable, synced shell history with rich context.
  • eza - A modern ls replacement with colours and Git awareness.

Troubleshooting

GPG or Key Errors

If APT reports the repository is not signed, re-add 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 install nushell cannot find the package:

  1. Run sudo apt update again to refresh the index.
  2. Confirm your Debian release is supported (Bookworm, Trixie, or Sid).
  3. Inspect the sources entry:
cat /etc/apt/sources.list.d/deb.griffo.io.list

Commands Behave Differently from Bash

Remember that Nushell is not a POSIX shell. Constructs like export VAR=value, &&, and $(...) are replaced by Nushell equivalents. Consult the built-in help when something familiar does not work:

help commands          # list every command
help where             # detailed help for a specific command

Uninstalling

To remove Nushell:

sudo apt remove nushell

If you set it as your login shell, switch back to bash first:

chsh -s /bin/bash

To remove the repository entirely:

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 reimagines the shell as a place where data is structured and queryable rather than a soup of text you have to re-parse for every task. On Debian, the deb.griffo.io repository is the most convenient way to install a current build and keep it aligned with your system updates.

Whether you adopt it as a full login shell or reach for it when a task calls for real data wrangling, Nushell rewards the switch with pipelines that are both readable and reliable.

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.