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.
ExampleDescriptionBasic values"Hello world"A string"${pkgs.bash}/bin/sh"A string containing an expression (expands to "/nix/store/hash-bash-version/bin/sh")true, falseBooleans123An integer./foo.pngA 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 elementsOperators"foo" + "bar"String concatenation1 + 2Integer addition"foo" == "f" + "oo"Equality test (evaluates to true)"foo" != "bar"Inequality test (evaluates to true)!trueBoolean negation{ x = 1; y = 2; }.xAttribute selection (evaluates to 1){ x = 1; y = 2; }.z or 3Attribute selection with default (evaluates to 3){ x = 1; y = 2; } // { z = 3; }Merge two sets (attributes in the right-hand set taking precedence)Control structuresif 1 + 1 == 2 then "yes!" else "no!"Conditional expressionassert 1 + 1 == 2; "yes!"Assertion check (evaluates to "yes!"). See for using assertions in moduleslet x = "foo"; y = "bar"; in x + yVariable definitionwith pkgs.lib; head [ 1 2 3 ]Add all attributes from the given set to the scope
(evaluates to 1)Functions (lambdas)x: x + 1A function that expects an integer and returns it increased by 1(x: x + 1) 100A 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 + yA function that expects a set with required attributes
x and y and concatenates
them{ x, y ? "bar" }: x + yA function that expects a set with required attribute
x and optional y, using
"bar" as default value for
y{ x, y, ... }: x + yA function that expects a set with required attributes
x and y and ignores any
other attributes{ x, y } @ args: x + yA function that expects a set with required attributes
x and y, and binds the
whole set to argsBuilt-in functionsimport ./foo.nixLoad and return Nix expression in given filemap (x: x + x) [ 1 2 3 ]Apply a function to every element of a list (evaluates to [ 2 4 6 ])