added minecraft server. Backup solution is a bit ugly ATM.
This commit is contained in:
		
							parent
							
								
									39bee826c3
								
							
						
					
					
						commit
						60fe035ea7
					
				
					 8 changed files with 94 additions and 9 deletions
				
			
		| 
						 | 
					@ -6,10 +6,10 @@
 | 
				
			||||||
}: {
 | 
					}: {
 | 
				
			||||||
  programs.yazi.enable = true;
 | 
					  programs.yazi.enable = true;
 | 
				
			||||||
  # optional dependencies for yazi.
 | 
					  # optional dependencies for yazi.
 | 
				
			||||||
  programs={
 | 
					  programs = {
 | 
				
			||||||
    fzf.enable=true;
 | 
					    fzf.enable = true;
 | 
				
			||||||
    ripgrep.enable=true;
 | 
					    ripgrep.enable = true;
 | 
				
			||||||
    zoxide.enable=true;
 | 
					    zoxide.enable = true;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  home.packages = with pkgs; [
 | 
					  home.packages = with pkgs; [
 | 
				
			||||||
    ffmpeg
 | 
					    ffmpeg
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,9 @@
 | 
				
			||||||
  lib,
 | 
					  lib,
 | 
				
			||||||
  ...
 | 
					  ...
 | 
				
			||||||
}: {
 | 
					}: {
 | 
				
			||||||
  virtualisation.docker.enable = true;
 | 
					  virtualisation.docker = {
 | 
				
			||||||
 | 
					    enable = true;
 | 
				
			||||||
 | 
					    autoPrune.enable = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
  users.users.${config.host.user}.extraGroups = ["docker"];
 | 
					  users.users.${config.host.user}.extraGroups = ["docker"];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,6 @@
 | 
				
			||||||
      hostname = "factorio";
 | 
					      hostname = "factorio";
 | 
				
			||||||
      ports = [
 | 
					      ports = [
 | 
				
			||||||
        "34197:34197/udp"
 | 
					        "34197:34197/udp"
 | 
				
			||||||
        "27015:27015/tcp"
 | 
					 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
      environment = {UPDATE_MODS_ON_START = "true";};
 | 
					      environment = {UPDATE_MODS_ON_START = "true";};
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										48
									
								
								configs/nixos/minecraft-docker.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								configs/nixos/minecraft-docker.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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 = "300";
 | 
				
			||||||
 | 
					        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=600"];
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  imports = [
 | 
				
			||||||
 | 
					    ./docker.nix
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ in {
 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  services.nginx.virtualHosts."static.venberg.xyz" = {
 | 
					  services.nginx.virtualHosts."directory.venberg.xyz" = {
 | 
				
			||||||
    enableACME = true;
 | 
					    enableACME = true;
 | 
				
			||||||
    forceSSL = true;
 | 
					    forceSSL = true;
 | 
				
			||||||
    locations."/" = {
 | 
					    locations."/" = {
 | 
				
			||||||
							
								
								
									
										13
									
								
								configs/nixos/nginx-static.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								configs/nixos/nginx-static.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  inputs,
 | 
				
			||||||
 | 
					  config,
 | 
				
			||||||
 | 
					  pkgs,
 | 
				
			||||||
 | 
					  lib,
 | 
				
			||||||
 | 
					  ...
 | 
				
			||||||
 | 
					}: {
 | 
				
			||||||
 | 
					  services.nginx.virtualHosts."static.venberg.xyz" = {
 | 
				
			||||||
 | 
					    enableACME = true;
 | 
				
			||||||
 | 
					    forceSSL = true;
 | 
				
			||||||
 | 
					    root = "/storage/static";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,9 @@ inputs.nixpkgs.lib.nixosSystem {
 | 
				
			||||||
    ../../configs/nixos/grocy.nix
 | 
					    ../../configs/nixos/grocy.nix
 | 
				
			||||||
    ../../configs/nixos/factorio-docker.nix
 | 
					    ../../configs/nixos/factorio-docker.nix
 | 
				
			||||||
    ../../configs/nixos/cyberchef.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,
 | 
					      config,
 | 
				
			||||||
      pkgs,
 | 
					      pkgs,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,23 @@
 | 
				
			||||||
  ...
 | 
					  ...
 | 
				
			||||||
}: let
 | 
					}: let
 | 
				
			||||||
  port = "8090";
 | 
					  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 {
 | 
					in {
 | 
				
			||||||
  services.restic.server = lib.mkIf (inputs ? nix-secrets) {
 | 
					  services.restic.server = lib.mkIf (inputs ? nix-secrets) {
 | 
				
			||||||
    enable = true;
 | 
					    enable = true;
 | 
				
			||||||
| 
						 | 
					@ -46,11 +63,14 @@ in {
 | 
				
			||||||
      repositoryFile = "/backup/restic/";
 | 
					      repositoryFile = "/backup/restic/";
 | 
				
			||||||
      passwordFile = config.sops.secrets.restic-password.path;
 | 
					      passwordFile = config.sops.secrets.restic-password.path;
 | 
				
			||||||
      initialize = true;
 | 
					      initialize = true;
 | 
				
			||||||
 | 
					      backupPrepareCommand = "${preBackup}/bin/mc-docker-pre-backup";
 | 
				
			||||||
 | 
					      backupCleanupCommand = "${postBackup}/bin/mc-docker-post-backup";
 | 
				
			||||||
      paths = [
 | 
					      paths = [
 | 
				
			||||||
        "/storage/syncthing"
 | 
					        "/storage/syncthing"
 | 
				
			||||||
        "/storage/factorio"
 | 
					        "/storage/factorio"
 | 
				
			||||||
 | 
					        "/storage/minecraft"
 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
      pruneOpts=[
 | 
					      pruneOpts = [
 | 
				
			||||||
        "--keep-within 14d"
 | 
					        "--keep-within 14d"
 | 
				
			||||||
        "--keep-daily 14"
 | 
					        "--keep-daily 14"
 | 
				
			||||||
        "--keep-weekly 8"
 | 
					        "--keep-weekly 8"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue