{ system ? builtins.currentSystem, config ? { }, pkgs ? import ../.. { inherit system config; }, }: let inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest; testCombinations = pkgs.lib.cartesianProduct { predictable = [ true false ]; withNetworkd = [ true false ]; systemdStage1 = [ true false ]; }; in pkgs.lib.listToAttrs ( builtins.map ( { predictable, withNetworkd, systemdStage1, }: { name = pkgs.lib.optionalString (!predictable) "un" + "predictable" + pkgs.lib.optionalString withNetworkd "Networkd" + pkgs.lib.optionalString systemdStage1 "SystemdStage1"; value = makeTest { name = pkgs.lib.optionalString (!predictable) "un" + "predictableInterfaceNames" + pkgs.lib.optionalString withNetworkd "-with-networkd" + pkgs.lib.optionalString systemdStage1 "-systemd-stage-1"; meta = { }; nodes.machine = { lib, ... }: let script = '' ip link if ${lib.optionalString predictable "!"} ip link show eth0; then echo Success else exit 1 fi ''; in { networking.usePredictableInterfaceNames = lib.mkForce predictable; networking.useNetworkd = withNetworkd; networking.dhcpcd.enable = !withNetworkd; networking.useDHCP = !withNetworkd; # Check if predictable interface names are working in stage-1 boot.initrd.postDeviceCommands = lib.mkIf (!systemdStage1) script; boot.initrd.systemd = lib.mkIf systemdStage1 { enable = true; initrdBin = [ pkgs.iproute2 ]; services.systemd-udev-settle.wantedBy = [ "initrd.target" ]; services.check-interfaces = { requiredBy = [ "initrd.target" ]; after = [ "systemd-udev-settle.service" ]; serviceConfig.Type = "oneshot"; path = [ pkgs.iproute2 ]; inherit script; }; }; }; testScript = '' print(machine.succeed("ip link")) machine.${if predictable then "fail" else "succeed"}("ip link show eth0") ''; }; } ) testCombinations )