about summary refs log tree commit diff
diff options
context:
space:
mode:
authorElias Probst <mail@eliasprobst.eu>2019-10-02 21:45:44 -0400
committerworldofpeace <worldofpeace@protonmail.ch>2019-10-02 21:52:58 -0400
commit86dea5559fca96d9d4d96a485027b7f4cd253e77 (patch)
tree24c7cca49b8f0eef1b52500f64c1b3ef004ee165
parent5edb20533d1bfcf002582193459df2150d19769a (diff)
downloadnixlib-86dea5559fca96d9d4d96a485027b7f4cd253e77.tar
nixlib-86dea5559fca96d9d4d96a485027b7f4cd253e77.tar.gz
nixlib-86dea5559fca96d9d4d96a485027b7f4cd253e77.tar.bz2
nixlib-86dea5559fca96d9d4d96a485027b7f4cd253e77.tar.lz
nixlib-86dea5559fca96d9d4d96a485027b7f4cd253e77.tar.xz
nixlib-86dea5559fca96d9d4d96a485027b7f4cd253e77.tar.zst
nixlib-86dea5559fca96d9d4d96a485027b7f4cd253e77.zip
nixos/networkmanager: allow iwd as Wi-Fi backend
This introduces an option wifi.backend to the networkmanager module.

Co-authored-by: Cole Mickens <cole.mickens@gmail.com>
Co-authored-by: worldofpeace <worldofpeace@protonmail.ch>
-rw-r--r--nixos/modules/services/networking/networkmanager.nix18
1 files changed, 16 insertions, 2 deletions
diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix
index 09f36aaf8b32..176d26e07b04 100644
--- a/nixos/modules/services/networking/networkmanager.nix
+++ b/nixos/modules/services/networking/networkmanager.nix
@@ -15,13 +15,15 @@ let
     networkmanager-openconnect
     networkmanager-openvpn
     networkmanager-vpnc
-   ] ++ optional (!delegateWireless) wpa_supplicant;
+   ] ++ optional (!delegateWireless && !enableIwd) wpa_supplicant;
 
   dynamicHostsEnabled =
     cfg.dynamicHosts.enable && cfg.dynamicHosts.hostsDirs != {};
 
   delegateWireless = config.networking.wireless.enable == true && cfg.unmanaged != [];
 
+  enableIwd = cfg.wifi.backend == "iwd";
+
   # /var/lib/misc is for dnsmasq.leases.
   stateDirs = "/var/lib/NetworkManager /var/lib/dhclient /var/lib/misc";
 
@@ -50,6 +52,7 @@ let
 
     [device]
     wifi.scan-rand-mac-address=${if cfg.wifi.scanRandMacAddress then "yes" else "no"}
+    wifi.backend=${cfg.wifi.backend}
 
     ${cfg.extraConfig}
   '';
@@ -236,6 +239,15 @@ in {
       wifi = {
         macAddress = macAddressOpt;
 
+        backend = mkOption {
+          type = types.enum [ "wpa_supplicant" "iwd" ];
+          default = "wpa_supplicant";
+          description = ''
+            Specify the Wi-Fi backend used for the device.
+            Currently supported are <option>wpa_supplicant</option> or <option>iwd</option> (experimental).
+          '';
+        };
+
         powersave = mkOption {
           type = types.nullOr types.bool;
           default = null;
@@ -390,7 +402,7 @@ in {
       { assertion = !dynamicHostsEnabled || (dynamicHostsEnabled && cfg.dns == "dnsmasq");
         message = ''
           To use networking.networkmanager.dynamicHosts you also need to set
-          networking.networkmanager.dns = "dnsmasq"
+          `networking.networkmanager.dns = "dnsmasq"`
         '';
       }
     ];
@@ -510,6 +522,8 @@ in {
       wireless.enable = mkDefault false;
     }) // (mkIf cfg.enableStrongSwan {
       networkmanager.packages = [ pkgs.networkmanager_strongswan ];
+    }) // (mkIf enableIwd {
+      wireless.iwd.enable = true;
     });
 
     security.polkit.extraConfig = polkitConf;