{ config, pkgs, lib, ... }: { virtualisation.oci-containers.containers."minecraft-server" = { image = "ghcr.io/graalvm/graalvm-community:25"; volumes = [ "/var/lib/minecraft:/data:rw" ]; ports = [ "25565:25565/tcp" "24454:24454/udp" ]; extraOptions = [ "--network-alias=minecraft-server" "--network=minecraft_default" "--tty" "--interactive" ]; entrypoint = "/data/run.sh"; log-driver = "journald"; }; systemd.services."podman-minecraft-server" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; after = [ "podman-network-minecraft_default.service" ]; requires = [ "podman-network-minecraft_default.service" ]; partOf = [ "podman-compose-minecraft-root.target" ]; wantedBy = [ "podman-compose-minecraft-root.target" ]; }; # Networks systemd.services."podman-network-minecraft_default" = { path = [ pkgs.podman ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStop = "podman network rm -f minecraft_default"; }; script = '' podman network inspect minecraft_default || podman network create minecraft_default ''; partOf = [ "podman-compose-minecraft-root.target" ]; wantedBy = [ "podman-compose-minecraft-root.target" ]; }; # Root service # When started, this will automatically create all resources and start # the containers. When stopped, this will teardown all resources. systemd.targets."podman-compose-minecraft-root" = { unitConfig = { Description = "Root target"; }; wantedBy = [ "multi-user.target" ]; }; #systemd.services.minecraft-container = { # description = "Minecraft Server Container (GraalVM JVM 25)"; # after = [ "network-online.target" ]; # wants = [ "network-online.target" ]; # serviceConfig = { # ExecStart = '' # ${pkgs.podman}/bin/podman run \ # --rm \ # --name minecraft-server \ # -v /var/lib/minecraft:/data \ # -p 25565:25565 \ # -p 24454:24454/udp \ # ghcr.io/graalvm/graalvm-community:25 \ # /data/run.sh # ''; # ExecStop = "${pkgs.podman}/bin/podman stop minecraft-server"; # Restart = "always"; # RestartSec = "10s"; # }; # # # Ensure the directory exists # preStart = '' # mkdir -p /var/lib/minecraft # ''; # wantedBy = [ "multi-user.target" ]; #}; # ## Give Podman permission to access persistent storage #systemd.tmpfiles.rules = [ # "d /var/lib/minecraft 0755 root root" #]; }