{
  lib,
  config,
  globals,
  ...
}: {
  options.minecraft.enable = lib.mkEnableOption "minecraft";

  config = lib.mkIf config.minecraft.enable {
    kubernetes.resources = {
      deployments.minecraft.spec = {
        selector.matchLabels.app = "minecraft";

        template = {
          metadata.labels.app = "minecraft";

          spec = {
            volumes.data.persistentVolumeClaim.claimName = "data";

            containers.minecraft = {
              image = globals.images.minecraft;
              ports.minecraft.containerPort = 25565;

              env.EULA.value = "TRUE";

              volumeMounts = [
                {
                  name = "data";
                  mountPath = "/data";
                }
              ];
            };

            securityContext = {
              fsGroup = 1000;
              fsGroupChangePolicy = "OnRootMismatch";
            };
          };
        };
      };

      services.minecraft.spec = {
        type = "LoadBalancer";
        loadBalancerIP = globals.minecraftIPv4;
        selector.app = "minecraft";

        ports.minecraft = {
          port = 25565;
          targetPort = "minecraft";
        };
      };
    };

    lab.longhorn.persistentVolumeClaim.data = {
      volumeName = "minecraft";
      storage = "1Gi";
    };
  };
}