Merge pull request #30 from rickynils/networkmanager

network-manager: Big overhaul
This commit is contained in:
Rickard Nilsson 2012-09-27 00:28:33 -07:00
commit 05beea5b4e
2 changed files with 79 additions and 42 deletions

View File

@ -126,6 +126,7 @@ in
clamav = 51; clamav = 51;
fprot = 52; fprot = 52;
wwwrun = 54; wwwrun = 54;
networkmanager = 56;
# When adding a gid, make sure it doesn't match an existing uid. # When adding a gid, make sure it doesn't match an existing uid.

View File

@ -3,12 +3,47 @@
with pkgs.lib; with pkgs.lib;
let let
cfg = config.networking.networkmanager;
stateDir = "/var/lib/NetworkManager"; stateDirs = "/var/lib/NetworkManager /var/lib/dhclient";
in configFile = pkgs.writeText "NetworkManager.conf" ''
[main]
plugins=keyfile
{ [keyfile]
${optionalString (config.networking.hostName != "") ''
hostname=${config.networking.hostName}
''}
[logging]
level=WARN
'';
polkitConf = ''
[network-manager]
Identity=unix-group:networkmanager
Action=org.freedesktop.NetworkManager.*
ResultAny=yes
ResultInactive=no
ResultActive=yes
[modem-manager]
Identity=unix-group:networkmanager
Action=org.freedesktop.ModemManager.*
ResultAny=yes
ResultInactive=no
ResultActive=yes
'';
ipUpScript = pkgs.writeScript "01nixos-ip-up" ''
#!/bin/sh
if test "$2" = "up"; then
${pkgs.upstart}/sbin/initctl emit ip-up "IFACE=$1"
fi
'';
in {
###### interface ###### interface
@ -20,61 +55,62 @@ in
description = '' description = ''
Whether to use NetworkManager to obtain an IP adress and other Whether to use NetworkManager to obtain an IP adress and other
configuration for all network interfaces that are not manually configuration for all network interfaces that are not manually
configured. configured. If enabled, a group <literal>networkmanager</literal>
will be created. Add all users that should have permission
to change network settings to this group.
''; '';
}; };
networking.networkmanager.packages = mkOption { networking.networkmanager.packages = mkOption {
default = [ pkgs.networkmanager ]; default = [ ];
description = description = ''
'' Extra packages that provide NetworkManager plugins.
Packages providing NetworkManager plugins. '';
''; merge = mergeListOption;
apply = list: [ pkgs.networkmanager pkgs.modemmanager ] ++ list;
}; };
}; };
###### implementation ###### implementation
config = mkIf config.networking.networkmanager.enable { config = mkIf cfg.enable {
jobs.networkmanager = environment.etc = singleton {
{ startOn = "started network-interfaces"; source = ipUpScript;
stopOn = "stopping network-interfaces"; target = "NetworkManager/dispatcher.d/01nixos-ip-up";
};
script = environment.systemPackages = cfg.packages;
''
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 users.extraGroups = singleton {
cat <<-EOF > /etc/NetworkManager/NetworkManager.conf name = "networkmanager";
[main] gid = config.ids.gids.networkmanager;
plugins=keyfile };
EOF
fi
exec ${pkgs.networkmanager}/sbin/NetworkManager --no-daemon jobs.networkmanager = {
''; startOn = "started network-interfaces";
}; stopOn = "stopping network-interfaces";
path = [ pkgs.networkmanager ];
preStart = ''
mkdir -m 755 -p /etc/NetworkManager
mkdir -m 700 -p /etc/NetworkManager/system-connections
mkdir -m 755 -p ${stateDirs}
'';
exec = "NetworkManager --config=${configFile} --no-daemon";
};
environment.systemPackages = config.networking.networkmanager.packages;
services.dbus.packages = config.networking.networkmanager.packages;
networking.useDHCP = false; networking.useDHCP = false;
environment.etc = [ networking.wireless.enable = true;
{
source = pkgs.writeScript "01nixos-ip-up" security.polkit.permissions = polkitConf;
''
#!/bin/sh services.dbus.packages = cfg.packages;
if test "$2" = "up"; then
${pkgs.upstart}/sbin/initctl emit ip-up "IFACE=$1" services.udev.packages = cfg.packages;
fi
'';
target = "NetworkManager/dispatcher.d/01nixos-ip-up";
}
];
}; };
} }