Syntax Summary¶
Below is a summary of the most important syntactic constructs in the Nix expression language. It’s not complete. In particular, there are many other built-in functions. See the Nix manual for the rest.
Example Description
Basic values
"Hello world"
A string
"${pkgs.bash}/bin/sh"
A string containing an expression (expands to "/nix/store/*hash*-bash-*version*/bin/sh"
)
true
, false
Booleans
123
An integer
./foo.png
A path (relative to the containing Nix expression)
Compound values
{ x = 1; y = 2; }
A set with attributes named x
and y
{ foo.bar = 1; }
A nested set, equivalent to { foo = { bar = 1; }; }
rec { x = "foo"; y = x + "bar"; }
A recursive set, equivalent to { x = "foo"; y = "foobar"; }
[ "foo" "bar" ]
A list with two elements
Operators
"foo" + "bar"
String concatenation
1 + 2
Integer addition
"foo" == "f" + "oo"
Equality test (evaluates to true
)
"foo" != "bar"
Inequality test (evaluates to true
)
!true
Boolean negation
{ x = 1; y = 2; }.x
Attribute selection (evaluates to 1
)
{ x = 1; y = 2; }.z or 3
Attribute selection with default (evaluates to 3
)
{ x = 1; y = 2; } // { z = 3; }
Merge two sets (attributes in the right-hand set taking precedence)
Control structures
if 1 + 1 == 2 then "yes!" else "no!"
Conditional expression
assert 1 + 1 == 2; "yes!"
Assertion check (evaluates to "yes!"
). See Warnings and Assertions for using assertions in modules
let x = "foo"; y = "bar"; in x + y
Variable definition
with pkgs.lib; head [ 1 2 3 ]
Add all attributes from the given set to the scope
(evaluates to 1
)
Functions (lambdas)
x: x + 1
A function that expects an integer and returns it increased by 1
(x: x + 1) 100
A function call (evaluates to 101)
let inc = x: x + 1; in inc (inc (inc 100))
A function bound to a variable and subsequently called by name (evaluates to 103)
{ x, y }: x + y
A function that expects a set with required attributes
x
and y
and concatenates
them
{ x, y ? "bar" }: x + y
A function that expects a set with required attribute
x
and optional y
, using
"bar"
as default value for
y
{ x, y, ... }: x + y
A function that expects a set with required attributes
x
and y
and ignores any
other attributes
{ x, y } @ args: x + y
A function that expects a set with required attributes
x
and y
, and binds the
whole set to args
Built-in functions
import ./foo.nix
Load and return Nix expression in given file
map (x: x + x) [ 1 2 3 ]
Apply a function to every element of a list (evaluates to [ 2 4 6 ]
)