{
  config,
  lib,
  pkgs,
  inputs,
  ...
}: {
  imports = [
    inputs.nix-minecraft.nixosModules.minecraft-servers
  ];
  options.services.minecraft-servers.servers = let
    serverModule = {
      name,
      config,
      ...
    }: {
      options = {
        useRecommendedDefaults = lib.mkOption {
          type = lib.types.bool;
          description = "Whether to use recommended server settings.";
          default = false;
        };

        modpack = lib.mkOption {
          description = "Modpack to use";
          type = with lib.types; nullOr package;
          default = null;
        };

        modpackFiles = lib.mkOption {
          description = "List of files from modpack to copy into server directory";
          type = with lib.types; listOf str;
          default = [];
        };

        modpackSymlinks = lib.mkOption {
          description = "List of files from modpack to symlink into server directory";
          type = with lib.types; listOf str;
          default = [];
        };
      };

      config = lib.mkMerge [
        (lib.mkIf config.useRecommendedDefaults {
          autoStart = lib.mkDefault true;
          jvmOpts = "-Dlog4j2.formatMsgNoLookups=true";

          whitelist = lib.mkDefault {
            NullBite = "e24e8e0e-7540-4126-b737-90043155bcd4";
            Silveere = "468554f1-27cd-4ea1-9308-3dd14a9b1a12";
            YzumThreeEye = "3dad78e8-6979-404f-820e-952ce20964a0";
          };

          serverProperties = {
            # allows no chat reports to run
            enforce-secure-profile = lib.mkDefault false;

            # whitelist
            white-list = lib.mkDefault true;
            enforce-whitelist = lib.mkDefault true;

            motd = lib.mkDefault "owo what's this (nix preset edition)";
            enable-rcon = lib.mkDefault false;

            # btrfs performance fix
            sync-chunk-writes = lib.mkDefault false;

            # this helps with some mod support. disable it on public servers.
            allow-flight = lib.mkDefault true;

            # no telemetry
            snooper-enabled = lib.mkDefault false;

            # other preferred settings
            pvp = lib.mkDefault true;
            difficulty = lib.mkDefault "hard";
          };
        })
        (lib.mkIf (!(builtins.isNull config.modpack)) {
          symlinks = lib.genAttrs config.modpackSymlinks (path: "${config.modpack}/${path}");
          files = lib.genAttrs config.modpackFiles (path: "${config.modpack}/${path}");

          package = let
            inherit (config) modpack;

            mcVersion = modpack.manifest.versions.minecraft;
            fixedVersion = lib.replaceStrings ["."] ["_"] mcVersion;
            quiltVersion = modpack.manifest.versions.quilt or null;
            fabricVersion = modpack.manifest.versions.fabric or null;
            loader =
              if (!(builtins.isNull quiltVersion))
              then "quilt"
              else "fabric";
            loaderVersion =
              if loader == "quilt"
              then quiltVersion
              else fabricVersion;

            serverPackage = pkgs.minecraftServers."${loader}-${fixedVersion}".override {inherit loaderVersion;};
          in
            lib.mkDefault serverPackage;
        })
      ];
    };
  in
    lib.mkOption {
      type = with lib.types; attrsOf (submodule serverModule);
    };
}