From 4b28aa44913f18e57ffa0e40909642368b1a0f2d Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Fri, 24 May 2024 13:58:41 +0200 Subject: fix(modules/system/networking): Enforce mutually exclusivity between networkd and NetworkManager --- modules/system/networking/default.nix | 107 ++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 50 deletions(-) (limited to 'modules/system') diff --git a/modules/system/networking/default.nix b/modules/system/networking/default.nix index aaaab782..c5f0e491 100644 --- a/modules/system/networking/default.nix +++ b/modules/system/networking/default.nix @@ -8,8 +8,18 @@ in { options.soispha.networking = { enable = lib.mkEnableOption "networking"; - networkManager = { - enable = lib.mkEnableOption "NetworkManager"; + mode = lib.mkOption { + type = lib.types.enum ["NetworkManager" "systemd-networkd"]; + example = "systemd-networkd"; + description = "The daemon used to setup networking."; + }; + + userName = lib.mkOption { + type = lib.types.str; + default = "soispha"; + description = '' + The name of the user to allow access to the configured network + ''; }; hostName = lib.mkOption { @@ -19,63 +29,60 @@ in { }; }; - config = - lib.mkIf cfg.enable { - systemd.network = { - networks = { - "tap0" = { - name = "tap0"; - bridge = [ - "virbr0" - ]; - }; - "enp4s0" = { - name = "enp4s0"; - networkConfig = { - DHCP = "yes"; - DNSOverTLS = "yes"; - DNSSEC = "yes"; - }; - bridge = [ - "virbr0" - ]; + config = { + networking.hostName = cfg.hostName; + + systemd.network = lib.mkIf (cfg.mode == "systemd-networkd") { + networks = { + "tap0" = { + name = "tap0"; + bridge = [ + "virbr0" + ]; + }; + "enp4s0" = { + name = "enp4s0"; + networkConfig = { + DHCP = "yes"; + DNSOverTLS = "yes"; + DNSSEC = "yes"; }; + bridge = [ + "virbr0" + ]; }; + }; - netdevs = { - "tap0" = { - netdevConfig = { - Name = "tap0"; - Kind = "tap"; - }; - tapConfig = { - User = "${config.users.users.soispha.uid}"; - Group = "libvirtd"; - }; + netdevs = { + "tap0" = { + netdevConfig = { + Name = "tap0"; + Kind = "tap"; }; - "virbr0" = { - netdevConfig = { - Name = "br0"; - Kind = "bridge"; - }; + tapConfig = { + User = config.users.users."${cfg.userName}".uid; + Group = "libvirtd"; }; }; - }; - } - // lib.mkIf cfg.networkManager.enable { - networking = { - networkmanager = { - enable = true; - dns = "default"; - wifi = { - powersave = true; + "virbr0" = { + netdevConfig = { + Name = "br0"; + Kind = "bridge"; }; }; - inherit (cfg) hostName; }; + }; - users.users.soispha.extraGroups = [ - "networkmanager" # allows to configure networkmanager as this user - ]; + networking.networkmanager = lib.mkIf (cfg.mode == "NetworkManager") { + enable = true; + dns = "default"; + wifi = { + powersave = true; + }; }; + + users.users."${cfg.userName}".extraGroups = lib.mkIf (cfg.mode == "NetworkManager") [ + "networkmanager" # allows to configure NetworkManager as this user + ]; + }; } -- cgit 1.4.1