diff --git a/flake.nix b/flake.nix index 56dd6d9c..4027f216 100644 --- a/flake.nix +++ b/flake.nix @@ -155,24 +155,24 @@ commonModules = [ # inputs.agenix.nixosModules.default inputs.sops-nix.nixosModules.sops - - # TODO: inputs.nix-topology.nixosModules.default + inputs.nix-topology.nixosModules.default ]; in { # Local shell for NixFlake directory - devShells."${system}".default = import ./shell.nix {inherit pkgs;}; + devShells.${system}.default = import ./shell.nix {inherit pkgs;}; - # TODO: Add my homelab configs into this flake, then add a topology config for each host # Output that generates a system topology diagram - # topology = import inputs.nix-topology { - # inherit pkgs; # Only this package set must include nix-topology.overlays.default - # modules = [ - # # Your own file to define global topology. Works in principle like a nixos module but uses different options. - # # ./topology.nix - # # Inline module to inform topology of your existing NixOS hosts. - # {nixosConfigurations = self.nixosConfigurations;} - # ]; - # }; + topology.${system} = import inputs.nix-topology { + inherit pkgs; # Only this package set must include nix-topology.overlays.default + modules = [ + # Your own file to define global topology. + # Works in principle like a nixos module but uses different options. + ./topology/topology.nix + + # Inline module to inform topology of your existing NixOS hosts. + {inherit (self) nixosConfigurations;} + ]; + }; # We give each configuration a (host)name to choose a configuration when rebuilding. # This makes it easy to add different configurations (e.g. for a laptop). diff --git a/topology/images/ProtectliVaultFW2B.png b/topology/images/ProtectliVaultFW2B.png new file mode 100644 index 00000000..18aee378 Binary files /dev/null and b/topology/images/ProtectliVaultFW2B.png differ diff --git a/topology/images/TPLinkTLSG108E.jpg b/topology/images/TPLinkTLSG108E.jpg new file mode 100644 index 00000000..5ebbac5d --- /dev/null +++ b/topology/images/TPLinkTLSG108E.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7734164ed1e25e1d9642249a7efa8e144c344936a819d780ad14e86e795d97c2 +size 688 diff --git a/topology/topology.nix b/topology/topology.nix new file mode 100644 index 00000000..915dc765 --- /dev/null +++ b/topology/topology.nix @@ -0,0 +1,39 @@ +{config, ...}: let + inherit (config.lib.topology) mkInternet mkRouter mkConnection mkSwitch; +in { + # Add a node for the internet + nodes.internet = mkInternet { + connections = mkConnection "router" "wan1"; + }; + + nodes.switch = mkSwitch "Switch" { + info = "TP-Link TL-SG108E"; + image = ./images/TPLinkTLSG108E.jpg; + interfaceGroups = [["eth0" "eth1" "eth2" "eth3" "eth4" "eth5" "eth6" "eth7"]]; + # connections.eth1 = mkConnection "host1" "lan"; + # connections.eth2 = [(mkConnection "host2" "wan") (mkConnection "host3" "eth0")]; + + # any other attributes specified here are directly forwarded to the node: + interfaces.eth1.network = "home"; + }; + + # Add a router that we use to access the internet + nodes.router = mkRouter "Firewall" { + info = "Protectli Vault FW2B"; + image = ./images/ProtectliVaultFW2B.png; + interfaceGroups = [ + ["wan1"] + ["eth1"] + ]; + connections.eth1 = mkConnection "switch" "eth0"; + interfaces.eth1 = { + addresses = ["192.168.86.5"]; + network = "home"; + }; + }; + + networks.home = { + name = "Mafia Home"; + cidrv4 = "192.168.86.0/24"; + }; +}