1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
@args --debugger
:c at the root repl is not allowed since no debugger is running yet
nix-repl> :c
error: command 'c' can only be used when the debugger is active
:c and other commands become available once a debugger starts
nix-repl> with {}; a
error: undefined variable 'a'
at «string»:1:10:
1| with {}; a
| ^
nix-repl> :?
The following commands are available:
<expr> Evaluate and print expression
<x> = <expr> Bind expression to variable
:?, :help Print help about all commands (this content)
:a, :add <expr> Add attributes from resulting set to scope
:b, :build <expr> Build a derivation
:bl, :build-with-gc-roots <expr> Build a derivation, creating GC roots in the working directory
:doc <expr> Show documentation for the provided function (experimental lambda support)
:e, :edit <expr> Open package or function in $EDITOR
:env Show environment stack
:i, :build-and-install <expr> Build derivation, then install result into current profile
:l, :load <path> Load Nix expression and add it to scope
:log <expr | .drv path> Show logs for a derivation
:p, :print <expr> Evaluate and print expression recursively
Strings are printed directly, without escaping.
:q, :quit Exit the REPL
:r, :reload Reload all files successfully loaded
:sh, :shell <expr> Build dependencies of derivation, then start nix-shell
:t, :type <expr> Describe result of evaluation
:te, :trace-enable [bool] Enable, disable, or toggle showing traces for errors
:u, :use <expr> Build derivation, then start nix-shell
Debug mode commands
:bt, :backtrace Show trace stack
:c, :continue Go until end of program, exception or builtins.break
:s, :step Go one step
:st, :show-trace [integer index] Show current trace. If an integer is provided, this switches to that stack beforehand. If the integer has an explicit + or - sign, it is treated as relative to the current stack index.
Flakes commands
:lf, :load-flake <flakeref> Load Nix flake and add it to the scope
we can now inspect state
nix-repl> :bt
1: error: Fake frame for debugging purposes
«string»:1:10
1| with {}; a
| ^
0: error: undefined variable 'a'
«string»:1:10
1| with {}; a
| ^
and resume execution
nix-repl> :c
error: undefined variable 'a'
at «string»:1:10:
1| with {}; a
| ^
the debugger is once again disabled
nix-repl> :c
error: command 'c' can only be used when the debugger is active
leaving the debugger from a toplevel error and entering it again doesn't leave old frames visible
nix-repl> with {}; a
error: undefined variable 'a'
at «string»:1:10:
1| with {}; a
| ^
nix-repl> :s
error: undefined variable 'a'
at «string»:1:10:
1| with {}; a
| ^
nix-repl> with {}; b
error: undefined variable 'b'
at «string»:1:10:
1| with {}; b
| ^
nix-repl> :bt
1: error: Fake frame for debugging purposes
«string»:1:10
1| with {}; b
| ^
0: error: undefined variable 'b'
«string»:1:10
1| with {}; b
| ^
exiting from here prints the error
nix-repl> :q
error: undefined variable 'b'
at «string»:1:10:
1| with {}; b
| ^
|