2025-05-06
List available commands with :?
:
nix repl
Nix 2.24.11
Type :? for help.
nix-repl> :?
The following commands are available:
<expr> Evaluate and print expression
<x> = <expr> Bind expression to variable
:a, :add <expr> Add attributes from resulting set to scope
:b <expr> Build a derivation
:bl <expr> Build a derivation, creating GC roots in the
working directory
:e, :edit <expr> Open package or function in $EDITOR
:i <expr> Build derivation, then install result into
current profile
:l, :load <path> Load Nix expression and add it to scope
:lf, :load-flake <ref> Load Nix flake and add it to scope
:p, :print <expr> Evaluate and print expression recursively
Strings are printed directly, without escaping.
:q, :quit Exit nix-repl
:r, :reload Reload all files
:sh <expr> Build dependencies of derivation, then start
nix-shell
:t <expr> Describe result of evaluation
:u <expr> Build derivation, then start nix-shell
:doc <expr> Show documentation of a builtin function
:log <expr> Show logs for a derivation
:te, :trace-enable [bool] Enable, disable or toggle showing traces for
errors
:?, :help Brings up this help menu
You can quickly evaluate a random Nix expression:
nix repl --expr '{a = { b = 3; c = 4; }; }'
Welcome to Nix 2.11.0. Type :? for help.
Loading installable ''...
Added 1 variables.
nix-repl> a
{ b = 3; c = 4; }
--expr
flag is helpful to prime directly the Nix REPL with valuable data
or values.We can use the --expr
flag to load a random Nix Flake directly:
nix repl --expr 'builtins.getFlake "github:nix-community/ethereum.nix"'
Also, you can load a flake directly inside the REPL with :load-flake
or :lf
:
nix repl
nix-repl> :lf github:nix-community/home-manager
nix repl
and inside the repl type :lf /path/to/flake
. Or nixos-rebuild repl --flake /path/to/flake
the latter provides a helpful welcome script showing what is loaded into your repl's scope.I like to create a simple repl output to load your flake into the environment with nix repl .#repl
.
First, we'll create a REPL environment to inspect and debug our flake's outputs,packages, and configurations. Define a repl
output in flake.nix
for easy access with nix repl .#repl
:
# flake.nix
outputs = { self, nixpkgs, ... }: let
pkgs = import nixpkgs { system = "x86_64-linux"; };
in {
repl = import ./repl.nix {
inherit (pkgs) lib;
flake = self;
pkgs = pkgs;
};
};
And in repl.nix
:
# repl.nix
{
lib,
flake,
pkgs,
}: {
inherit flake pkgs lib;
configs = flake.nixosConfigurations;
}
Load REPL environment with:
nix repl .#repl
Attributes:
nix-repl> builtins.attrNames flake.inputs
[
"dont-track-me"
"helix"
"home-manager"
"hyprland"
"neovim-nightly-overlay"
"nixpkgs"
"nvf"
"rose-pine-hyprcursor"
"stylix"
"treefmt-nix"
"wallpapers"
"wezterm"
"yazi"
]
nix-repl> builtins.attrNames flake.outputs
[
"checks"
"devShells"
"formatter"
"nixosConfigurations"
"packages"
"repl"
]
nix-repl> flake.outputs.formatter
{
x86_64-linux = «derivation /nix/store/q71q00wmh1gnjzdrw5nrvwbr6k414036-treefmt.drv»;
}
nix-repl> flake.outputs.packages.x86_64-linux.default
«derivation /nix/store/6kp660mm62saryskpa1f2p6zwfalcx2w-default-tools.drv»
From here out I'll leave out the nix-repl>
prefix just know that it's there.
Check lib version(Nixpkgs lib
attribute):
lib.version
"25.05pre-git"
magic
list yours in its place:configs.magic.config.environment.systemPackages
# list home.packages
configs.magic.config.home-manager.users.jr.home.packages
:p configs.magic.config.home-manager.users.jr.programs.git.userName
TSawyer87
:p builtins.typeOf configs.magic
set
Debugging Module System:
Check if configs.magic
is a valid configuration:
:p builtins.attrNames configs.magic