Merge branch 'legendary-umu' into 'master'

Add legendary, run-in-game-client-container, and umu-launcher

See merge request nonguix/nonguix!604
This commit is contained in:
podiki 2025-02-14 15:59:16 +00:00
commit 1eb10ce19d

View File

@ -4,7 +4,7 @@
;;; Copyright © 2021 pineapples
;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
;;; Copyright © 2021 Kozo <kozodev@runbox.com>
;;; Copyright © 2021, 2022, 2023, 2024 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2021-2025 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2023 Elijah Malaby
;;; Copyright © 2023 Timo Wilken <guix@twilken.net>
@ -16,7 +16,9 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (guix build-system pyproject)
#:use-module (guix build-system python)
#:use-module (gnu packages audio)
#:use-module (gnu packages base)
@ -42,10 +44,12 @@
#:use-module (gnu packages llvm)
#:use-module (gnu packages logging)
#:use-module (gnu packages lsof)
#:use-module (gnu packages man)
#:use-module (nongnu packages nvidia)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages pulseaudio)
#:use-module (gnu packages python)
#:use-module (gnu packages python-build)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages toolkits)
@ -281,6 +285,137 @@ all games will be installed.")))
(define-public steam (nonguix-container->package steam-container))
(define-public steam-nvidia (nonguix-container->package steam-nvidia-container))
(define-public run-in-gc-container
(nonguix-container
(name "run-in-game-client-container")
(wrap-package bash)
(run "/bin/bash")
(ld.so.conf steam-ld.so.conf)
(ld.so.cache steam-ld.so.cache)
(union64
(fhs-union steam-container-libs
#:name "fhs-union-64"))
(union32
(fhs-union steam-container-libs
#:name "fhs-union-32"
#:system "i686-linux"))
(home-page "https://gitlab.com/nonguix/nonguix")
(synopsis "Run a shell inside the nonguix game client container")
(description "Start a bash shell (or run a command with \"-c <command>\" or script) inside
of the nonguix container used for game clients. In particular, this includes
all the dependencies incincluded in the container for Steam.")))
(define-public run-in-game-client-container (nonguix-container->package run-in-gc-container))
(define-public umu-launcher
(package
(name "umu-launcher")
(version "1.1.4")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Open-Wine-Components/umu-launcher")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "1vha229dkdr8gbgh8md5k6nsa07hxi13mmdw13xw0mrnm8mibssc"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;no tests
#:make-flags
#~(list (string-append "PYTHON_INTERPRETER="
#$(this-package-input "python")
"/bin/python3")
(string-append "DESTDIR=" #$output))
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-path
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "Makefile.in"
(("\\$\\(PYTHONDIR\\)/umu/umu_run.py")
(string-append #$output "/lib/python"
#$(version-major+minor
(package-version (this-package-input "python")))
"/site-packages/umu/umu_run.py")))))
(replace 'configure
(lambda _
;; Build complains about no zip before 1980 stamps (even if
;; importing and using the ensure-no-mtimes-pre-1980
;; phase).
(setenv "SOURCE_DATE_EPOCH" "1531865062")
(invoke "sh" "configure.sh" (string-append "--prefix=" #$output))))
;; Like the Nix packaging done upstream, need to unnest the
;; "install."
(add-after 'install 'fix-install
(lambda _
(let ((output-output (string-append #$output "/" #$output))
(output-python (string-append #$output "/"
#$(this-package-input "python"))))
(copy-recursively output-output #$output)
(delete-file-recursively output-output)
(copy-recursively output-python #$output)
(delete-file-recursively output-python))))
(add-after 'fix-install 'python-wrap
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((python-path (string-append
"/lib/python"
#$(version-major+minor
(package-version (this-package-input "python")))
"/site-packages")))
(for-each (lambda (prog)
(wrap-program (string-append #$output prog)
`("GUIX_PYTHONPATH" =
(,(string-append (getenv "GUIX_PYTHONPATH")
":" #$output python-path)))))
(list "/bin/umu-run"
(string-append "/share/steam/compatibilitytools.d/"
"umu-launcher/umu-run")))))))))
(inputs (list bash-minimal python python-filelock python-xlib))
(native-inputs (list python-pypa-build
python-pypa-installer
python-hatchling
scdoc))
(home-page "https://github.com/Open-Wine-Components/umu-launcher")
(synopsis "Unified launcher for Windows games")
(description "umu-launcher is a unified launcher for Windows games on Linux. It is
essentially a copy of the Steam Runtime Tools and Steam Linux Runtime that
Valve uses for Proton, with some modifications made so that it can be used
outside of Steam.
You probably want the umu-launcher-run package to use umu-launcher, as that
will run in the nonguix container (like for Steam and Heroic).")
(license license:gpl3)))
(define-public umu-launcher-container
(nonguix-container
(name "umu-launcher-run")
(wrap-package umu-launcher)
(run "/bin/umu-run")
(ld.so.conf steam-ld.so.conf)
(ld.so.cache steam-ld.so.cache)
(union64
(fhs-union `(,@heroic-extra-client-libs
,@steam-container-libs)
#:name "fhs-union-64"))
(union32
(fhs-union steam-container-libs
#:name "fhs-union-32"
#:system "i686-linux"))
(link-files '("share"))
(preserved-env '("^GAMEID"))
(description "Use this package for the command umu-launcher-run, which
runs umu-run in the nonguix container environment. For example, to run a game
installed by legendary,
@example
GAMEID=umu-<game> GUIX_SANDBOX_EXTRA_SHARES=/home/<user>/Games guix shell \\
legendary umu-launcher-run -- \\
legendary launch <game> --no-wine --wrapper umu-launcher-run
@end example")))
(define-public umu-launcher-run (nonguix-container->package umu-launcher-container))
(define-public heroic-container
(nonguix-container
(name "heroic")
@ -330,6 +465,47 @@ installed.")))
(define-public heroic (nonguix-container->package heroic-container))
(define-public heroic-nvidia (nonguix-container->package heroic-nvidia-container))
(define-public legendary
(package
(name "legendary")
(version "0.20.34")
(source
(origin
(method url-fetch)
(uri (pypi-uri "legendary-gl" version))
(sha256
(base32 "04cn1sv5ks0cy085r9i26gddajxcc6mbqvygxlz1cp6dhbm8slis"))))
(build-system pyproject-build-system)
(arguments (list #:tests? #f)) ;tries to use Windows only "winreg."
(propagated-inputs (list python-filelock python-requests))
(native-inputs (list python-setuptools python-wheel))
(home-page "https://github.com/derrod/legendary")
(synopsis
"Free and open-source replacement for Epic Games Launcher")
(description
"Legendary is an open-source game launcher that can download and install games
from the Epic Games platform on Linux, macOS, and Windows. Its name as a
tongue-in-cheek play on tiers of item rarity in many MMORPGs.
Note: Legendary is currently a CLI (command-line interface) application
without a graphical user interface, it has to be run from a terminal.
Features:
@itemize
@item Authenticating with Epic's service
@item Downloading and installing your games and their DLC
@item Delta patching/updating of installed games
@item Launching games with online authentication (for multiplayer/DRM)
@item Syncing cloud saves (compatible with EGL)
@item Running games with WINE on Linux/macOS
@item Importing/Exporting installed games from/to the Epic Games
Launcher (unsupported for macOS version of EGL)
@end itemize
Note that this package does not run in the nonguix container. To launch games
with Proton, for instance, see the umu-launcher-run package.")
(license license:gpl3)))
(define-public protonup-ng
(package
(name "protonup-ng")