{ pkgs, helpers, config, lib, ... }: {
  clicks.nginx.services = with helpers.nginx; [
    (Host "signup.hopescaramels.com" (ReverseProxy "caramels:1024"))
    (Host "freeflowtaekwondo.com" (ReverseProxy "generic:1026"))
    (Host "homebridge.coded.codes" (ReverseProxy "CodedPi:8581"))
    (Host "codedpc.coded.codes" (ReverseProxy "SamuelDesktop:3389"))
    (Host "testing.coded.codes" (ReverseProxy "SamuelDesktop:3000"))
    (Hosts [ "kavita.coded.codes" "reading.coded.codes" ]
      (ReverseProxy "127.0.0.1:5000"))
    (Host "clicks.codes" (Compose [
      (Path "/.well-known/matrix/"
        (CrossOrigin (File ./nginx/clicks.codes/.well-known/matrix)))
      (ReverseProxy "127.0.0.1:3000")
    ]))
    (Hosts [ "vaultwarden.clicks.codes" "passwords.clicks.codes" ] (ReverseProxy "generic:1028"))
    (Hosts [ "taiga.clicks.codes" "projects.clicks.codes" "tasks.clicks.codes" "issues.clicks.codes" "kanban.clicks.codes" ] (ReverseProxy "generic:1029"))
    (Host "login.clicks.codes" (ReverseProxy "127.0.0.1:9083"))
    (Hosts [ "gerrit.clicks.codes" "git.clicks.codes" ]
      (ReverseProxy "generic:1024"))
    (Hosts [ "grafana.clicks.codes" "logs.clicks.codes" ]
      (ReverseProxy "127.0.0.1:9052"))
    (InsecureHosts [
      "mail.clicks.codes"
      "mail.coded.codes"
      "mail.hopescaramels.com"
      "autoconfig.coded.codes"
      "autoconfig.clicks.codes"
      "autoconfig.hopescaramels.com"
      "imap.coded.codes"
      "imap.clicks.codes"
      "imap.hopescaramels.com"
      "pop.coded.codes"
      "pop.clicks.codes"
      "pop.hopescaramels.com"
      "smtp.coded.codes"
      "smtp.clicks.codes"
      "smtp.hopescaramels.com"
    ] (ReverseProxy "generic:1026"))
    (Hosts ["matrix.clicks.codes" "matrix.coded.codes"] (Directory "${builtins.toString
      (pkgs.schildichat-web.override {
        conf = {
          default_server_config =
            lib.pipe ./nginx/clicks.codes/.well-known/matrix [
              builtins.readFile
              builtins.fromJSON
            ];
          features = {
            feature_report_to_moderators = true;
            feature_latex_maths = true;
            feature_pinning = true;
            feature_mjolnir = true;
            feature_presence_in_room_list = true;
            feature_custom_themes = true;
            feature_dehydration = true;
          };
          setting_defaults = { "fallbackICEServerAllowed" = true; };
          default_theme = "dark";
          disable_guests = true;
          disable_3pid_login = true;
        };
      })}"))
    (Host "api.clicks.codes"
      (Path "/nucleus/" (ReverseProxy "127.0.0.1:10000")))
    (Host "api.coded.codes"
      (Path "/nucleus/" (ReverseProxy "SamuelDesktop:10000")))
    (Host "coded.codes" (Compose [
      (Path "/.well-known/matrix/"
        (CrossOrigin (File ./nginx/clicks.codes/.well-known/matrix)))
      (Redirect "https://clicks.codes$request_uri")
    ]))
    (Hosts ["matrix-backend.clicks.codes" "matrix-backend.coded.codes"] (Compose [
      (Path "/_synapse/admin/" (Status 403))
      (ReverseProxy "generic:1030")
    ]))
    (Hosts ["matrix-sliding-sync.clicks.codes" "matrix-sliding-sync.coded.codes"]
      (ReverseProxy "generic:1031"))
  ];
  clicks.nginx.serviceAliases = with helpers.nginx; [
    (Aliases "nextcloud.clicks.codes" [
      "cloud.clicks.codes"
      "www.cloud.clicks.codes"
      "www.nextcloud.clicks.codes"
    ])
    (Aliases "privatebin" [
      "paste.clicks.codes"
      "paste.coded.codes"
      "paste.thecoded.prof"
      "paste.hopescaramels.com"
      "www.paste.clicks.codes"
      "www.paste.coded.codes"
      "www.paste.thecoded.prof"
      "www.paste.hopescaramels.com"
      "www.privatebin.clicks.codes"
    ])
  ];
}
