# NixOS dotfiles ## Structure des fichiers ``` + hosts | | | + generic <- Iso minimal pour nixos-anywhere | | | + myhost <- Tout ce qui est unique à une machine vient ici | + modules | | | + core <- Modules partagés entre toutes les machines | | | + optionnal <- Modules pour au moins deux machines | + flake.nix | + custom.iso ``` - Si un seul fichier nix, pas de sous dossier (openfortivpn) - Si plusieurs fihchiers nix, un sous dossier (ex desktop) ## Workflow 1. Création d'une iso (push en ligne pour kexec) 2. Copie de l'iso sur le repo 3. nixos-anywhere (pour déployer une install minimale) 4. copie du disk-config.nix et du hardware-config.nix dans le dossier host qui va bien 5. deploy-rs pour push une config sur une image generic ou maj existant. ## Création d'une iso ``` nixos-generate --format iso --configuration ./customiso.nix -o ~/Downloads/nixos.iso ``` si on veut utiliser kexec, il faut pousser l'iso en ligne pour que le serveur cible puisse la télécharger. ## Nixos anywhere On ajoute à `~/.ssh/config` ``` nixos-anywhere --flake .#generic --target-host root@192.168.122.204 -i ~/.ssh/id_ed25519_beastie --generate-hardware-config nixos-generate-config ./hosts/generic/hardware-configuration.nix ``` si l'installation est en local, on peux créer le partitionnement avec la commande suivante : ``` sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --yes-wipe-all-disks --mode destroy,format,mount ./disko.nix ``` et faire une installation standard. Le mieux est de download le repo et de faire un nixos-anywhere en ssh sur localhost ou depuis un autre pc Une fois la manipulation finie, on copie `hosts/generic` dans `hosts/hostname`. Ainsi, on garde le bon `disk-config.nix` et `hardware-configuration.nix` ## déployer la bonne configuration Avant de déployer la configuration, il faut ajouter la clé sops-nix ``` cat /etc/ssh/ssh_host_ed25519_key.pub | ssh-to-age vi .sops.yaml sops updatekeys secrets.yaml git commit -am "add myhost sops key" git push origin main nix flake update mysecrets ``` On édite `hosts/hostname/default.nix` et on inclus les bons modules. On lance le rebuild : ``` nixos-rebuild switch --flake ~/dev#test-kvm --target-host beastie@192.168.122.204 --sudo ```