diff options
author | Daniel Schaefer <git@danielschaefer.me> | 2019-07-06 03:57:53 +0200 |
---|---|---|
committer | Daniel Schaefer <git@danielschaefer.me> | 2019-08-25 12:00:31 +0200 |
commit | b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6 (patch) | |
tree | 9cc988340ec0495929fb7c8606927a17b7664516 /nixos/modules/services/networking/networkmanager.nix | |
parent | 0f395d6faea137450cc427356154bf261534aa33 (diff) | |
download | nixpkgs-b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6.tar nixpkgs-b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6.tar.gz nixpkgs-b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6.tar.bz2 nixpkgs-b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6.tar.lz nixpkgs-b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6.tar.xz nixpkgs-b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6.tar.zst nixpkgs-b4044a3f2a56b95e76e8091a8e5d9c52fa24a3b6.zip |
networkmanager: Allow NetworkManager and wireless together
When NetworkManager is configured to not manage all interfaces, it's perfectly fine to have the rest be managed by the standard nixos wireless scripts. I use networking.networkmanager.unmanaged = [ "*" "except:type:wwan" "except:type:gsm" ]; to control everything using networking.wireless except for the mobile LTE modem which only works with NetworkManager.
Diffstat (limited to 'nixos/modules/services/networking/networkmanager.nix')
-rw-r--r-- | nixos/modules/services/networking/networkmanager.nix | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix index 551636a33d2..a0c0d6c4b5f 100644 --- a/nixos/modules/services/networking/networkmanager.nix +++ b/nixos/modules/services/networking/networkmanager.nix @@ -8,6 +8,8 @@ let dynamicHostsEnabled = cfg.dynamicHosts.enable && cfg.dynamicHosts.hostsDirs != {}; + delegateWireless = config.networking.wireless.enable == true && cfg.unmanaged != []; + # /var/lib/misc is for dnsmasq.leases. stateDirs = "/var/lib/NetworkManager /var/lib/dhclient /var/lib/misc"; @@ -177,10 +179,11 @@ in { basePackages = mkOption { type = types.attrsOf types.package; default = { inherit (pkgs) - networkmanager modemmanager wpa_supplicant crda + networkmanager modemmanager crda networkmanager-openvpn networkmanager-vpnc networkmanager-openconnect networkmanager-fortisslvpn - networkmanager-l2tp networkmanager-iodine; }; + networkmanager-l2tp networkmanager-iodine; } + // optionalAttrs (!delegateWireless) { inherit (pkgs) wpa_supplicant; }; internal = true; }; @@ -377,8 +380,11 @@ in { config = mkIf cfg.enable { assertions = [ - { assertion = config.networking.wireless.enable == false; - message = "You can not use networking.networkmanager with networking.wireless"; + { assertion = config.networking.wireless.enable == true -> cfg.unmanaged != []; + message = '' + You can not use networking.networkmanager with networking.wireless. + Except if you mark some interfaces as <literal>unmanaged</literal> by NetworkManager. + ''; } { assertion = !dynamicHostsEnabled || (dynamicHostsEnabled && cfg.dns == "dnsmasq"); message = '' @@ -491,18 +497,17 @@ in { path = [ pkgs.iproute pkgs.utillinux pkgs.coreutils ]; }; - # Turn off NixOS' network management - networking = { + # Turn off NixOS' network management when networking is managed entirely by NetworkManager + networking = (mkIf (!delegateWireless) { useDHCP = false; - # use mkDefault to trigger the assertion about the conflict above + # Use mkDefault to trigger the assertion about the conflict above wireless.enable = mkDefault false; - }; + }) // (mkIf cfg.enableStrongSwan { + networkmanager.packages = [ pkgs.networkmanager_strongswan ]; + }); security.polkit.extraConfig = polkitConf; - networking.networkmanager.packages = - mkIf cfg.enableStrongSwan [ pkgs.networkmanager_strongswan ]; - services.dbus.packages = optional cfg.enableStrongSwan pkgs.strongswanNM ++ cfg.packages; |