{ config, pkgs, ... }:
let
  docspell = import ./release.nix;
  full-text-search = {
    enabled = true;
    solr.url = "http://localhost:${toString config.services.solr.port}/solr/docspell";
  };
in
{
  imports = docspell.modules ++ [ ./solr.nix ];

  i18n = {
    defaultLocale = "en_US.UTF-8";
  };
  console.keyMap = "neo";

  users.users.root = {
    password = "root";
  };

  nixpkgs = {
    config = {
      packageOverrides = pkgs:
        let
          callPackage = pkgs.lib.callPackageWith(custom // pkgs);
          custom = {
            docspell = callPackage docspell.currentPkg {};
          };
        in custom;
    };
  };

  services.docspell-joex = {
    enable = true;
    waitForTarget = "solr-init.target";
    bind.address = "0.0.0.0";
    base-url = "http://localhost:7878";
    jvmArgs = [ "-J-Xmx1536M" ];
    inherit full-text-search;
  };
  services.docspell-restserver = {
    enable = true;
    bind.address = "0.0.0.0";
    integration-endpoint = {
      enabled = true;
      http-header = {
        enabled = true;
        header-value = "test123";
      };
    };
    inherit full-text-search;
  };
  services.docspell-consumedir = {
    enable = true;
    integration-endpoint = {
      enabled = true;
      header = "Docspell-Integration:test123";
    };
    watchDirs = ["/tmp/docs"];
    urls = ["http://localhost:7880/api/v1/open/integration/item"];
  };

  environment.systemPackages =
    [ pkgs.docspell.tools
      pkgs.docspell.server
      pkgs.docspell.joex
      pkgs.jq
      pkgs.telnet
      pkgs.htop
      pkgs.openjdk
    ];


  services.xserver = {
    enable = false;
  };

  networking = {
    hostName = "docspelltest";
    firewall.allowedTCPPorts = [7880];
  };

  system.activationScripts = {
    initUploadDir = ''
      mkdir -p ${builtins.concatStringsSep " " config.services.docspell-consumedir.watchDirs}
    '';
  };
  system.stateVersion = "20.03";

}