diff --git a/modules/module-list.nix b/modules/module-list.nix index fa234f55290..50f1bea7539 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -128,6 +128,7 @@ ./services/networking/ifplugd.nix ./services/networking/ircd-hybrid/default.nix ./services/networking/nat.nix + ./services/networking/networkmanager.nix ./services/networking/ntpd.nix ./services/networking/oidentd.nix ./services/networking/openfire.nix diff --git a/modules/services/networking/networkmanager.nix b/modules/services/networking/networkmanager.nix new file mode 100644 index 00000000000..d933df4b562 --- /dev/null +++ b/modules/services/networking/networkmanager.nix @@ -0,0 +1,80 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + stateDir = "/var/lib/NetworkManager"; + +in + +{ + + ###### interface + + options = { + + networking.networkmanager.enable = mkOption { + default = false; + merge = mergeEnableOption; + description = '' + Whether to use NetworkManager to obtain an IP adress and other + configuration for all network interfaces that are not manually + configured. + ''; + }; + + networking.networkmanager.packages = mkOption { + default = [ pkgs.networkmanager ]; + description = + '' + Packages providing NetworkManager plugins. + ''; + }; + }; + + + ###### implementation + + config = mkIf config.networking.networkmanager.enable { + + jobs.networkmanager = + { startOn = "started network-interfaces"; + stopOn = "stopping network-interfaces"; + + script = + '' + mkdir -m 755 -p /etc/NetworkManager + mkdir -m 700 -p /etc/NetworkManager/system-connections + mkdir -m 755 -p ${stateDir} + + if [[ ! -f /etc/NetworkManager/NetworkManager.conf ]]; then + cat <<-EOF > /etc/NetworkManager/NetworkManager.conf + [main] + plugins=keyfile + EOF + fi + + exec ${pkgs.networkmanager}/sbin/NetworkManager --no-daemon + ''; + }; + + environment.systemPackages = config.networking.networkmanager.packages; + services.dbus.packages = config.networking.networkmanager.packages; + networking.useDHCP = false; + + environment.etc = [ + { + source = pkgs.writeScript "01nixos-ip-up" + '' + #!/bin/sh + if test "$2" = "up"; then + ${pkgs.upstart}/sbin/initctl emit ip-up + fi + ''; + target = "NetworkManager/dispatcher.d/01nixos-ip-up"; + } + ]; + }; +} +