diff --git a/topology/icons/devices/nixos.svg b/topology/icons/devices/nixos.svg index 443f9d8..be0f489 100644 --- a/topology/icons/devices/nixos.svg +++ b/topology/icons/devices/nixos.svg @@ -1,48 +1 @@ - - + diff --git a/topology/icons/interfaces/ethernet.svg b/topology/icons/interfaces/ethernet.svg index 1d8045a..7deaca0 100644 --- a/topology/icons/interfaces/ethernet.svg +++ b/topology/icons/interfaces/ethernet.svg @@ -1,57 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/topology/nixos/extractors/services.nix b/topology/nixos/extractors/services.nix index fde5e69..756280b 100644 --- a/topology/nixos/extractors/services.nix +++ b/topology/nixos/extractors/services.nix @@ -7,10 +7,13 @@ (lib) concatStringsSep mkDefault + mkEnableOption mkIf ; in { - topology.self.services = { + options.topology.extractors.services.enable = mkEnableOption "topology service extractor" // {default = true;}; + + config.topology.self.services = mkIf config.topology.extractors.services.enable { adguardhome = mkIf config.services.adguardhome.enable { name = "AdGuard Home"; icon = "services.adguardhome"; diff --git a/topology/nixos/extractors/systemd.nix b/topology/nixos/extractors/systemd-network.nix similarity index 89% rename from topology/nixos/extractors/systemd.nix rename to topology/nixos/extractors/systemd-network.nix index d6e2884..1fcca59 100644 --- a/topology/nixos/extractors/systemd.nix +++ b/topology/nixos/extractors/systemd-network.nix @@ -12,13 +12,16 @@ listToAttrs mapAttrsToList mkDefault + mkEnableOption mkIf mkMerge nameValuePair optional ; in { - config = mkIf config.systemd.network.enable { + options.topology.extractors.systemd-network.enable = mkEnableOption "topology systemd-network extractor" // {default = true;}; + + config = mkIf (config.topology.extractors.systemd-network.enable && config.systemd.network.enable) { topology.self.interfaces = mkMerge ( # Create interfaces based on systemd.network.netdevs concatLists ( diff --git a/topology/nixos/extractors/wireguard.nix b/topology/nixos/extractors/wireguard.nix index dc17f1f..fb04f14 100644 --- a/topology/nixos/extractors/wireguard.nix +++ b/topology/nixos/extractors/wireguard.nix @@ -9,6 +9,7 @@ flip mapAttrsToList mkDefault + mkEnableOption mkIf mkMerge filter @@ -22,7 +23,9 @@ networkId = wgName: "wireguard-${wgName}"; in { - config = mkIf (config ? wireguard) { + options.topology.extractors.wireguard.enable = mkEnableOption "topology wireguard extractor" // {default = true;}; + + config = mkIf (config.topology.extractors.wireguard.enable && config ? wireguard) { # Create networks (this will be duplicated by each node, # but it doesn't matter and will be merged anyway) topology.networks = mkMerge ( diff --git a/topology/topology/renderers/d2/network.nix b/topology/topology/renderers/d2/network.nix index c038dea..b5d126a 100644 --- a/topology/topology/renderers/d2/network.nix +++ b/topology/topology/renderers/d2/network.nix @@ -6,13 +6,15 @@ }: let inherit (lib) + any attrValues concatLines + flip optionalString ; netToD2 = net: '' - ${net.id}: ${net.name} { + net_${net.id}: ${net.name} { info: |md ${net.cidrv4} ${net.cidrv6} @@ -21,25 +23,24 @@ ''; nodeInterfaceToD2 = node: interface: - '' - ${node.id}.${interface.id}: ${interface.id} { - info: |md - ${toString interface.mac} - ${toString interface.addresses} - ${toString interface.gateways} - | - } - '' - + optionalString (interface.network != null) '' - ${node.id}.${interface.id} -- ${interface.network} - ''; - # TODO: deduplicate first - #+ concatLines (flip map interface.physicalConnections (x: '' - # ${node.id}.${interface.id} -- ${x.node}.${x.interface} - #'')); + concatLines (flip map interface.physicalConnections (x: + optionalString ( + (!any (y: y.node == node.id && y.interface == interface.id) config.nodes.${x.node}.interfaces.${x.interface}.physicalConnections) + || (node.id < x.node) + ) + '' + node_${node.id} -- node_${x.node}: "" { + source-arrowhead.label: ${interface.id} + target-arrowhead.label: ${x.interface} + } + '')); nodeToD2 = node: '' - ${node.id}: ${node.name} {} + node_${node.id}: "" { + shape: image + width: 680 + icon: ${config.lib.renderers.svg.node.mkInfoCardNetwork node} + } ${concatLines (map (nodeInterfaceToD2 node) (attrValues node.interfaces))} ''; diff --git a/topology/topology/renderers/svg/default.nix b/topology/topology/renderers/svg/default.nix index 8a0aa44..2b4b2f6 100644 --- a/topology/topology/renderers/svg/default.nix +++ b/topology/topology/renderers/svg/default.nix @@ -97,7 +97,7 @@ mkInterface = interface: let color = if interface.virtual - then "#242931" + then "#7a899f" else "#70a5eb"; in /* @@ -135,7 +135,7 @@ html */ '' -