Skip to main content

Le langage

Tout d'abord il est intéressant de comprendre comment fonctionne le langage Nix car c'est vraiment la base de tout le reste. On va donc passer en revue les bases nécessaires de la programmation fonctionnelle et la syntaxe de Nix.

Types de données

Voici la liste des types primitifs et comment ils sont représentés en Nix :

TypeDescriptionExemple
StringChaine de caractère''hello world'' ou "hello world"
NombreNombre entier ou non123 ou 12.4
CheminChemin vers un fichier ou dossier (doit contenir un /)./builder.sh ou /bin/bash
BooléenVrai ou fauxtrue ou false
NullRien du toutnull

Ensuite voici les autres types :

TypeDescriptionExemple
ListeListe d'expressions Nix (notez qu'il n'y a pas de , mais seulement un espace)[ 123 ./foo.bar "abc" ]
Ensemble d'attributsAssociation de clé-valeur{ x = 123; y = 56; file = ./builder.sh; name = "something"; }, { x = 123; y = 56; }.x retourne 123

Les différentes expressions

  • Ensemble d'attributs récursifs qui permettent de référencer d'autres attributs du même set depuis le set lui-même
# x référence y, et y référence 123
rec {
  x = y;
  y = 123;
}.x # retourne 123
  • Expressions "let-in" qui permet de définir des variables ou fonctions locales qui sont ensuite utilisées dans le "in"
# Le let défini les variables locales x et y
let
  x = "foo";
  y = "bar";

# Qui sont ensuite utilisée dans le in, ce qui donne donc "foobar"
in x + y
  • L'héritage des attributs avec inherit permet d'éviter de se répèter
#  Variable locale x et y
let 
  x = 123; 
  y = 456;

# Dans un set
in { 
  inherit x y; # équivaut à dire "x = x; y = y;"
  # soit définir l'attribut "x" du nouveau set comme étant la valeur de la variable locale "x" définie dans let
} # ceci retournera donc { x = 123; y = 456; }
// Donc
let
  x = 123;
  y = 456;
in { inherit x y; }

// est la même chose que
let 
  x = 123;
  y = 456;
in {
  x = x;
  y = y;
}