Package: guix-patches;
Reported by: dan <i <at> dan.games>
Date: Sun, 21 Apr 2024 08:21:03 UTC
Severity: normal
Tags: patch
Message #20 received at 70493 <at> debbugs.gnu.org (full text, mbox):
From: aurtzy <aurtzy <at> gmail.com> To: 70493 <at> debbugs.gnu.org Cc: aurtzy <aurtzy <at> gmail.com>, Demis Balbach <db <at> minikn.xyz>, dan <i <at> dan.games> Subject: [PATCH v2] gnu: Add gamescope. Date: Sun, 11 May 2025 18:40:39 -0400
From: dan <i <at> dan.games> * gnu/packages/wm.scm (%gamescope-version, libliftoff-for-gamescope, reshade-for-gamescope, vkroots-for-gamescope, wlroots-for-gamescope, gamescope): New variables. Change-Id: If86bc6127144854189f8fa66415f32bc80a26d6b Co-authored-by: aurtzy <aurtzy <at> gmail.com> Co-authored-by: Demis Balbach <db <at> minikn.xyz> --- Hey, (Coming from: <https://gitlab.com/nonguix/nonguix/-/merge_requests/452>) Sorry about the long delay! Finally got around to looking at this again. I've attached a v2 with our patches combined in addition to any updates since then, with all notable changes from v1 listed below. This depends on a pending patch to add stb-image-resize [1]. Changes from dan's v1: - Update gamescope version to 3.16.4. - Drop libavif-1.0 patch; we can use libavif which is updated, now. - Convert libliftoff and vkroots patches to libliftoff-for-gamescope and vkroots-for-gamescope due to upstream relying on unstable features and strongly recommending against using different versions [2]. Also subject wlroots to this treatment. - Use origin snippet to add pinned submodule/dependency sources. - Remove HWDATA_PNP_IDS configure flag, since (IIUC) hwdata outputs have since been merged into the default "out" output which made pkgconfig able to automatically find hwdata files. - Add a 'patch-loader-path phase to fix an error when starting gamescope due to "Failed to load vulkan module" (related issue [3]). - Add a 'patch-version phase that patches in version number instead of trying to execute git to infer version from tag. - Opt for patching stb via wrap file instead of meson.build which should (probably) be less brittle. - Drop libdisplay-info patch, since versions up to 0.3.0 are accepted now. - Use gcc instead of gcc-toolchain (toolchain version doesn't seem to be needed?). Also use newer version (gcc-14) since gamescope 3.16.4 would fail to build without at least gcc-13. - Include various additional inputs that are searched for during the build. Related side note: I've managed to get gamescope with the "nice" capability working with the following services (some personal config stuff omitted so it can work for others; source here [4]), although I'm still trying to figure out if anything can be done about removing a hack that's currently needed: #+begin_src scheme ;; gamescopereaper needs to be available in PATH. (list (simple-service 'name profile-service-type (list gamescope)) (simple-service 'name privileged-program-service-type (list (privileged-program (program (file-append gamescope "/bin/gamescope")) (capabilities "cap_sys_nice=eip")))) ;; HACK: Using privileges causes gamescope to not inherit ;; environment, so it fails an attempt to search for needed ;; vulkan files. Conveniently provide them at this location, ;; which gamescope searches by default. (simple-service 'name etc-service-type `(("vulkan" ,(file-append mesa "/share/vulkan"))))) #+end_src [1] https://issues.guix.gnu.org/78294 [2] https://github.com/ValveSoftware/gamescope/commit/7741cd587fa2274989f3307a3c6f23ab08e98460 [3] https://issues.guix.gnu.org/71109 [4] https://github.com/aurtzy/guix-config/blob/54eeb0a1587a90b4c59ae88e96c1609ba6cebeba/modules/my-guix/mods/entertainment.scm#L70 Cheers, aurtzy gnu/packages/wm.scm | 182 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 181 insertions(+), 1 deletion(-) diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm index 66dd5f2035..6d01066570 100644 --- a/gnu/packages/wm.scm +++ b/gnu/packages/wm.scm @@ -81,6 +81,8 @@ ;;; Copyright © 2025 Tomáš Čech <sleep_walker <at> gnu.org> ;;; Copyright © 2025 Ricardo Wurmus <rekado <at> elephly.net> ;;; Copyright © 2025 Junker <dk <at> junkeria.club> +;;; Copyright © 2022 Demis Balbach <db <at> minikn.xyz> +;;; Copyright © 2025 aurtzy <aurtzy <at> gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -117,6 +119,7 @@ (define-module (gnu packages wm) #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages bash) + #:use-module (gnu packages benchmark) #:use-module (gnu packages admin) #:use-module (gnu packages autotools) #:use-module (gnu packages base) @@ -179,8 +182,10 @@ (define-module (gnu packages wm) #:use-module (gnu packages qt) #:use-module (gnu packages readline) #:use-module (gnu packages regex) + #:use-module (gnu packages sdl) #:use-module (gnu packages serialization) #:use-module (gnu packages sphinx) + #:use-module (gnu packages stb) #:use-module (gnu packages suckless) #:use-module (gnu packages texinfo) #:use-module (gnu packages textutils) @@ -189,7 +194,8 @@ (define-module (gnu packages wm) #:use-module (gnu packages web) #:use-module (gnu packages xdisorg) #:use-module (gnu packages xml) - #:use-module (gnu packages xorg)) + #:use-module (gnu packages xorg) + #:use-module (srfi srfi-26)) (define-public bspwm (package @@ -4419,3 +4425,177 @@ (define-public scenefx "A drop-in replacement for the wlroots scene API that allows wayland compositors to render surfaces with eye-candy effects.") (license license:expat))) + +;; Upstream strongly recommends using some of its pinned dependencies due to +;; relying on unstable features; these should be checked when updating +;; gamescope. See: +;; <https://github.com/ValveSoftware/gamescope/commit/7741cd587fa2274989f3307a3c6f23ab08e98460> +(define %gamescope-version "3.16.4") + +(define libliftoff-for-gamescope + (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.freedesktop.org/emersion/libliftoff.git") + (commit "8b08dc1c14fd019cc90ddabe34ad16596b0691f4"))) + (file-name (git-file-name "libliftoff-for-gamescope" %gamescope-version)) + (sha256 (base32 "163g8ndsbma7acy2k9mrnvlpb7yi4431hgkx1gygkafgwpq1ii1x")))) + +(define reshade-for-gamescope + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/Joshua-Ashton/reshade") + (commit "696b14cd6006ae9ca174e6164450619ace043283"))) + (file-name (git-file-name "reshade-for-gamescope" %gamescope-version)) + (sha256 + (base32 "1zvhf3pgd8bhn8bynrsh725xn1dszsf05j8c9g6zabgv7vnz04a5")))) + +(define vkroots-for-gamescope + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/Joshua-Ashton/vkroots") + (commit "5106d8a0df95de66cc58dc1ea37e69c99afc9540"))) + (file-name (git-file-name "vkroots-for-gamescope" %gamescope-version)) + (sha256 (base32 "0hrp0xqq93552ipw2bmryixgm1aywnz49xagsx5rwzg2d0hwa0aa")))) + +(define wlroots-for-gamescope + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/Joshua-Ashton/wlroots.git") + (commit "4bc5333a2cbba0b0b88559f281dbde04b849e6ef"))) + (file-name (git-file-name "wlroots-for-gamescope" %gamescope-version)) + (sha256 (base32 "14m9j9qkaphzm3g36im43b6h92rh3xyjh7j46vw9w2qm602ndwcf")))) + +(define-public gamescope + (package + (name "gamescope") + (version %gamescope-version) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ValveSoftware/gamescope") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "09h7046vwqn0w3kv1zaij4h3rcrvs1r2qlm0vva3mk3gg44fnhjl")) + (modules '((guix build utils) + (ice-9 match))) + (snippet + #~(begin + ;; Add some dependencies to source tree where they're expected. + (for-each (match-lambda + ((source dest) + (copy-recursively source dest))) + '((#$libliftoff-for-gamescope "subprojects/libliftoff") + (#$reshade-for-gamescope "src/reshade") + (#$vkroots-for-gamescope "subprojects/vkroots") + (#$wlroots-for-gamescope "subprojects/wlroots"))))))) + (build-system meson-build-system) + (arguments + (list + #:configure-flags #~(list "-Dpipewire=enabled" + "-Denable_openvr_support=false") + #:modules '((guix build meson-build-system) + (guix build utils) + (srfi srfi-26)) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-usr-dir + (lambda _ + (substitute* "src/reshade_effect_manager.cpp" + (("/usr") #$output)))) + (add-after 'unpack 'patch-loader-path + ;; "Failed to load vulkan module" error occurs without this patch. + ;; Related issue: https://issues.guix.gnu.org/71109 + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/rendervulkan.cpp" + (("dlopen\\( \"libvulkan\\.so") + (string-append "dlopen( \"" + (search-input-file + inputs "/lib/libvulkan.so")))))) + (add-after 'unpack 'patch-version + (lambda _ + (substitute* "src/meson.build" + (("^vcs_tag = .*$") + (string-append + "vcs_tag = '" #$(package-version this-package) "'\n"))))) + (add-after 'unpack 'patch-stb + (lambda _ + (let ((stb-files-dir #+(directory-union + "stb" + (map (cut this-package-native-input <>) + (list "stb-image" + "stb-image-write" + "stb-image-resize"))))) + (copy-recursively (string-append stb-files-dir "/include") + "subprojects/stb")) + (copy-recursively "subprojects/packagefiles/stb" + "subprojects/stb") + (call-with-output-file "subprojects/stb.wrap" + (cut format <> "\ +[wrap-file] +directory = stb +")))) + (add-after 'unpack 'patch-spirv-headers + (lambda _ + (substitute* "src/meson.build" + (("../thirdparty/SPIRV-Headers") + #$(this-package-native-input "spirv-headers")))))))) + (native-inputs (list gcc-14 + glslang + pkg-config + python-3 + spirv-headers + stb-image + stb-image-write + stb-image-resize + vulkan-headers)) + (inputs (list benchmark + glm + hwdata + lcms + libavif + libdecor + libdisplay-info + libdrm + libei + libinput + libseat + libx11 + libxcomposite + libxcursor + libxdamage + libxext + libxkbcommon + libxmu + libxrender + libxres + libxt + libxtst + libxxf86vm + luajit + pipewire + pixman + sdl2 + vulkan-loader + xcb-util-wm + xcb-util-errors + xorg-server-xwayland + wayland + wayland-protocols)) + (home-page "https://github.com/ValveSoftware/gamescope") + (synopsis "Micro-compositor for running games") + (description + "gamescope is a micro-compositor for running games. Its goal is to +provide an isolated compositor that is tailored towards gaming and supports +many gaming-centric features such as: +@itemize +@item Spoofing resolutions. +@item Upscaling. +@item Limiting framerates. +@end itemize") + (license license:bsd-2))) base-commit: 8635dad843d299497bd46e036266a8b2a2abff11 -- 2.49.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.