{
  inputs,
  self,
  ...
}: {
  imports = [
    inputs.nix-topology.flakeModule
  ];
  perSystem = _: {
    topology.modules = [
      {inherit (self) nixosConfigurations;}
      ({config, ...}: let
        inherit
          (config.lib.topology)
          mkConnection
          mkInternet
          mkRouter
          ;
      in {
        networks = {
          home = {
            name = "home";
            cidrv4 = "192.168.0.0/24";
          };
          tailscale0 = {
            name = "tailscale";
            cidrv4 = "100.0.0.0/32";
          };
          hetzner = {
            name = "hetzner";
            cidrv4 = "5.161.102.107/24";
          };
        };

        nodes = {
          internet = mkInternet {
            connections = [
              (mkConnection "hetzner" "wan0")
              (mkConnection "router" "lan0")
            ];
          };
          router = mkRouter "UDM-SE" {
            info = "UDM-SE";
            interfaceGroups = [
              [
                "eth0"
                "eth1"
                "eth2"
                "eth4"
                "eth5"
                "eth6"
                "eth7"
              ]
              ["lan0"]
            ];
            connections = {
              eth0 = mkConnection "ame" "home";
              eth1 = mkConnection "arashi" "home";
              eth2 = mkConnection "haru" "home";
              eth3 = mkConnection "kariru" "home";
              eth4 = mkConnection "sakura" "home";
              eth5 = mkConnection "tsuki" "home";
              eth6 = mkConnection "tsuru" "home";
              eth7 = mkConnection "yuki" "home";
            };
          };
          hetzner = mkRouter "Hetzner" {
            info = "hetzner edge router";
            interfaceGroups = [
              [
                "eth0"
                "eth1"
              ]
              ["wan0"]
            ];
            connections = {
              eth0 = mkConnection "sora" "eth0";
              eth1 = mkConnection "kaze" "eth0";
            };
          };
        };
      })
    ];
  };
}