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