Merge pull request #329823 from ExpidusOS/fix/pkgsllvm/elfutils
[NixPkgs.git] / pkgs / by-name / ga / gamescope / package.nix
blobb1f93b041704fb73a63067758ecc89b7526345c0
1 { stdenv
2 , edid-decode
3 , fetchFromGitHub
4 , meson
5 , pkg-config
6 , ninja
7 , cmake
8 , xorg
9 , libdrm
10 , libei
11 , vulkan-loader
12 , vulkan-headers
13 , wayland
14 , wayland-protocols
15 , libxkbcommon
16 , glm
17 , gbenchmark
18 , libcap
19 , libavif
20 , SDL2
21 , pipewire
22 , pixman
23 , python3
24 , libinput
25 , glslang
26 , hwdata
27 , stb
28 , wlroots
29 , libdecor
30 , lib
31 , makeBinaryWrapper
32 , patchelfUnstable
33 , nix-update-script
34 , enableExecutable ? true
35 , enableWsi ? true
37 let
38   joshShaders = fetchFromGitHub {
39     owner = "Joshua-Ashton";
40     repo = "GamescopeShaders";
41     rev = "v0.1";
42     hash = "sha256-gR1AeAHV/Kn4ntiEDUSPxASLMFusV6hgSGrTbMCBUZA=";
43   };
45 stdenv.mkDerivation (finalAttrs: {
46   pname = "gamescope";
47   version = "3.14.24";
49   src = fetchFromGitHub {
50     owner = "ValveSoftware";
51     repo = "gamescope";
52     rev = "refs/tags/${finalAttrs.version}";
53     fetchSubmodules = true;
54     hash = "sha256-+8uojnfx8V8BiYAeUsOaXTXrlcST83z6Eld7qv1oboE=";
55   };
57   patches = [
58     # Make it look for shaders in the right place
59     ./shaders-path.patch
60     # patch relative gamescopereaper path with absolute
61     ./gamescopereaper.patch
62   ];
64   # We can't substitute the patch itself because substituteAll is itself a derivation,
65   # so `placeholder "out"` ends up pointing to the wrong place
66   postPatch = ''
67     substituteInPlace src/reshade_effect_manager.cpp --replace "@out@" "$out"
68     # Patching shebangs in the main `libdisplay-info` build
69     patchShebangs subprojects/libdisplay-info/tool/gen-search-table.py
70     # Replace gamescopereeaper with absolute path
71     substituteInPlace src/Utils/Process.cpp --subst-var-by "gamescopereaper" "$out/bin/gamescopereaper"
72   '';
74   mesonFlags = [
75     (lib.mesonBool "enable_gamescope" enableExecutable)
76     (lib.mesonBool "enable_gamescope_wsi_layer" enableWsi)
77   ];
79   # don't install vendored vkroots etc
80   mesonInstallFlags = ["--skip-subprojects"];
82   strictDeps = true;
84   depsBuildBuild = [
85     pkg-config
86   ];
88   nativeBuildInputs = [
89     meson
90     pkg-config
91     ninja
92     # For `libdisplay-info`
93     python3
94     hwdata
95     edid-decode
96     # For OpenVR
97     cmake
98   ] ++ lib.optionals enableExecutable [
99     makeBinaryWrapper
100     glslang
101   ];
103   buildInputs = [
104     pipewire
105     hwdata
106     xorg.libX11
107     wayland
108     wayland-protocols
109     vulkan-loader
110     glm
111   ] ++ lib.optionals enableWsi [
112     vulkan-headers
113   ] ++ lib.optionals enableExecutable (wlroots.buildInputs ++ [  # gamescope uses a custom wlroots branch
114     xorg.libXcomposite
115     xorg.libXcursor
116     xorg.libXdamage
117     xorg.libXext
118     xorg.libXi
119     xorg.libXmu
120     xorg.libXrender
121     xorg.libXres
122     xorg.libXtst
123     xorg.libXxf86vm
124     libavif
125     libdrm
126     libei
127     SDL2
128     libdecor
129     libinput
130     libxkbcommon
131     gbenchmark
132     pixman
133     libcap
134     stb
135   ]);
137   postInstall = lib.optionalString enableExecutable ''
138     # using patchelf unstable because the stable version corrupts the binary
139     ${lib.getExe patchelfUnstable} $out/bin/gamescope \
140       --add-rpath ${vulkan-loader}/lib --add-needed libvulkan.so.1
142     # --debug-layers flag expects these in the path
143     wrapProgram "$out/bin/gamescope" \
144       --prefix PATH : ${with xorg; lib.makeBinPath [xprop xwininfo]}
146     # Install ReShade shaders
147     mkdir -p $out/share/gamescope/reshade
148     cp -r ${joshShaders}/* $out/share/gamescope/reshade/
149   '';
151   passthru.updateScript = nix-update-script {};
153   meta = with lib; {
154     description = "SteamOS session compositing window manager";
155     homepage = "https://github.com/ValveSoftware/gamescope";
156     license = licenses.bsd2;
157     maintainers = with maintainers; [ nrdxp pedrohlc Scrumplex zhaofengli k900 ];
158     platforms = platforms.linux;
159     mainProgram = "gamescope";
160   };