biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / servers / sunshine / default.nix
blobd4ad28ca4361da2a813d1cef130c41aef27beef8
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , autoPatchelfHook
5 , autoAddDriverRunpath
6 , makeWrapper
7 , buildNpmPackage
8 , nixosTests
9 , cmake
10 , avahi
11 , libevdev
12 , libpulseaudio
13 , xorg
14 , libxcb
15 , openssl
16 , libopus
17 , boost
18 , pkg-config
19 , libdrm
20 , wayland
21 , libffi
22 , libcap
23 , mesa
24 , curl
25 , pcre
26 , pcre2
27 , python3
28 , libuuid
29 , libselinux
30 , libsepol
31 , libthai
32 , libdatrie
33 , libxkbcommon
34 , libepoxy
35 , libva
36 , libvdpau
37 , libglvnd
38 , numactl
39 , amf-headers
40 , intel-media-sdk
41 , svt-av1
42 , vulkan-loader
43 , libappindicator
44 , libnotify
45 , miniupnpc
46 , config
47 , cudaSupport ? config.cudaSupport
48 , cudaPackages ? { }
50 let
51   stdenv' = if cudaSupport then cudaPackages.backendStdenv else stdenv;
53 stdenv'.mkDerivation rec {
54   pname = "sunshine";
55   version = "0.23.0";
57   src = fetchFromGitHub {
58     owner = "LizardByte";
59     repo = "Sunshine";
60     rev = "v${version}";
61     sha256 = "sha256-K43LZ7zouTRUI4xhiHuRzu2tN7mUl1nTapuR34JR/Ac=";
62     fetchSubmodules = true;
63   };
65   patches = [
66     # remove npm install as it needs internet access -- handled separately below
67     ./dont-build-webui.patch
68   ];
70   # build webui
71   ui = buildNpmPackage {
72     inherit src version;
73     pname = "sunshine-ui";
74     npmDepsHash = "sha256-I7IrCR7eQ97a8cPB8F8+T0zX8iJcwh+YtZ9QRtEVZtI=";
76     # use generated package-lock.json as upstream does not provide one
77     postPatch = ''
78       cp ${./package-lock.json} ./package-lock.json
79     '';
81     installPhase = ''
82       mkdir -p $out
83       cp -r * $out/
84     '';
85   };
87   nativeBuildInputs = [
88     cmake
89     pkg-config
90     python3
91     makeWrapper
92     # Avoid fighting upstream's usage of vendored ffmpeg libraries
93     autoPatchelfHook
94   ] ++ lib.optionals cudaSupport [
95     autoAddDriverRunpath
96   ];
98   buildInputs = [
99     avahi
100     libevdev
101     libpulseaudio
102     xorg.libX11
103     libxcb
104     xorg.libXfixes
105     xorg.libXrandr
106     xorg.libXtst
107     xorg.libXi
108     openssl
109     libopus
110     boost
111     libdrm
112     wayland
113     libffi
114     libevdev
115     libcap
116     libdrm
117     curl
118     pcre
119     pcre2
120     libuuid
121     libselinux
122     libsepol
123     libthai
124     libdatrie
125     xorg.libXdmcp
126     libxkbcommon
127     libepoxy
128     libva
129     libvdpau
130     numactl
131     mesa
132     amf-headers
133     svt-av1
134     libappindicator
135     libnotify
136     miniupnpc
137   ] ++ lib.optionals cudaSupport [
138     cudaPackages.cudatoolkit
139   ] ++ lib.optionals stdenv.isx86_64 [
140     intel-media-sdk
141   ];
143   runtimeDependencies = [
144     avahi
145     mesa
146     xorg.libXrandr
147     libxcb
148     libglvnd
149   ];
151   cmakeFlags = [
152     "-Wno-dev"
153     # upstream tries to use systemd and udev packages to find these directories in FHS; set the paths explicitly instead
154     (lib.cmakeFeature "UDEV_RULES_INSTALL_DIR" "lib/udev/rules.d")
155     (lib.cmakeFeature "SYSTEMD_USER_UNIT_INSTALL_DIR" "lib/systemd/user")
156   ];
158   postPatch = ''
159     # remove upstream dependency on systemd and udev
160     substituteInPlace cmake/packaging/linux.cmake \
161       --replace-fail 'find_package(Systemd)' "" \
162       --replace-fail 'find_package(Udev)' ""
164     substituteInPlace packaging/linux/sunshine.desktop \
165       --subst-var-by PROJECT_NAME 'Sunshine' \
166       --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \
167       --replace-fail '/usr/bin/env systemctl start --u sunshine' 'sunshine'
169     substituteInPlace packaging/linux/sunshine.service.in \
170       --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \
171       --subst-var-by SUNSHINE_EXECUTABLE_PATH $out/bin/sunshine
172   '';
174   preBuild = ''
175     # copy webui where it can be picked up by build
176     cp -r ${ui}/build ../
177   '';
179   # allow Sunshine to find libvulkan
180   postFixup = lib.optionalString cudaSupport ''
181     wrapProgram $out/bin/sunshine \
182       --set LD_LIBRARY_PATH ${lib.makeLibraryPath [ vulkan-loader ]}
183   '';
185   postInstall = ''
186     install -Dm644 ../packaging/linux/${pname}.desktop $out/share/applications/${pname}.desktop
187   '';
189   passthru = {
190     tests.sunshine = nixosTests.sunshine;
191     updateScript = ./updater.sh;
192   };
194   meta = with lib; {
195     description = "Sunshine is a Game stream host for Moonlight";
196     homepage = "https://github.com/LizardByte/Sunshine";
197     license = licenses.gpl3Only;
198     mainProgram = "sunshine";
199     maintainers = with maintainers; [ devusb ];
200     platforms = platforms.linux;
201   };