0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-13 21:50:33 +03:00

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.
This commit is contained in:
Daniel Schaefer 2019-07-06 03:57:53 +02:00
parent 0f395d6fae
commit b4044a3f2a

View file

@ -8,6 +8,8 @@ let
dynamicHostsEnabled = dynamicHostsEnabled =
cfg.dynamicHosts.enable && cfg.dynamicHosts.hostsDirs != {}; cfg.dynamicHosts.enable && cfg.dynamicHosts.hostsDirs != {};
delegateWireless = config.networking.wireless.enable == true && cfg.unmanaged != [];
# /var/lib/misc is for dnsmasq.leases. # /var/lib/misc is for dnsmasq.leases.
stateDirs = "/var/lib/NetworkManager /var/lib/dhclient /var/lib/misc"; stateDirs = "/var/lib/NetworkManager /var/lib/dhclient /var/lib/misc";
@ -177,10 +179,11 @@ in {
basePackages = mkOption { basePackages = mkOption {
type = types.attrsOf types.package; type = types.attrsOf types.package;
default = { inherit (pkgs) default = { inherit (pkgs)
networkmanager modemmanager wpa_supplicant crda networkmanager modemmanager crda
networkmanager-openvpn networkmanager-vpnc networkmanager-openvpn networkmanager-vpnc
networkmanager-openconnect networkmanager-fortisslvpn networkmanager-openconnect networkmanager-fortisslvpn
networkmanager-l2tp networkmanager-iodine; }; networkmanager-l2tp networkmanager-iodine; }
// optionalAttrs (!delegateWireless) { inherit (pkgs) wpa_supplicant; };
internal = true; internal = true;
}; };
@ -377,8 +380,11 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
assertions = [ assertions = [
{ assertion = config.networking.wireless.enable == false; { assertion = config.networking.wireless.enable == true -> cfg.unmanaged != [];
message = "You can not use networking.networkmanager with networking.wireless"; 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"); { assertion = !dynamicHostsEnabled || (dynamicHostsEnabled && cfg.dns == "dnsmasq");
message = '' message = ''
@ -491,18 +497,17 @@ in {
path = [ pkgs.iproute pkgs.utillinux pkgs.coreutils ]; path = [ pkgs.iproute pkgs.utillinux pkgs.coreutils ];
}; };
# Turn off NixOS' network management # Turn off NixOS' network management when networking is managed entirely by NetworkManager
networking = { networking = (mkIf (!delegateWireless) {
useDHCP = false; 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; wireless.enable = mkDefault false;
}; }) // (mkIf cfg.enableStrongSwan {
networkmanager.packages = [ pkgs.networkmanager_strongswan ];
});
security.polkit.extraConfig = polkitConf; security.polkit.extraConfig = polkitConf;
networking.networkmanager.packages =
mkIf cfg.enableStrongSwan [ pkgs.networkmanager_strongswan ];
services.dbus.packages = services.dbus.packages =
optional cfg.enableStrongSwan pkgs.strongswanNM ++ cfg.packages; optional cfg.enableStrongSwan pkgs.strongswanNM ++ cfg.packages;