Merge pull request #30 from rickynils/networkmanager
network-manager: Big overhaul
This commit is contained in:
commit
05beea5b4e
@ -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.
|
||||||
|
|
||||||
|
@ -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";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user