nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{ lib
2, rustPlatform
3, fetchFromGitLab
4, fetchpatch
5, openssl
6, libGL
7, vulkan-loader
8, wayland
9, wayland-protocols
10, libxkbcommon
11, libX11
12, libXrandr
13, libXi
14, libXcursor
15, udev
16, alsa-lib
17, stdenv
18, libxcb
19, pkg-config
20, makeWrapper
21, writeShellScript
22, patchelf
23}:
24let
25 version = "0.10.0";
26 # Patch for airshipper to install veloren
27 patch = let
28 runtimeLibs = [
29 udev
30 alsa-lib
31 stdenv.cc.cc.lib
32 libxkbcommon
33 libxcb
34 libX11
35 libXcursor
36 libXrandr
37 libXi
38 vulkan-loader
39 libGL
40 ];
41 in
42 writeShellScript "patch" ''
43 echo "making binaries executable"
44 chmod +x {veloren-voxygen,veloren-server-cli}
45 echo "patching dynamic linkers"
46 ${patchelf}/bin/patchelf \
47 --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
48 veloren-server-cli
49 ${patchelf}/bin/patchelf \
50 --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
51 --set-rpath "${lib.makeLibraryPath runtimeLibs}" \
52 veloren-voxygen
53 '';
54in
55rustPlatform.buildRustPackage {
56 pname = "airshipper";
57 inherit version;
58
59 src = fetchFromGitLab {
60 owner = "Veloren";
61 repo = "airshipper";
62 rev = "v${version}";
63 sha256 = "sha256-5zP1Ye1fJNQp8eWKwdxLqBr4qzBfWEEBsJ9s7+8idL4=";
64 };
65
66 cargoLock = {
67 lockFile = ./Cargo.lock;
68 outputHashes = {
69 "octocrab-0.15.4" = "sha256-uKHLlb0EyWF0Ho8FP38DFZsEWXiAG8FEYzJgwO9W90U=";
70 };
71 };
72
73 buildInputs = [
74 openssl
75 wayland
76 wayland-protocols
77 libxkbcommon
78 libX11
79 libXrandr
80 libXi
81 libXcursor
82 ];
83 nativeBuildInputs = [ pkg-config makeWrapper ];
84
85 RUSTC_BOOTSTRAP = 1; # We need rust unstable features
86
87 postInstall = ''
88 install -Dm444 -t "$out/share/applications" "client/assets/net.veloren.airshipper.desktop"
89 install -Dm444 "client/assets/net.veloren.airshipper.png" "$out/share/icons/net.veloren.airshipper.png"
90 '';
91
92 postFixup =
93 let
94 libPath = lib.makeLibraryPath [
95 libGL
96 vulkan-loader
97 wayland
98 wayland-protocols
99 libxkbcommon
100 libX11
101 libXrandr
102 libXi
103 libXcursor
104 ];
105 in
106 ''
107 patchelf --set-rpath "${libPath}" "$out/bin/airshipper"
108 wrapProgram "$out/bin/airshipper" --set VELOREN_PATCHER "${patch}"
109 '';
110
111 doCheck = false;
112 cargoBuildFlags = [ "--package" "airshipper" ];
113 cargoTestFlags = [ "--package" "airshipper" ];
114
115 meta = with lib; {
116 description = "Provides automatic updates for the voxel RPG Veloren.";
117 homepage = "https://www.veloren.net";
118 license = licenses.gpl3;
119 maintainers = with maintainers; [ yusdacra ];
120 };
121}