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 ?
|
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
|
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
|
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