❄️ Nixos : migration flakes et mono-repo
2026-02-26
Intro
J'ai migré la majorité de mes ordinateurs (serveurs et bureau) sous NixOS. Je ferai un billet plus tard à ce sujet.
Au début j'avais un dossier par machine, je ne bénéficiait donc pas de modules partagés.
J'ai profité de ma migration vers les flakes pour corriger tout ça, voici donc un petit tour d'horizon de mes modules.
Flakes ?
Petite parenthèse, même si je ne vais pas aller loin dans le détail car l'écosystème Nix est assez compliqué, mais pour ce billet, il faut juste retenir que les flakes permettent de créer un fichier ".lock" pour tous les packages installés.
Si on veut faire une analogie avec debian, on pourrait imaginer lancer un "dpkg -l", et sauvegarder la liste des packages ainsi que leurs versions.
Ensuite, si on veut réinstaller une machine, on pourrait prendre cette liste et l'appliquer pour arriver à un système identique.
Ça a l'air facile dit comme ça, mais c'est chose quasiment impossible à faire avec les distributions classiques, or c'est ce que NixOS promet, justement.
Arborescence
Je gère maintenant la configuration de mes toutes machines dans un seul repo git, organisé à peu près comme ceci :
Modules
Ici on va mettre tout ce qui sera commun à toutes les machines, par exemple mon utilisateur, avec mes programmes préférés. L'environement graphique si c'est un ordinateur de bureau.
Des règles pour améliorer la sécurité, des valeurs sysctl, l'envoi des logs centralisés, une supervision de base, etc...
Ça permet d'appliquer le même socle de partout.
Machines
Ici on va mettre les spécificités des machines :
- le partitionnement (sera géré par disko et nixos-anywhere)
- la conf réseau
- les services lancés (podman, http, kodi...)
- tout autre particularité (optims de batterie en cas de portable ou tablette, crons, ...)
Autre
Les derniers fichiers sont communs à toutes les machines :
- justfile : just est une alternative à make, avec une syntaxe plus moderne
- flake.nix : c'est le point d'entrée de toutes les commandes nix, il contient juste la liste des machines avec leurs dossiers respectifs
- flake.lock : c'est ici que la version du "catalogue distant" est sauvegardée, les versions de packages sont pour ainsi dire "pinnées"
Mise à jour du système
La première étape sera de lancer "nix flake update", qui mettra à jour le fichier "flake.lock".
Ensuite, un simple "nixos-rebuild" va créer la nouvelle génération (packages à jour et configuration) et l'appliquer aux machines voulues (en local ou via ssh).
Dotfiles
Pour les fichiers de conf utilisateur, les options nixos ne gèrent pas tout, on peut en gérer une partie avec "home-manager", un autre projet Nix, mais je préfère "chezmoi", que je trouve plus simple.
Conclusion
Toutes mes machines ont le même socle, en cas de soucis, le rollback est garanti par le fonctionnement même de NixOS.
Et si je dois installer ou réinstaller une machine, c'est rapide (ici je zappe le partitionnement, mais c'est tout aussi rapide) :