# NixOS Ce repo contient la configuration NixOS des différentes machines présentes dans l'infrastructure d'Aurore et se décompose en plusieurs parties : - [disks](./disks) : contient la configuration [disko](https://github.com/nix-community/disko) des machines. - [devshells](./devshells) : contient des shells nix pour obtenir des environnements avec l'ensemble des dépendances nécessaires. - [hosts](./hosts) : contient la configuration spécifique à chaque machine, typiquement la configuration réseau, - [profiles](./profiles) : contient la configuration des différents modules utilisés. - [secrets](./secrets) : contient l'ensemble des secrets chiffrés avec [agenix](https://github.com/ryantm/agenix). ## Gestion des secrets Dans Nix, l'ensemble des fichiers est écrit dans `/nix/store`, ce qui est accessible et donc visible par tous les programmes (et tous les utilisateur⋅ices). De plus, l'ensemble des fichiers de configurations se trouvent sur un repo git publique. Pour ces deux raisons, il est préférable de chiffrer les secrets à l'aide de [agenix](https://github.com/ryantm/agenix). Plus de détails sont disponibles dans [secrets](./secrets). ## Installation d'une machine Si la configuration est déjà présente dans ce projet, il vous suffit de suivre les étapes suivantes : 1. Assurez-vous que la machine a accès à Internet et possède un serveur DNS, 1. Importez les fichiers de configuration, 1. Si nécessaire, il faut générer le fichier `hardware-configuration.nix` à l'aide de la commande `nixos-generate-config --no-filesystems --root .` puis l'ajouter dans la configuration, 1. Vérifiez que la configuration `disko` utilisée est compatible, la commande `lsblk` devrait être suffisante pour cela, 1. Partitionnez les disques : l'usage de `disko` simplifie cette étape. En effet, il suffit d'exécuter la commande : `nix run github:nix-community/disko --extra-experimental-features "nix-command flakes" -- --mode disko --flake #`, et `disko` s'occupe automatiquement du montage des partitions créées, 1. Créez le répertoire `/mnt/etc/nixos` et ajoutez les fichiers de configuration dans ce répertoire, 1. Installez NixOS : `nixos-install --flake #`, 1. Si tout s'est bien passé, un mot de passe vous sera demandé pour le mot de passe root, entrez-le, puis redémarrez la machine avec `reboot`. 1. Pensez à push la configuration ainsi écrite. Remarque : > S'il n'y a pas suffisamment de place mémoire sur le disque d'installation lors > du partitionnement des disques avec `disko`, il est possible d'étendre le > `/nix/store` en utilisant la RAM de la machine à l'aide de la commande : > `mount -o remount,size=3G,noatime /nix/.rw-store` > Cependant, vérifiez au préalable d'avoir suffisamment de RAM. Remarque : > Si l'installation nécessite le déchiffrement de secrets, l'installation > pourrait échouer. Veuillez alors suivre la procédure décrite dans > [secrets](./secrets). ## Formattage La flake contient un formatter ([treefmt](https://github.com/numtide/treefmt-nix)) qui s'exécute automatiquement lors d'un `nix flake check`. Si le repo n'est pas formatté, une erreur sera alors retournée en suggérant des modifications. Pour appliquer les modifications suggérées, il est alors possible d'exécuter la commande : ```bash $ nix fmt ```