"Release" 25.09 Giving
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				CI / Check, build and cache nixfiles (push) Failing after 31m46s
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	CI / Check, build and cache nixfiles (push) Failing after 31m46s
				
			This commit is contained in:
		@@ -14,7 +14,7 @@ in
 | 
			
		||||
          owner = "pdns";
 | 
			
		||||
          group = "pdns";
 | 
			
		||||
        };
 | 
			
		||||
        "estuary/pdns/recursor.conf" = {
 | 
			
		||||
        "estuary/pdns/recursor.yml" = {
 | 
			
		||||
          owner = "pdns-recursor";
 | 
			
		||||
          group = "pdns-recursor";
 | 
			
		||||
        };
 | 
			
		||||
@@ -31,7 +31,7 @@ in
 | 
			
		||||
 | 
			
		||||
      pdns.recursor = {
 | 
			
		||||
        enable = true;
 | 
			
		||||
        extraSettingsFile = config.age.secrets."estuary/pdns/recursor.conf".path;
 | 
			
		||||
        extraSettingsFile = config.age.secrets."estuary/pdns/recursor.yml".path;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@@ -44,45 +44,55 @@ in
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      pdns-recursor = {
 | 
			
		||||
        dns = {
 | 
			
		||||
          address = [
 | 
			
		||||
            "127.0.0.1" "::1"
 | 
			
		||||
            assignments.base.ipv4.address assignments.base.ipv6.address
 | 
			
		||||
          ];
 | 
			
		||||
          allowFrom = [
 | 
			
		||||
            "127.0.0.0/8" "::1/128"
 | 
			
		||||
            prefixes.all.v4 prefixes.all.v6
 | 
			
		||||
          ] ++ (with lib.my.c.tailscale.prefix; [ v4 v6 ]);
 | 
			
		||||
        };
 | 
			
		||||
        yaml-settings = {
 | 
			
		||||
          incoming = {
 | 
			
		||||
            listen = [
 | 
			
		||||
              "127.0.0.1" "::1"
 | 
			
		||||
              assignments.base.ipv4.address assignments.base.ipv6.address
 | 
			
		||||
            ];
 | 
			
		||||
            allow_from = [
 | 
			
		||||
              "127.0.0.0/8" "::1/128"
 | 
			
		||||
              prefixes.all.v4 prefixes.all.v6
 | 
			
		||||
            ] ++ (with lib.my.c.tailscale.prefix; [ v4 v6 ]);
 | 
			
		||||
 | 
			
		||||
        settings = {
 | 
			
		||||
          query-local-address = [
 | 
			
		||||
            assignments.internal.ipv4.address
 | 
			
		||||
            assignments.internal.ipv6.address
 | 
			
		||||
            assignments.base.ipv6.address
 | 
			
		||||
          ];
 | 
			
		||||
          forward-zones = map (z: "${z}=127.0.0.1:5353") authZones;
 | 
			
		||||
            # DNS NOTIFY messages override TTL
 | 
			
		||||
            allow_notify_for = authZones;
 | 
			
		||||
            allow_notify_from = [ "127.0.0.0/8" "::1/128" ];
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          # DNS NOTIFY messages override TTL
 | 
			
		||||
          allow-notify-for = authZones;
 | 
			
		||||
          allow-notify-from = [ "127.0.0.0/8" "::1/128" ];
 | 
			
		||||
          outgoing = {
 | 
			
		||||
            source_address = [
 | 
			
		||||
              assignments.internal.ipv4.address
 | 
			
		||||
              assignments.internal.ipv6.address
 | 
			
		||||
              assignments.base.ipv6.address
 | 
			
		||||
            ];
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          webserver = true;
 | 
			
		||||
          webserver-address = "::";
 | 
			
		||||
          webserver-allow-from = [ "127.0.0.1" "::1" ];
 | 
			
		||||
          recursor = {
 | 
			
		||||
            forward_zones = map (z: {
 | 
			
		||||
              zone = z;
 | 
			
		||||
              forwarders = [ "127.0.0.1:5353" ];
 | 
			
		||||
            }) authZones;
 | 
			
		||||
 | 
			
		||||
          lua-dns-script = pkgs.writeText "pdns-script.lua" ''
 | 
			
		||||
            function preresolve(dq)
 | 
			
		||||
              if dq.qname:equal("nix-cache.nul.ie") then
 | 
			
		||||
                dq:addAnswer(pdns.CNAME, "http.${config.networking.domain}.")
 | 
			
		||||
                dq.rcode = 0
 | 
			
		||||
                dq.followupFunction = "followCNAMERecords"
 | 
			
		||||
                return true
 | 
			
		||||
            lua_dns_script = pkgs.writeText "pdns-script.lua" ''
 | 
			
		||||
              function preresolve(dq)
 | 
			
		||||
                if dq.qname:equal("nix-cache.nul.ie") then
 | 
			
		||||
                  dq:addAnswer(pdns.CNAME, "http.${config.networking.domain}.")
 | 
			
		||||
                  dq.rcode = 0
 | 
			
		||||
                  dq.followupFunction = "followCNAMERecords"
 | 
			
		||||
                  return true
 | 
			
		||||
                end
 | 
			
		||||
 | 
			
		||||
                return false
 | 
			
		||||
              end
 | 
			
		||||
            '';
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
              return false
 | 
			
		||||
            end
 | 
			
		||||
          '';
 | 
			
		||||
          webservice = {
 | 
			
		||||
            webserver = true;
 | 
			
		||||
            address = "::";
 | 
			
		||||
            allow_from = [ "127.0.0.1" "::1" ];
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,7 @@ in
 | 
			
		||||
            netdata.enable = true;
 | 
			
		||||
            mastodon = mkMerge [
 | 
			
		||||
              rec {
 | 
			
		||||
                enable = true;
 | 
			
		||||
                enable = false;
 | 
			
		||||
                localDomain = extraConfig.WEB_DOMAIN; # for nginx config
 | 
			
		||||
                extraConfig = {
 | 
			
		||||
                  LOCAL_DOMAIN = "nul.ie";
 | 
			
		||||
@@ -95,7 +95,9 @@ in
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                secretKeyBaseFile = config.age.secrets."toot/secret-key.txt".path;
 | 
			
		||||
                otpSecretFile = config.age.secrets."toot/otp-secret.txt".path;
 | 
			
		||||
                # TODO: This was removed at some point.
 | 
			
		||||
                # If we want to bring Mastodon back, this will probably need to be addressd.
 | 
			
		||||
                # otpSecretFile = config.age.secrets."toot/otp-secret.txt".path;
 | 
			
		||||
                vapidPrivateKeyFile = config.age.secrets."toot/vapid-key.txt".path;
 | 
			
		||||
                vapidPublicKeyFile = toString (pkgs.writeText
 | 
			
		||||
                  "vapid-pubkey.txt"
 | 
			
		||||
@@ -164,7 +166,7 @@ in
 | 
			
		||||
              };
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            pds = {
 | 
			
		||||
            bluesky-pds = {
 | 
			
		||||
              enable = true;
 | 
			
		||||
              environmentFiles = [ config.age.secrets."toot/pds.env".path ];
 | 
			
		||||
              settings = {
 | 
			
		||||
 
 | 
			
		||||
@@ -178,6 +178,9 @@ in
 | 
			
		||||
              dependencies = with ps; [
 | 
			
		||||
                requests
 | 
			
		||||
              ];
 | 
			
		||||
 | 
			
		||||
              pyproject = true;
 | 
			
		||||
              build-system = [ ps.setuptools ];
 | 
			
		||||
            };
 | 
			
		||||
          in
 | 
			
		||||
          {
 | 
			
		||||
 
 | 
			
		||||
@@ -55,8 +55,8 @@ in
 | 
			
		||||
          unifi = {
 | 
			
		||||
            enable = true;
 | 
			
		||||
            openFirewall = true;
 | 
			
		||||
            unifiPackage = pkgs.unifi8;
 | 
			
		||||
            mongodbPackage = pkgs.mongodb-6_0;
 | 
			
		||||
            unifiPackage = pkgs.unifi;
 | 
			
		||||
            mongodbPackage = pkgs.mongodb-7_0;
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
 
 | 
			
		||||
@@ -141,8 +141,8 @@ in
 | 
			
		||||
                  onState = [ "configured" ];
 | 
			
		||||
                  script = ''
 | 
			
		||||
                  #!${pkgs.runtimeShell}
 | 
			
		||||
                  if [ $IFACE = "wan-ifb" ]; then
 | 
			
		||||
                    ${pkgs.iproute2}/bin/tc filter add dev wan parent ffff: matchall action mirred egress redirect dev $IFACE
 | 
			
		||||
                  if [ "$IFACE" = "wan-ifb" ]; then
 | 
			
		||||
                    ${pkgs.iproute2}/bin/tc filter add dev wan parent ffff: matchall action mirred egress redirect dev "$IFACE"
 | 
			
		||||
                  fi
 | 
			
		||||
                  '';
 | 
			
		||||
                };
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ in
 | 
			
		||||
          owner = "pdns";
 | 
			
		||||
          group = "pdns";
 | 
			
		||||
        };
 | 
			
		||||
        "home/pdns/recursor.conf" = {
 | 
			
		||||
        "home/pdns/recursor.yml" = {
 | 
			
		||||
          owner = "pdns-recursor";
 | 
			
		||||
          group = "pdns-recursor";
 | 
			
		||||
        };
 | 
			
		||||
@@ -28,71 +28,78 @@ in
 | 
			
		||||
 | 
			
		||||
      pdns.recursor = {
 | 
			
		||||
        enable = true;
 | 
			
		||||
        extraSettingsFile = config.age.secrets."home/pdns/recursor.conf".path;
 | 
			
		||||
        extraSettingsFile = config.age.secrets."home/pdns/recursor.yml".path;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    services = {
 | 
			
		||||
      pdns-recursor = {
 | 
			
		||||
        dns = {
 | 
			
		||||
          address = [
 | 
			
		||||
            "127.0.0.1" "::1"
 | 
			
		||||
            assignments.hi.ipv4.address assignments.hi.ipv6.address
 | 
			
		||||
            assignments.lo.ipv4.address assignments.lo.ipv6.address
 | 
			
		||||
          ];
 | 
			
		||||
          allowFrom = [
 | 
			
		||||
            "127.0.0.0/8" "::1/128"
 | 
			
		||||
            prefixes.hi.v4 prefixes.hi.v6
 | 
			
		||||
            prefixes.lo.v4 prefixes.lo.v6
 | 
			
		||||
          ] ++ (with lib.my.c.tailscale.prefix; [ v4 v6 ]);
 | 
			
		||||
        };
 | 
			
		||||
        yaml-settings = {
 | 
			
		||||
          incoming = {
 | 
			
		||||
            listen = [
 | 
			
		||||
              "127.0.0.1" "::1"
 | 
			
		||||
              assignments.hi.ipv4.address assignments.hi.ipv6.address
 | 
			
		||||
              assignments.lo.ipv4.address assignments.lo.ipv6.address
 | 
			
		||||
            ];
 | 
			
		||||
            allow_from = [
 | 
			
		||||
              "127.0.0.0/8" "::1/128"
 | 
			
		||||
              prefixes.hi.v4 prefixes.hi.v6
 | 
			
		||||
              prefixes.lo.v4 prefixes.lo.v6
 | 
			
		||||
            ] ++ (with lib.my.c.tailscale.prefix; [ v4 v6 ]);
 | 
			
		||||
 | 
			
		||||
        settings = {
 | 
			
		||||
          query-local-address = [
 | 
			
		||||
            "0.0.0.0"
 | 
			
		||||
            "::"
 | 
			
		||||
          ];
 | 
			
		||||
          forward-zones = map (z: "${z}=127.0.0.1:5353") authZones;
 | 
			
		||||
            # DNS NOTIFY messages override TTL
 | 
			
		||||
            allow_notify_for = authZones;
 | 
			
		||||
            allow_notify_from = [ "127.0.0.0/8" "::1/128" ];
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          # DNS NOTIFY messages override TTL
 | 
			
		||||
          allow-notify-for = authZones;
 | 
			
		||||
          allow-notify-from = [ "127.0.0.0/8" "::1/128" ];
 | 
			
		||||
          outgoing = {
 | 
			
		||||
            source_address = [ "0.0.0.0" "::" ];
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          webserver = true;
 | 
			
		||||
          webserver-address = "::";
 | 
			
		||||
          webserver-allow-from = [ "127.0.0.1" "::1" ];
 | 
			
		||||
          recursor = {
 | 
			
		||||
            forward_zones = map (z: {
 | 
			
		||||
              zone = z;
 | 
			
		||||
              forwarders = [ "127.0.0.1:5353" ];
 | 
			
		||||
            }) authZones;
 | 
			
		||||
 | 
			
		||||
          lua-dns-script = pkgs.writeText "pdns-script.lua" ''
 | 
			
		||||
            blocklist = newDS()
 | 
			
		||||
            lua_dns_script = pkgs.writeText "pdns-script.lua" ''
 | 
			
		||||
              blocklist = newDS()
 | 
			
		||||
 | 
			
		||||
            function preresolve(dq)
 | 
			
		||||
              local name = dq.qname:toString()
 | 
			
		||||
              function preresolve(dq)
 | 
			
		||||
                local name = dq.qname:toString()
 | 
			
		||||
 | 
			
		||||
              -- Disney+ doesn't like our IP space...
 | 
			
		||||
              if dq.qtype == pdns.AAAA and (string.find(name, "disneyplus") or string.find(name, "disney-plus") or string.find(name , "disney.api")) then
 | 
			
		||||
                dq.rcode = 0
 | 
			
		||||
                return true
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              if blocklist:check(dq.qname) then
 | 
			
		||||
                if dq.qtype == pdns.A then
 | 
			
		||||
                  dq:addAnswer(dq.qtype, "127.0.0.1")
 | 
			
		||||
                elseif dq.qtype == pdns.AAAA then
 | 
			
		||||
                  dq:addAnswer(dq.qtype, "::1")
 | 
			
		||||
                -- Disney+ doesn't like our IP space...
 | 
			
		||||
                if dq.qtype == pdns.AAAA and (string.find(name, "disneyplus") or string.find(name, "disney-plus") or string.find(name , "disney.api")) then
 | 
			
		||||
                  dq.rcode = 0
 | 
			
		||||
                  return true
 | 
			
		||||
                end
 | 
			
		||||
                return true
 | 
			
		||||
 | 
			
		||||
                if blocklist:check(dq.qname) then
 | 
			
		||||
                  if dq.qtype == pdns.A then
 | 
			
		||||
                    dq:addAnswer(dq.qtype, "127.0.0.1")
 | 
			
		||||
                  elseif dq.qtype == pdns.AAAA then
 | 
			
		||||
                    dq:addAnswer(dq.qtype, "::1")
 | 
			
		||||
                  end
 | 
			
		||||
                  return true
 | 
			
		||||
                end
 | 
			
		||||
 | 
			
		||||
                return false
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              return false
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            for line in io.lines("${./dns-blocklist.txt}") do
 | 
			
		||||
              entry = line:gsub("%s+", "")
 | 
			
		||||
              if entry ~= "" and string.sub(entry, 1, 1) ~= "#" then
 | 
			
		||||
                blocklist:add(entry)
 | 
			
		||||
              for line in io.lines("${./dns-blocklist.txt}") do
 | 
			
		||||
                entry = line:gsub("%s+", "")
 | 
			
		||||
                if entry ~= "" and string.sub(entry, 1, 1) ~= "#" then
 | 
			
		||||
                  blocklist:add(entry)
 | 
			
		||||
                end
 | 
			
		||||
              end
 | 
			
		||||
            end
 | 
			
		||||
          '';
 | 
			
		||||
            '';
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          webservice = {
 | 
			
		||||
            webserver = true;
 | 
			
		||||
            address = "::";
 | 
			
		||||
            allow_from = [ "127.0.0.1" "::1" ];
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,8 @@ in
 | 
			
		||||
 | 
			
		||||
          nextcloud = {
 | 
			
		||||
            enable = true;
 | 
			
		||||
            package = pkgs.nextcloud29;
 | 
			
		||||
            # TODO: Might need to do some bullshit to go from Nextcloud 28 (?) to 30
 | 
			
		||||
            package = pkgs.nextcloud30;
 | 
			
		||||
            datadir = "/mnt/storage/nextcloud";
 | 
			
		||||
            hostName = "cloud.${domain}";
 | 
			
		||||
            https = true;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user