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; } An set with attributes names 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 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 ])