# Socle commun à toutes les machines de la flotte (repo public). { pkgs, lib, ... }: { imports = [ ../../modules/anssi ]; # Toutes les machines de la flotte portent le même nom : pas # d'identification individuelle pour l'instant (voir README du repo # racine). À revoir plus tard via le numéro de série DMI si un vrai # besoin d'identification apparaît. networking.hostName = "Nixos_Fleet"; networking.networkmanager.enable = true; # Sans ça, les firmwares non-libres (wifi/Bluetooth Broadcom, Realtek, # Intel...) ne sont pas inclus dans le système. Sur un parc de PC # hétérogène et inconnu à l'avance, une partie aura besoin de ces # firmwares pour que la carte wifi soit seulement détectée (option # documentée : nixos.wiki/wiki/NixOS_Installation_Guide, section # firmware). mkDefault : un profil peut désactiver au cas par cas. hardware.enableRedistributableFirmware = lib.mkDefault true; # Durcissement : reprend le module ANSSI de SécurixOS (modules/anssi/, # vendored ci-dessus), qui remplace/couvre déjà tous les sysctls qui # étaient déclarés à la main sur le profil oreo (dmesg_restrict, # kptr_restrict, yama.ptrace_scope, rp_filter, tcp_syncookies, # protected_hardlinks/symlinks -- mêmes valeurs, vérifié règle par # règle dans modules/anssi/kernel-options.nix : R9, R11, R12, R14). # level "intermediary" : c'est le niveau que couvraient déjà TOUTES # les valeurs qu'on avait mises à la main sur oreo -- rien de plus # fort n'a été inventé ici. category "client" : ce sont des postes de # travail, pas des serveurs (les règles actuellement implémentées sont # toutes "category = base" donc ça ne change rien pour l'instant, mais # c'est le bon réglage si Sécurix ajoute des règles catégorisées). # # ATTENTION : R12 force net.ipv4.ip_forward = 0. Sans impact ici (ce # sont des postes clients), mais à ne SURTOUT PAS importer sur # pxe-server/configuration.nix, qui a besoin l'inverse (voir son # networking.nat) -- pxe-server n'importe pas ce fichier, donc ok. # R8 ajoute des mitigations CPU dont "mds=full,nosmt" (désactive # l'hyperthreading) : impact perf réel sur du matériel bas de gamme, # c'est la vraie recommandation ANSSI au niveau "intermediary", pas # une invention -- à surveiller sur les PC les plus faibles du parc. security.anssi = { enable = true; level = "intermediary"; category = "client"; }; # Pas (encore) couvert par le module ANSSI ci-dessus (R45 y est # explicitement listé en exception : "AppArmor is partially supported # on NixOS", modules/anssi/base.nix) -- repris tel quel du profil oreo. systemd.coredump.enable = false; security.apparmor.packages = [ pkgs.apparmor-profiles ]; security.apparmor.enableCache = true; time.timeZone = "Europe/Paris"; i18n.defaultLocale = "fr_FR.UTF-8"; i18n.extraLocaleSettings = { LC_ADDRESS = "fr_FR.UTF-8"; LC_IDENTIFICATION = "fr_FR.UTF-8"; LC_MEASUREMENT = "fr_FR.UTF-8"; LC_MONETARY = "fr_FR.UTF-8"; LC_NAME = "fr_FR.UTF-8"; LC_NUMERIC = "fr_FR.UTF-8"; LC_PAPER = "fr_FR.UTF-8"; LC_TELEPHONE = "fr_FR.UTF-8"; LC_TIME = "fr_FR.UTF-8"; }; services.xserver.xkb = { layout = "fr"; variant = ""; }; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; boot.loader.systemd-boot.configurationLimit = 10; services.openssh.enable = true; networking.firewall.enable = true; # Certains PC du parc n'ont que 4 Go de RAM (Cinnamon + Firefox + # LibreOffice + VLC peuvent solliciter la mémoire) — swap compressé en # RAM, marche identiquement quelle que soit la machine. zramSwap = { enable = true; memoryPercent = 50; }; nix.settings.experimental-features = [ "nix-command" "flakes" ]; nixpkgs.config.allowUnfree = true; nix.gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 30d"; }; # Convergence : chaque machine de la flotte tire ses mises à jour du # même repo public, sans intervention humaine (pas de netrc nécessaire # ici, contrairement au repo nixos_users). Voir README pour adapter # l'URL réelle du repo. system.autoUpgrade = { enable = true; dates = "daily"; flake = "git+https://gitea.miniclic.net/Damien/Nixos_Fleet.git#usagers"; }; environment.systemPackages = with pkgs; [ git curl wget htop nixfmt ]; system.stateVersion = "26.05"; }