summaryrefslogtreecommitdiffstats
path: root/packages/vintagestory/default.nix
blob: 364cdc200b9da5c84094caa683f681777fbfa2cb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
{
  lib,
  stdenv,
  fetchurl,
  makeWrapper,
  makeDesktopItem,
  copyDesktopItems,
  xorg,
  gtk2,
  sqlite,
  openal,
  cairo,
  libGLU,
  SDL2,
  freealut,
  libglvnd,
  pipewire,
  libpulseaudio,
  dotnet-runtime_7
}:

stdenv.mkDerivation rec {
  name = "vintagestory-${version}";
  version = "1.20.11";

  src = fetchurl {
    url = "https://cdn.vintagestory.at/gamefiles/stable/vs_client_linux-x64_${version}.tar.gz";
    hash = "sha256-IOreg6j/jLhOK8jm2AgSnYQrql5R6QxsshvPs8OUcQA=";
  };

  nativeBuildInputs = [
    makeWrapper
    copyDesktopItems
  ];

  buildInputs = [ dotnet-runtime_7 ];

  runtimeLibs = lib.makeLibraryPath (
    [
      gtk2
      sqlite
      openal
      cairo
      libGLU
      SDL2
      freealut
      libglvnd
      pipewire
      libpulseaudio
    ]
    ++ (with xorg; [
      libX11
      libXi
      libXcursor
    ])
  );

  desktopItems = [
    (makeDesktopItem {
      name = "vintagestory";
      desktopName = "Vintage Story";
      exec = "vintagestory";
      icon = "vintagestory";
      comment = "Innovate and explore in a sandbox world";
      categories = [ "Game" ];
    })
    (makeDesktopItem {
      name = "Vintagestory_url_connect";
      desktopName = "Vintage Story URI Connect";
      type = "Application";
      noDisplay = true;
      mimeTypes = [ "x-scheme-handler/vintagestoryjoin" ];
      exec = "vintagestory -c %U";
      categories = [ "Game" ];
    })
    (makeDesktopItem {
      name = "Vintagestory_url_mod";
      desktopName = "Vintage Story URI mod install";
      type = "Application";
      noDisplay = true;
      mimeTypes = [ "x-scheme-handler/vintagestorymodinstall" ];
      exec = "vintagestory -i %U";
      categories = [ "Game" ];
    })
  ];

  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 ${dotnet-runtime_7}/bin/dotnet $out/bin/vintagestory \
        --prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
        --add-flags $out/share/vintagestory/Vintagestory.dll
      makeWrapper ${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
    '';
}