From 968cf96f5a3a3411e67d8ca34f70d497b4022a0e Mon Sep 17 00:00:00 2001 From: Infinidoge Date: Sun, 6 Feb 2022 22:45:15 -0500 Subject: [PATCH] feat(tmux-minecraft-server): add tmux socket --- .../functionality/tmux-minecraft-server.nix | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/modules/functionality/tmux-minecraft-server.nix b/modules/functionality/tmux-minecraft-server.nix index cc43560..74dfece 100644 --- a/modules/functionality/tmux-minecraft-server.nix +++ b/modules/functionality/tmux-minecraft-server.nix @@ -5,6 +5,19 @@ with lib.hlissner; let cfg = config.services.tmux-minecraft-server; + tmux = "${getBin pkgs.tmux}/bin/tmux"; + server = "${cfg.package}/bin/minecraft-server"; + + stopScript = pkgs.writeScript "minecraft-stop" '' + #!${pkgs.runtimeShell} + + if ! [ -d "/proc/$1" ]; then + exit 0 + fi + + ${tmux} -S ${cfg.dataDir}/minecraft-server.sock send-keys stop Enter + ''; + files = { # We don't allow eula=false anyways eula = builtins.toFile "eula.txt" '' @@ -169,9 +182,12 @@ in after = [ "network.target" ]; serviceConfig = { - ExecStart = "${cfg.package}/bin/minecraft-server ${cfg.jvmOpts}"; + ExecStart = "${tmux} -S ${cfg.dataDir}/minecraft-server.sock new -d ${server} ${cfg.jvmOpts}"; + ExecStop = "${stopScript} $MAINPID"; Restart = "always"; User = "minecraft"; + Type = "forking"; + GuessMainPID = true; WorkingDirectory = cfg.dataDir; }; @@ -180,6 +196,12 @@ in ln -sf ${whitelist} whitelist.json cp -f ${serverProperties} server.properties ''; + + postStart = '' + ${pkgs.coreutils}/bin/chmod 770 ${cfg.dataDir} + ${pkgs.coreutils}/bin/chmod 660 ${cfg.dataDir}/minecraft-server.sock + ${pkgs.coreutils}/bin/chgrp minecraft ${cfg.dataDir}/minecraft-server.sock + ''; }; networking.firewall = mkIf cfg.openFirewall (with ports; {