{ pkgs, config, lib, ... }:
let
  rsyncSSHKeys = config.users.users.agatha.openssh.authorizedKeys.keys
    ++ config.users.users.julia.openssh.authorizedKeys.keys;

  jre8 = pkgs.temurin-bin-8;
  jre17 = pkgs.temurin-bin-17;

  jvmOpts = lib.concatStringsSep " " [
    "-XX:+UseG1GC"
    "-XX:+ParallelRefProcEnabled"
    "-XX:MaxGCPauseMillis=200"
    "-XX:+UnlockExperimentalVMOptions"
    "-XX:+DisableExplicitGC"
    "-XX:+AlwaysPreTouch"
    "-XX:G1NewSizePercent=40"
    "-XX:G1MaxNewSizePercent=50"
    "-XX:G1HeapRegionSize=16M"
    "-XX:G1ReservePercent=15"
    "-XX:G1HeapWastePercent=5"
    "-XX:G1MixedGCCountTarget=4"
    "-XX:InitiatingHeapOccupancyPercent=20"
    "-XX:G1MixedGCLiveThresholdPercent=90"
    "-XX:G1RSetUpdatingPauseTimePercent=5"
    "-XX:SurvivorRatio=32"
    "-XX:+PerfDisableSharedMem"
    "-XX:MaxTenuringThreshold=1"
  ];

  serverDefaults = {
    white-list = true;
    spawn-protection = 0;
    allow-flight = true;
    max-tick-time = 2 * 60 * 1000;
  };
in {
  services.modded-minecraft-servers = {
    eula = true;

    instances = {
      # End to End encrypted modded minecraft yay
      e2e = {
        enable = false;
        inherit rsyncSSHKeys jvmOpts;

        jvmInitialAllocation = "1G";
        jvmMaxAllocation = "8G";
        jvmPackage = jre8;

        serverConfig = serverDefaults // {
          server-port = 25565;
          rcon-port = 25566;
          motd = "Enigmeowtica 2: Expert";
          extra-options.level-type = "BIOMESOP";
        };
      };
      enigmatica-8 = {
        enable = false;
        inherit rsyncSSHKeys jvmOpts;

        jvmInitialAllocation = "1G";
        jvmMaxAllocation = "8G";
        jvmPackage = jre17;

        serverConfig = serverDefaults // {
          server-port = 25567;
          rcon-port = 25568;
          motd = "Enigmeowtica 8";
          max-tick-time = 300000;
        };
      };
    };
  };

  systemd.services.mc-e2e.path = with pkgs; [ getconf gawk ];

  users.users.agatha.packages = with pkgs; [ mcrcon ];
}
