Merge pull request #164531 from jtojnar/networkmanager

nixos/networkmanager: Allow overriding installed plug-ins

authored by Lassulus and committed by GitHub adc7fbbc 7259c8ab

+69 -51
+55 -51
nixos/modules/services/networking/networkmanager.nix
··· 5 5 let 6 6 cfg = config.networking.networkmanager; 7 7 8 - basePackages = with pkgs; [ 9 - modemmanager 10 - networkmanager 11 - networkmanager-fortisslvpn 12 - networkmanager-iodine 13 - networkmanager-l2tp 14 - networkmanager-openconnect 15 - networkmanager-openvpn 16 - networkmanager-vpnc 17 - networkmanager-sstp 18 - ] ++ optional (!delegateWireless && !enableIwd) wpa_supplicant; 19 - 20 8 delegateWireless = config.networking.wireless.enable == true && cfg.unmanaged != []; 21 9 22 10 enableIwd = cfg.wifi.backend == "iwd"; ··· 145 133 ''; 146 134 }; 147 135 136 + packages = [ 137 + pkgs.modemmanager 138 + pkgs.networkmanager 139 + ] 140 + ++ cfg.plugins 141 + ++ lib.optionals (!delegateWireless && !enableIwd) [ 142 + pkgs.wpa_supplicant 143 + ]; 144 + 148 145 in { 149 146 150 147 meta = { ··· 227 224 ''; 228 225 }; 229 226 230 - packages = mkOption { 231 - type = types.listOf types.package; 227 + plugins = mkOption { 228 + type = 229 + let 230 + networkManagerPluginPackage = types.package // { 231 + description = "NetworkManager plug-in"; 232 + check = 233 + p: 234 + lib.assertMsg 235 + (types.package.check p 236 + && p ? networkManagerPlugin 237 + && lib.isString p.networkManagerPlugin) 238 + '' 239 + Package ‘${p.name}’, is not a NetworkManager plug-in. 240 + Those need to have a ‘networkManagerPlugin’ attribute. 241 + ''; 242 + }; 243 + in 244 + types.listOf networkManagerPluginPackage; 232 245 default = [ ]; 233 246 description = '' 234 - Extra packages that provide NetworkManager plugins. 247 + List of NetworkManager plug-ins to enable. 248 + Some plug-ins are enabled by the NetworkManager module by default. 235 249 ''; 236 - apply = list: basePackages ++ list; 237 250 }; 238 251 239 252 dhcp = mkOption { ··· 380 393 </para><para> 381 394 If you enable this option the 382 395 <literal>networkmanager_strongswan</literal> plugin will be added to 383 - the <option>networking.networkmanager.packages</option> option 396 + the <option>networking.networkmanager.plugins</option> option 384 397 so you don't need to to that yourself. 385 398 ''; 386 399 }; ··· 399 412 }; 400 413 401 414 imports = [ 415 + (mkRenamedOptionModule 416 + [ "networking" "networkmanager" "packages" ] 417 + [ "networking" "networkmanager" "plugins" ]) 402 418 (mkRenamedOptionModule [ "networking" "networkmanager" "useDnsmasq" ] [ "networking" "networkmanager" "dns" ]) 403 419 (mkRemovedOptionModule ["networking" "networkmanager" "dynamicHosts"] '' 404 420 This option was removed because allowing (multiple) regular users to ··· 426 442 427 443 hardware.wirelessRegulatoryDatabase = true; 428 444 429 - environment.etc = with pkgs; { 430 - "NetworkManager/NetworkManager.conf".source = configFile; 431 - 432 - "NetworkManager/VPN/nm-openvpn-service.name".source = 433 - "${networkmanager-openvpn}/lib/NetworkManager/VPN/nm-openvpn-service.name"; 434 - 435 - "NetworkManager/VPN/nm-vpnc-service.name".source = 436 - "${networkmanager-vpnc}/lib/NetworkManager/VPN/nm-vpnc-service.name"; 437 - 438 - "NetworkManager/VPN/nm-openconnect-service.name".source = 439 - "${networkmanager-openconnect}/lib/NetworkManager/VPN/nm-openconnect-service.name"; 440 - 441 - "NetworkManager/VPN/nm-fortisslvpn-service.name".source = 442 - "${networkmanager-fortisslvpn}/lib/NetworkManager/VPN/nm-fortisslvpn-service.name"; 443 - 444 - "NetworkManager/VPN/nm-l2tp-service.name".source = 445 - "${networkmanager-l2tp}/lib/NetworkManager/VPN/nm-l2tp-service.name"; 446 - 447 - "NetworkManager/VPN/nm-iodine-service.name".source = 448 - "${networkmanager-iodine}/lib/NetworkManager/VPN/nm-iodine-service.name"; 449 - 450 - "NetworkManager/VPN/nm-sstp-service.name".source = 451 - "${networkmanager-sstp}/lib/NetworkManager/VPN/nm-sstp-service.name"; 452 - 445 + environment.etc = { 446 + "NetworkManager/NetworkManager.conf".source = configFile; 453 447 } 448 + // builtins.listToAttrs (map (pkg: nameValuePair "NetworkManager/${pkg.networkManagerPlugin}" { 449 + source = "${pkg}/lib/NetworkManager/${pkg.networkManagerPlugin}"; 450 + }) cfg.plugins) 454 451 // optionalAttrs cfg.enableFccUnlock 455 452 { 456 453 "ModemManager/fcc-unlock.d".source = ··· 460 457 { 461 458 "NetworkManager/dispatcher.d/02overridedns".source = overrideNameserversScript; 462 459 } 463 - // optionalAttrs cfg.enableStrongSwan 464 - { 465 - "NetworkManager/VPN/nm-strongswan-service.name".source = 466 - "${pkgs.networkmanager_strongswan}/lib/NetworkManager/VPN/nm-strongswan-service.name"; 467 - } 468 460 // listToAttrs (lib.imap1 (i: s: 469 461 { 470 462 name = "NetworkManager/dispatcher.d/${dispatcherTypesSubdirMap.${s.type}}03userscript${lib.fixedWidthNumber 4 i}"; 471 463 value = { mode = "0544"; inherit (s) source; }; 472 464 }) cfg.dispatcherScripts); 473 465 474 - environment.systemPackages = cfg.packages; 466 + environment.systemPackages = packages; 475 467 476 468 users.groups = { 477 469 networkmanager.gid = config.ids.gids.networkmanager; ··· 490 482 }; 491 483 }; 492 484 493 - systemd.packages = cfg.packages; 485 + systemd.packages = packages; 494 486 495 487 systemd.tmpfiles.rules = [ 496 488 "d /etc/NetworkManager/system-connections 0700 root root -" ··· 534 526 useDHCP = false; 535 527 }) 536 528 529 + { 530 + networkmanager.plugins = with pkgs; [ 531 + networkmanager-fortisslvpn 532 + networkmanager-iodine 533 + networkmanager-l2tp 534 + networkmanager-openconnect 535 + networkmanager-openvpn 536 + networkmanager-vpnc 537 + networkmanager-sstp 538 + ]; 539 + } 540 + 537 541 (mkIf cfg.enableStrongSwan { 538 - networkmanager.packages = [ pkgs.networkmanager_strongswan ]; 542 + networkmanager.plugins = [ pkgs.networkmanager_strongswan ]; 539 543 }) 540 544 541 545 (mkIf enableIwd { ··· 559 563 security.polkit.enable = true; 560 564 security.polkit.extraConfig = polkitConf; 561 565 562 - services.dbus.packages = cfg.packages 566 + services.dbus.packages = packages 563 567 ++ optional cfg.enableStrongSwan pkgs.strongswanNM 564 568 ++ optional (cfg.dns == "dnsmasq") pkgs.dnsmasq; 565 569 566 - services.udev.packages = cfg.packages; 570 + services.udev.packages = packages; 567 571 }; 568 572 }
+1
pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
··· 73 73 attrPath = "networkmanager-fortisslvpn"; 74 74 versionPolicy = "odd-unstable"; 75 75 }; 76 + networkManagerPlugin = "VPN/nm-fortisslvpn-service.name"; 76 77 }; 77 78 78 79 meta = with lib; {
+1
pkgs/tools/networking/networkmanager/iodine/default.nix
··· 48 48 packageName = pname; 49 49 attrPath = "networkmanager-iodine"; 50 50 }; 51 + networkManagerPlugin = "VPN/nm-iodine-service.name"; 51 52 }; 52 53 53 54 meta = with lib; {
+4
pkgs/tools/networking/networkmanager/l2tp/default.nix
··· 41 41 42 42 enableParallelBuilding = true; 43 43 44 + passthru = { 45 + networkManagerPlugin = "VPN/nm-l2tp-service.name"; 46 + }; 47 + 44 48 meta = with lib; { 45 49 description = "L2TP plugin for NetworkManager"; 46 50 inherit (networkmanager.meta) platforms;
+1
pkgs/tools/networking/networkmanager/openconnect/default.nix
··· 69 69 attrPath = "networkmanager-openconnect"; 70 70 versionPolicy = "odd-unstable"; 71 71 }; 72 + networkManagerPlugin = "VPN/nm-openconnect-service.name"; 72 73 }; 73 74 74 75 meta = with lib; {
+1
pkgs/tools/networking/networkmanager/openvpn/default.nix
··· 67 67 attrPath = "networkmanager-openvpn"; 68 68 versionPolicy = "odd-unstable"; 69 69 }; 70 + networkManagerPlugin = "VPN/nm-openvpn-service.name"; 70 71 }; 71 72 72 73 meta = with lib; {
+1
pkgs/tools/networking/networkmanager/sstp/default.nix
··· 54 54 packageName = pname; 55 55 attrPath = "networkmanager-sstp"; 56 56 }; 57 + networkManagerPlugin = "VPN/nm-sstp-service.name"; 57 58 }; 58 59 59 60 meta = with lib; {
+4
pkgs/tools/networking/networkmanager/strongswan/default.nix
··· 24 24 "--with-nm-plugindir=$(out)/lib/NetworkManager" 25 25 ]; 26 26 27 + passthru = { 28 + networkManagerPlugin = "VPN/nm-strongswan-service.name"; 29 + }; 30 + 27 31 PKG_CONFIG_LIBNM_VPNSERVICEDIR = "$(out)/lib/NetworkManager/VPN"; 28 32 29 33 meta = with lib; {
+1
pkgs/tools/networking/networkmanager/vpnc/default.nix
··· 64 64 attrPath = "networkmanager-vpnc"; 65 65 versionPolicy = "odd-unstable"; 66 66 }; 67 + networkManagerPlugin = "VPN/nm-vpnc-service.name"; 67 68 }; 68 69 69 70 meta = with lib; {