about summary refs log tree commit diff
path: root/pkgs/by-name/ga/gamescope/package.nix
diff options
context:
space:
mode:
authorSefa Eyeoglu <contact@scrumplex.net>2024-04-08 09:59:47 +0200
committerSefa Eyeoglu <contact@scrumplex.net>2024-04-08 09:59:47 +0200
commitaa71ddadfa6158532d5267dda4d6db01237db5bd (patch)
tree3a00b2ab65eb5c7c730b93936b301a0b5cdd469d /pkgs/by-name/ga/gamescope/package.nix
parent285085fa62e3cbaea238e1474ad5897897c7304b (diff)
gamescope: move to by-name
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
Diffstat (limited to 'pkgs/by-name/ga/gamescope/package.nix')
-rw-r--r--pkgs/by-name/ga/gamescope/package.nix147
1 files changed, 147 insertions, 0 deletions
diff --git a/pkgs/by-name/ga/gamescope/package.nix b/pkgs/by-name/ga/gamescope/package.nix
new file mode 100644
index 0000000000000..a0dd62ab94941
--- /dev/null
+++ b/pkgs/by-name/ga/gamescope/package.nix
@@ -0,0 +1,147 @@
+{ stdenv
+, fetchFromGitHub
+, meson
+, pkg-config
+, ninja
+, xorg
+, libdrm
+, vulkan-loader
+, vulkan-headers
+, wayland
+, wayland-protocols
+, libxkbcommon
+, glm
+, gbenchmark
+, libcap
+, libavif
+, SDL2
+, pipewire
+, pixman
+, libinput
+, glslang
+, hwdata
+, openvr
+, stb
+, wlroots
+, libliftoff
+, libdisplay-info
+, lib
+, makeBinaryWrapper
+, nix-update-script
+, enableExecutable ? true
+, enableWsi ? true
+}:
+let
+  joshShaders = fetchFromGitHub {
+    owner = "Joshua-Ashton";
+    repo = "GamescopeShaders";
+    rev = "v0.1";
+    hash = "sha256-gR1AeAHV/Kn4ntiEDUSPxASLMFusV6hgSGrTbMCBUZA=";
+  };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gamescope";
+  version = "3.14.2";
+
+  src = fetchFromGitHub {
+    owner = "ValveSoftware";
+    repo = "gamescope";
+    rev = "refs/tags/${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-Ym1kl9naAm1MGlxCk32ssvfiOlstHiZPy7Ga8EZegus=";
+  };
+
+  patches = [
+    # Unvendor dependencies
+    ./use-pkgconfig.patch
+
+    # Make it look for shaders in the right place
+    ./shaders-path.patch
+  ];
+
+  # We can't substitute the patch itself because substituteAll is itself a derivation,
+  # so `placeholder "out"` ends up pointing to the wrong place
+  postPatch = ''
+    substituteInPlace src/reshade_effect_manager.cpp --replace "@out@" "$out"
+  '';
+
+  mesonFlags = [
+    (lib.mesonBool "enable_gamescope" enableExecutable)
+    (lib.mesonBool "enable_gamescope_wsi_layer" enableWsi)
+  ];
+
+  # don't install vendored vkroots etc
+  mesonInstallFlags = ["--skip-subprojects"];
+
+  strictDeps = true;
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    pkg-config
+    ninja
+  ] ++ lib.optionals enableExecutable [
+    makeBinaryWrapper
+    glslang
+  ];
+
+  buildInputs = [
+    pipewire
+    hwdata
+    xorg.libX11
+    wayland
+    wayland-protocols
+    vulkan-loader
+    openvr
+    glm
+  ] ++ lib.optionals enableWsi [
+    vulkan-headers
+  ] ++ lib.optionals enableExecutable [
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXi
+    xorg.libXmu
+    xorg.libXrender
+    xorg.libXres
+    xorg.libXtst
+    xorg.libXxf86vm
+    libavif
+    libdrm
+    libliftoff
+    SDL2
+    wlroots
+    libinput
+    libxkbcommon
+    gbenchmark
+    pixman
+    libcap
+    stb
+    libdisplay-info
+  ];
+
+  postInstall = lib.optionalString enableExecutable ''
+    # --debug-layers flag expects these in the path
+    wrapProgram "$out/bin/gamescope" \
+      --prefix PATH : ${with xorg; lib.makeBinPath [xprop xwininfo]}
+
+    # Install ReShade shaders
+    mkdir -p $out/share/gamescope/reshade
+    cp -r ${joshShaders}/* $out/share/gamescope/reshade/
+  '';
+
+  passthru.updateScript = nix-update-script {};
+
+  meta = with lib; {
+    description = "SteamOS session compositing window manager";
+    homepage = "https://github.com/ValveSoftware/gamescope";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ nrdxp pedrohlc Scrumplex zhaofengli k900 ];
+    platforms = platforms.linux;
+    mainProgram = "gamescope";
+  };
+})