70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  inputs,
 | 
						|
  config,
 | 
						|
  pkgs,
 | 
						|
  lib,
 | 
						|
  ...
 | 
						|
}: let
 | 
						|
  preBackup = pkgs.writeShellScriptBin "mc-docker-pre-backup" ''
 | 
						|
    set -euxo pipefail
 | 
						|
 | 
						|
    ${pkgs.docker}/bin/docker exec minecraft rcon-cli "say server backing up, expect minor lag"
 | 
						|
    sleep 10
 | 
						|
    ${pkgs.docker}/bin/docker exec minecraft rcon-cli "save-all flush"
 | 
						|
    ${pkgs.docker}/bin/docker exec minecraft rcon-cli "save-off"
 | 
						|
    sleep 10
 | 
						|
  '';
 | 
						|
  postBackup = pkgs.writeShellScriptBin "mc-docker-post-backup" ''
 | 
						|
    set -euxo pipefail
 | 
						|
 | 
						|
    ${pkgs.docker}/bin/docker exec minecraft rcon-cli "save-on"
 | 
						|
    ${pkgs.docker}/bin/docker exec minecraft rcon-cli "say server backup succsessful!"
 | 
						|
  '';
 | 
						|
in {
 | 
						|
  virtualisation.oci-containers = {
 | 
						|
    backend = "docker";
 | 
						|
    containers.minecraft = {
 | 
						|
      image = "itzg/minecraft-server";
 | 
						|
      volumes = ["/storage/minecraft:/data"];
 | 
						|
      hostname = "minecraft";
 | 
						|
      ports = [
 | 
						|
        "25565:25565"
 | 
						|
      ];
 | 
						|
      environment = {
 | 
						|
        EULA = "TRUE";
 | 
						|
        TYPE = "FORGE";
 | 
						|
        VERSION = "1.20.1";
 | 
						|
        # REMOVE_OLD_MODS="TRUE";
 | 
						|
        # PACKWIZ_URL = "https://static.venberg.xyz/minecraft/less-than-compact-2/pack.toml";
 | 
						|
        MEMORY = "16G";
 | 
						|
        USE_AIKAR_FLAGS = "true";
 | 
						|
        UID = "1000";
 | 
						|
        GID = "100";
 | 
						|
        STOP_SERVER_ANNOUNCE_DELAY = "30";
 | 
						|
        ENABLE_ROLLING_LOGS = "true";
 | 
						|
        GUI = "FALSE";
 | 
						|
        # SETUP_ONLY = "true";
 | 
						|
        MOTD = "Welcome!";
 | 
						|
        DIFFICULTY = "normal";
 | 
						|
        OPS = "TheToric";
 | 
						|
        ENFORCE_WHITELIST = "true";
 | 
						|
        ENABLE_WHITELIST = "true";
 | 
						|
        ANNOUNCE_PLAYER_ACHIEVEMENTS = "true";
 | 
						|
        ALLOW_FLIGHT = "TRUE";
 | 
						|
        ENABLE_AUTOPAUSE = "true";
 | 
						|
        MAX_TICK_TIME = "-1";
 | 
						|
      };
 | 
						|
      extraOptions = ["--stop-timeout=60"];
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  host.restic.backups.minecraft = {
 | 
						|
    preBackupCommands = "${preBackup}/bin/mc-docker-pre-backup";
 | 
						|
    postBackupCommands = "${postBackup}/bin/mc-docker-post-backup";
 | 
						|
    paths = ["/storage/minecraft"];
 | 
						|
  };
 | 
						|
 | 
						|
  imports = [
 | 
						|
    ./docker.nix
 | 
						|
  ];
 | 
						|
}
 |