systemd: Add ability to define networks
This commit is contained in:
parent
61d7fb934b
commit
08e74f2791
|
@ -441,4 +441,321 @@ in rec {
|
||||||
|
|
||||||
targetOptions = commonUnitOptions;
|
targetOptions = commonUnitOptions;
|
||||||
|
|
||||||
|
commonNetworkOptions = {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
If set to false, this unit will be a symlink to
|
||||||
|
/dev/null.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
matchConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Name = "eth0"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Match]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||||
|
<citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||||
|
for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
linkOptions = commonNetworkOptions // {
|
||||||
|
|
||||||
|
linkConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { MACAddress = "00:ff:ee:aa:cc:dd"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Link]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.link</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
netdevOptions = commonNetworkOptions // {
|
||||||
|
|
||||||
|
netdevConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Name = "mybridge"; Kind = "bridge"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Netdev]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
vlanConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Id = "4"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[VLAN]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
macvlanConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Mode = "private"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[MACVLAN]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
vxlanConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Id = "4"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[VXLAN]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
tunnelConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Remote = "192.168.1.1"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Tunnel]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
peerConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Name = "veth2"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Peer]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
tunConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { User = "openvpn"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Tun]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
tapConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { User = "openvpn"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Tap]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bondConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Mode = "802.3ad"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Bond]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.netdev</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
addressOptions = {
|
||||||
|
|
||||||
|
addressConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Address = "192.168.0.100/24"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Address]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
routeOptions = {
|
||||||
|
|
||||||
|
routeConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Gateway = "192.168.0.1"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Route]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
networkOptions = commonNetworkOptions // {
|
||||||
|
|
||||||
|
networkConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { Description = "My Network"; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[Network]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dhcpConfig = mkOption {
|
||||||
|
default = {};
|
||||||
|
example = { UseDNS = true; UseRoutes = true; };
|
||||||
|
type = types.attrsOf unitOption;
|
||||||
|
description = ''
|
||||||
|
Each attribute in this set specifies an option in the
|
||||||
|
<literal>[DHCP]</literal> section of the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
address = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of addresses to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
gateway = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of gateways to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dns = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of dns servers to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
ntp = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of ntp servers to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
vlan = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of vlan interfaces to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
macvlan = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of macvlan interfaces to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
vxlan = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of vxlan interfaces to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
tunnel = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
description = ''
|
||||||
|
A list of tunnel interfaces to be added to the network section of the
|
||||||
|
unit. See <citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
addresses = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.optionSet;
|
||||||
|
options = [ addressOptions ];
|
||||||
|
description = ''
|
||||||
|
A list of address sections to be added to the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
routes = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.optionSet;
|
||||||
|
options = [ routeOptions ];
|
||||||
|
description = ''
|
||||||
|
A list of route sections to be added to the unit. See
|
||||||
|
<citerefentry><refentrytitle>systemd.network</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,9 @@ let
|
||||||
"systemd-modules-load.service"
|
"systemd-modules-load.service"
|
||||||
"kmod-static-nodes.service"
|
"kmod-static-nodes.service"
|
||||||
|
|
||||||
|
# Networking
|
||||||
|
"systemd-networkd.service"
|
||||||
|
|
||||||
# Filesystems.
|
# Filesystems.
|
||||||
"systemd-fsck@.service"
|
"systemd-fsck@.service"
|
||||||
"systemd-fsck-root.service"
|
"systemd-fsck-root.service"
|
||||||
|
@ -384,6 +387,103 @@ let
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
commonMatchText = def: ''
|
||||||
|
[Match]
|
||||||
|
${attrsToSection def.matchConfig}
|
||||||
|
'';
|
||||||
|
|
||||||
|
linkToUnit = name: def:
|
||||||
|
{ inherit (def) enable;
|
||||||
|
text = commonMatchText def +
|
||||||
|
''
|
||||||
|
[Link]
|
||||||
|
${attrsToSection def.linkConfig}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
netdevToUnit = name: def:
|
||||||
|
{ inherit (def) enable;
|
||||||
|
text = commonMatchText def +
|
||||||
|
''
|
||||||
|
[NetDev]
|
||||||
|
${attrsToSection def.netdevConfig}
|
||||||
|
|
||||||
|
${optionalString (def.vlanConfig != { }) ''
|
||||||
|
[VLAN]
|
||||||
|
${attrsToSection def.vlanConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${optionalString (def.macvlanConfig != { }) ''
|
||||||
|
[MACVLAN]
|
||||||
|
${attrsToSection def.macvlanConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${optionalString (def.vxlanConfig != { }) ''
|
||||||
|
[VXLAN]
|
||||||
|
${attrsToSection def.vxlanConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${optionalString (def.tunnelConfig != { }) ''
|
||||||
|
[Tunnel]
|
||||||
|
${attrsToSection def.tunnelConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${optionalString (def.peerConfig != { }) ''
|
||||||
|
[Peer]
|
||||||
|
${attrsToSection def.peerConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${optionalString (def.tunConfig != { }) ''
|
||||||
|
[Tun]
|
||||||
|
${attrsToSection def.tunConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${optionalString (def.tapConfig != { }) ''
|
||||||
|
[Tap]
|
||||||
|
${attrsToSection def.tapConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${optionalString (def.bondConfig != { }) ''
|
||||||
|
[Bond]
|
||||||
|
${attrsToSection def.bondConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
networkToUnit = name: def:
|
||||||
|
{ inherit (def) enable;
|
||||||
|
text = commonMatchText def +
|
||||||
|
''
|
||||||
|
[Network]
|
||||||
|
${attrsToSection def.networkConfig}
|
||||||
|
${concatStringsSep "\n" (map (s: "Address=${s}") def.address)}
|
||||||
|
${concatStringsSep "\n" (map (s: "Gateway=${s}") def.gateway)}
|
||||||
|
${concatStringsSep "\n" (map (s: "DNS=${s}") def.dns)}
|
||||||
|
${concatStringsSep "\n" (map (s: "NTP=${s}") def.ntp)}
|
||||||
|
${concatStringsSep "\n" (map (s: "VLAN=${s}") def.vlan)}
|
||||||
|
${concatStringsSep "\n" (map (s: "MACVLAN=${s}") def.macvlan)}
|
||||||
|
${concatStringsSep "\n" (map (s: "VXLAN=${s}") def.vxlan)}
|
||||||
|
${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)}
|
||||||
|
|
||||||
|
${optionalString (def.dhcpConfig != { }) ''
|
||||||
|
[DHCP]
|
||||||
|
${attrsToSection def.dhcpConfig}
|
||||||
|
|
||||||
|
''}
|
||||||
|
${flip concatMapStrings def.addresses (x: ''
|
||||||
|
[Address]
|
||||||
|
${attrsToSection x.addressConfig}
|
||||||
|
|
||||||
|
'')}
|
||||||
|
${flip concatMapStrings def.routes (x: ''
|
||||||
|
[Route]
|
||||||
|
${attrsToSection x.routeConfig}
|
||||||
|
|
||||||
|
'')}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
generateUnits = type: units: upstreamUnits: upstreamWants:
|
generateUnits = type: units: upstreamUnits: upstreamWants:
|
||||||
pkgs.runCommand "${type}-units" { preferLocalBuild = true; } ''
|
pkgs.runCommand "${type}-units" { preferLocalBuild = true; } ''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
|
@ -562,6 +662,47 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.network.enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
Whether to enable networkd or not.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.network.links = mkOption {
|
||||||
|
default = {};
|
||||||
|
type = types.attrsOf types.optionSet;
|
||||||
|
options = [ linkOptions ];
|
||||||
|
description = "Definiton of systemd network links.";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.network.netdevs = mkOption {
|
||||||
|
default = {};
|
||||||
|
type = types.attrsOf types.optionSet;
|
||||||
|
options = [ netdevOptions ];
|
||||||
|
description = "Definiton of systemd network devices.";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.network.networks = mkOption {
|
||||||
|
default = {};
|
||||||
|
type = types.attrsOf types.optionSet;
|
||||||
|
options = [ networkOptions ];
|
||||||
|
description = "Definiton of systemd networks.";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.network.units = mkOption {
|
||||||
|
description = "Definition of networkd units.";
|
||||||
|
default = {};
|
||||||
|
type = types.attrsOf types.optionSet;
|
||||||
|
options = { name, config, ... }:
|
||||||
|
{ options = concreteUnitOptions;
|
||||||
|
config = {
|
||||||
|
unit = mkDefault (makeUnit name config);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
systemd.defaultUnit = mkOption {
|
systemd.defaultUnit = mkOption {
|
||||||
default = "multi-user.target";
|
default = "multi-user.target";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
|
@ -714,6 +855,9 @@ in
|
||||||
environment.etc."systemd/system".source =
|
environment.etc."systemd/system".source =
|
||||||
generateUnits "system" cfg.units upstreamSystemUnits upstreamSystemWants;
|
generateUnits "system" cfg.units upstreamSystemUnits upstreamSystemWants;
|
||||||
|
|
||||||
|
environment.etc."systemd/network".source =
|
||||||
|
generateUnits "network" cfg.network.units [] [];
|
||||||
|
|
||||||
environment.etc."systemd/user".source =
|
environment.etc."systemd/user".source =
|
||||||
generateUnits "user" cfg.user.units upstreamUserUnits [];
|
generateUnits "user" cfg.user.units upstreamUserUnits [];
|
||||||
|
|
||||||
|
@ -779,6 +923,11 @@ in
|
||||||
(v: let n = escapeSystemdPath v.where;
|
(v: let n = escapeSystemdPath v.where;
|
||||||
in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts);
|
in nameValuePair "${n}.automount" (automountToUnit n v)) cfg.automounts);
|
||||||
|
|
||||||
|
systemd.network.units =
|
||||||
|
mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.network.links
|
||||||
|
// mapAttrs' (n: v: nameValuePair "${n}.netdev" (netdevToUnit n v)) cfg.network.netdevs
|
||||||
|
// mapAttrs' (n: v: nameValuePair "${n}.network" (networkToUnit n v)) cfg.network.networks;
|
||||||
|
|
||||||
systemd.user.units =
|
systemd.user.units =
|
||||||
mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.user.services
|
mapAttrs' (n: v: nameValuePair "${n}.service" (serviceToUnit n v)) cfg.user.services
|
||||||
// mapAttrs' (n: v: nameValuePair "${n}.socket" (socketToUnit n v)) cfg.user.sockets;
|
// mapAttrs' (n: v: nameValuePair "${n}.socket" (socketToUnit n v)) cfg.user.sockets;
|
||||||
|
@ -800,6 +949,14 @@ in
|
||||||
users.extraUsers.systemd-journal-gateway.uid = config.ids.uids.systemd-journal-gateway;
|
users.extraUsers.systemd-journal-gateway.uid = config.ids.uids.systemd-journal-gateway;
|
||||||
users.extraGroups.systemd-journal-gateway.gid = config.ids.gids.systemd-journal-gateway;
|
users.extraGroups.systemd-journal-gateway.gid = config.ids.gids.systemd-journal-gateway;
|
||||||
|
|
||||||
|
# Networkd
|
||||||
|
users.extraUsers.systemd-network.uid = config.ids.uids.systemd-network;
|
||||||
|
users.extraGroups.systemd-network.gid = config.ids.gids.systemd-network;
|
||||||
|
systemd.services.systemd-networkd.wantedBy =
|
||||||
|
optional config.systemd.network.enable "multi-user.target";
|
||||||
|
systemd.services.systemd-networkd.restartTriggers =
|
||||||
|
[ config.environment.etc."systemd/network".source ];
|
||||||
|
|
||||||
# Generate timer units for all services that have a ‘startAt’ value.
|
# Generate timer units for all services that have a ‘startAt’ value.
|
||||||
systemd.timers =
|
systemd.timers =
|
||||||
mapAttrs (name: service:
|
mapAttrs (name: service:
|
||||||
|
|
Loading…
Reference in a new issue