/* Name: https://masseffect.fandom.com/wiki/Vendetta Why: Vendetta held troves of important data waiting for folks to request it. Type: VM Hardware: - From: 2023 Role: DNS Server Notes: */ { pkgs, lib, nodes, ... }: let # name of the server, sets teh hostname and record for it name = "vendetta"; ip_pub = "193.1.99.120"; ip_priv = "172.20.20.3"; # hostname = "${name}.skynet.ie"; hostname = ip_pub; # sets which nameserver it is ns = "ns1"; in { imports = [ # applications for this particular server ../applications/dns.nix ]; deployment = { targetHost = hostname; targetPort = 22; targetUser = "root"; }; networking = { firewall = { allowedTCPPorts = [22 53]; allowedUDPPorts = [53]; }; }; skynet_dns = { enable = true; # this server will have to have dns records own = { nameserver = ns; external = [ "${name} A ${ip_pub}" "${ns} A ${ip_pub}" # needs this, temporally "mail A ${ip_pub}" ]; cname = [ #"misc CNAME vendetta" ]; }; records = { # using the same logic as the firewall, comments there external = builtins.concatLists ( lib.attrsets.mapAttrsToList (key: value: if builtins.hasAttr "skynet_dns" value.config then ( if value.config.skynet_dns.enable then value.config.skynet_dns.own.external else value.config.skynet_dns.records.external ) else [] ) nodes ); cname = builtins.concatLists ( lib.attrsets.mapAttrsToList (key: value: if builtins.hasAttr "skynet_dns" value.config then ( if value.config.skynet_dns.enable then value.config.skynet_dns.own.cname else value.config.skynet_dns.records.cname ) else [] ) nodes ); }; }; }