{
  config,
  nms,
  pkgs,
  self,
  ...
}: let
  inherit (config.vars) mainUser;
in {
  imports = [nms.nixosModules.default];

  environment.systemPackages = [
    self.packages.${pkgs.system}.curseforge-server-downloader
  ];

  systemd.services.mc-steampunk.path = with pkgs; [curl];

  services = {
    borgbackup.configs.mc = {
      paths = ["/var/lib/minecraft"];
      startAt = "01/3:00";
    };

    modded-minecraft-servers = {
      eula = true;
      user = mainUser;

      instances = let
        jre17 = pkgs.temurin-bin-17;
        jre18 = pkgs.temurin-bin-18;
        jre21 = pkgs.temurin-bin-21;

        defaults = {
          spawn-protection = 0;
          max-tick-time = 5 * 60 * 1000;
          allow-flight = true;
        };
      in {
        # Vanilla Survival
        sv = {
          enable = true;

          jvmMaxAllocation = "10G";
          jvmInitialAllocation = "2G";
          jvmPackage = jre21;
          jvmOpts = "";

          serverConfig =
            {
              server-port = 25569;
              motd = "1.21 gaming";

              extra-options = {
                difficulty = "hard";
                enable-command-block = true;
                max-players = 10;
                view-distance = 16;
                level-seed = "8764718009920";
              };
            }
            // defaults;
        };

        # Vanilla Creative
        cv = {
          enable = true;

          jvmMaxAllocation = "8G";
          jvmInitialAllocation = "2G";
          jvmPackage = jre21;
          jvmOpts = "";

          serverConfig =
            {
              server-port = 25566;
              motd = "creative mode gaming";

              extra-options = {
                difficulty = "hard";
                enable-command-block = true;
                enforce-white-list = true;
                gamemode = "creative";
                max-players = 6;
                view-distance = 16;
              };
            }
            // defaults;
        };

        # Modded https://www.curseforge.com/minecraft/modpacks/steam-punk
        # curseforge-server-downloader --pack 643605 --version latest
        steampunk = {
          enable = false;

          jvmMaxAllocation = "12G";
          jvmInitialAllocation = "2G";
          jvmPackage = jre18;
          jvmOpts = "";

          serverConfig =
            {
              server-port = 25569;
              motd = "";

              extra-options = {
                allow-nether = true;
                enable-command-block = true;
                enable-status = true;
                entity-broadcast-range-percentage = 100;
                force-gamemode = false;
                function-permission-level = 2;
                gamemode = "survival";
                generate-structures = true;
                max-build-height = 256;
                max-players = 8;
                difficulty = "normal";
                view-distance = 12;
                simulation-distance = 10;
                sync-chunk-writes = true;
                use-native-transport = true;
              };
            }
            // defaults;
        };

        # Modded https://www.curseforge.com/minecraft/modpacks/ultimate-building-modpack
        # With https://www.curseforge.com/minecraft/mc-mods/bits-and-chisels
        builder = {
          enable = false;

          jvmMaxAllocation = "6G";
          jvmInitialAllocation = "2G";
          jvmPackage = jre18;
          jvmOpts = "";

          serverConfig =
            {
              server-port = 25567;
              motd = "creative mode gaming with mods";

              extra-options = {
                generate-structures = false;
                level-type = "minecraft:flat";
                difficulty = "hard";
                enable-command-block = true;
                enforce-white-list = false;
                gamemode = "creative";
                max-players = 6;
                view-distance = 16;
              };
            }
            // defaults;
        };

        # Vault Hunters
        vh = {
          enable = false;

          jvmMaxAllocation = "12G";
          jvmInitialAllocation = "2G";
          jvmPackage = jre17;
          jvmOpts = "";

          serverConfig =
            {
              server-port = 25569;
              motd = "we do a little hunting of the vaults";

              extra-options = {
                difficulty = "hard";
                enable-command-block = true;
                entity-broadcast-range-percentage = 150;
                level-type = "default";
                max-players = 8;
                spawn-protection = 0;
                sync-chunk-writes = true;
                use-native-transport = true;
                view-distance = 10;
              };
            }
            // defaults;
        };
      };
    };
  };
}