two more paraph

This commit is contained in:
Shobu 2025-09-15 14:55:52 +02:00
parent a8454b1856
commit f1ed359f66

View File

@ -102,3 +102,51 @@ et non pas `mkPackage` par exemple comme on aurais pu s'y attendre. Pourquoi ça
Dans nix, la dérivation est le bloc fondamental du système de build de nix, un
package n'étant qu'une forme de dérivation. Pour rester simple, je resterais sur
l'appellation plus classique de "package".
Un soucis de cette approche, c'est que le type du retour de notre fonction n'est pas
specialement definis, on pourrai avoir un package comme ici, mais aussi une shell avec
mkShell, ou un host dans le cas d'une configuration nixos. Le seul moyen de le savoir,
c'est d'avoir une semantique propre sur ses noms de fichiers. De meme, les outils autour
de nix vont s'attendre a un certain type de retour, mais vont quand meme builder la derivation
avant de pouvor determiner celui-ci. Par exemple, nix-shell vas s'attendre a avoir le resultat
d'un mkShell pour fonctionner, mais n'aura pas de moyen de le savoir avant d'avoir interpreter
la fonction fournis.
C'est ainsi que pour resoudre ce probleme d'uniformitee (et quelques autres raisons), les **flakes**
on ete mis en place.
<!-- pr:end_slide -->
les flakes c'est quoi ?
===
```nix
{
description = "";
inputs = {};
outputs = inputs: {};
}
```
Simplement, un flake est un dossier dans lequel se trouve un fichier `flake.nix`
contenant un attribut set avec les attributs suivants:
* `description`: la description de ce que fait le flake.
* `inputs`: un attribut set contenant les dependences du flake, typiquement une instance
de nixpkgs. Classiquement, chaque input est un repo contenant un autre flake, sur github,
gitlab ou en local et peut etre pin sur une branche ou un commit specifique.
* `outputs`: une fonction avec pour parametre le resultat de l'interpretation des inputs
et retournant un attribut set ou chaque attribut est un resultat possible retourne par
notre flake, bien qu'il existe des attributs standard utiliser par les outils de nix
(nix build, nix shell, nix develop), le developpeur est libre de retourner ce qu'il veut,
ce qui permet a des outils comme *colmena* de creer leur propre standards.
Pour un package, on vas ainsi retrouver l'attribut `packages.<architecture>.<paquet>` indiquant
que le flake peut fournir un ou plusieurs packages pour une architecture donnee.
Ainsi, le flake suivant
```nix
{
description = "un flake d'exemple";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
};
outputs = inputs: {
packages."x86_64-linux".default =
with import inputs.nixpkgs {system = "x86_64-linux";};
writeShellScriptBin "hello" "echo 'world hello'";
}
}
```