From 35701a32191ac7ca8c956e005985d35c9dbc76de Mon Sep 17 00:00:00 2001 From: Malte Tammena Date: Sun, 18 Aug 2024 11:50:22 +0200 Subject: [PATCH] feat: [nix-topology](https://github.com/oddlama/nix-topology) setup --- flake.lock | 226 +++++++++++++++++++++-- flake.nix | 15 ++ hosts/cerithium-telescopium/default.nix | 1 + hosts/cerithium-telescopium/topology.nix | 36 ++++ hosts/faunus-ater/default.nix | 1 + hosts/faunus-ater/topology.nix | 38 ++++ hosts/granodomus-lima/default.nix | 1 + hosts/granodomus-lima/topology.nix | 31 ++++ hosts/helix-texta/default.nix | 1 + hosts/helix-texta/topology.nix | 33 ++++ hosts/murex-pecten/default.nix | 3 +- hosts/murex-pecten/topology.nix | 41 ++++ hosts/polymita-picta/default.nix | 4 +- hosts/polymita-picta/topology.nix | 26 +++ modules/base-system.nix | 1 + topology.nix | 82 ++++++++ 16 files changed, 521 insertions(+), 19 deletions(-) create mode 100644 hosts/cerithium-telescopium/topology.nix create mode 100644 hosts/faunus-ater/topology.nix create mode 100644 hosts/granodomus-lima/topology.nix create mode 100644 hosts/helix-texta/topology.nix create mode 100644 hosts/murex-pecten/topology.nix create mode 100644 hosts/polymita-picta/topology.nix create mode 100644 topology.nix diff --git a/flake.lock b/flake.lock index da4dd08..2e96a81 100644 --- a/flake.lock +++ b/flake.lock @@ -202,6 +202,28 @@ "type": "github" } }, + "devshell_6": { + "inputs": { + "flake-utils": "flake-utils_6", + "nixpkgs": [ + "nix-topology", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713532798, + "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", + "owner": "numtide", + "repo": "devshell", + "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, "dream2nix": { "inputs": { "all-cabal-json": "all-cabal-json", @@ -455,6 +477,22 @@ } }, "flake-compat_7": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_8": { "locked": { "lastModified": 1717312683, "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", @@ -469,7 +507,7 @@ "type": "github" } }, - "flake-compat_8": { + "flake-compat_9": { "flake": false, "locked": { "lastModified": 1696426674, @@ -736,6 +774,42 @@ "inputs": { "systems": "systems_2" }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_7": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_8": { + "inputs": { + "systems": "systems_4" + }, "locked": { "lastModified": 1705309234, "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", @@ -750,9 +824,9 @@ "type": "github" } }, - "flake-utils_7": { + "flake-utils_9": { "inputs": { - "systems": "systems_3" + "systems": "systems_5" }, "locked": { "lastModified": 1710146030, @@ -845,6 +919,28 @@ } }, "gitignore_3": { + "inputs": { + "nixpkgs": [ + "nix-topology", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_4": { "inputs": { "nixpkgs": [ "nix-wallpaper", @@ -866,7 +962,7 @@ "type": "github" } }, - "gitignore_4": { + "gitignore_5": { "inputs": { "nixpkgs": [ "pre-commit-hooks-nix", @@ -1165,7 +1261,7 @@ }, "lib-aggregate": { "inputs": { - "flake-utils": "flake-utils_7", + "flake-utils": "flake-utils_9", "nixpkgs-lib": "nixpkgs-lib_4" }, "locked": { @@ -1378,14 +1474,37 @@ "type": "github" } }, - "nix-wallpaper": { + "nix-topology": { "inputs": { - "flake-utils": "flake-utils_6", + "devshell": "devshell_6", + "flake-utils": "flake-utils_7", "nixpkgs": [ "nixpkgs" ], "pre-commit-hooks": "pre-commit-hooks_4" }, + "locked": { + "lastModified": 1722338736, + "narHash": "sha256-bSnWgJ7eXgHZ/pwL7+NTDGfOzsbOiw899BV3k7TawWE=", + "owner": "oddlama", + "repo": "nix-topology", + "rev": "870dcc9074077a327220b36597098c295944a47d", + "type": "github" + }, + "original": { + "owner": "oddlama", + "repo": "nix-topology", + "type": "github" + } + }, + "nix-wallpaper": { + "inputs": { + "flake-utils": "flake-utils_8", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks_5" + }, "locked": { "lastModified": 1708554876, "narHash": "sha256-gaL/q2OtucwPrh/nVm1kvtLSvGdcem0E87WZ+rozBYc=", @@ -1543,6 +1662,22 @@ } }, "nixpkgs-stable_3": { + "locked": { + "lastModified": 1710695816, + "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_4": { "locked": { "lastModified": 1704874635, "narHash": "sha256-YWuCrtsty5vVZvu+7BchAxmcYzTMfolSPP5io8+WYCg=", @@ -1558,7 +1693,7 @@ "type": "github" } }, - "nixpkgs-stable_4": { + "nixpkgs-stable_5": { "locked": { "lastModified": 1720386169, "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", @@ -1574,7 +1709,7 @@ "type": "github" } }, - "nixpkgs-stable_5": { + "nixpkgs-stable_6": { "locked": { "lastModified": 1721524707, "narHash": "sha256-5NctRsoE54N86nWd0psae70YSLfrOek3Kv1e8KoXe/0=", @@ -1592,7 +1727,7 @@ }, "nixpkgs-wayland": { "inputs": { - "flake-compat": "flake-compat_7", + "flake-compat": "flake-compat_8", "lib-aggregate": "lib-aggregate", "nix-eval-jobs": "nix-eval-jobs", "nixpkgs": "nixpkgs_13" @@ -1969,10 +2104,10 @@ }, "pre-commit-hooks-nix_3": { "inputs": { - "flake-compat": "flake-compat_8", - "gitignore": "gitignore_4", + "flake-compat": "flake-compat_9", + "gitignore": "gitignore_5", "nixpkgs": "nixpkgs_14", - "nixpkgs-stable": "nixpkgs-stable_4" + "nixpkgs-stable": "nixpkgs-stable_5" }, "locked": { "lastModified": 1722857853, @@ -2055,16 +2190,44 @@ "inputs": { "flake-compat": "flake-compat_6", "flake-utils": [ - "nix-wallpaper", + "nix-topology", "flake-utils" ], "gitignore": "gitignore_3", "nixpkgs": [ - "nix-wallpaper", + "nix-topology", "nixpkgs" ], "nixpkgs-stable": "nixpkgs-stable_3" }, + "locked": { + "lastModified": 1714478972, + "narHash": "sha256-q//cgb52vv81uOuwz1LaXElp3XAe1TqrABXODAEF6Sk=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "2849da033884f54822af194400f8dff435ada242", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_5": { + "inputs": { + "flake-compat": "flake-compat_7", + "flake-utils": [ + "nix-wallpaper", + "flake-utils" + ], + "gitignore": "gitignore_4", + "nixpkgs": [ + "nix-wallpaper", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_4" + }, "locked": { "lastModified": 1708018599, "narHash": "sha256-M+Ng6+SePmA8g06CmUZWi1AjG2tFBX9WCXElBHEKnyM=", @@ -2141,6 +2304,7 @@ "hyprland-contrib": "hyprland-contrib", "jovian-nixos": "jovian-nixos", "mensa": "mensa", + "nix-topology": "nix-topology", "nix-wallpaper": "nix-wallpaper", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_11", @@ -2156,7 +2320,7 @@ "nixpkgs": [ "nixpkgs" ], - "nixpkgs-stable": "nixpkgs-stable_5" + "nixpkgs-stable": "nixpkgs-stable_6" }, "locked": { "lastModified": 1722897572, @@ -2217,6 +2381,36 @@ "type": "github" } }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "treefmt-nix": { "inputs": { "nixpkgs": "nixpkgs_5" diff --git a/flake.nix b/flake.nix index 8dffe02..c3972e5 100644 --- a/flake.nix +++ b/flake.nix @@ -56,6 +56,11 @@ url = "github:qmk/qmk_firmware"; flake = false; }; + + nix-topology = { + url = "github:oddlama/nix-topology"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; nixConfig = { @@ -84,6 +89,7 @@ modulesSharedByAllSystems = [ inputs.sops-nix.nixosModules.sops inputs.home-manager.nixosModules.home-manager + inputs.nix-topology.nixosModules.default ./modules/base-system.nix ]; # The list of all hosts known to me @@ -98,6 +104,7 @@ inputs.devshell.flakeModule inputs.treefmt-nix.flakeModule inputs.pre-commit-hooks-nix.flakeModule + inputs.nix-topology.flakeModule ]; # Available systems, only x86 for now systems = ["x86_64-linux"]; @@ -105,8 +112,14 @@ pkgs, self', config, + system, ... }: { + _module.args.pkgs = import inputs.nixpkgs { + inherit system; + overlays = [inputs.nix-topology.overlays.default]; + }; + # Configure treefmt treefmt.projectRootFile = "flake.nix"; treefmt.programs = { @@ -146,6 +159,8 @@ self'.packages.test-config ]; }; + + topology.modules = [./topology.nix {_module.args.inputs = inputs;}]; }; # Useful modules and all those from ./modules flake.nixosModules = diff --git a/hosts/cerithium-telescopium/default.nix b/hosts/cerithium-telescopium/default.nix index b5228cf..496cb19 100644 --- a/hosts/cerithium-telescopium/default.nix +++ b/hosts/cerithium-telescopium/default.nix @@ -1,6 +1,7 @@ {pkgs, ...}: { imports = [ ../../hardware/intel-nuc.nix + ./topology.nix ]; config = { boot.loader.systemd-boot.enable = true; diff --git a/hosts/cerithium-telescopium/topology.nix b/hosts/cerithium-telescopium/topology.nix new file mode 100644 index 0000000..2702c5e --- /dev/null +++ b/hosts/cerithium-telescopium/topology.nix @@ -0,0 +1,36 @@ +{ + topology.self = { + hardware.info = "Intel NUC"; + + interfaces.looking-glas = { + icon = "interfaces.tun"; + network = "tailnet"; + virtual = true; + addresses = [ + "100.102.99.37" + "fd7a:115c:a1e0:ab12:4843:cd96:6266:6325" + ]; + physicalConnections = [ + { + node = "tailnet"; + interface = "*"; + } + ]; + }; + + interfaces.eno1 = { + icon = "interfaces.ethernet"; + network = "home"; + physicalConnections = [ + { + node = "den-den-mushi"; + interface = "lan3"; + } + ]; + }; + + interfaces.wlp2s0 = { + icon = "interfaces.wifi"; + }; + }; +} diff --git a/hosts/faunus-ater/default.nix b/hosts/faunus-ater/default.nix index 14af377..000ae81 100644 --- a/hosts/faunus-ater/default.nix +++ b/hosts/faunus-ater/default.nix @@ -9,6 +9,7 @@ in { imports = [ inputs.nixos-hardware.nixosModules.common-cpu-intel #-cpu-only + ./topology.nix ../../modules/nginx-reverse-proxy.nix ../../hardware/asrock-z370-i3-black-box.nix ./modules/calibre.nix diff --git a/hosts/faunus-ater/topology.nix b/hosts/faunus-ater/topology.nix new file mode 100644 index 0000000..103807e --- /dev/null +++ b/hosts/faunus-ater/topology.nix @@ -0,0 +1,38 @@ +{lib, ...}: { + topology.self = { + hardware.info = "Home Server"; + + interfaces.looking-glas = { + icon = "interfaces.tun"; + network = "tailnet"; + virtual = true; + addresses = [ + "100.108.135.4" + "fd7a:115c:a1e0:ab12:4843:cd96:626c:8704" + ]; + physicalConnections = [ + { + node = "tailnet"; + interface = "*"; + } + ]; + }; + + interfaces.eno1 = { + icon = "interfaces.ethernet"; + network = "home"; + addresses = [ + "192.168.1.169" + "2003:c7:cf11:4200::451" + "fd3b:de86:922c::451" + ]; + mac = lib.mkForce "70:85:c2:77:94:ed"; + physicalConnections = [ + { + node = "den-den-mushi"; + interface = "lan2"; + } + ]; + }; + }; +} diff --git a/hosts/granodomus-lima/default.nix b/hosts/granodomus-lima/default.nix index 47dafbd..66cac01 100644 --- a/hosts/granodomus-lima/default.nix +++ b/hosts/granodomus-lima/default.nix @@ -14,6 +14,7 @@ in { ../../hardware/netcup-vps-200-g10.nix ../../modules/nginx-reverse-proxy.nix ./modules/murmur.nix + ./topology.nix ]; config = { boot.loader.grub.enable = true; diff --git a/hosts/granodomus-lima/topology.nix b/hosts/granodomus-lima/topology.nix new file mode 100644 index 0000000..5f0f2ce --- /dev/null +++ b/hosts/granodomus-lima/topology.nix @@ -0,0 +1,31 @@ +{ + topology.self = { + hardware.info = "Netcup VPS"; + + interfaces.looking-glas = { + icon = "interfaces.tun"; + network = "tailnet"; + virtual = true; + addresses = [ + "100.66.69.111" + "fd7a:115c:a1e0:ab12:4843:cd96:6242:456f" + ]; + physicalConnections = [ + { + node = "tailnet"; + interface = "*"; + } + ]; + }; + + interfaces.ens3 = { + icon = "interfaces.ethernet"; + physicalConnections = [ + { + node = "internet"; + interface = "*"; + } + ]; + }; + }; +} diff --git a/hosts/helix-texta/default.nix b/hosts/helix-texta/default.nix index 648241a..f968c46 100644 --- a/hosts/helix-texta/default.nix +++ b/hosts/helix-texta/default.nix @@ -13,6 +13,7 @@ inputs.custom-udev-rules.nixosModule ../../hardware/thinkpad-p1-gen3.nix ../../modules/light-actkbd.nix + ./topology.nix ]; config = { diff --git a/hosts/helix-texta/topology.nix b/hosts/helix-texta/topology.nix new file mode 100644 index 0000000..ca571b9 --- /dev/null +++ b/hosts/helix-texta/topology.nix @@ -0,0 +1,33 @@ +{ + topology.self = { + hardware.info = "Thinkpad P1 Gen3"; + deviceIcon = "devices.laptop"; + + interfaces.looking-glas = { + icon = "interfaces.tun"; + network = "tailnet"; + virtual = true; + addresses = [ + "100.77.45.59" + "fd7a:115c:a1e0:ab12:4843:cd96:624d:2d3b" + ]; + physicalConnections = [ + { + node = "tailnet"; + interface = "*"; + } + ]; + }; + + interfaces.wlp0s20f3 = { + icon = "interfaces.wifi"; + network = "home"; + physicalConnections = [ + { + node = "home-ap"; + interface = "wifi"; + } + ]; + }; + }; +} diff --git a/hosts/murex-pecten/default.nix b/hosts/murex-pecten/default.nix index 53d93bf..4191795 100644 --- a/hosts/murex-pecten/default.nix +++ b/hosts/murex-pecten/default.nix @@ -11,6 +11,7 @@ inputs.self.nixosModules.homeManagerConfig inputs.custom-udev-rules.nixosModule ../../hardware/aorus.nix + ./topology.nix ]; config = { @@ -33,7 +34,6 @@ settings.minimalGnome.enable = true; - sound.enable = true; security.rtkit.enable = true; services.pipewire = { enable = true; @@ -77,7 +77,6 @@ hardware = { opengl = { enable = true; - driSupport = true; driSupport32Bit = true; extraPackages = with pkgs; [amdvlk]; extraPackages32 = with pkgs; [driversi686Linux.amdvlk]; diff --git a/hosts/murex-pecten/topology.nix b/hosts/murex-pecten/topology.nix new file mode 100644 index 0000000..d1542f7 --- /dev/null +++ b/hosts/murex-pecten/topology.nix @@ -0,0 +1,41 @@ +{ + topology.self = { + hardware.info = "PC"; + deviceIcon = "devices.desktop"; + + interfaces.looking-glas = { + icon = "interfaces.tun"; + network = "tailnet"; + virtual = true; + addresses = [ + "100.120.38.101" + "fd7a:115c:a1e0:ab12:4843:cd96:6278:2665" + ]; + physicalConnections = [ + { + node = "tailnet"; + interface = "*"; + } + ]; + }; + + interfaces.eno1 = { + mac = "18:c0:4d:8e:42:f7"; + }; + + interfaces.wlp8s0 = { + icon = "interfaces.wifi"; + network = "home"; + addresses = [ + "192.168.1.133" + ]; + mac = "e8:84:a5:0d:3f:40"; + physicalConnections = [ + { + node = "home-ap"; + interface = "wifi"; + } + ]; + }; + }; +} diff --git a/hosts/polymita-picta/default.nix b/hosts/polymita-picta/default.nix index 0ee3ea6..b10ef0d 100644 --- a/hosts/polymita-picta/default.nix +++ b/hosts/polymita-picta/default.nix @@ -9,6 +9,7 @@ inputs.jovian-nixos.nixosModules.default ../../hardware/steam-deck.nix ../../modules/steam.nix + ./topology.nix ]; config = { boot.loader.systemd-boot = { @@ -48,7 +49,8 @@ services.xserver.enable = true; services.xserver.desktopManager.plasma5.enable = true; - services.xserver.displayManager = { + + services.displayManager = { autoLogin = { enable = true; user = "deck"; diff --git a/hosts/polymita-picta/topology.nix b/hosts/polymita-picta/topology.nix new file mode 100644 index 0000000..aaffeeb --- /dev/null +++ b/hosts/polymita-picta/topology.nix @@ -0,0 +1,26 @@ +{ + topology.self = { + hardware.info = "Steam Deck"; + + interfaces.looking-glas = { + icon = "interfaces.tun"; + network = "tailnet"; + virtual = true; + addresses = [ + "100.92.166.136" + "fd7a:115c:a1e0:ab12:4843:cd96:625c:a688" + ]; + physicalConnections = [ + { + node = "tailnet"; + interface = "*"; + } + ]; + }; + + interfaces.wlo1 = { + icon = "interfaces.wifi"; + network = "home"; + }; + }; +} diff --git a/modules/base-system.nix b/modules/base-system.nix index 80bc4e1..787ca96 100644 --- a/modules/base-system.nix +++ b/modules/base-system.nix @@ -173,6 +173,7 @@ in { enable = true; interfaceName = "looking-glas"; }; + networking.interfaces.looking-glas = {}; networking.firewall.allowedUDPPorts = [config.services.tailscale.port]; # Regularly clear the store diff --git a/topology.nix b/topology.nix new file mode 100644 index 0000000..6869fc4 --- /dev/null +++ b/topology.nix @@ -0,0 +1,82 @@ +{ + lib, + config, + inputs, + ... +}: { + nodes.internet = config.lib.topology.mkInternet {}; + + nodes.tailnet = { + name = "tailnet"; + hardware.info = "Tailscale Private Network"; + deviceType = "internet"; + hardware.image = config.nodes.internet.hardware.image; + interfaces."*" = {}; + }; + + nodes.den-den-mushi = { + deviceType = "router"; + hardware.info = "AVM FRITZ!Box 7530"; + interfaces = { + dsl0 = { + icon = "interfaces.ethernet"; + mac = "AC:9A:96:11:22:33"; + physicalConnections = [ + { + node = "internet"; + interface = "*"; + } + ]; + }; + lan1 = { + mac = "DC:39:6F:19:9B:84"; + network = "home"; + }; + lan2 = { + mac = "DC:39:6F:19:9B:84"; + network = "home"; + }; + lan3 = { + mac = "DC:39:6F:19:9B:84"; + network = "home"; + }; + lan4 = { + mac = "DC:39:6F:19:9B:84"; + network = "home"; + }; + }; + }; + + nodes.home-ap = { + deviceType = "switch"; + hardware.info = "Ubiquiti AP Unifi U6+"; + interfaces = { + wifi = { + icon = "interfaces.wifi"; + }; + lan1 = { + physicalConnections = [ + { + node = "den-den-mushi"; + interface = "lan1"; + } + ]; + }; + }; + }; + + nixosConfigurations = let + filterFn = name: _: !(builtins.elem name ["radix-balthica" "trochulus-hispidus"]); + in + lib.mkForce (lib.filterAttrs filterFn inputs.self.nixosConfigurations); + + networks.home = { + name = "Home Network"; + cidrv4 = "192.168.1.0/24"; + cidrv6 = "2003:c7:cf11:4200::1/60"; + }; + networks.tailnet = { + name = "Tailscale Network"; + cidrv4 = "100.0.0.0/8"; + }; +}