Nix uses a language of the same name for its package definitions.
The language is
- purely functional
- lazily evaluated
- dynamically typed
- entirely based on expressions
- inspired by Haskell and ML
- basically JSON with functions
Types
Basic types
Nix supports the following basic data types:
-
Integers:
123
-
Floats:
1.23
-
Strings:
"Hello World"
-
Booleans:
true
-
Paths:
./src/main/asdf
-
Lambdas (first-class functions):
x: x + 1
Composite types
Some types are used to form structures that hold other types.
List
Lists are delimited by square brackets. Elements in the list are seperated by whitespaces.
[ 1 2 3 "Hello World" [ "Nested" "list" ] ]
Attribute sets
The most important type in Nix. Nix contains lots of syntactic sugar to make working with attribute sets a pleasant experience.
{
a = 1;
b = {
hello = "World!";
};
# this is short for c = { hello = "World!"; }:
c.hello = "World!";
}