{
  config,
  pkgs,
  ...
}: let
  full-text-search = {
    enabled = true;
    backend = "solr";
    solr.url = "http://localhost:8983/solr/docspell";
  };
  jdbc = {
    url = "jdbc:postgresql://localhost:5432/docspell";
    user = "dev";
    password = "dev";
  };
in {
  services.dev-postgres = {
    enable = true;
    databases = ["docspell"];
  };
  services.dev-email.enable = true;
  services.dev-solr = {
    enable = true;
    cores = ["docspell"];
    heap = 512;
  };

  port-forward.dev-webmail = 8080;
  port-forward.dev-solr = 8983;

  environment.systemPackages = with pkgs; [
    jq
    htop
    iotop
    coreutils
  ];

  networking = {
    hostName = "docspell-test-vm";
    firewall.allowedTCPPorts = [7880];
  };

  virtualisation.memorySize = 2048;
  virtualisation.cores = 2;

  virtualisation.forwardPorts = [
    {
      from = "host";
      host.port = 7881;
      guest.port = 7880;
    }
  ];

  services.docspell-restserver = {
    enable = true;
    bind.address = "0.0.0.0";
    backend = {
      addons.enabled = true;
      signup.mode = "open";
      inherit jdbc;
    };
    integration-endpoint = {
      enabled = true;
      http-header = {
        enabled = true;
        header-value = "test123";
      };
    };
    admin-endpoint = {
      secret = "admin123";
    };
    inherit full-text-search;
  };

  services.docspell-joex = {
    enable = true;
    bind.address = "0.0.0.0";
    inherit jdbc full-text-search;
    addons = {
      executor-config = {
        runner = "nix-flake,trivial";
        nspawn.enabled = true;
      };
    };
  };
}