{ config, pkgs, lib, ... }: { # ───────────────────────────────────────────────────────────── # Machine à faible RAM (4 GiB) : on privilégie TOUJOURS les # binaires pré-compilés (caches) plutôt que la compilation locale. # ───────────────────────────────────────────────────────────── nix.settings = { experimental-features = [ "nix-command" "flakes" ]; # Caches binaires : on récupère un maximum de paquets déjà # compilés pour éviter de compiler sur cette machine. substituters = [ "https://cache.nixos.org" "https://hyprland.cachix.org" "https://nix-community.cachix.org" ]; trusted-substituters = [ "https://cache.nixos.org" "https://hyprland.cachix.org" "https://nix-community.cachix.org" ]; trusted-public-keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ]; trusted-users = [ "root" "@wheel" ]; # Toujours interroger les caches, ne jamais partir du principe # qu'un paquet doit être compilé localement. builders-use-substitutes = true; fallback = true; # si un cache tombe, on tente ailleurs connect-timeout = 10; # Limiter la pression mémoire pendant la construction : # peu de jobs en parallèle, sinon 4 Gio saturent vite. max-jobs = 1; # une dérivation à la fois cores = 2; # les 2 cœurs du i5-6200U par job }; # Auto-optimisation du store (déduplication) pour économiser le disque. nix.settings.auto-optimise-store = true; # ───────────────────────────────────────────────────────────── # zram : swap compressé en RAM. Indispensable avec 4 Gio, à la # fois pour l'usage courant et pour absorber les pics du rebuild. # ───────────────────────────────────────────────────────────── zramSwap = { enable = true; algorithm = "zstd"; memoryPercent = 150; # jusqu'à 1.5x la RAM (zstd compresse ~3:1) priority = 100; }; # Le noyau peut « swaper » agressivement vers zram (rapide) plutôt # que de tuer des process pendant un build. boot.kernel.sysctl = { "vm.swappiness" = 180; # favorise zram "vm.watermark_boost_factor" = 0; "vm.watermark_scale_factor" = 125; "vm.page-cluster" = 0; # recommandé avec zram }; # earlyoom : tue proprement le process le plus gourmand avant que la # machine ne se fige totalement (utile si un build déborde malgré tout). services.earlyoom = { enable = true; freeMemThreshold = 5; # agit quand il reste < 5% de RAM libre freeSwapThreshold = 5; }; }