1 private link
Un article intéressant sur les pours/contres de NixOS.
En (très) gros, NixOS va dans la (très) bonne direction concernant la gestion des dépendances, les upgrades en zero-downtime et la mise à disposition de nouvelles versions. Il y a fort à parier que d'autres distributions vont prendre la même voie dans quelques temps.
A côté de cela, la configuration se fait sur base d'un langage fonctionnel (qui n'est pas super abordable), et que l'OS n'irait pas assez loin au niveau de l'isolation (mais ça...).
Fedora Silverblue prend aussi un peu la voie de snapshot et d'immutabilité, mais Nix va beaucoup plus loin et est beaucoup plus souple.
Bref, <3
Migrating from asdf to Nix has been an interesting journey. They both share some ideas when it comes to managing the build environment. However, Nix is several orders of magnitude more powerful than asdf.
If we only focus on Nix shells, Nix can not only manage the languages you use, but also every other tool you would need for your development process. You can use pure shells to check if your environment is complete, avoiding to use tools available globally on your machine. Also, if a tool or version is not available in nixpkgs, you can easily write your own derivations.
When it comes to environment switching, asdf seems to be a winner in the first run, but once you have set up direnv you quickly forget about that.
Generally speaking, Nix is a more broader tool: you can use it to install software on your machine without messing your system, manage your configuration or automate your builds. If you are interested in Nix, you should also learn about these aspects.
I still have to figure about using Nix as part of my Rust workflow. I have especially questions about the RLS setup and cargo commands like cargo watch. Once it is done, I may come with an article about it. I also plan to write a much shorter article focused on Elixir projects—including Phoenix and Nerves—as I have managed to build and run them in pure Nix shells.
Deux-trois remarques par rapport à NixOS.
La configuration du système complet se fait via un seul fichier texte (/etc/nixos/configuration.nix
) et qui spécifie l'ensemble des services, paquets, utilisateurs et comportements. Par exemple, pour avoir un utilisateur dans sudo, whell, networkmanager, gnome, ... on a un petit fichier d'une centaine de lignes (pratiquement auto-généré), qui peut être mis en conf' (Git, tout ça...).
Le deuxième niveau, c'est l'isolation utilisateur. En tant que non-root, je peux installer tout ce qui est dispo dans les dépôts.
Si un binaire n'existe pas, les sources sont généralement dispos. Elles sont ensuite placées dans un store (/nix/store/...
) et le système continue à vivre sa vie grâce à des liens symboliques :-) Par exemple:
[fred@nixos:~]$ nix-env --install vscodium
replacing old 'vscodium-1.56.2'
installing 'vscodium-1.56.2'
building '/nix/store/562hzi24sijm8vvl5h4w69lxk15nmzhm-user-environment.drv'...
created 54 symlinks in user environment
Le dernier niveau, c'est l'isolation dans un shell kleenex. Une fois que le shell est détruit, toutes dépendances le sont également. Une forme d'environnement disposable ;-)
[fred@nixos:~]$ python --version
python: command not found
[fred@nixos:~]$ nix-shell -p python310
[nix-shell:~]$ python --version
Python 3.10.0a5
[nix-shell:~]$ exit
exit
[fred@nixos:~]$ python --version
python: command not found