diff --git a/.dir-locals.el b/.dir-locals.el index b54f600..4ab3cc8 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -1,4 +1,5 @@ ;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz> ;; Per-directory local variables for GNU Emacs 23 and later. ((nil @@ -9,7 +10,9 @@ ;; For use with 'bug-reference-prog-mode'. (bug-reference-url-format . "https://gitlab.com/nonguix/nonguix/issues/%s") (bug-reference-bug-regexp - . "\\(#\\([0-9]+\\)\\)"))) + . "\\(#\\([0-9]+\\)\\)") + + (geiser-insert-actual-lambda . nil))) (c-mode . ((c-file-style . "gnu"))) (scheme-mode . diff --git a/news.txt b/news.txt index b4ebd48..d294861 100644 --- a/news.txt +++ b/news.txt @@ -9,6 +9,34 @@ (channel-news (version 0) + (entry (commit "8078757b887a7691644b119913c3f7b41661775d") + (title + (en "New @code{GUIX_SANDBOX_EXTRA_SHARES} variable for nonguix containers (Steam)")) + (body + (en "The nonguix container has a new environment variable +@code{GUIX_SANDBOX_EXTRA_SHARES} which is a @code{:} delimited list of +directories to share with the container. These directories will be available +at the same path as the host. For instance, you can set this to another drive +you want to have a Steam library in by either setting this variable in your +environment or launching Steam with: + +@example +GUIX_SANDBOX_EXTRA_SHARES=/some/other/drive steam +@end example + +This should allow you to select @code{/some/other/drive} in Steam for a game +library. This is an experimental feature and just provides a basic way to add +shares to the container, so please test and report any difficulties or +suggestions to improve."))) + + (entry (commit "1591c3d1d10b2884da29ab7d1252304f2ce1514b") + (title + (en "(nongnu packages steam-client) module renamed")) + (body + (en "The (nongnu packages steam-client) module has been renamed to (nongnu packages +game-client). This is to better reflect the contents with the addition of the +Heroic client in a following commit."))) + (entry (commit "9456c59cfa580399ab450ca0057321e2d81f3319") (title (en "Linux LTS kernel updated to 6.1") diff --git a/nongnu/packages/chrome.scm b/nongnu/packages/chrome.scm index ec281e9..67a061b 100644 --- a/nongnu/packages/chrome.scm +++ b/nongnu/packages/chrome.scm @@ -15,6 +15,7 @@ #:use-module (gnu packages linux) #:use-module (gnu packages pciutils) #:use-module (gnu packages photo) + #:use-module (gnu packages qt) #:use-module (gnu packages video) #:use-module (gnu packages wget) #:use-module (gnu packages xiph) @@ -55,24 +56,19 @@ '("chrome" "chrome-sandbox" "chrome_crashpad_handler" - "nacl_helper" "libEGL.so" - "libGLESv2.so"))) + "libGLESv2.so" + "liboptimization_guide_internal.so" + "libqt5_shim.so" + "libqt6_shim.so" + "libvk_swiftshader.so" + "libvulkan.so.1" + "WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so"))) #:install-plan #~'(("opt/" "/share") ("usr/share/" "/share")) #:phases #~(modify-phases %standard-phases - (add-after 'unpack 'unpack-deb - (lambda* (#:key inputs #:allow-other-keys) - (invoke "ar" "x" #$source) - (invoke "rm" "-v" "control.tar.xz" - "debian-binary" - (string-append "google-chrome-" #$repo "_" - #$version - "-1_amd64.deb")) - (invoke "tar" "xf" "data.tar.xz") - (invoke "rm" "-vrf" "data.tar.xz" "etc"))) (add-before 'install 'patch-assets ;; Many thanks to ;; https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/browsers/google-chrome/default.nix @@ -119,7 +115,6 @@ (symlink chrome-target exe) (wrap-program exe '("CHROME_WRAPPER" = (#$appname))))))))) - (native-inputs (list tar)) (inputs (list bzip2 curl @@ -135,6 +130,8 @@ opus pciutils pipewire + qtbase-5 + qtbase snappy util-linux xdg-utils @@ -146,10 +143,10 @@ (license (nonfree "https://www.google.com/intl/en/chrome/terms/"))))) (define-public google-chrome-stable - (make-google-chrome "stable" "118.0.5993.70" "1bq170l0g9yq17x6xlg6fjar6gv3hdi0zijwmx4s02pmw6727484")) + (make-google-chrome "stable" "121.0.6167.139" "1b08wqflp1j5yqpw2g9z2s239gs8bzqbxigcxk93aqwf5c21ijkh")) (define-public google-chrome-beta - (make-google-chrome "beta" "117.0.5938.22" "11w1di146mjb9ql30df9yk9x4b9amc6514jzyfbf09mqsrw88dvr")) + (make-google-chrome "beta" "122.0.6261.6" "1b12bjcg99f6bjfhm311hdx9s1a4i13mcgxbvf1gpzq8989c1g96")) (define-public google-chrome-unstable - (make-google-chrome "unstable" "119.0.6034.6" "156rsklyi1z014pyximwyjsnc2rhdky1kck9g63738vnhcv398b0")) + (make-google-chrome "unstable" "123.0.6262.5" "04mf9nysdn77371fxa3z0wbvy2k09vw49s3lrcynlwgiwrz89a3m")) diff --git a/nongnu/packages/chromium.scm b/nongnu/packages/chromium.scm index 9580b8a..4467714 100644 --- a/nongnu/packages/chromium.scm +++ b/nongnu/packages/chromium.scm @@ -26,15 +26,15 @@ #:use-module (srfi srfi-1)) (define-public chromium-embedded-framework - (let ((git-revision "d0bbcbb") - (chromium-version "103.0.5060.114") + (let ((git-revision "5053a95") + (chromium-version "117.0.5938.150") (arch (match (or (%current-target-system) (%current-system)) ("aarch64-linux" "linuxarm64") ("armhf-linux" "linuxarm") (_ "linux64")))) (package (name "chromium-embedded-framework") - (version "103.0.9") + (version "117.2.4") (source (origin (method url-fetch) (uri (string-append @@ -45,7 +45,7 @@ "_" arch "_minimal.tar.bz2")) (sha256 (base32 - "143x0jmasl4z16bkxlrbz874chd9x9xpc5qylb9h7j80gfcrzlsi")))) + "0vzzwq1k6bv9d209yg3samvfnfwj7s58y9r3p3pd98wxa9iyzf4j")))) (build-system binary-build-system) (arguments `(#:patchelf-plan diff --git a/nongnu/packages/clojure.scm b/nongnu/packages/clojure.scm index 3ef3ff4..234fafd 100644 --- a/nongnu/packages/clojure.scm +++ b/nongnu/packages/clojure.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2019 Pierre Neidhardt ;;; Copyright © 2020 Jelle Licht ;;; Copyright © 2020 Alex Griffin +;;; Copyright © 2023 Jonathan Brielmaier (define-module (nongnu packages clojure) #:use-module (gnu packages compression) @@ -11,6 +12,7 @@ #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) #:use-module (guix download) + #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (nonguix build-system binary) @@ -85,7 +87,7 @@ lets you focus on your code.") (define-public clj-kondo (package (name "clj-kondo") - (version "2023.01.20") + (version "2023.10.20") (source (origin (method url-fetch/zipbomb) (uri (string-append @@ -93,23 +95,20 @@ lets you focus on your code.") version "/clj-kondo-" version "-linux-amd64.zip")) (sha256 (base32 - "0i91qaqjnrg7ad0rs1r4rjwi77pr16dhck9bflb4kiyggcbs4dds")))) + "1zb4bkmhv5mh18z8h82qa1a0m95pd5dwdxg31pqgs6lnlca3vsph")))) (build-system binary-build-system) (arguments - `(#:patchelf-plan - '(("clj-kondo" ("gcc:lib" "zlib"))) - #:install-plan - '(("clj-kondo" "/bin/")) - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'chmod - (lambda _ - (chmod "clj-kondo" #o755)))))) + (list #:patchelf-plan `'(("clj-kondo" ("gcc" "zlib"))) + #:install-plan `'(("clj-kondo" "/bin/")) + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'chmod + (lambda _ + (chmod "clj-kondo" #o755)))))) (native-inputs - `(("unzip" ,unzip))) + (list unzip)) (inputs - `(("gcc:lib" ,gcc "lib") - ("zlib" ,zlib))) + (list `(,gcc "lib") + zlib)) (supported-systems '("x86_64-linux")) (home-page "https://github.com/clj-kondo/clj-kondo") (synopsis "Linter for Clojure code") diff --git a/nongnu/packages/editors.scm b/nongnu/packages/editors.scm index 7c4fe60..d07bf1d 100644 --- a/nongnu/packages/editors.scm +++ b/nongnu/packages/editors.scm @@ -8,21 +8,26 @@ #:use-module (guix gexp) #:use-module (guix packages) #:use-module ((guix licenses) :prefix license:) - #:use-module (nonguix build-system chromium-binary)) + #:use-module (nonguix build-system chromium-binary) + #:use-module (ice-9 match)) (define-public vscodium (package (name "vscodium") - (version "1.81.1.23222") + (version "1.87.0.24060") (source (origin (method url-fetch) (uri - (string-append - "https://github.com/VSCodium/vscodium/releases/download/" version - "/VSCodium-linux-x64-" version ".tar.gz")) + (let ((arch (match (or (%current-target-system) (%current-system)) + ("aarch64-linux" "arm64") + ("armhf-linux" "armhf") + (_ "x64")))) + (string-append + "https://github.com/VSCodium/vscodium/releases/download/" version + "/VSCodium-linux-" arch "-" version ".tar.gz"))) (sha256 - (base32 "0wx53ajjwil82s3nl6wvpdf01mh33yqasf1ia54s1rfzz10fa1m6")))) + (base32 "1lw7j8h0i96mg8si8dmi55ldbz5j63zb93qf1g59siavx84f1zpd")))) (build-system chromium-binary-build-system) (arguments (list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files @@ -80,6 +85,7 @@ (,(string-join (list (string-append #$output "/opt/vscodium")) ":"))))))))) + (supported-systems '("armhf-linux" "aarch64-linux" "x86_64-linux")) (native-inputs (list tar)) (inputs diff --git a/nongnu/packages/electron.scm b/nongnu/packages/electron.scm index 4a3ac0d..a4a7b67 100644 --- a/nongnu/packages/electron.scm +++ b/nongnu/packages/electron.scm @@ -1,6 +1,8 @@ ;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2023 Pierre Neidhardt ;;; Copyright © 2023 Giacomo Leidi +;;; Copyright © 2024 Andre A. Gomes +;;; Copyright © 2024 Jonathan Brielmaier (define-module (nongnu packages electron) #:use-module (nonguix build-system chromium-binary) @@ -13,23 +15,27 @@ #:use-module (gnu packages gtk) #:use-module (gnu packages video)) -(define-public electron +(define (electron-source version hash) + (origin + (method url-fetch/zipbomb) + (uri + (string-append + "https://github.com/electron/electron/releases/download/v" + version "/electron-v" version "-" + (match (or (%current-system) (%current-target-system)) + ("x86_64-linux" "linux-x64") + ("i686-linux" "linux-ia32") + ("aarch64-linux" "linux-arm64") + ("armhf-linux" "linux-armv7l")) + ".zip")) + (sha256 (base32 hash)))) + +(define-public electron-27 (package (name "electron") - (version "27.1.0") - (source (origin - (method url-fetch/zipbomb) - (uri - (string-append - "https://github.com/electron/electron/releases/download/v" - version "/electron-v" version "-" - (match (or (%current-system) (%current-target-system)) - ("x86_64-linux" "linux-x64") - ("i686-linux" "linux-ia32") - ("aarch64-linux" "linux-arm64") - ("armhf-linux" "linux-armv7l")) - ".zip")) - (sha256 (base32 "08illknzcikzzsb6i7z1p2xgb20jjc5cx9hynll25f44q9pg48b6")))) + (version "27.3.6") + (source (electron-source version + "12hjn1bfk8c25f54kk561mkjl7hsk8b16rj7a7gczswjdpx6fpi0")) (build-system chromium-binary-build-system) (arguments `(#:wrapper-plan @@ -81,3 +87,18 @@ Chromium and is used by the Atom editor and many other apps.") (license (license:nonfree (string-append "https://github.com/electron/electron/blob/v" version "/LICENSE"))))) + +(define-public electron electron-27) + +(define-public electron-28 + (package + (inherit electron-27) + (version "28.2.7") + (source (electron-source version + "0sw8nn1jr9x0p4s2g5yp5lrpy8mzq0sjd099x7axbg6cm1c80iff")))) +(define-public electron-29 + (package + (inherit electron-27) + (version "29.1.4") + (source (electron-source version + "1d96nhx9j9mzc3q3ald1imqdxdgq9by1qm4q703sjy3knq1p38w3")))) diff --git a/nongnu/packages/engineering.scm b/nongnu/packages/engineering.scm index e4ddd5b..b05f6c0 100644 --- a/nongnu/packages/engineering.scm +++ b/nongnu/packages/engineering.scm @@ -35,28 +35,22 @@ #~'("lib/LycheeSlicer/lycheeslicer") #:phases #~(modify-phases %standard-phases - (replace 'unpack + (add-after 'binary-unpack 'setup-cwd (lambda _ - (invoke "ar" "x" #$source) - (invoke "tar" "xvf" "data.tar.xz") ;; Use the more standard lib directory for everything. (rename-file "opt/" "lib") (mkdir-p "share") (copy-recursively "usr/share" "share") ;; Remove unneeded files. - (delete-file-recursively "usr") - (delete-file "control.tar.gz") - (delete-file "data.tar.xz") - (delete-file "debian-binary"))) - (add-after 'unpack 'fix-desktop-file + (delete-file-recursively "usr"))) + (add-after 'setup-cwd 'fix-desktop-file (lambda _ ;; Fix the .desktop file binary location. (substitute* '("share/applications/lycheeslicer.desktop") (("/opt/LycheeSlicer") (string-append #$output "/lib/LycheeSlicer"))))) - (add-before 'install-wrapper 'symlink-binary-file-and-cleanup + (add-before 'install-wrapper 'symlink-binary-file (lambda _ - (delete-file (string-append #$output "/environment-variables")) (mkdir-p (string-append #$output "/bin")) (symlink (string-append #$output "/lib/LycheeSlicer/lycheeslicer") (string-append #$output "/bin/lycheeslicer")))) @@ -68,7 +62,6 @@ (list (string-append #$output "/lib/LycheeSlicer")) ":"))))))))) - (native-inputs (list tar)) (inputs (list libxscrnsaver)) (home-page "https://mango3d.io") diff --git a/nongnu/packages/firmware.scm b/nongnu/packages/firmware.scm index 218d375..22fd072 100644 --- a/nongnu/packages/firmware.scm +++ b/nongnu/packages/firmware.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2022-2023 Jonathan Brielmaier ;;; Copyright © 2022 Petr Hodina ;;; Copyright © 2023 Krzysztof Baranowski +;;; Copyright © 2024 Efraim Flashner (define-module (nongnu packages firmware) #:use-module (gnu packages compression) @@ -134,16 +135,18 @@ HDMI to USB Type-C Bridge in the PinePhone.") (build-system copy-build-system) (arguments `(#:substitutable? #f - #:install-plan '( ;Bluetooth firmware - ("BCM4345C5.hcd" "usr/lib/firmware/brcm/") + #:install-plan '(;;Bluetooth firmware + ("BCM4345C5.hcd" "/lib/firmware/brcm/") ;; WiFi firmware - ("fw_bcm43456c5_ag.bin" "usr/lib/firmware/brcm/") + ("fw_bcm43456c5_ag.bin" "/lib/firmware/brcm/") + ("fw_bcm43456c5_ag.bin" + "/lib/firmware/brcm/brcmfmac43456-sdio.bin") ("brcmfmac43456-sdio.clm_blob" - "usr/lib/firmware/brcm/") + "/lib/firmware/brcm/") ("brcmfmac43456-sdio.AP6256.txt" - "usr/lib/firmware/brcm/") + "/lib/firmware/brcm/") ("brcmfmac43456-sdio.AP6256.txt" - "usr/lib/firmware/brcm/brcmfmac43456-sdio.pine64,pinebook-pro.txt")))) + "/lib/firmware/brcm/brcmfmac43456-sdio.pine64,pinebook-pro.txt")))) (synopsis "Firmware for the wifi/bt module AP6256") (description "This package provides Firmware for the wifi/bt module AP6256, diff --git a/nongnu/packages/steam-client.scm b/nongnu/packages/game-client.scm similarity index 64% rename from nongnu/packages/steam-client.scm rename to nongnu/packages/game-client.scm index 2f313c7..03fd21a 100644 --- a/nongnu/packages/steam-client.scm +++ b/nongnu/packages/game-client.scm @@ -4,16 +4,18 @@ ;;; Copyright © 2021 pineapples ;;; Copyright © 2021 Jean-Baptiste Volatier ;;; Copyright © 2021 Kozo -;;; Copyright © 2021, 2022 John Kehayias +;;; Copyright © 2021, 2022, 2023, 2024 John Kehayias ;;; Copyright © 2023 Giacomo Leidi ;;; Copyright © 2023 Elijah Malaby +;;; Copyright © 2023 Timo Wilken -(define-module (nongnu packages steam-client) +(define-module (nongnu packages game-client) #:use-module ((guix licenses) #:prefix license:) #:use-module ((nonguix licenses) #:prefix license:) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix gexp) #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (gnu packages audio) @@ -21,6 +23,7 @@ #:use-module (gnu packages bash) #:use-module (gnu packages certs) #:use-module (gnu packages compression) + #:use-module (gnu packages curl) #:use-module (gnu packages elf) #:use-module (gnu packages file) #:use-module (gnu packages fonts) @@ -48,13 +51,72 @@ #:use-module (gnu packages toolkits) #:use-module (gnu packages video) #:use-module (gnu packages xorg) + #:use-module (nonguix build-system chromium-binary) #:use-module (nonguix multiarch-container) #:use-module (nonguix utils)) +(define heroic-client + (package + (name "heroic-client") + (version "2.12.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/Heroic-Games-Launcher/" + "HeroicGamesLauncher/releases/download/v" + version "/heroic_" version "_amd64.deb")) + (sha256 + (base32 + "0ikb9r72n7xknns81mibipfwqh0r9hqnm5a3k4xsk8my1gajc60c")))) + (build-system chromium-binary-build-system) + (arguments + (list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files + #:wrapper-plan + #~'("lib/Heroic/heroic" + "lib/Heroic/libEGL.so" + "lib/Heroic/libGLESv2.so" + "lib/Heroic/libvk_swiftshader.so" + "lib/Heroic/libvulkan.so.1" + "lib/Heroic/chrome-sandbox" + "lib/Heroic/chrome_crashpad_handler" + "lib/Heroic/libffmpeg.so") + #:phases + #~(modify-phases %standard-phases + (add-after 'binary-unpack 'setup-cwd + (lambda _ + (copy-recursively "usr/" ".") + ;; Use the more standard lib directory for everything. + (rename-file "opt/" "lib") + ;; Remove unneeded files. + (delete-file-recursively "usr") + ;; Fix the .desktop file binary location. + (substitute* '("share/applications/heroic.desktop") + (("/opt/Heroic/") + (string-append #$output "/bin/"))))) + (add-after 'install 'symlink-binary-file + (lambda _ + (mkdir-p (string-append #$output "/bin")) + (symlink (string-append #$output "/lib/Heroic/heroic") + (string-append #$output "/bin/heroic")))) + (add-after 'install-wrapper 'wrap-where-patchelf-does-not-work + (lambda _ + (wrap-program (string-append #$output "/lib/Heroic/heroic") + `("LD_LIBRARY_PATH" ":" prefix + (,(string-join + (list + (string-append #$output "/lib/Heroic")) + ":"))))))))) + (home-page "https://heroicgameslauncher.com") + (synopsis "A Native GOG, Amazon and Epic Games Launcher") + (description "Heroic is an Open Source Game Launcher. Right now it supports launching +games from the Epic Games Store using Legendary, GOG Games using our custom +implementation with gogdl and Amazon Games using Nile.") + (license license:gpl3))) + (define steam-client (package (name "steam-client") - (version "1.0.0.75") + (version "1.0.0.78") (source (origin (method url-fetch) @@ -62,7 +124,7 @@ version ".tar.gz")) (sha256 (base32 - "19rn29slsxv7b5fisr1jzn79bskzifbj5hmxqn2436ivwfjna9g5")) + "0390qy8vy7sx35hxl51yrbk6mvdz1vvpy96v07qva4bjbmsmjhhh")) (file-name (string-append name "-" version ".tar.gz")))) (build-system gnu-build-system) (arguments @@ -156,6 +218,11 @@ ("python" ,python) ; Required for KillingFloor2 and Wreckfest. ("spdlog" ,spdlog))) ; Required for MangoHud. +(define heroic-extra-client-libs + `(("curl" ,curl) ; Required for Heroic to download e.g. Wine. + ("which" ,which) ; Heroic complains about trying to use which (though works). + ("gtk+" ,gtk+))) ; Required for Heroic interface (gtk filechooser schema). + (define steam-ld.so.conf (packages->ld.so.conf (list (fhs-union `(,@steam-client-libs @@ -189,8 +256,7 @@ ,@fhs-min-libs) #:name "fhs-union-32" #:system "i686-linux")) - (link-files '("share/applications/steam.desktop" - "share/applications/steam-asound32.desktop")) + (link-files '("share")) (description "Steam is a digital software distribution platform created by Valve. This package provides a script for launching Steam in a Guix container which will use the directory @file{$HOME/.local/share/guix-sandbox-home} where @@ -200,12 +266,58 @@ all games will be installed."))) (nonguix-container (inherit steam-container) (name "steam-nvidia") + ;; Steam's .desktop files expect a "steam" executable, so provide that. + (binary-name "steam") (union64 (replace-mesa (ngc-union64 steam-container))) (union32 (replace-mesa (ngc-union32 steam-container))))) (define-public steam (nonguix-container->package steam-container)) (define-public steam-nvidia (nonguix-container->package steam-nvidia-container)) +(define-public heroic-container + (nonguix-container + (name "heroic") + (wrap-package heroic-client) + (run "/bin/heroic") + (ld.so.conf steam-ld.so.conf) + (ld.so.cache steam-ld.so.cache) + ;; TODO: Probably can remove some of the packages from these lists, at + ;; least changing the client libraries as Heroic is rather different from + ;; Steam. However, a good number will be needed to run games anyway. A + ;; better separation and testing in Steam as well would be helpful to + ;; differentiate what packages are needed for what in general. For now, + ;; this is easier and works. + (union64 + (fhs-union `(,@heroic-extra-client-libs + ,@steam-client-libs + ,@steam-gameruntime-libs + ,@fhs-min-libs) + #:name "fhs-union-64")) + ;; Don't include heroic-client-libs as they are not needed in 32-bit. + (union32 + (fhs-union `(,@steam-client-libs + ,@steam-gameruntime-libs + ,@fhs-min-libs) + #:name "fhs-union-32" + #:system "i686-linux")) + (link-files '("share")) + (description "Heroic is an Open Source Game Launcher. Right now it supports launching +games from the Epic Games Store using Legendary, GOG Games using our custom +implementation with gogdl and Amazon Games using Nile. This package provides +a script for launching Heroic in a Guix container which will use the directory +@file{$HOME/.local/share/guix-sandbox-home} where all games will be +installed."))) + +(define-public heroic-nvidia-container + (nonguix-container + (inherit heroic-container) + (name "heroic-nvidia") + (union64 (replace-mesa (ngc-union64 heroic-container))) + (union32 (replace-mesa (ngc-union32 heroic-container))))) + +(define-public heroic (nonguix-container->package heroic-container)) +(define-public heroic-nvidia (nonguix-container->package heroic-nvidia-container)) + (define-public protonup-ng (package (name "protonup-ng") diff --git a/nongnu/packages/gog.scm b/nongnu/packages/gog.scm index e3b6dc8..f6deffb 100644 --- a/nongnu/packages/gog.scm +++ b/nongnu/packages/gog.scm @@ -22,7 +22,7 @@ (define-public lgogdownloader (package (name "lgogdownloader") - (version "3.11") + (version "3.12") (source (origin (method git-fetch) @@ -31,7 +31,7 @@ (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0mcwl6vfyy91sq1816j4v3lhf06dz1rr58hsq8hqx217z102s86d")))) + (base32 "0kmz5zsbci7iilbqdvql9c1vk2b1q2flsdr6psnkln07xp664di2")))) (build-system qt-build-system) (arguments `(#:configure-flags '("-DUSE_QT_GUI=ON") diff --git a/nongnu/packages/linux.scm b/nongnu/packages/linux.scm index 7853ac4..61e7f0a 100644 --- a/nongnu/packages/linux.scm +++ b/nongnu/packages/linux.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2019 Giacomo Leidi ;;; Copyright © 2019 Timotej Lazar ;;; Copyright © 2020, 2021 James Smith -;;; Copyright © 2020, 2021, 2022 Jonathan Brielmaier +;;; Copyright © 2020-2024 Jonathan Brielmaier ;;; Copyright © 2020, 2022 Michael Rohleder ;;; Copyright © 2020, 2021, 2022 Tobias Geerinckx-Rice ;;; Copyright © 2020, 2021, 2022 Zhu Zihao @@ -13,7 +13,7 @@ ;;; Copyright © 2021 Risto Stevcev ;;; Copyright © 2021 aerique ;;; Copyright © 2022 Josselin Poiret -;;; Copyright © 2022 John Kehayias +;;; Copyright © 2022, 2023, 2024 John Kehayias ;;; Copyright © 2022 Petr Hodina ;;; Copyright © 2022 Remco van 't Veer ;;; Copyright © 2022 Simen Endsjø @@ -24,6 +24,8 @@ ;;; Copyright © 2023 Adam Kandur ;;; Copyright © 2023 Hilton Chain ;;; Copyright © 2023 Ada Stevenson +;;; Copyright © 2023 Tomas Volf <~@wolfsden.cz> +;;; Copyright © 2023 PRESFIL (define-module (nongnu packages linux) #:use-module (gnu packages) @@ -46,22 +48,48 @@ #:use-module (srfi srfi-1) #:export (corrupt-linux)) -(define %default-extra-linux-options - (@@ (gnu packages linux) %default-extra-linux-options)) - -(define config->string - (@@ (gnu packages linux) config->string)) - (define (linux-url version) "Return a URL for Linux VERSION." (string-append "mirror://kernel.org" "/linux/kernel/v" (version-major version) ".x" "/linux-" version ".tar.xz")) +;;; If you are corrupting the kernel on your own, consider using output of +;;; this procedure as a base for your options: +;;; (corrupt-linux linux-libre-lts +;;; #:configs (cons* "CONFIG_FOO=y" +;;; (nonguix-extra-linux-options linux-libre-lts) +(define-public (nonguix-extra-linux-options linux-or-version) + "Return a list containing additional options that nonguix sets by default +for a corrupted linux package of specified version. linux-or-version can be +some freedo package or an output of package-version procedure." + (define linux-version + (if (package? linux-or-version) + (package-version linux-or-version) + linux-or-version)) + + (reverse (fold (lambda (opt opts) + (if (version>=? linux-version (car opt)) + (cons* (cdr opt) opts) + opts)) + '() + ;; List of additional options for nonguix corrupted linux. + ;; Each member is a pair of a minimal version (>=) and the + ;; option itself. Option has to be in a format suitable for + ;; (@ (guix build kconfig) modify-defconfig) procedure. + ;; + ;; Do note that this list is intended for enabling use of + ;; hardware requiring non-free firmware. If a configuration + ;; option does work under linux-libre, it should go into Guix + ;; actual. + '( + ;; Driver for MediaTek mt7921e wireless chipset + ("5.15" . "CONFIG_MT7921E=m"))))) + (define* (corrupt-linux freedo #:key (name "linux") - (configs '()) + (configs (nonguix-extra-linux-options freedo)) (defconfig #f)) ;; TODO: This very directly depends on guix internals. @@ -90,6 +118,7 @@ (inherit (customize-linux #:name name + #:linux freedo #:source (origin (method url-fetch) (uri url) @@ -103,12 +132,12 @@ "The unmodified Linux kernel, including nonfree blobs, for running Guix System on hardware which requires nonfree software to function.")))) +(define-public linux-6.7 + (corrupt-linux linux-libre-6.7)) + (define-public linux-6.6 (corrupt-linux linux-libre-6.6)) -(define-public linux-6.5 - (corrupt-linux linux-libre-6.5)) - (define-public linux-6.1 (corrupt-linux linux-libre-6.1)) @@ -124,10 +153,7 @@ on hardware which requires nonfree software to function.")))) (define-public linux-4.19 (corrupt-linux linux-libre-4.19)) -(define-public linux-4.14 - (corrupt-linux linux-libre-4.14)) - -(define-public linux linux-6.6) +(define-public linux linux-6.7) ;; linux-lts points to the *newest* released long-term support version. (define-public linux-lts linux-6.1) @@ -145,89 +171,131 @@ on hardware which requires nonfree software to function.")))) ;;; Linux-XanMod ;;; -(define (make-linux-xanmod-source version xanmod-revision hash-string) +(define* (make-linux-xanmod-source version xanmod-revision + #:key xanmod-branch kernel-hash xanmod-hash) + + (define %upstream-linux-source + (@@ (gnu packages linux) %upstream-linux-source)) + + (define kernel-source + (%upstream-linux-source (version-major+minor version) kernel-hash)) + + (define xanmod-patch + (origin + (method url-fetch) + (uri (string-append + "mirror://sourceforge/xanmod/releases/" xanmod-branch "/" + version "-" xanmod-revision "/patch-" + version "-" xanmod-revision ".xz")) + (sha256 xanmod-hash))) + (origin - (method url-fetch) - (uri (string-append "https://gitlab.com/xanmod/linux/-/archive/" - version "-" xanmod-revision ".tar.bz2")) - (sha256 hash-string))) + (inherit kernel-source) + (modules '((guix build utils))) + (snippet + #~(begin + (let* ((xz-name (basename #+xanmod-patch)) + (patch-xz-name (string-append (string-drop-right xz-name 3) + ".patch.xz")) + (patch-name (string-drop-right patch-xz-name 3))) + (copy-file #+xanmod-patch patch-xz-name) + (invoke #+(file-append xz "/bin/unxz") patch-xz-name) + (invoke #+(file-append patch "/bin/patch") + "--force" "--no-backup-if-mismatch" + #+@(origin-patch-flags kernel-source) + "--input" patch-name) + (for-each delete-file + (list patch-name + ;; EXTRAVERSION is used instead. + "localversion"))))))) (define* (make-linux-xanmod version xanmod-revision source #:key (name "linux-xanmod") (xanmod-defconfig "config_x86-64-v1")) - (let ((defconfig xanmod-defconfig) ;to be used in phases. - (base (customize-linux #:name name - #:source source - #:defconfig xanmod-defconfig - ;; EXTRAVERSION is used instead. - #:configs (config->string - '(("CONFIG_LOCALVERSION" . ""))) - #:extra-version xanmod-revision))) - (package - (inherit base) - (version version) - (arguments - (substitute-keyword-arguments (package-arguments base) - ((#:phases phases) - #~(modify-phases #$phases - ;; EXTRAVERSION is used instead. - (add-after 'unpack 'remove-localversion - (lambda _ - (when (file-exists? "localversion") - (delete-file "localversion")))) - (add-before 'configure 'add-xanmod-defconfig - (lambda _ - (rename-file - (string-append "CONFIGS/xanmod/gcc/" #$defconfig) - ".config") - ;; Adapted from `make-linux-libre*'. - (chmod ".config" #o666) - (let ((port (open-file ".config" "a")) - (extra-configuration - #$(config->string - ;; FIXME: There might be other support missing. - (append '(("CONFIG_BLK_DEV_NVME" . #t) - ("CONFIG_CRYPTO_XTS" . m) - ("CONFIG_VIRTIO_CONSOLE" . m)) - %default-extra-linux-options)))) - (display extra-configuration port) - (close-port port)) - (invoke "make" "oldconfig") + (define %default-extra-linux-options + (@@ (gnu packages linux) %default-extra-linux-options)) - (rename-file - ".config" - (string-append "arch/x86/configs/" #$defconfig)))))))) - (native-inputs - (modify-inputs (package-native-inputs base) - ;; cpio is needed for CONFIG_IKHEADERS. - (append cpio zstd))) - (home-page "https://xanmod.org/") - (supported-systems '("x86_64-linux")) - (synopsis - "Linux kernel distribution with custom settings and new features") - (description - "This package provides XanMod kernel, a general-purpose Linux kernel + (define config->string + (@@ (gnu packages linux) config->string)) + + (define base-kernel + (customize-linux + #:name name + #:source source + #:defconfig xanmod-defconfig + ;; EXTRAVERSION is used instead. + #:configs (config->string + '(("CONFIG_LOCALVERSION" . ""))) + #:extra-version xanmod-revision)) + + (package + (inherit base-kernel) + (version version) + (arguments + (substitute-keyword-arguments (package-arguments base-kernel) + ((#:phases phases) + #~(modify-phases #$phases + ;; Since `customize-linux' replaces the configure phase, we add + ;; XanMod defconfig beforehand to ensure compatibility of the + ;; resulting package with `customize-linux'. + (add-before 'configure 'add-xanmod-defconfig + (lambda _ + (rename-file + (string-append "CONFIGS/xanmod/gcc/" #$xanmod-defconfig) + ".config") + + ;; Adapted from `make-linux-libre*'. + (chmod ".config" #o666) + (let ((port (open-file ".config" "a")) + (extra-configuration + #$(config->string + (append %default-extra-linux-options + ;; NOTE: These are configs expected by Guix + ;; but missing from XanMod defconfig. + '(("CONFIG_BLK_DEV_NVME" . #t) + ("CONFIG_CRYPTO_XTS" . m) + ("CONFIG_VIRTIO_CONSOLE" . m)))))) + (display extra-configuration port) + (close-port port)) + (invoke "make" "oldconfig") + + (rename-file + ".config" + (string-append "arch/x86/configs/" #$xanmod-defconfig)))))))) + (native-inputs + (modify-inputs (package-native-inputs base-kernel) + ;; cpio is needed for CONFIG_IKHEADERS. + (prepend cpio zstd))) + (home-page "https://xanmod.org/") + (supported-systems '("x86_64-linux")) + (synopsis "Linux kernel distribution with custom settings and new features") + (description + "This package provides XanMod kernel, a general-purpose Linux kernel distribution with custom settings and new features. It's built to provide a -stable, responsive and smooth desktop experience.")))) +stable, responsive and smooth desktop experience."))) ;; Linux-XanMod sources -(define-public linux-xanmod-version "6.5.10") +(define-public linux-xanmod-version "6.7.6") (define-public linux-xanmod-revision "xanmod1") (define-public linux-xanmod-source (make-linux-xanmod-source linux-xanmod-version linux-xanmod-revision - (base32 "020f97pd45lg9nw38j4hz4kqd2ch81fqdp3qkpnzpxf8kihzn2li"))) + #:xanmod-branch "main" + #:kernel-hash (base32 "0s8hbcsg7fdvspqam8kzcxygjsznr4zfi60nqgc81l3n4m518cgg") + #:xanmod-hash (base32 "0hv76dj9z17w6zcy25v1ndlmdw593wlbmnw5x903vidb3c6a1dfi"))) -(define-public linux-xanmod-lts-version "6.1.61") +(define-public linux-xanmod-lts-version "6.6.18") (define-public linux-xanmod-lts-revision "xanmod1") (define-public linux-xanmod-lts-source (make-linux-xanmod-source linux-xanmod-lts-version linux-xanmod-lts-revision - (base32 "1rp9g9qdrr2l0wwxx4myz6kr3agznama2r6q8an505l8mwdgwll8"))) + #:xanmod-branch "lts" + #:kernel-hash (base32 "1l2nisx9lf2vdgkq910n5ldbi8z25ky1zvl67zgwg2nxcdna09nr") + #:xanmod-hash (base32 "1q33bd4a65l46333l2m7vjn46b0xhdbz508bq7q0bphbmy0bf35m"))) ;; Linux-XanMod packages (define-public linux-xanmod @@ -248,22 +316,23 @@ stable, responsive and smooth desktop experience.")))) (define-public linux-firmware (package (name "linux-firmware") - (version "20231111") + (version "20240115") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/linux/kernel/firmware/" "linux-firmware-" version ".tar.xz")) (sha256 (base32 - "165hrdwfvkqngmdf5s759wzfk8wpa8h6bln31bjady1z570mjjcd")) - (patches - (search-patches "nongnu/packages/patches/copy-firmware-rdfind.patch")))) + "13b75kd075famc58pvx4r9268pxn69nyihx7p3i6i7mvkgqayz5b")))) (build-system gnu-build-system) (arguments `(#:tests? #f #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out"))) #:phases (modify-phases %standard-phases + (replace 'install + (lambda* (#:key (make-flags '()) #:allow-other-keys) + (apply invoke "make" "install-nodedup" make-flags))) (delete 'validate-runpath)))) (home-page "https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git") @@ -703,8 +772,8 @@ package contains nonfree firmware for the following chips: (deprecated-package "rtl-bt-firmware" realtek-firmware)) (define-public rtl8192eu-linux-module - (let ((commit "865656c3a1d1aee8c4ba459ce7608756d17c712f") - (revision "5")) + (let ((commit "a928f08c1dd4f9a1e84d85811a543e974551bc4f") + (revision "6")) (package (name "rtl8192eu-linux-module") (version (git-version "0.0.0" revision commit)) @@ -717,7 +786,7 @@ package contains nonfree firmware for the following chips: (file-name (git-file-name name version)) (sha256 (base32 - "08nq0wlrpzm8n2g14c4jlxs0crr6s5ls1n14bc17zmpy9vlarhfx")))) + "1q26kyic4glmgy0hbaq46r067m6cqf7d41chgivyxn8y32rf1fgc")))) (build-system linux-module-build-system) (arguments `(#:make-flags @@ -740,8 +809,8 @@ network adapters.") (license gpl2)))) (define-public rtl8821ce-linux-module - (let ((commit "a478095a45d8aa957b45be4f9173c414efcacc6f") - (revision "10")) + (let ((commit "66983b69120a13699acf40a12979317f29012111") + (revision "11")) (package (name "rtl8821ce-linux-module") (version (git-version "0.0.0" revision commit)) @@ -754,7 +823,7 @@ network adapters.") (file-name (git-file-name name version)) (sha256 (base32 - "00cn87jjrcxjqr3n8jv4w3n64zksmzz05fdr1gdvnbx1ab5739f6")))) + "0kj12jll0df1h4z6kzv3vylh22xlniki5kg414fv9sqgx1qgs5k7")))) (build-system linux-module-build-system) (arguments (list #:make-flags @@ -782,9 +851,63 @@ network adapters.") ;; hal/rtl8821c/hal8821c_fw.c (license gpl2)))) +(define-public rtl8821cu-linux-module + (let ((commit "a41ef7cabd1aa36fa2b4eb63a71cf719bff11b72") + (revision "1")) + (package + (name "rtl8821cu-linux-module") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/morrownr/8821cu-20210916") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0fnv4gm4adnf8gbjzc2lljh2a3i111159qira3w0qm1zhyqadaq0")))) + (build-system linux-module-build-system) + (arguments + (list + #:make-flags #~(list (string-append "CC=" + #$(cc-for-target)) + (string-append "KSRC=" + (assoc-ref %build-inputs + "linux-module-builder") + "/lib/modules/build")) + #:phases #~(modify-phases %standard-phases + (replace 'build + (lambda* (#:key (make-flags '()) + (parallel-build? #t) #:allow-other-keys) + (apply invoke "make" + `(,@(if parallel-build? + `("-j" ,(number->string (parallel-job-count))) + '()) ,@make-flags))))) + #:tests? #f)) + (home-page "https://github.com/morrownr/8821cu-20210916") + (synopsis "Linux driver for Realtek USB WiFi adapters") + (description + "Linux driver for USB WiFi adapters that are based on the +Realtek RTL8811CU, RTL8821CU, RTL8821CUH and RTL8731AU chipsets. + +To work, in addition to installing the driver, you need +to disable the conflicting rtw88 driver: + +@example +(operating-system + ;; ... + ;; Blacklist conflicting kernel modules. + (kernel-arguments '(\"modprobe.blacklist=rtw88_8821cu\")) + (kernel-loadable-modules (list rtl8821cu-linux-module))) +@end example") + ;; Rejected by Guix beause it contains a binary blob in: + ;; hal/rtl8821c/hal8821c_fw.c + (license (nonfree + "https://github.com/morrownr/8821cu-20210916/blob/main/LICENSE"))))) + (define-public rtl8812au-aircrack-ng-linux-module - (let ((commit "35308f4dd73e77fa572c48867cce737449dd8548") - (revision "11")) + (let ((commit "a3e0c0b6d54546418f046db0dbf1d20e454c9ec2") + (revision "12")) (package (inherit rtl8821ce-linux-module) (name "rtl8812au-aircrack-ng-linux-module") @@ -797,7 +920,7 @@ network adapters.") (commit commit))) (file-name (git-file-name name version)) (sha256 - (base32 "1clqrgmq5fhzybbiapmdbhg5qfx9k21r0hqa9pqmyinaqhvfnhfj")) + (base32 "1hwzsy62h7ik5s54paikcj5ips7mrnfacprciiq412mz5ag28cdn")) (modules '((guix build utils))) (snippet #~(begin @@ -821,7 +944,7 @@ RTL8812AU, RTL8821AU, and RTL8814AU chips.") (define-public r8168-linux-module (package (name "r8168-linux-module") - (version "8.051.02") + (version "8.052.01") (source (origin (method git-fetch) (uri (git-reference @@ -830,19 +953,9 @@ RTL8812AU, RTL8821AU, and RTL8814AU chips.") (file-name (git-file-name name version)) (sha256 (base32 - "16mpr0np6xbmzdnwg4p3q6yli2gh032k98g4vplya33hrn50vh52")))) + "01mi7hh92nc7jaxkfrpz7j0ci78djrhgmq0im4k1270mwmvr0yzj")))) (arguments - (list #:tests? #f - #:phases #~(modify-phases %standard-phases - (add-after 'unpack 'enter-src-directory - (lambda _ - (chdir "src"))) - ;; Needed to compile module for linux >= 6.1 - (add-before 'build 'fix-build - (lambda _ - (substitute* "r8168.h" - (("netif_napi_add\\(ndev, &priv->napi, function, weight\\)") - "netif_napi_add(ndev, &priv->napi, function)"))))))) + (list #:tests? #f)) (build-system linux-module-build-system) (home-page "https://github.com/mtorromeo/r8168") (synopsis "Linux driver for Realtek PCIe network adapters") @@ -1041,7 +1154,7 @@ chipsets from Broadcom: (define-public facetimehd (package (name "facetimehd") - (version "0.5.18") + (version "0.6.8") (source (origin (method git-fetch) @@ -1051,7 +1164,7 @@ chipsets from Broadcom: (file-name (git-file-name "facetimehd" version)) (sha256 (base32 - "1598pzjnbij3knvqmk2yslj26wmqiqjqgqgcw9p9jx6z7bdjvvsh")))) + "1g0ky9w5klkjndf30mjymq78r6yls9gri9x702nn8qkmgkjbqdsg")))) (build-system linux-module-build-system) (arguments '(#:tests? #f)) @@ -1075,7 +1188,7 @@ driver: (define-public intel-microcode (package (name "intel-microcode") - (version "20231114") + (version "20240312") (source (origin (method git-fetch) @@ -1086,7 +1199,7 @@ driver: (commit (string-append "microcode-" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "07c7hkwpvb9056s73s55sg04cxr1d9n1sd9r1g7sm3gh70yc17ki")))) + (base32 "1j1krkmp9kxmpq8bbbld8bm3y9rqhmlj5qfm43czikawnpw81571")))) (build-system copy-build-system) (arguments (list #:install-plan diff --git a/nongnu/packages/lisp.scm b/nongnu/packages/lisp.scm index 527dd9f..d868a5f 100644 --- a/nongnu/packages/lisp.scm +++ b/nongnu/packages/lisp.scm @@ -1,16 +1,14 @@ ;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2022 Pierre Neidhardt -;;; Copyright © 2023 André A. Gomes +;;; Copyright © 2023, 2024 André A. Gomes (define-module (nongnu packages lisp) #:use-module (ice-9 match) #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages tls) - #:use-module (gnu packages node) #:use-module (gnu packages lisp) #:use-module (gnu packages lisp-xyz) - ;; #:use-module (gnu packages lisp-check) #:use-module (nongnu packages electron) #:use-module (guix build-system copy) #:use-module (guix build-system gnu) @@ -125,8 +123,8 @@ then open a browser at http://localhost:PORT, where PORT is the indicated port." "https://franz.com/ftp/pub/legal/ACL-Express-20170301.pdf")))) (define-public sbcl-cl-electron - (let ((commit "458a60d8c9baae71906294ffae891c3d0686c672") - (revision "2")) + (let ((commit "f2245dc1450a6ad416984cf932be50e00957390a") + (revision "3")) (package (name "sbcl-cl-electron") (version (git-version "0.0.0" revision commit)) @@ -138,13 +136,22 @@ then open a browser at http://localhost:PORT, where PORT is the indicated port." (commit commit))) (file-name (git-file-name "cl-electron" version)) (sha256 - (base32 "1ya6y55kv0g3h19ifnmwbc752p00s9mj1b1n4ljw4n7ycxmdpb24")))) + (base32 "0c18xbwwnjaiwzd01dprdrwzp27nwihaf7pmkql1f5yk43x3ajs0")))) (build-system asdf-build-system/sbcl) - (native-inputs (list ;; sbcl-lisp-unit2 - sbcl)) - (inputs (list electron node + (inputs (list electron sbcl-cl-json sbcl-iolib sbcl-cl-str sbcl-nclasses - sbcl-parenscript sbcl-bordeaux-threads)) + sbcl-cl-ppcre sbcl-bordeaux-threads sbcl-lparallel + sbcl-parenscript sbcl-spinneret)) + (arguments + '(#:tests? #f + #:asd-systems '("cl-electron" "cl-electron/demos") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "source/core.lisp" + (("\"electron\"") + (string-append "\"" (assoc-ref inputs "electron") "/bin/electron\"")))))))) (synopsis "Common Lisp interface to Electron") (home-page "https://github.com/atlas-engineer/cl-electron") (description "@command{cl-electron} is a binding to Electron for diff --git a/nongnu/packages/messaging.scm b/nongnu/packages/messaging.scm index 0bddb98..74e65ed 100644 --- a/nongnu/packages/messaging.scm +++ b/nongnu/packages/messaging.scm @@ -1,6 +1,6 @@ ;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021, 2022 PantherX OS Team -;;; Copyright © 2022, 2023 John Kehayias +;;; Copyright © 2022, 2023, 2024 John Kehayias ;;; Copyright © 2022 Evgenii Lepikhin ;;; Copyright © 2023 Giacomo Leidi ;;; Copyright © 2023 Raven Hallsby @@ -36,7 +36,7 @@ (define-public element-desktop (package (name "element-desktop") - (version "1.11.41") + (version "1.11.57") (source (origin (method url-fetch) @@ -45,7 +45,7 @@ "https://packages.riot.im/debian/pool/main/e/" name "/" name "_" version "_amd64.deb")) (sha256 - (base32 "1m07b1ykmxly16irca171z4f718as7hqsccp1q7qrqj9b5lkmv64")))) + (base32 "05318i6z5kkzi01ygr77g5ij0hs4xmy0j23hznkqc4zia02q1vgx")))) (supported-systems '("x86_64-linux")) (build-system chromium-binary-build-system) (arguments @@ -54,25 +54,19 @@ #~'("lib/Element/element-desktop") #:phases #~(modify-phases %standard-phases - (replace 'unpack + (add-after 'binary-unpack 'setup-cwd (lambda _ - (invoke "ar" "x" #$source) - (invoke "tar" "xvf" "data.tar.xz") (copy-recursively "usr/" ".") ;; Use the more standard lib directory for everything. (rename-file "opt/" "lib") ;; Remove unneeded files. (delete-file-recursively "usr") - (delete-file "control.tar.gz") - (delete-file "data.tar.xz") - (delete-file "debian-binary") ;; Fix the .desktop file binary location. (substitute* '("share/applications/element-desktop.desktop") (("/opt/Element/") (string-append #$output "/bin/"))))) - (add-after 'install 'symlink-binary-file-and-cleanup + (add-after 'install 'symlink-binary-file (lambda _ - (delete-file (string-append #$output "/environment-variables")) (mkdir-p (string-append #$output "/bin")) (symlink (string-append #$output "/lib/Element/element-desktop") (string-append #$output "/bin/element-desktop")))) @@ -84,8 +78,6 @@ (list (string-append #$output "/lib/Element")) ":"))))))))) - - (native-inputs (list tar)) (home-page "https://github.com/vector-im/element-desktop") (synopsis "Matrix collaboration client for desktop") (description "Element Desktop is a Matrix client for desktop with Element Web at @@ -98,7 +90,7 @@ its core.") (define-public signal-desktop (package (name "signal-desktop") - (version "6.39.1") + (version "6.46.0") (source (origin (method url-fetch) @@ -107,7 +99,7 @@ its core.") "https://updates.signal.org/desktop/apt/pool/s/" name "/" name "_" version "_amd64.deb")) (sha256 - (base32 "0rlcn3fyzc69x52g634nd7wryfkkrmykp62wl590shp92nkx8dkl")))) + (base32 "1pjv8v1hhycwbvqvih83axv41jkyksq6d9152fqic9d61lbb1kpa")))) (supported-systems '("x86_64-linux")) (build-system chromium-binary-build-system) (arguments @@ -116,26 +108,19 @@ its core.") #~'("lib/Signal/signal-desktop") #:phases #~(modify-phases %standard-phases - (replace 'unpack + (add-after 'binary-unpack 'setup-cwd (lambda _ - (invoke "ar" "x" #$source) - (invoke "tar" "xvf" "data.tar.xz") (copy-recursively "usr/" ".") ;; Use the more standard lib directory for everything. (rename-file "opt/" "lib") ;; Remove unneeded files. (delete-file-recursively "usr") - (delete-file "control.tar.gz") - (delete-file "data.tar.xz") - (delete-file "debian-binary") - (delete-file "environment-variables") ;; Fix the .desktop file binary location. (substitute* '("share/applications/signal-desktop.desktop") (("/opt/Signal/") (string-append #$output "/bin/"))))) - (add-after 'install 'symlink-binary-file-and-cleanup + (add-after 'install 'symlink-binary-file (lambda _ - (delete-file (string-append #$output "/environment-variables")) (mkdir-p (string-append #$output "/bin")) (symlink (string-append #$output "/lib/Signal/signal-desktop") (string-append #$output "/bin/signal-desktop")))) @@ -147,7 +132,6 @@ its core.") (list (string-append #$output "/lib/Signal")) ":"))))))))) - (native-inputs (list tar)) (home-page "https://signal.org/") (synopsis "Private messenger using the Signal protocol") (description "Signal Desktop is an Electron application that links with Signal on Android @@ -160,14 +144,14 @@ or iOS.") (define-public zoom (package (name "zoom") - (version "5.15.12.7665") + (version "5.17.5.2543") (source (origin (method url-fetch) (uri (string-append "https://cdn.zoom.us/prod/" version "/zoom_x86_64.tar.xz")) (file-name (string-append name "-" version "-x86_64.tar.xz")) (sha256 - (base32 "1pmxgfafwlxnrcw1fay91krjqbf1kaf5ng4f3na0p6liyd5c6fhq")))) + (base32 "06m53d3jrpiq1z5wd7m61lb3w8m8g72iaqx5sixnzn290gyyzgim")))) (supported-systems '("x86_64-linux")) (build-system binary-build-system) (arguments @@ -243,6 +227,9 @@ or iOS.") "libxrender" "zlib"))))) (wrap-program (string-append #$output "/lib/zoom/zoom") + '("QML2_IMPORT_PATH" = ()) + '("QT_PLUGIN_PATH" = ()) + '("QT_SCREEN_SCALE_FACTORS" = ()) `("FONTCONFIG_PATH" ":" prefix (,(string-join (list diff --git a/nongnu/packages/mozilla.scm b/nongnu/packages/mozilla.scm index 734a74c..c9a4e6a 100644 --- a/nongnu/packages/mozilla.scm +++ b/nongnu/packages/mozilla.scm @@ -97,19 +97,19 @@ ;; Update this id with every firefox update to its release date. ;; It's used for cache validation and therefore can lead to strange bugs. -(define %firefox-esr-build-id "20231120132923") +(define %firefox-esr-build-id "20240219101823") (define-public firefox-esr (package (name "firefox-esr") - (version "115.5.0esr") + (version "115.8.0esr") (source (origin (method url-fetch) (uri (string-append "https://archive.mozilla.org/pub/firefox/releases/" version "/source/firefox-" version ".source.tar.xz")) (sha256 - (base32 "0a578r4kri7jdw8pkkzp7f1mm9idlk7sjxjghcb08k5p14172gyv")))) + (base32 "1slmp2v1q3my81z8kiym9rpxw5d9n4sn07v7hv99517w7vr8d05g")))) (build-system gnu-build-system) (arguments (list @@ -241,7 +241,7 @@ (substitute file `((,(format #f "~s" lib) - . ,(λ (line _) + . ,(lambda (line _) (string-replace-substring line lib @@ -532,20 +532,20 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" ;; Update this id with every firefox update to its release date. ;; It's used for cache validation and therefore can lead to strange bugs. -(define %firefox-build-id "20231129224408") +(define %firefox-build-id "20240304165820") (define-public firefox (package (inherit firefox-esr) (name "firefox") - (version "120.0.1") + (version "123.0.1") (source (origin (method url-fetch) (uri (string-append "https://archive.mozilla.org/pub/firefox/releases/" version "/source/firefox-" version ".source.tar.xz")) (sha256 - (base32 "1qlsjpiwgr17bd0dphshs6dj23889m7h3sfq8j21b0282hmbprvn")))) + (base32 "073lbl2gs7c08kr9h6r2jvl3cvj84h3pdh6aj151c3synravkp6m")))) (arguments (substitute-keyword-arguments (package-arguments firefox-esr) ((#:phases phases) @@ -562,38 +562,7 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" "Full-featured browser client built from Firefox source tree, without the official icon and the name \"firefox\"."))) -(define-public firefox/wayland - (package - (inherit firefox) - (name "firefox-wayland") - (native-inputs '()) - (inputs - `(("bash" ,bash-minimal) - ("firefox" ,firefox))) - (build-system trivial-build-system) - (arguments - '(#:modules ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils)) - (let* ((bash (assoc-ref %build-inputs "bash")) - (firefox (assoc-ref %build-inputs "firefox")) - (out (assoc-ref %outputs "out")) - (exe (string-append out "/bin/firefox"))) - (mkdir-p (dirname exe)) - - (call-with-output-file exe - (lambda (port) - (format port "#!~a -MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" - (string-append bash "/bin/bash") - (string-append firefox "/bin/firefox")))) - (chmod exe #o555) - - ;; Provide the manual and .desktop file. - (copy-recursively (string-append firefox "/share") - (string-append out "/share")) - (substitute* (string-append - out "/share/applications/firefox.desktop") - ((firefox) out)) - #t)))))) +;; As of Firefox 121.0, Firefox uses Wayland by default. This means we no longer need a seperate package +;; for Firefox on Wayland. +(define-public firefox-wayland + (deprecated-package "firefox-wayland" firefox)) diff --git a/nongnu/packages/patches/copy-firmware-rdfind.patch b/nongnu/packages/patches/copy-firmware-rdfind.patch deleted file mode 100644 index 08ccfad..0000000 --- a/nongnu/packages/patches/copy-firmware-rdfind.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/copy-firmware.sh b/copy-firmware.sh -index f9b1f0ff..de28e882 100755 ---- a/copy-firmware.sh -+++ b/copy-firmware.sh -@@ -69,11 +69,6 @@ if [ -z "$destdir" ]; then - exit 1 - fi - --if ! which rdfind 2>/dev/null >/dev/null; then -- echo "ERROR: rdfind is not installed" -- exit 1 --fi -- - # shellcheck disable=SC2162 # file/folder name can include escaped symbols - grep -E '^(RawFile|File):' WHENCE | sed -E -e 's/^(RawFile|File): */\1 /;s/"//g' | while read k f; do - test -f "$f" || continue -@@ -87,14 +82,6 @@ grep -E '^(RawFile|File):' WHENCE | sed -E -e 's/^(RawFile|File): */\1 /;s/"//g' - fi - done - --$verbose "Finding duplicate files" --rdfind -makesymlinks true -makeresultsfile false "$destdir" >/dev/null --find "$destdir" -type l | while read -r l; do -- target="$(realpath "$l")" -- $verbose "Correcting path for $l" -- ln -fs "$(realpath --relative-to="$(dirname "$(realpath -s "$l")")" "$target")" "$l" --done -- - # shellcheck disable=SC2162 # file/folder name can include escaped symbols - grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do - if test -L "$f$compext"; then diff --git a/nongnu/packages/printers.scm b/nongnu/packages/printers.scm index 9e1cdac..77d5f98 100644 --- a/nongnu/packages/printers.scm +++ b/nongnu/packages/printers.scm @@ -1,7 +1,7 @@ ;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021 Petr Hodina ;;; Copyright © 2021 Kahka F -;;; Copyright © 2021 Jonathan Brielmaier +;;; Copyright © 2021, 2023 Jonathan Brielmaier (define-module (nongnu packages printers) #:use-module (gnu packages) @@ -40,7 +40,7 @@ ;; hplip is updated in Guix. (sha256 (base32 - "09kixd9pb0p94bw3xyqy9h62gwqnbwcjjsvb2g3wvl6zxp4j1fvy"))))) + "0zq66hm7ni6w1c3cxy1gxrxzvyvfn0lhjnia8p4azvz2r309j9s0"))))) (package-native-inputs hplip))) (arguments (substitute-keyword-arguments (package-arguments hplip) diff --git a/nongnu/packages/productivity.scm b/nongnu/packages/productivity.scm index d063288..1065399 100644 --- a/nongnu/packages/productivity.scm +++ b/nongnu/packages/productivity.scm @@ -24,17 +24,17 @@ (define-public anytype (package (name "anytype") - (version "0.36.0") + (version "0.39.0") (source (origin (method url-fetch) (uri - (string-append "https://download.anytype.io?action=download" - "&key=desktop&id=136705969")) + (string-append "https://anytype-release.fra1.cdn.digitaloceanspaces.com/" + name "_" version "_amd64.deb")) (file-name (string-append "anytype-" version ".deb")) (sha256 (base32 - "17cs4w3k7nmjav873wwzpxb2dz4mp2zgkpz1karp3x2mxan0x2i3")))) + "10y037qwm6k28min2sgpshrlpirc1p0zn3b4syxrrz494x5g2ivi")))) (build-system chromium-binary-build-system) (arguments (list @@ -52,29 +52,25 @@ "libGLESv2.so" "libvk_swiftshader.so" "libvulkan.so.1" + "resources/app.asar.unpacked/dist/nativeMessagingHost" "resources/app.asar.unpacked/node_modules/keytar/build/Release/keytar.node")) #:install-plan #~'(("opt/" "/share") ("usr/share/" "/share")) #:phases #~(modify-phases %standard-phases - (add-after 'unpack 'unpack-deb - (lambda* (#:key inputs #:allow-other-keys) - (invoke "ar" "x" #$source) - (invoke "rm" "-v" "control.tar.gz" - "debian-binary" - (string-append "anytype-" #$version ".deb")) - (invoke "tar" "xvf" "data.tar.xz") - (invoke "rm" "-vrf" "data.tar.xz"))) + (add-after 'binary-unpack 'strip-python + (lambda _ + (delete-file + (string-append "opt/Anytype/resources/app.asar.unpacked/" + "node_modules/keytar/build/node_gyp_bins/python3")))) (add-before 'install 'patch-assets (lambda _ (let* ((bin (string-append #$output "/bin")) - (icon (string-append #$output "/share/icons/hicolor/0x0/apps/anytype.png")) (usr/share "./usr/share") (old-exe "/opt/Anytype/anytype") (exe (string-append bin "/anytype"))) (substitute* (string-append usr/share "/applications/anytype.desktop") - (("^Icon=anytype") (string-append "Icon=" icon)) (((string-append "^Exec=" old-exe)) (string-append "Exec=" exe)))))) (add-before 'install-wrapper 'symlink-entrypoint (lambda _ @@ -86,7 +82,6 @@ (symlink target exe) (wrap-program exe `("LD_LIBRARY_PATH" = (,share))))))))) - (native-inputs (list tar)) (inputs (list bzip2 flac diff --git a/nongnu/packages/version-control.scm b/nongnu/packages/version-control.scm index 1948f7d..675bf88 100644 --- a/nongnu/packages/version-control.scm +++ b/nongnu/packages/version-control.scm @@ -13,7 +13,7 @@ (define-public helix-core (package (name "helix-core") - (version "r22.1") + (version "r23.1") (source (origin (method url-fetch) (uri (string-append "https://ftp.perforce.com/perforce/" version @@ -28,7 +28,7 @@ ("i686-linux" "0f5qs55rspw86axnmml3nxx551lwbxwz1cgi9kmy2f9g5rrplnkn") (_ - "077rfbjgyhdgv76i2727s3yk3p52y75nml8n9wv8g7mvhfs9ypa9")))))) + "1vqfkhgbx6ch7710w8mmm7hydl6jmd9qgzs0gfjg8gvd5gnh1csr")))))) (build-system binary-build-system) (arguments `(#:strip-binaries? #f diff --git a/nonguix/build/binary-build-system.scm b/nonguix/build/binary-build-system.scm index 087ef89..e5bbc48 100644 --- a/nonguix/build/binary-build-system.scm +++ b/nonguix/build/binary-build-system.scm @@ -1,6 +1,7 @@ ;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Julien Lepiller ;;; Copyright © 2022 Attila Lendvai +;;; Copyright © 2023 Giacomo Leidi (define-module (nonguix build binary-build-system) #:use-module ((guix build gnu-build-system) #:prefix gnu:) @@ -133,10 +134,39 @@ The inputs are optional when the file is an executable." patchelf-plan))) #t) +(define (deb-file? binary-file) + (string-suffix? ".deb" binary-file)) + +(define (unpack-deb deb-file) + (invoke "ar" "x" deb-file) + (invoke "tar" "xvf" "data.tar.xz") + (invoke "rm" "-rfv" "control.tar.gz" + "data.tar.xz" + deb-file + "debian-binary")) + +(define* (binary-unpack #:key source #:allow-other-keys) + (let* ((files (filter (lambda (f) + (not (string=? (basename f) "environment-variables"))) + (find-files (getcwd)))) + (binary-file (car files))) + (when (= 1 (length files)) + (mkdir "binary") + (chdir "binary") + (match binary-file + ((? deb-file?) (unpack-deb binary-file)) + (_ + (begin + (format #t "Unknown file type: ~a~%" (basename binary-file)) + ;; Cleanup after ourselves + (chdir "..") + (rmdir "binary"))))))) + (define %standard-phases - ;; Everything is as with the GNU Build System except for the `configure' - ;; , `build', `check' and `install' phases. + ;; Everything is as with the GNU Build System except for the `binary-unpack', + ;; `configure', `build', `check' and `install' phases. (modify-phases gnu:%standard-phases + (add-after 'unpack 'binary-unpack binary-unpack) (delete 'bootstrap) (delete 'configure) (delete 'build) diff --git a/nonguix/multiarch-container.scm b/nonguix/multiarch-container.scm index b333b71..3d040c2 100644 --- a/nonguix/multiarch-container.scm +++ b/nonguix/multiarch-container.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2023 Giacomo Leidi ;;; Copyright © 2023 Attila Lendvai ;;; Copyright © 2023 Elijah Malaby +;;; Copyright © 2023 Timo Wilken ;;; The script provided by this package may optionally be started as ;;; a shell instead of automatically launching the wrapped entrypoint by setting @@ -50,6 +51,7 @@ #:export (nonguix-container nonguix-container? ngc-name + ngc-binary-name ngc-version ngc-wrap-package ngc-run @@ -82,6 +84,7 @@ nonguix-container make-nonguix-container nonguix-container? this-nonguix-container (name ngc-name) + (binary-name ngc-binary-name (default (ngc-name this-nonguix-container)) (thunked)) (version ngc-version (default #f)) (wrap-package ngc-wrap-package) (run ngc-run) @@ -207,7 +210,7 @@ in a sandboxed FHS environment." (manifest-target (assoc-ref %build-inputs "fhs-manifest")) (manifest-dest (string-append out "/etc/" ,(ngc-manifest-name container))) (wrapper-target (assoc-ref %build-inputs "fhs-wrapper")) - (wrapper-dest (string-append out "/bin/" ,(ngc-name container))) + (wrapper-dest (string-append out "/bin/" ,(ngc-binary-name container))) (link-files ',(ngc-link-files container))) (mkdir-p (string-append out "/sbin")) (mkdir-p (string-append out "/etc")) @@ -236,135 +239,139 @@ in a sandboxed FHS environment." in a sandboxed FHS environment." (program-file (ngc-wrapper-name container) - #~(begin - (use-modules (guix build utils)) - (define (preserve-var var) - (string-append "--preserve=" var)) - (define* (add-path path #:key writable?) - (let ((opt (if writable? - "--share=" - "--expose="))) - (if (pair? path) - (string-append opt (car path) "=" (cdr path)) - (string-append opt path)))) - (define (exists-> file) - (if (and file (file-exists? file)) - `(,file) '())) - (let* ((run #$(file-append fhs-internal "/bin/" (ngc-internal-name container))) - (manifest-file #$(file-append fhs-manifest)) - (xdg-runtime (getenv "XDG_RUNTIME_DIR")) - (home (getenv "HOME")) - (sandbox-home (or (getenv "GUIX_SANDBOX_HOME") - (string-append home "/" #$(ngc-sandbox-home container)))) - (preserved-env '("^DBUS_" - "^DISPLAY$" - "^DRI_PRIME$" - "^GDK_SCALE$" ; For UI scaling. - "^GUIX_LOCPATH$" ; For pressure-vessel locales. - ;; For startup of added non-Steam games as it - ;; seems they start in an early environment - ;; before our additional settings. (Likely - ;; this can be removed when rewritten to use - ;; --emulate-fhs from upstream.) Note that - ;; this is explicitly set below. We could - ;; preserve what is set before launching the - ;; container, but any such directories would - ;; need to be shared with the container as - ;; well; this is not needed currently. - "^LD_LIBRARY_PATH$" - "^MANGOHUD" ; For MangoHud configuration. - "^PRESSURE_VESSEL_" ; For pressure vessel options. - "_PROXY$" - "_proxy$" - ;; To allow workaround for upstream bug - ;; - ;; and tracked on our end as - ;; . - ;; TODO: Remove once upstream fixes this bug. - "^QT_X11_NO_MITSHM$" - "^SDL_" - "^STEAM_" - "^VDPAU_DRIVER_PATH$" ; For VDPAU drivers. - "^XAUTHORITY$" - ;; Matching all ^XDG_ vars causes issues - ;; discussed in 80decf05. - "^XDG_DATA_HOME$" - "^XDG_RUNTIME_DIR$" - ;; The following are useful for debugging. - "^CAPSULE_DEBUG$" - "^G_MESSAGES_DEBUG$" - "^LD_DEBUG$" - "^LIBGL_DEBUG$")) - (expose `("/dev/bus/usb" ; Needed for libusb. - "/dev/dri" - "/dev/input" ; Needed for controller input. - "/dev/uinput" ; Needed for Steam Input. - ,@(exists-> "/dev/nvidia0") ; needed for nvidia proprietary driver - ,@(exists-> "/dev/nvidiactl") - ,@(exists-> "/dev/nvidia-modeset") - ,@(exists-> "/etc/machine-id") - "/etc/localtime" ; Needed for correct time zone. - "/sys/class/drm" ; Needed for hw monitoring like MangoHud. - "/sys/class/hwmon" ; Needed for hw monitoring like MangoHud. - "/sys/class/hidraw" ; Needed for devices like the Valve Index. - "/sys/class/input" ; Needed for controller input. - ,@(exists-> "/sys/class/power_supply") ; Needed for power monitoring like MangoHud. - ,@(exists-> "/sys/class/powercap") ; Needed for power monitoring like MangoHud. - "/sys/dev" - "/sys/devices" - ,@(exists-> "/var/run/dbus") - #$@(ngc-exposed container))) - ;; /dev/hidraw is needed for SteamVR to access the HMD, although here we - ;; share all hidraw devices. Instead we could filter to only share specific - ;; device. See, for example, this script: - ;; https://arvchristos.github.io/post/matching-dev-hidraw-devices-with-physical-devices/ - (share `(,@(find-files "/dev" "hidraw") - "/dev/shm" - ;; "/tmp/.X11-unix" is needed for bwrap, and "/tmp" more generally - ;; for writing things like crash dumps and "steam_chrome_shm". - "/tmp" - ,(string-append sandbox-home "=" home) - ,@(exists-> (string-append home "/.config/pulse")) - ,@(exists-> (string-append xdg-runtime "/pulse")) - ,@(exists-> (string-append xdg-runtime "/bus")) - ,@(exists-> (getenv "XAUTHORITY")) - #$@(ngc-shared container))) - (DEBUG (equal? (getenv "DEBUG") "1")) - (args (cdr (command-line))) - (command (if DEBUG '() - `("--" ,run ,@args)))) - ;; Set this so that e.g. non-Steam games added to Steam will launch - ;; properly. It seems otherwise they don't make it to launching - ;; Steam's pressure-vessel container (for Proton games). - (setenv "LD_LIBRARY_PATH" "/lib64:/lib") - ;; Set this so Steam's pressure-vessel container does not need to - ;; generate locales, improving startup time. This needs to be set to - ;; the "usual" path, probably so they are included in the - ;; pressure-vessel container. - (setenv "GUIX_LOCPATH" "/usr/lib/locale") - ;; By default VDPAU drivers are searched for in libvdpau's store - ;; path, so set this path to where the drivers will actually be - ;; located in the container. - (setenv "VDPAU_DRIVER_PATH" "/lib64/vdpau") - (format #t "\n* Launching ~a in sandbox: ~a.\n\n" - #$(package-name (ngc-wrap-package container)) sandbox-home) - (when DEBUG - (format #t "* DEBUG set to 1: Starting shell. Launch application manually with: ~a.\n\n" - #$(ngc-internal-name container))) - (mkdir-p sandbox-home) - (invoke #$(file-append pulseaudio "/bin/pulseaudio") - "--start" - "--exit-idle-time=60") - (apply invoke - `("guix" "shell" - "--container" "--no-cwd" "--network" - ,@(map preserve-var preserved-env) - ,@(map add-path expose) - ,@(map (lambda (item) - (add-path item #:writable? #t)) - share) - "-m" ,manifest-file - ,@command)))))) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (define (preserve-var var) + (string-append "--preserve=" var)) + (define* (add-path path #:key writable?) + (let ((opt (if writable? + "--share=" + "--expose="))) + (if (pair? path) + (string-append opt (car path) "=" (cdr path)) + (string-append opt path)))) + (define (exists-> file) + (if (and file (file-exists? file)) + `(,file) '())) + (let* ((run #$(file-append fhs-internal "/bin/" (ngc-internal-name container))) + (manifest-file #$(file-append fhs-manifest)) + (xdg-runtime (getenv "XDG_RUNTIME_DIR")) + (home (getenv "HOME")) + (sandbox-home (or (getenv "GUIX_SANDBOX_HOME") + (string-append home "/" #$(ngc-sandbox-home container)))) + (preserved-env '("^DBUS_" + "^DISPLAY$" + "^DRI_PRIME$" + "^GDK_SCALE$" ; For UI scaling. + "^GUIX_LOCPATH$" ; For pressure-vessel locales. + ;; For startup of added non-Steam games as it + ;; seems they start in an early environment + ;; before our additional settings. (Likely + ;; this can be removed when rewritten to use + ;; --emulate-fhs from upstream.) Note that + ;; this is explicitly set below. We could + ;; preserve what is set before launching the + ;; container, but any such directories would + ;; need to be shared with the container as + ;; well; this is not needed currently. + "^LD_LIBRARY_PATH$" + "^MANGOHUD" ; For MangoHud configuration. + "^PRESSURE_VESSEL_" ; For pressure vessel options. + "_PROXY$" + "_proxy$" + ;; To allow workaround for upstream bug + ;; + ;; and tracked on our end as + ;; . + ;; TODO: Remove once upstream fixes this bug. + "^QT_X11_NO_MITSHM$" + "^SDL_" + "^STEAM_" + "^SSL_" ; SSL certificate environment, needed by curl for Heroic. + "^VDPAU_DRIVER_PATH$" ; For VDPAU drivers. + "^XAUTHORITY$" + ;; Matching all ^XDG_ vars causes issues + ;; discussed in 80decf05. + "^XDG_DATA_HOME$" + "^XDG_RUNTIME_DIR$" + #$@(ngc-preserved-env container) ; Environment from container. + ;; The following are useful for debugging. + "^CAPSULE_DEBUG$" + "^G_MESSAGES_DEBUG$" + "^LD_DEBUG$" + "^LIBGL_DEBUG$")) + (expose `("/dev/bus/usb" ; Needed for libusb. + "/dev/dri" + "/dev/input" ; Needed for controller input. + "/dev/uinput" ; Needed for Steam Input. + ,@(exists-> "/dev/nvidia0") ; needed for nvidia proprietary driver + ,@(exists-> "/dev/nvidiactl") + ,@(exists-> "/dev/nvidia-modeset") + ,@(exists-> "/etc/machine-id") + "/etc/localtime" ; Needed for correct time zone. + "/sys/class/drm" ; Needed for hw monitoring like MangoHud. + "/sys/class/hwmon" ; Needed for hw monitoring like MangoHud. + "/sys/class/hidraw" ; Needed for devices like the Valve Index. + "/sys/class/input" ; Needed for controller input. + ,@(exists-> "/sys/class/power_supply") ; Needed for power monitoring like MangoHud. + ,@(exists-> "/sys/class/powercap") ; Needed for power monitoring like MangoHud. + "/sys/dev" + "/sys/devices" + ,@(exists-> "/var/run/dbus") + #$@(ngc-exposed container))) + ;; /dev/hidraw is needed for SteamVR to access the HMD, although here we + ;; share all hidraw devices. Instead we could filter to only share specific + ;; device. See, for example, this script: + ;; https://arvchristos.github.io/post/matching-dev-hidraw-devices-with-physical-devices/ + (share `(,@(find-files "/dev" "hidraw") + "/dev/shm" + ;; "/tmp/.X11-unix" is needed for bwrap, and "/tmp" more generally + ;; for writing things like crash dumps and "steam_chrome_shm". + "/tmp" + ,(string-append sandbox-home "=" home) + ,@(exists-> (string-append home "/.config/pulse")) + ,@(exists-> (string-append xdg-runtime "/pulse")) + ,@(exists-> (string-append xdg-runtime "/bus")) + ,@(exists-> (getenv "XAUTHORITY")) + #$@(ngc-shared container))) + (DEBUG (equal? (getenv "DEBUG") "1")) + (extra-shares (if (getenv "GUIX_SANDBOX_EXTRA_SHARES") + (string-split (getenv "GUIX_SANDBOX_EXTRA_SHARES") #\:) + #f)) + (args (cdr (command-line))) + (command (if DEBUG '() + `("--" ,run ,@args)))) + ;; Set this so Steam's pressure-vessel container does not need to + ;; generate locales, improving startup time. This needs to be set to + ;; the "usual" path, probably so they are included in the + ;; pressure-vessel container. + (setenv "GUIX_LOCPATH" "/usr/lib/locale") + ;; By default VDPAU drivers are searched for in libvdpau's store + ;; path, so set this path to where the drivers will actually be + ;; located in the container. + (setenv "VDPAU_DRIVER_PATH" "/lib64/vdpau") + (format #t "\n* Launching ~a in sandbox: ~a.\n\n" + #$(package-name (ngc-wrap-package container)) sandbox-home) + (when DEBUG + (format #t "* DEBUG set to 1: Starting shell. Launch application manually with: ~a.\n\n" + #$(ngc-internal-name container))) + (mkdir-p sandbox-home) + (invoke #$(file-append pulseaudio "/bin/pulseaudio") + "--start" + "--exit-idle-time=60") + (apply invoke + `("guix" "shell" + "--container" "--no-cwd" "--network" + ,@(map preserve-var preserved-env) + ,@(map add-path expose) + ,@(map (lambda (item) + (add-path item #:writable? #t)) + (if extra-shares + (append share extra-shares) + share)) + "-m" ,manifest-file + ,@command))))))) (define (make-container-manifest container fhs-internal) "Return a scheme file-like object to be used as package manifest for FHS @@ -503,6 +510,7 @@ application." ((,union64 "lib/locale") . "/usr/lib/locale") ((,union64 "sbin/ldconfig") . "/sbin/ldconfig") ((,union64 "share/mime") . "/usr/share/mime") ; Steam tray icon. + ((,union64 "share/glib-2.0") . "/usr/share/glib-2.0") ; Heroic interface. ((,union64 "share/drirc.d") . "/usr/share/drirc.d") ((,union64 "share/fonts") . "/run/current-system/profile/share/fonts") ((,union64 "etc/fonts") . "/etc/fonts") @@ -520,6 +528,16 @@ application." ;; (previous would output this error but continue). (if (file-exists? ".steam/root/bootstrap.tar.xz") (chmod ".steam/root/bootstrap.tar.xz" #o644)) + ;; TODO: Should other environment setup also happen inside the + ;; container rather than before container is launched? + ;; + ;; Set this so that e.g. non-Steam games added to Steam will + ;; launch properly. It seems otherwise they don't make it to + ;; launching Steam's pressure-vessel container (for Proton + ;; games). Wait to set this inside the container to not cause + ;; issues on foreign distros, see + ;; + (setenv "LD_LIBRARY_PATH" "/lib64:/lib") ;; Process FHS-specific command line options. (let* ((options (getopt-long (or fhs-args '("")) fhs-option-spec)) @@ -528,7 +546,7 @@ application." (if asound32-opt (display "\n\n/etc/asound.conf configured for 32-bit.\n\n\n") (display (string-append "\n\n/etc/asound.conf configured for 64-bit.\nLaunch " - #$(ngc-name container) + #$(ngc-binary-name container) " with \"" (basename #$(ngc-run container)) " -- --asound32\" to use 32-bit instead.\n\n\n")))