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