# Source https://github.com/NixOS/nixpkgs/issues/113384
{ config
, lib
, pkgs
, ...
}:
let
  cfg = config.dadada.kanboard;
in
{
  options = {
    dadada.kanboard.enable = lib.mkEnableOption "Enable Kanboard";
  };

  config = lib.mkIf cfg.enable {
    services.phpfpm.pools.kanboard = {
      user = "kanboard";
      group = "kanboard";
      settings = {
        "listen.group" = "nginx";
        "pm" = "static";
        "pm.max_children" = 4;
      };
    };
    users.users.kanboard.isSystemUser = true;
    users.users.kanboard.group = "kanboard";
    users.groups.kanboard.members = [ "kanboard" ];

    systemd.tmpfiles.rules = [
      "d /var/lib/kanboard/data 0750 kanboard nginx - -"
    ];

    services.nginx = {
      enable = true;
      virtualHosts."kanboard.dadada.li" = {
        root = pkgs.buildEnv {
          name = "kanboard-configured";
          paths = [
            (pkgs.runCommand "kanboard-over" { meta.priority = 0; } ''
              mkdir -p $out
              for f in index.php jsonrpc.php ; do
              echo "<?php require('$out/config.php');" > $out/$f
              tail -n+2 ${pkgs.kanboard}/share/kanboard/$f \
              | sed 's^__DIR__^"${pkgs.kanboard}/share/kanboard"^' >> $out/$f
              done
              ln -s /var/lib/kanboard $out/data
              ln -s ${./kanboard-config.php} $out/config.php
            '')
            {
              outPath = "${pkgs.kanboard}/share/kanboard";
              meta.priority = 10;
            }
          ];
        };
        locations = {
          "/".index = "index.php";
          "~ \\.php$" = {
            tryFiles = "$uri =404";
            extraConfig = ''
              fastcgi_pass unix:${config.services.phpfpm.pools.kanboard.socket};
            '';
          };
        };
      };
    };
  };
}