From 10289cb9302f3d26e02ebf196c908f7180e6e758 Mon Sep 17 00:00:00 2001 From: Gabe Venberg <gabevenberg@gmail.com> Date: Fri, 11 Apr 2025 23:38:32 +0200 Subject: [PATCH] added minecraft server. Backup solution is a bit ugly ATM. --- configs/home-manager/yazi.nix | 8 ++-- configs/nixos/docker.nix | 5 +- configs/nixos/factorio-docker.nix | 1 - configs/nixos/minecraft-docker.nix | 48 +++++++++++++++++++ ...rve-static.nix => miniserve-directory.nix} | 2 +- configs/nixos/nginx-static.nix | 13 +++++ hosts/cirrostratus/default.nix | 4 +- hosts/cirrostratus/restic.nix | 22 ++++++++- 8 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 configs/nixos/minecraft-docker.nix rename configs/nixos/{miniserve-static.nix => miniserve-directory.nix} (92%) create mode 100644 configs/nixos/nginx-static.nix diff --git a/configs/home-manager/yazi.nix b/configs/home-manager/yazi.nix index 323ee17..83b4116 100644 --- a/configs/home-manager/yazi.nix +++ b/configs/home-manager/yazi.nix @@ -6,10 +6,10 @@ }: { programs.yazi.enable = true; # optional dependencies for yazi. - programs={ - fzf.enable=true; - ripgrep.enable=true; - zoxide.enable=true; + programs = { + fzf.enable = true; + ripgrep.enable = true; + zoxide.enable = true; }; home.packages = with pkgs; [ ffmpeg diff --git a/configs/nixos/docker.nix b/configs/nixos/docker.nix index c9451cd..4137898 100644 --- a/configs/nixos/docker.nix +++ b/configs/nixos/docker.nix @@ -5,6 +5,9 @@ lib, ... }: { - virtualisation.docker.enable = true; + virtualisation.docker = { + enable = true; + autoPrune.enable = true; + }; users.users.${config.host.user}.extraGroups = ["docker"]; } diff --git a/configs/nixos/factorio-docker.nix b/configs/nixos/factorio-docker.nix index c678598..922d317 100644 --- a/configs/nixos/factorio-docker.nix +++ b/configs/nixos/factorio-docker.nix @@ -13,7 +13,6 @@ hostname = "factorio"; ports = [ "34197:34197/udp" - "27015:27015/tcp" ]; environment = {UPDATE_MODS_ON_START = "true";}; }; diff --git a/configs/nixos/minecraft-docker.nix b/configs/nixos/minecraft-docker.nix new file mode 100644 index 0000000..66fd4ed --- /dev/null +++ b/configs/nixos/minecraft-docker.nix @@ -0,0 +1,48 @@ +{ + inputs, + config, + pkgs, + lib, + ... +}: { + 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"; + 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"]; + }; + }; + imports = [ + ./docker.nix + ]; +} diff --git a/configs/nixos/miniserve-static.nix b/configs/nixos/miniserve-directory.nix similarity index 92% rename from configs/nixos/miniserve-static.nix rename to configs/nixos/miniserve-directory.nix index c0854d3..93b85a5 100644 --- a/configs/nixos/miniserve-static.nix +++ b/configs/nixos/miniserve-directory.nix @@ -25,7 +25,7 @@ in { ]; }; }; - services.nginx.virtualHosts."static.venberg.xyz" = { + services.nginx.virtualHosts."directory.venberg.xyz" = { enableACME = true; forceSSL = true; locations."/" = { diff --git a/configs/nixos/nginx-static.nix b/configs/nixos/nginx-static.nix new file mode 100644 index 0000000..77fd255 --- /dev/null +++ b/configs/nixos/nginx-static.nix @@ -0,0 +1,13 @@ +{ + inputs, + config, + pkgs, + lib, + ... +}: { + services.nginx.virtualHosts."static.venberg.xyz" = { + enableACME = true; + forceSSL = true; + root = "/storage/static"; + }; +} diff --git a/hosts/cirrostratus/default.nix b/hosts/cirrostratus/default.nix index 5ab3755..b1a05f9 100644 --- a/hosts/cirrostratus/default.nix +++ b/hosts/cirrostratus/default.nix @@ -24,7 +24,9 @@ inputs.nixpkgs.lib.nixosSystem { ../../configs/nixos/grocy.nix ../../configs/nixos/factorio-docker.nix ../../configs/nixos/cyberchef.nix - ../../configs/nixos/miniserve-static.nix + ../../configs/nixos/miniserve-directory.nix + ../../configs/nixos/minecraft-docker.nix + ../../configs/nixos/nginx-static.nix ({ config, pkgs, diff --git a/hosts/cirrostratus/restic.nix b/hosts/cirrostratus/restic.nix index ec4c372..68e9cc6 100644 --- a/hosts/cirrostratus/restic.nix +++ b/hosts/cirrostratus/restic.nix @@ -6,6 +6,23 @@ ... }: let port = "8090"; + # TODO: I should really make restic a custom module at this point, with an enable option, a option for being the host, + # and the ability to add paths and pre/post commands from multiple places. + preBackup = pkgs.writeShellScriptBin "mc-docker-pre-backup" '' + set -euxo pipefail + + docker exec minecraft rcon-cli "say server backing up, expect minor lag" + sleep 10 + docker exec minecraft rcon-cli "save-all flush" + docker exec minecraft rcon-cli "save-off" + sleep 10 + ''; + postBackup = pkgs.writeShellScriptBin "mc-docker-post-backup" '' + set -euxo pipefail + + docker exec minecraft rcon-cli "save-on" + docker exec minecraft rcon-cli "say server backup succsessful!" + ''; in { services.restic.server = lib.mkIf (inputs ? nix-secrets) { enable = true; @@ -46,11 +63,14 @@ in { repositoryFile = "/backup/restic/"; passwordFile = config.sops.secrets.restic-password.path; initialize = true; + backupPrepareCommand = "${preBackup}/bin/mc-docker-pre-backup"; + backupCleanupCommand = "${postBackup}/bin/mc-docker-post-backup"; paths = [ "/storage/syncthing" "/storage/factorio" + "/storage/minecraft" ]; - pruneOpts=[ + pruneOpts = [ "--keep-within 14d" "--keep-daily 14" "--keep-weekly 8"