# Nix dans les cours

On a vu au premier cours comment avoir NixOS, il est tout à fait possible de se contenter d'avoir Nix sur votre machine, cela peut être fait de plusieurs façons selon votre distro (y compris sous WSL, mais je déconseille).

## Quelques liens selon les distros

- Arch Linux: <https://wiki.archlinux.org/index.php/Nix>
- Debian: <https://nokomprendo.frama.io/tuto_fonctionnel/posts/tuto_fonctionnel_03/2017-12-23-README.html>
- Ubuntu: <https://doc.ubuntu-fr.org/nix>
- WSL: <https://dev.to/notriddle/installing-nix-under-wsl-2eim>
- Gentoo: <https://trofi.github.io/posts/196-nix-on-gentoo-howto.html>
- macOS (compliqué sur Catalina): <https://www.softinio.com/post/moving-from-homebrew-to-nix-package-manager/>

## Comment utiliser Nix dans ce cours?

On utilisera <https://direnv.net/> que vous pouvez installer avec Nix en faisant `nix-env -iA nixpkgs.direnv` (sous les distributions non-NixOS) ou `nix-env -iA nixos.direnv` (sous NixOS) par exemple

Il faudra ensuite le configurer pour votre shell: <https://direnv.net/docs/hook.html>

Après, chaque dossier d'illustration **devrait** en principe comporter un `.envrc`, ce qui fait que vous devriez avoir une indication de la part de direnv qui vous invite à autoriser l'exécution de celui-ci, ce qui déclenchera automatiquement nix pour évaluer un fichier Nix qui mettra en place l'environnement pour juste le dossier courant, en sortant de celui-ci, tout disparaîtra comme s'il n'avait jamais existé, cela se fait par `direnv allow`.

N.B. : En vrai, non. Tout finit dans votre /nix/store local, faites attention à bien exécuter `nix-collect-garbage -d` pour nettoyer un peu votre /nix/store et pas vous retrouver avec des gigaoctets de choses inutilisés.

Une fois ceci fait, vous devriez pouvoir essayer les exemples du cours en un clic.

## Comment ne pas avoir à utiliser Nix?

Le choix d'utiliser Nix est très simple, tous les étudiants n'ont pas les mêmes environnements, distributions, système et hardware.

Docker est évidemment une mauvaise solution pour un cours fondamental, puisqu'on va se retrouver avec des conteneurs qui pèsent des tonnes, des galères avec ceux qui ont pas les bons systèmes de fichiers (overlay2, etc.), les bons noyaux, etc.

Ici, Nix nous permet de streamliner les dépendances et les environnements de tout le monde, pour ceux qui ne sont pas adeptes de l'administration système. C'est aussi une simplicité pour les auteurs du cours qui n'ont pas à savoir toutes les subtilités de toutes les distros des gens en plus du fait que certains étudiants modifient les choses sans se rendre compte et obtiennent des résultats bizarres parce que leur `~/.bashrc` est bizarre.

Si en dépit de cela, vous refusez Nix (parce que vous utilisez Guix, je peux rien faire pour vous dans ce cas.), c'est OK.

Il vous faudra pour suivre le cours comprendre par vous même comment mettre en place les dépendances, i.e. utiliser pip/Poetry ou alors votre package manager système pour installer les dépendances, les lancer, etc. Vous pouvez bien sûr nous demander, mais on a pas accès à votre machine, donc à chaque demande, incluez un max de logs afin qu'on ne passe pas notre temps à faire des diagnostics dans le vide.

De toute évidence, à nouveau, c'est pour simplifier à fond votre vie et la nôtre, et passer du temps à faire des choses intéressantes, plutôt qu'ennuyeuses.
