two more paraph
This commit is contained in:
parent
a8454b1856
commit
f1ed359f66
@ -101,4 +101,52 @@ Vous aurez remarqué de votre œil attentif que la fonction s'appelle `mkDerivat
|
||||
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".
|
||||
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'";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user