diff --git a/nongnu/packages/steam-client.scm b/nongnu/packages/steam-client.scm index 885a65f..b569237 100644 --- a/nongnu/packages/steam-client.scm +++ b/nongnu/packages/steam-client.scm @@ -44,12 +44,14 @@ #:use-module (guix packages) #:use-module (guix records) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (guix build-system trivial) #:use-module (guix transformations) #:use-module (gnu packages) #:use-module (gnu packages audio) + #:use-module (gnu packages autotools) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages certs) @@ -72,12 +74,15 @@ #:use-module (gnu packages logging) #:use-module (nongnu packages nvidia) #:use-module (gnu packages pciutils) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) + #:use-module (gnu packages sdl) #:use-module (gnu packages toolkits) #:use-module (gnu packages video) + #:use-module (gnu packages xorg) #:use-module (nonguix utils)) (define-record-type* @@ -736,3 +741,163 @@ all games will be installed.")))) (description "ProtonUp-ng is a CLI program and API to automate the installation and update of GloriousEggroll's Proton-GE.") (license license:gpl3))) + +(define-public steamos-modeswitch-inhibitor + (package + (name "steamos-modeswitch-inhibitor") + (version "1.10") + (source (origin + (method url-fetch) + (uri + (string-append + "http://repo.steampowered.com/steamos/pool/main/s/steamos-modeswitch-inhibitor/steamos-modeswitch-inhibitor_" + version + ".tar.xz")) + (sha256 + (base32 + "1lskfb4l87s3naz2gmc22q0xzvlhblywf5z8lsiqnkrrxnpbbwj7")))) + (native-inputs + (list autoconf + automake + pkg-config)) + (inputs + (list libxxf86vm + libx11 + libxrender + libxrandr)) + (build-system gnu-build-system) + (home-page "http://repo.steampowered.com/steamos/pool/main/s/steamos-modeswitch-inhibitor/") + (synopsis "SteamOS Mode Switch Inhibitor") + (description "Shared library which fakes any mode switch attempts to prevent full screen apps from changing resolution.") + (license license:gpl3+))) + +(define-public steamos-compositor-plus + (let ((commit "e4b99dd5f56a388aa24fe3055d0e983cb3d5d32a") + (revision "0") + (version "1.3.0")) + (package + (name "steamos-compositor-plus") + (version (git-version version revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ChimeraOS/steamos-compositor-plus") + (commit commit))) + (sha256 + (base32 "0rqckj05389djc4ahzfy98p3z0p884gbbl94lbm06za72bhnidr5")) + (file-name (git-file-name name version)))) + (arguments + (list + #:phases + #~(modify-phases + %standard-phases + (add-after 'patch-source-shebangs 'copy-scripts + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (share (string-append out "/share")) + (src (string-append share "/steamos-compositor-plus/bin")) + (scripts (string-append bin "/scripts"))) + (mkdir-p scripts) + (copy-recursively "./usr/share" share) + (copy-recursively "./usr/bin" bin) + (find-files src (lambda (file stat) + (symlink file (string-append scripts "/" (basename file)))))))) + (add-after 'copy-scripts 'patch-bin + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (share (string-append out "/share")) + (src (string-append share "/steamos-compositor-plus/bin")) + (bin (string-append out "/bin")) + (aplay (string-append (assoc-ref inputs "alsa-utils") "/bin/aplay")) + (pamixer (string-append (assoc-ref inputs "pamixer") "/bin/pamixer")) + (udevadm (string-append (assoc-ref inputs "eudev") "/bin/udevadm")) + (xset (string-append (assoc-ref inputs "xset") "/bin/xset")) + (xrandr (string-append (assoc-ref inputs "xrandr") "/bin/xrandr")) + (xinput (string-append (assoc-ref inputs "xinput") "/bin/xinput")) + (grep (string-append (assoc-ref inputs "grep") "/bin/grep")) + (steam (string-append (assoc-ref inputs "steam") "/bin/steam")) + (modeswitch-inhibitor (string-append + (assoc-ref inputs "steamos-modeswitch-inhibitor") + "/lib/libmodeswitch_inhibitor.so"))) + (substitute* "./usr/bin/steamos-session" + ;; No need to export scripts to PATH. + (("export.+\\{PATH\\}" line) (string-append "#" line)) + (("\"steam ") (string-append "\"" steam " ")) + (("export.+so" line) (string-append "export" " " "LD_PRELOAD=" modeswitch-inhibitor)) + (("set_hd_mode.sh") (string-append bin "/scripts/set_hd_mode.sh")) + (("loadargb_cursor") (string-append bin "/loadargb_cursor")) + (("cp") "ln -s") + (("/usr/share/icons/steam/arrow.png") + (string-append share "/icons/steam/arrow.png")) + (("/usr/share/pixmaps/steam-bootstrapper.jpg") + (string-append share "/pixmaps/steam-bootstrapper.jpg")) + (("steamcompmgr") (string-append bin "/steamcompmgr")) + (("steam-browser.desktop") (string-append share "/applications/steam-browser.desktop")) + (("xset") xset)) + (substitute* (string-append src "/set_hd_mode.sh") + (("xrandr") xrandr) + (("egrep") "grep -E") + (("grep") grep) + (("xinput") xinput) + (("udevadm") udevadm)) + (substitute* (string-append src "/screen_toggle.sh") + (("xrandr") xrandr)) + (substitute* (string-append src "/brightness_up.sh") + (("xrandr") xrandr)) + (substitute* (string-append src "/brightness_down.sh") + (("xrandr") xrandr)) + (substitute* (string-append src "/audio_volup.sh") + (("aplay") aplay) + (("pamixer") pamixer)) + (substitute* (string-append src "/audio_voldown.sh") + (("aplay") aplay) + (("pamixer") pamixer)) + (substitute* (string-append src "/audio_mute.sh") + (("aplay") aplay) + (("pamixer") pamixer)) + (substitute* (string-append share "/xsessions/steamos.desktop") + (("steamos-session") (string-append bin "/steamos-session"))) + (substitute* (string-append share "/applications/steam-browser.desktop") + (("steam ") (string-append steam " ")))))) + (add-after 'patch-bin 'copy-bin + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + (install-file "./usr/bin/steamos-session" bin) + (chmod (string-append bin "/steamos-session") #o555))))))) + (native-inputs + (list autoconf + automake + pkg-config)) + (propagated-inputs + (list xinit + xorg-server)) + (inputs + (list alsa-utils + eudev + grep + libxxf86vm + libx11 + libxrender + libxcomposite + libgudev + glu + pamixer + sdl-image + steam + xinput + xset + xrandr + steamos-modeswitch-inhibitor)) + (build-system gnu-build-system) + (home-page "https://github.com/ChimeraOS/steamos-compositor-plus") + (synopsis "Compositor used by SteamOS 2.x with some added tweaks and fixes") + (description "This is a fork of the SteamOS compositor, currently based on +version 1.35. It includes out of the box 4k (3840x2160) support, allows adjusting +resolution/refresh rate through a configuration file, hides the annoying color +flashing on startup of Proton games and adds a fix for games that start in +the background, including Dead Cells, The Count Lucanor, most Feral games +and probably others.") + (license license:gpl3+))))