# 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" ]; # netboot.nix définit DEUX tmpfs distincts, ni l'un ni l'autre avec une # taille explicite -> plafonnés à 50% de la RAM chacun par défaut : # - "/" : la racine du système live lui-même (petite) # - "/nix/.rw-store" : la vraie zone où atterrissent tous les nouveaux # paquets téléchargés/construits pendant l'install # (overlay au-dessus du squashfs .ro-store en # lecture seule). C'est CELLE-LÀ qui sature en # premier sur un système complet (Cinnamon + # Firefox + LibreOffice + VLC...), pas "/". # # netboot.nix définit ces deux options via mkImageMediaOverride, qui vaut # mkOverride 60 — une simple assignation ici (priorité 100 par défaut) # est donc entièrement ignorée, pas fusionnée (constaté : le premier # essai n'a eu aucun effet). Il faut lib.mkForce (priorité 50, plus # fort que 60) pour vraiment gagner — et comme mkForce REMPLACE toute la # liste plutôt que de la compléter, on remet mode=0755 dedans aussi. fileSystems."/".options = lib.mkForce [ "mode=0755" "size=20%" ]; fileSystems."/nix/.rw-store".options = lib.mkForce [ "mode=0755" "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, fallocate e2fsprogs # chattr (NOCOW pour le swapfile sur btrfs) 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"; }