# Environnement live commun aux deux formes d'image (PXE netboot / ISO # USB). Contient juste de quoi partitionner et lancer disko-install ; la # vraie configuration cible est toujours récupérée depuis git au moment # de l'install (repo public nixos_fleet ou repo privé nixos_users). { pkgs, lib, ... }: let installScript = pkgs.writeShellScriptBin "fleet-install" (builtins.readFile ./install.sh); in { nix.settings.experimental-features = [ "nix-command" "flakes" ]; # Le tmpfs racine de l'image live (netboot-minimal.nix) n'a par défaut # aucune taille explicite -> plafonné à 50% de la RAM par le noyau. Le # disque cible n'est pas encore monté à ce stade de l'install (le # paquet complet transite d'abord par ce tmpfs), donc un système # complet (Cinnamon + Firefox + LibreOffice + VLC...) peut dépasser # cette limite même avec beaucoup de RAM disponible. fileSystems."/".options = [ "size=90%" ]; # Certains PC du parc n'ont que 4 Go de RAM. Le disque cible ne peut pas # servir de secours (disko-install l'efface entièrement en une seule # opération, un swap posé dessus avant serait détruit en cours de # route) : on utilise du swap compressé en RAM (zram) à la place, qui # marche pareil en PXE et en USB sans dépendre d'un périphérique externe. zramSwap = { enable = true; memoryPercent = 100; # jusqu'à 1x la RAM en swap compressé (~2-3x effectif) }; environment.systemPackages = with pkgs; [ git parted gptfdisk util-linux # lsblk installScript ]; # disko-install n'est pas préinstallé : install.sh l'invoque via # `nix run github:nix-community/disko#disko-install`, ce qui évite de # dépendre d'un nom de paquet nixpkgs précis (pas de package `disko` # garanti tel quel côté nixpkgs) et reste conforme à l'usage documenté # du projet. networking.networkmanager.enable = true; services.xserver.xkb.layout = "fr"; console.keyMap = "fr"; # Root autologin sur tty1, l'installeur se lance automatiquement au # login. S'il échoue ou qu'on le quitte, on retombe sur un shell root # normal pour dépanner à la main — pas de piège sans issue. # mkForce : le profil installeur officiel (installation-device.nix) # définit aussi cette option (autologin "nixos"), même priorité que la # nôtre sans mkForce -> conflit sinon. services.getty.autologinUser = lib.mkForce "root"; users.users.root.password = lib.mkForce ""; programs.bash.loginShellInit = '' if [ "$(tty)" = "/dev/tty1" ] && [ -z "''${FLEET_INSTALLER_RAN:-}" ]; then export FLEET_INSTALLER_RAN=1 ${installScript}/bin/fleet-install fi ''; system.stateVersion = "26.05"; }