{ config, inputs, pkgs, tools, ... }:

{
  links.nixIpfs.protocol = "http";

  systemd.services.nix-ipfs-cache = {
    wantedBy = [ "multi-user.target" ];
    serviceConfig = {
      ExecStart = "${inputs.self.packages.${pkgs.system}.reflex-cache}/bin/reflex";
      DynamicUser = true;
      SupplementaryGroups = [ "ipfs" ];
      CacheDirectory = "nix-ipfs-cache";
    };
    environment = {
      REFLEX_PORT = config.links.nixIpfs.portStr;
      IPFS_API = config.services.ipfs.apiAddress;
      IPFS_CLUSTER_API = config.services.ipfs-cluster.settings.api.restapi.http_listen_multiaddress;
      NIX_CACHES = toString [
        "https://cache.nixos.org"
        "https://cache.${tools.meta.domain}"
        "https://max.cachix.org"
      ];
    };
  };

  services.nginx.virtualHosts."reflex.${tools.meta.domain}" = tools.nginx.vhosts.proxy config.links.nixIpfs.url;
}