{ 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; }; #src = fetchurl { # url = "https://cdn.vintagestory.at/gamefiles/stable/vs_server_linux-x64_${version}.tar.gz"; # hash = "sha256-gPe5ZQn7MrK07R1nT6UK1D9YMUbVTUltzkOycvJFZ3o="; # stripRoot = false; #}; nativeBuildInputs = [pkgs.makeWrapper]; buildInputs = [pkgs.dotnet-runtime_7]; runtimeLibs = pkgs.lib.makeLibraryPath (with pkgs; [ gtk2 sqlite openal cairo libGLU SDL2 freealut libglvnd pipewire libpulseaudio dotnet-runtime_7 ]); 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 ''; }; in { packages.x86_64-linux.default = server; images = { default = pkgs.dockerTools.buildImage { name = "vintage-server"; architecture = "amd64"; copyToRoot = [ (pkgs.buildEnv { name = "image-root"; paths = [ pkgs.hello pkgs.coreutils pkgs.strace pkgs.bash pkgs.dotnet-sdk_7 server ]; pathsToLink = ["/bin"]; }) ] ++ (with pkgs.dockerTools; [ usrBinEnv binSh caCertificates fakeNss ]); runAsRoot = '' mkdir -p /home/dotnet mkdir -p /game ''; config = { Env = ["HOME=/home/dotnet" "VS_DATA_PATH=/game"]; Cmd = ["/bin/bash"]; }; }; }; }; }