Files
Nixos_Fleet/installer/installer-base.nix
T

87 lines
3.5 KiB
Nix

# 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
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";
}