{ description = "Vintage Story Server as a Dockerfile"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11"; }; outputs = { self, nixpkgs, }: let pkgs = import nixpkgs { system = "x86_64-linux"; }; server = pkgs.stdenv.mkDerivation rec { pname = "vintagestory-server"; version = "1.18.15"; src = pkgs.fetchzip { url = "https://cdn.vintagestory.at/gamefiles/stable/vs_server_linux-x64_${version}.tar.gz"; hash = "sha256-nWzx44EVkEqWZw42Yi4NLa0b9lJ4HVIIqEvqEcjW+Q4="; stripRoot = false; }; nativeBuildInputs = [pkgs.makeWrapper]; buildInputs = [pkgs.dotnet-runtime_7]; runtimeLibs = pkgs.lib.makeLibraryPath (with pkgs; [ sqlite ]); installPhase = '' runHook preInstall mkdir -p $out/share/vintagestory $out/bin $out/share/pixmaps $out/share/fonts/truetype cp -r * $out/share/vintagestory cp $out/share/vintagestory/assets/gameicon.xpm $out/share/pixmaps/vintagestory.xpm #cp $out/share/vintagestory/assets/game/fonts/*.ttf $out/share/fonts/truetype runHook postInstall ''; preFixup = '' makeWrapper ${pkgs.dotnet-runtime_7}/bin/dotnet $out/bin/vintagestory-server \ --prefix LD_LIBRARY_PATH : "${runtimeLibs}" \ --add-flags $out/share/vintagestory/VintagestoryServer.dll '' + '' find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do local filename="$(basename -- "$file")" ln -sf "$filename" "''${file%/*}"/"''${filename,,}" done ''; }; home = pkgs.stdenv.mkDerivation { name = "vintagestory-server-home-directories"; dontUnpack = true; installPhase = '' mkdir -p $out/home/dotnet mkdir -p $out/game mkdir -p $out/tmp ''; }; in { packages.x86_64-linux.default = server; images = { default = pkgs.dockerTools.buildLayeredImage { name = "docker-vintagestory-server"; tag = "latest"; architecture = "amd64"; contents = [home server pkgs.bash pkgs.coreutils] ++ (with pkgs.dockerTools; [ usrBinEnv binSh caCertificates fakeNss ]); config = { Env = ["HOME=/home/dotnet"]; Cmd = ["vintagestory-server" "--dataPath" "/game"]; #Cmd = ["/bin/bash"]; }; }; }; }; }