{
  config,
  lib,
  pkgs,
  assets,
  ...
}:
let
  # todo create flake for this
  errorPages = pkgs.fetchFromGitHub {
    owner = "mrvandalo";
    repo = "http-errors";
    rev = "74b8e4c1d9bbba3db6ad858b888e1867318af1f0";
    sha256 = "0czdzafx4k76q773lyf3vsjm74g1995iz542dhw15kpy5xbivsrg";
  };
  error = {
    extraConfig = ''
      error_page 400 /errors/400.html;
      error_page 401 /errors/401.html;
      error_page 402 /errors/402.html;
      error_page 403 /errors/403.html;
      error_page 404 /errors/404.html;
      error_page 405 /errors/405.html;
      error_page 406 /errors/406.html;
      error_page 500 /errors/500.html;
      error_page 501 /errors/501.html;
      error_page 502 /errors/502.html;
      error_page 503 /errors/503.html;
      error_page 504 /errors/504.html;
    '';
    locations."^~ /errors/" = {
      extraConfig = "internal;";
      root = "${errorPages}/";
    };
  };
in

{
  networking.firewall.allowedTCPPorts = [
    80
    443
  ];
  networking.firewall.allowedUDPPorts = [
    80
    443
  ];

  healthchecks.http."travel.ingolf-wagner.de" = {
    url = "https://travel.ingolf-wagner.de";
    expectedContent = "Tina & Palos Reiseblog";
  };

  healthchecks.http."tech.ingolf-wagner.de" = {
    url = "https://tech.ingolf-wagner.de";
    expectedContent = "Hey here are some articles about technical issues";
  };

  services.nginx = {
    enable = true;
    recommendedProxySettings = true;
    virtualHosts = {

      "ingolf-wagner.de" = {
        forceSSL = true;
        enableACME = true;
        extraConfig = error.extraConfig;
        locations = {
          "/" = {
            root = pkgs.landingpage.override {
              jsonConfig = [
                {
                  title = "Ingolf Wagner";
                  text = ''
                    I'm a freelancing mathematician, musician and programmer.

                    My PGP fingerprint is 42AC 51C9 482D 0834 CF48  8AF1 389E C2D6 4AC7 1EAC
                  '';
                }
                {
                  text = ''
                    Here are some of my projects you might enjoy:
                  '';
                  items = [
                    {
                      label = "terranix";
                      href = "https://terranix.org";
                      image = "https://raw.githubusercontent.com/terranix/terranix-artwork/main/terranix-logo.svg";
                    }
                    {
                      label = "Sononym";
                      href = "https://www.sononym.net/";
                      image = "https://www.sononym.net/press/logos/sononym-logo-symbol-black.png";
                    }
                    {
                      label = "LandingPage";
                      href = "https://github.com/mrVanDalo/landingpage";
                      image = "https://media.giphy.com/media/2vNGq1w3nsJri/giphy.gif";
                    }
                    {
                      label = "My Blog";
                      href = "https://tech.ingolf-wagner.de/";
                      image = "https://media.giphy.com/media/11I8v5lE8uq79C/giphy.gif";
                    }
                  ];
                }
              ];
              title = "Ingolf Wagner";
              max-width = "1010px";
              background-color = "#FEFAE0";
              title-color = "black";
              title-background-color = "#E9EDC9";
              text-color = "black";
              text-background-color = "#FAEDCD";
              item-color = "black";
              item-background-color = "#E9EDC9";
              image-width = "250px";
              image-height = "200px";
            };
          };
          "= /mrvandalo.pgp" = {
            root = pkgs.writeText "key" (lib.fileContents "${assets}/mrvandalo.gpg");
          };
          "= /mrvandalo.gpg" = {
            root = pkgs.writeText "key" (lib.fileContents "${assets}/mrvandalo.gpg");
          };
          "= /mrvandalo_rsa.pub" = {
            root = pkgs.writeText "key" (lib.fileContents "${assets}/mrvandalo_rsa.pub");
          };
        };
      };
      "travel.ingolf-wagner.de" = {
        forceSSL = true;
        enableACME = true;
        extraConfig = error.extraConfig;
        locations = {
          "/" = {
            root = "/srv/www/travel";
            extraConfig = ''
              etag on;
              if (-d $request_filename) {
                rewrite [^/]$ $scheme://$http_host$request_uri/ permanent;
              }
            '';
          };
        } // error.locations;
      };
      "tech.ingolf-wagner.de" = {
        forceSSL = true;
        enableACME = true;
        extraConfig = error.extraConfig;
        locations = {
          "/" = {
            root = "/srv/www/tech";
            extraConfig = ''
              if (-d $request_filename) {
                rewrite [^/]$ $scheme://$http_host$request_uri/ permanent;
              }
            '';
          };
        } // error.locations;
      };
    };
  };
}