summaryrefslogtreecommitdiff
path: root/config/networking/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'config/networking/default.nix')
-rw-r--r--config/networking/default.nix258
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;
};
};
}