about summary refs log tree commit diff stats
path: root/modules/system
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-24 13:58:41 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-24 13:58:41 +0200
commit4b28aa44913f18e57ffa0e40909642368b1a0f2d (patch)
treef0d17bb4013426f9e6d46b6f8a8824db66935c94 /modules/system
parentfix(modules/system/{hardware,fonts}): Fix typesystem stuff (diff)
downloadnixos-config-4b28aa44913f18e57ffa0e40909642368b1a0f2d.tar.gz
nixos-config-4b28aa44913f18e57ffa0e40909642368b1a0f2d.zip
fix(modules/system/networking): Enforce mutually exclusivity between networkd and NetworkManager
Diffstat (limited to '')
-rw-r--r--modules/system/networking/default.nix107
1 files changed, 57 insertions, 50 deletions
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
+    ];
+  };
 }