docker-vintagestory-server/flake.nix

116 lines
3 KiB
Nix
Raw Normal View History

2024-01-31 20:32:03 +01:00
{
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"];
};
};
};
};
}