diff options
| -rw-r--r-- | config/networking/default.nix | 258 |
1 files changed, 135 insertions, 123 deletions
diff --git a/config/networking/default.nix b/config/networking/default.nix index 0c56861..429218f 100644 --- a/config/networking/default.nix +++ b/config/networking/default.nix @@ -2,10 +2,15 @@ config, lib, ... -}: let +}: +let ifaces = config.personal.networking.interfaces; -in { - imports = [./bridges.nix ./services]; +in +{ + imports = [ + ./bridges.nix + ./services + ]; options.personal.networking = { interfaces = lib.mkOption { @@ -18,113 +23,118 @@ in { personal.networking = { enable = true; ssh.enable = true; - interfaces = let - devices = { - enp2s0.machines.self.mac = "00:0d:b9:5f:58:f0"; - enp3s0 = { - subnet = { - prefix = "192.168.4"; - prefixLength = 24; + interfaces = + let + devices = { + enp2s0.machines.self.mac = "00:0d:b9:5f:58:f0"; + enp3s0 = { + subnet = { + prefix = "192.168.4"; + prefixLength = 24; + }; + machines = { + self = { + mac = "00:0d:b9:5f:58:f1"; + ip = "192.168.4.1"; + }; + steam-deck = { + mac = "10:82:86:22:90:17"; + ip = "192.168.4.10"; + }; + }; }; - machines = { - self = { - mac = "00:0d:b9:5f:58:f1"; - ip = "192.168.4.1"; + enp4s0 = { + subnet = { + prefix = "192.168.1"; + prefixLength = 24; }; - steam-deck = { - mac = "10:82:86:22:90:17"; - ip = "192.168.4.10"; + machines = { + self = { + mac = "00:0d:b9:5f:58:f2"; + ip = "192.168.1.2"; + }; + livebox.ip = "192.168.1.1"; }; }; - }; - enp4s0 = { - subnet = { - prefix = "192.168.1"; - prefixLength = 24; + wlp1s0 = { + bridges = [ "wan" ]; + machines.self.mac = "04:f0:21:b6:11:fc"; }; - machines = { - self = { - mac = "00:0d:b9:5f:58:f2"; - ip = "192.168.1.2"; - }; - livebox.ip = "192.168.1.1"; + wlp5s0 = { + bridges = [ "wan" ]; + machines.self.mac = "04:f0:21:b2:61:09"; }; }; - wlp1s0 = { - bridges = ["wan"]; - machines.self.mac = "04:f0:21:b6:11:fc"; - }; - wlp5s0 = { - bridges = ["wan"]; - machines.self.mac = "04:f0:21:b2:61:09"; - }; - }; - wlan = { - wlp1s0-iot = { - device = "wlp1s0"; - machines.self.mac = "02:f0:21:b6:11:fc"; - bridges = ["iot"]; - }; - wlp5s0-iot = { - device = "wlp5s0"; - machines.self.mac = "02:f0:21:b2:61:09"; - bridges = ["iot"]; - }; - wlp5s0-guest = { - device = "wlp5s0"; - machines.self.mac = "06:f0:21:b2:61:09"; - bridges = ["guest"]; - }; - }; - bridges = { - wan = { - interfaces = ["wlp1s0" "wlp5s0"]; - subnet = { - prefix = "192.168.2"; - prefixLength = 24; + wlan = { + wlp1s0-iot = { + device = "wlp1s0"; + machines.self.mac = "02:f0:21:b6:11:fc"; + bridges = [ "iot" ]; }; - machines = { - self.ip = "192.168.2.1"; - hephaistos = { - ip = "192.168.2.2"; - mac = "f4:a4:75:a1:a2:93"; - }; + wlp5s0-iot = { + device = "wlp5s0"; + machines.self.mac = "02:f0:21:b2:61:09"; + bridges = [ "iot" ]; + }; + wlp5s0-guest = { + device = "wlp5s0"; + machines.self.mac = "06:f0:21:b2:61:09"; + bridges = [ "guest" ]; }; }; - iot = { - interfaces = [ - "wlp1s0-iot" - "wlp5s0-iot" - ]; - subnet = { - prefix = "192.168.3"; - prefixLength = 24; + bridges = { + wan = { + interfaces = [ + "wlp1s0" + "wlp5s0" + ]; + subnet = { + prefix = "192.168.2"; + prefixLength = 24; + }; + machines = { + self.ip = "192.168.2.1"; + hephaistos = { + ip = "192.168.2.2"; + mac = "00:28:f8:ca:2b:2d"; + }; + }; }; - machines = { - self.ip = "192.168.3.1"; - sonos-move = { - ip = "192.168.3.10"; - mac = "54:2a:1b:73:7a:1e"; + iot = { + interfaces = [ + "wlp1s0-iot" + "wlp5s0-iot" + ]; + subnet = { + prefix = "192.168.3"; + prefixLength = 24; }; - sonos-play1 = { - ip = "192.168.3.11"; - mac = "5c:aa:fd:44:b2:6a"; + machines = { + self.ip = "192.168.3.1"; + sonos-move = { + ip = "192.168.3.10"; + mac = "54:2a:1b:73:7a:1e"; + }; + sonos-play1 = { + ip = "192.168.3.11"; + mac = "5c:aa:fd:44:b2:6a"; + }; }; }; - }; - guest = { - interfaces = ["wlp5s0-guest"]; - subnet = { - prefix = "192.168.5"; - prefixLength = 24; + guest = { + interfaces = [ "wlp5s0-guest" ]; + subnet = { + prefix = "192.168.5"; + prefixLength = 24; + }; + machines.self.ip = "192.168.5.1"; }; - machines.self.ip = "192.168.5.1"; }; + in + { + inherit devices wlan bridges; + all = devices // wlan // bridges; }; - in { - inherit devices wlan bridges; - all = devices // wlan // bridges; - }; }; networking = { @@ -138,43 +148,45 @@ in { # isp config.networking.defaultGateway.address ]; - defaultGateway = let - interface = "enp4s0"; - in { - inherit interface; - address = ifaces.all."${interface}".machines.livebox.ip; - }; + defaultGateway = + let + interface = "enp4s0"; + in + { + inherit interface; + address = ifaces.all."${interface}".machines.livebox.ip; + }; - hosts = let - withMachines = - # [{machines: AttrSet, ...}] - lib.collect (value: builtins.isAttrs value.machines or false) - config.personal.networking.interfaces.all; - machineToHost = - # String -> {ip: String, ...} -> { name: String, value: String } - name: {ip, ...}: lib.nameValuePair ip "${name}.local"; - pruneMachines = - # AttrSet -> {{ip: String, ...}} - lib.filterAttrs (name: value: name != "self" && (builtins.isString value.ip or false)); - hosts = - # [{machines: AttrSet, ...}] -> [{String}] - lib.forEach withMachines ({machines, ...}: lib.mapAttrs' machineToHost (pruneMachines machines)); - in + hosts = + let + withMachines = + # [{machines: AttrSet, ...}] + lib.collect ( + value: builtins.isAttrs value.machines or false + ) config.personal.networking.interfaces.all; + machineToHost = + # String -> {ip: String, ...} -> { name: String, value: String } + name: { ip, ... }: lib.nameValuePair ip "${name}.local"; + pruneMachines = + # AttrSet -> {{ip: String, ...}} + lib.filterAttrs (name: value: name != "self" && (builtins.isString value.ip or false)); + hosts = + # [{machines: AttrSet, ...}] -> [{String}] + lib.forEach withMachines ({ machines, ... }: lib.mapAttrs' machineToHost (pruneMachines machines)); + in lib.zipAttrs hosts; useDHCP = false; dhcpcd.enable = false; - interfaces = - lib.concatMapAttrs (interface: attrs: { - "${interface}" = { - ipv4.addresses = lib.optional (attrs ? machines.self.ip) { - address = attrs.machines.self.ip; - prefixLength = 24; - }; + interfaces = lib.concatMapAttrs (interface: attrs: { + "${interface}" = { + ipv4.addresses = lib.optional (attrs ? machines.self.ip) { + address = attrs.machines.self.ip; + prefixLength = 24; }; - }) - ifaces.all; + }; + }) ifaces.all; }; }; } |
