diff options
75 files changed, 4831 insertions, 3235 deletions
diff --git a/.dir-locals.el b/.dir-locals.el index e0716f9..4ab3cc8 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -1,3 +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 @@ -8,11 +10,17 @@ ;; 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 . - ((indent-tabs-mode . nil) + ;; Note this next setting will use the current guix as the geiser binary; + ;; one working with a local guix checkout may want something different. + ((geiser-guile-binary . ("guix" "repl")) + + (indent-tabs-mode . nil) (eval . (put 'eval-when 'scheme-indent-function 1)) (eval . (put 'call-with-prompt 'scheme-indent-function 1)) (eval . (put 'test-assert 'scheme-indent-function 1)) diff --git a/.guix-authorizations b/.guix-authorizations index 39e9bdd..2103b65 100644 --- a/.guix-authorizations +++ b/.guix-authorizations @@ -1,3 +1,4 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;; This is the list of OpenPGP keys currently authorized to sign commits in ;; this repository. diff --git a/.guix-channel b/.guix-channel index 73787dc..cfa33b0 100644 --- a/.guix-channel +++ b/.guix-channel @@ -1,3 +1,4 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;; -*- mode: scheme; -*- (channel @@ -0,0 +1,21 @@ + -*- org -*- +# SPDX-License-Identifier: CC0-1.0 +# Copyright © 2022-2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> +# Copyright © 2023 John Kehayias <john.kehayias@protonmail.com> +#+TITLE: NEWS about user visible changes of nonguix + +* Unreleased +*** New `chromium-binary-build-system` + +* Changes in 1.4.0 (since 2022-05-21 (Guix 1.3.0)) +** Distribution +*** Nvidia driver now available as service +*** Enable WebAssembly sandboxed libraries in firefox +*** Update binary build system to return a monadic procedure +** New services +nvidia +** package updates including: +firefox 108.0.1, firefox-esr 102.6.0esr, linux 6.0.12, nvidia-driver 515.76 +steam 1.0.0.75 +*** steam updates +Steam now supports Proton versions 5.13 and newer, including support for SteamVR. @@ -94,8 +94,11 @@ your configuration. ** Installation image For some hardware the official Guix installation image won't do -(e.g. unsupported wifi). You can generate an installation image running the -nonfree Linux kernel and nonfree firmware with the following command: +(e.g. unsupported wifi). You can find a pre-generated installation image +(time and version in line with upstream Guix), running the nonfree Linux +kernel and nonfree firmware, on the [[https://gitlab.com/nonguix/nonguix/-/releases][Releases page]]. Or, you can generate an +installation image from a local checkout of this repository, at a more recent +commit, with the following command: #+begin_src sh guix system image --image-type=iso9660 /path/to/this/channel/nongnu/system/install.scm @@ -173,18 +176,19 @@ is exactly equivalent to: rest))) #+END_SRC -** Broadcom Wireless +** Broadcom + +*** Wireless Some Broadcom wireless hardware requires a proprietary kernel module in addition to firmware. To use such hardware you will also need to add a service -to load that module on boot, blacklist conflicting kernel modules, and while not -required, it is recommended to stay with Linux LTS releases: +to load that module on boot and blacklist conflicting kernel modules: #+BEGIN_SRC scheme (use-modules (nongnu packages linux)) (operating-system - (kernel linux-lts) + (kernel linux) ;; Blacklist conflicting kernel modules. (kernel-arguments '("modprobe.blacklist=b43,b43legacy,ssb,bcm43xx,brcm80211,brcmfmac,brcmsmac,bcma")) (kernel-loadable-modules (list broadcom-sta)) @@ -193,6 +197,29 @@ required, it is recommended to stay with Linux LTS releases: ...) #+END_SRC +*** Webcam + +Like Broadcom wireless hardware, the Broadcom 1570 PCIe webcam (better known as +FacetimeHD and found in recent Macbooks) also requires a kernel module, +firmware, and blacklisting of conflicting modules: + +#+BEGIN_SRC scheme + (use-modules (nongnu packages linux)) + (use-modules (nongnu packages firmware)) + + (operating-system + (kernel-arguments '("modprobe.blacklist=bdc_pci")) + (kernel-loadable-modules (list facetimehd)) + (firmware (cons* facetimehd-firmware + facetimehd-calibration ; Optional but make the colors look better. + %base-firmware)) + (services + (cons* (simple-service 'facetimehd + kernel-module-loader-service-type + '("facetimehd")) + ...)) + ...) +#+END_SRC ** Substitutes for nonguix A Nonguix substitute server is available at [[https://substitutes.nonguix.org]]. @@ -1,4 +1,6 @@ ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com> +;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2023 Wolf <wolf@wolfsden.cz> ;; ;; Copying and distribution of this file, with or without modification, are ;; permitted in any medium without royalty provided the copyright notice and @@ -7,6 +9,58 @@ (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") + (de "Linux LTS Kernel wird auf 6.1 aktualisiert")) + (body + (en "The default version of the @code{linux-lts} kernel has been + updated to the 6.1 longterm release series.") + (de "Der standardmäßig verwendete @code{linux-lts}-Kernel basiert + jetzt auf der 6.1-Versionsreihe (Langzeitunterstützung)."))) + + (entry (commit "7d4c49eace0d3f074aa34ebbbf880236b6b0fab1") + (title + (en "Nvidia driver configuration refactored") + (de "Nvidia Treiberkonfiguration überarbeitet")) + (body + (en "The configuration of the Nvidia driver was completly over-worked. +In the system definition @code{nvidia-driver} needs to be replaced by +@code{nvidia-module} in the @code{kernel-loadable-module} list. Further add +the service @code{nvidia-service-type}.") + (de "Die Konfiguration der Nvidia Treiber wurde komplett überarbeitet. +Dazu muss in der Systemkonfiguration @code{nvidia-driver} mit @code{nvidia-module} +in der @code{kernel-loadable-module} Liste ersetzt werden. Sowie der Dienst +@code{nvidia-service-type} hinzugefügt werden."))) + (entry (commit "1ac29b33f3ca19134fcbedd6dc22deb45c15229f") (title (en "Nonguix authenticated updates")) (body diff --git a/nongnu/ci.scm b/nongnu/ci.scm index a4e2c72..db9e68a 100644 --- a/nongnu/ci.scm +++ b/nongnu/ci.scm @@ -1,17 +1,5 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021 Mathieu Othacehe <m.othacehe@gmail.com> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. (define-module (nongnu ci) #:use-module (gnu ci) diff --git a/nongnu/packages/anydesk.scm b/nongnu/packages/anydesk.scm index 5ba0c7c..27b6a48 100644 --- a/nongnu/packages/anydesk.scm +++ b/nongnu/packages/anydesk.scm @@ -1,21 +1,6 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021 Korytov Pavel <thexcloud@gmail.com> ;;; Copyright © 2021 Jonathan Brielmaier <jonathan.brielmaier@web.de> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages anydesk) #:use-module (gnu packages compression) @@ -36,14 +21,14 @@ (define-public anydesk (package (name "anydesk") - (version "6.1.1") + (version "6.3.0") (source (origin (method url-fetch) (uri (string-append "https://download.anydesk.com/linux/anydesk-" version "-amd64.tar.gz")) (sha256 (base32 - "1ai58fsivb8al1279bayl800qavy0kfj40rjhf87g902ap3p4bhh")))) + "0lp4zvbdriwbzfnvblbbpzxsrs0l425rha9qjs9sy6ff6myk7qxi")))) (build-system binary-build-system) (arguments `(#:validate-runpath? #f diff --git a/nongnu/packages/benchmark.scm b/nongnu/packages/benchmark.scm new file mode 100644 index 0000000..feb2c7d --- /dev/null +++ b/nongnu/packages/benchmark.scm @@ -0,0 +1,43 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2021-2022 Petr Hodina <phodina@protonmail.com> + +(define-module (nongnu packages benchmark) + #:use-module (guix packages) + #:use-module (gnu packages base) + #:use-module (gnu packages gcc) + #:use-module (guix gexp) + #:use-module (guix download) + #:use-module (nonguix build-system binary) + #:use-module ((nonguix licenses) #:prefix license:)) + +(define-public geekbench5 + (package + (name "geekbench5") + (version "5.4.5") + (source (origin + (method url-fetch) + (uri (string-append "https://cdn.geekbench.com/Geekbench-" + version "-Linux.tar.gz")) + (sha256 + (base32 + "0qppx5ivclfwldb4fcmzg3v9a9nzi7d4f44vx634mfzw2symn3r4")))) + (build-system binary-build-system) + (arguments + (list #:strip-binaries? #f ;TODO: For some reason it fails validate-runpath + #:install-plan #~'(("geekbench5" "bin/") + ("geekbench.plar" "bin/") + ("geekbench_x86_64" "bin/")) + #:patchelf-plan #~(list (list "geekbench5" + '("glibc" "gcc:lib")) + (list "geekbench_x86_64" + '("glibc" "gcc:lib"))))) + (supported-systems '("x86_64-linux")) + (inputs `(("gcc:lib" ,gcc "lib") + ("glibc" ,glibc))) + (synopsis "Benchmark that measures processor and memory performance") + (description + "This package provides benchmark that measures processor and memory +performance and uploads the results into online database.") + (home-page "https://www.geekbench.com/") + (license (license:nonfree + "https://www.primatelabs.com/legal/terms-of-use.html")))) diff --git a/nongnu/packages/cad.scm b/nongnu/packages/cad.scm index c896a5f..c17bb35 100644 --- a/nongnu/packages/cad.scm +++ b/nongnu/packages/cad.scm @@ -1,17 +1,5 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021-2022 Petr Hodina <phodina@protonmail.com> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. (define-module (nongnu packages cad) #:use-module (guix packages) diff --git a/nongnu/packages/chrome.scm b/nongnu/packages/chrome.scm new file mode 100644 index 0000000..67a061b --- /dev/null +++ b/nongnu/packages/chrome.scm @@ -0,0 +1,152 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022, 2023 Giacomo Leidi <goodoldpaul@autistici.org> +;;; Copyright © 2022 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> + +(define-module (nongnu packages chrome) + #:use-module (gnu packages base) + #:use-module (gnu packages compression) + #:use-module (gnu packages curl) + #:use-module (gnu packages fonts) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gl) + #:use-module (gnu packages gtk) + #:use-module (gnu packages image) + #: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) + #:use-module (gnu packages xorg) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix build-system gnu) + #:use-module (nonguix build-system chromium-binary) + #:use-module (nonguix licenses) + #:use-module (ice-9 string-fun)) + +(define-public (make-google-chrome repo version hash) + (let* ((name (string-append "google-chrome-" repo)) + (appname (if (string=? repo "stable") + "chrome" + (string-replace-substring name "google-" "")))) + (package + (name name) + (version version) + (source (origin + (method url-fetch) + (uri + (string-append + "https://dl.google.com/linux/chrome/deb/pool/main/g/" + name "/" name "_" version "-1_amd64.deb")) + (sha256 + (base32 hash)))) + (build-system chromium-binary-build-system) + (arguments + (list + ;; almost 300MB, faster to download and build from Google servers + #:substitutable? #f + #:wrapper-plan + #~(let ((path (string-append "opt/google/" #$appname "/"))) + (map (lambda (file) + (string-append path file)) + '("chrome" + "chrome-sandbox" + "chrome_crashpad_handler" + "libEGL.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-before 'install 'patch-assets + ;; Many thanks to + ;; https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/browsers/google-chrome/default.nix + (lambda _ + (let* ((bin (string-append #$output "/bin")) + (share (string-append #$output "/share")) + (opt "./opt") + (usr/share "./usr/share") + (old-exe (string-append "/opt/google/" #$appname "/google-" #$appname)) + (exe (string-append bin "/google-" #$appname))) + ;; This allows us to override CHROME_WRAPPER later. + (substitute* (string-append opt "/google/" #$appname "/google-" #$appname) + (("CHROME_WRAPPER") "WRAPPER")) + (substitute* (string-append usr/share "/applications/google-" #$appname ".desktop") + (("^Exec=.*") (string-append "Exec=" exe "\n"))) + (substitute* (string-append usr/share "/gnome-control-center/default-apps/google-" #$appname ".xml") + ((old-exe) exe)) + (substitute* (string-append usr/share "/menu/google-" #$appname ".menu") + (("/opt") share) + ((old-exe) exe))))) + (add-after 'install 'install-icons + (lambda _ + (define (format-icon-size name) + (car + (string-split + (string-drop-right (string-drop name 13) 4) + #\_))) + (let ((icons (string-append #$output "/share/icons/hicolor")) + (share (string-append #$output "/share/google/" #$appname))) + (for-each (lambda (icon) + (let* ((icon-name (basename icon)) + (icon-size (format-icon-size icon-name)) + (target (string-append icons "/" icon-size "x" icon-size "/apps/google-" #$appname ".png"))) + (mkdir-p (dirname target)) + (rename-file icon target))) + (find-files share "product_logo_.*\\.png"))))) + (add-before 'install-wrapper 'install-exe + (lambda _ + (let* ((bin (string-append #$output "/bin")) + (exe (string-append bin "/google-" #$appname)) + (share (string-append #$output "/share")) + (chrome-target (string-append share "/google/" #$appname "/google-" #$appname))) + (mkdir-p bin) + (symlink chrome-target exe) + (wrap-program exe + '("CHROME_WRAPPER" = (#$appname))))))))) + (inputs + (list bzip2 + curl + flac + font-liberation + gdk-pixbuf + harfbuzz + libexif + libglvnd + libpng + libva + libxscrnsaver + opus + pciutils + pipewire + qtbase-5 + qtbase + snappy + util-linux + xdg-utils + wget)) + (synopsis "Freeware web browser") + (supported-systems '("x86_64-linux")) + (description "Google Chrome is a cross-platform web browser developed by Google.") + (home-page "https://www.google.com/chrome/") + (license (nonfree "https://www.google.com/intl/en/chrome/terms/"))))) + +(define-public google-chrome-stable + (make-google-chrome "stable" "121.0.6167.139" "1b08wqflp1j5yqpw2g9z2s239gs8bzqbxigcxk93aqwf5c21ijkh")) + +(define-public google-chrome-beta + (make-google-chrome "beta" "122.0.6261.6" "1b12bjcg99f6bjfhm311hdx9s1a4i13mcgxbvf1gpzq8989c1g96")) + +(define-public google-chrome-unstable + (make-google-chrome "unstable" "123.0.6262.5" "04mf9nysdn77371fxa3z0wbvy2k09vw49s3lrcynlwgiwrz89a3m")) diff --git a/nongnu/packages/chromium.scm b/nongnu/packages/chromium.scm index 56d0c6e..4467714 100644 --- a/nongnu/packages/chromium.scm +++ b/nongnu/packages/chromium.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2022 Pierre Neidhardt <mail@ambrevar.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages chromium) #:use-module ((guix licenses) #:prefix license:) @@ -41,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 @@ -60,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 0f59e72..234fafd 100644 --- a/nongnu/packages/clojure.scm +++ b/nongnu/packages/clojure.scm @@ -1,22 +1,8 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2020 Jelle Licht <jlicht@fsfe.org> ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> (define-module (nongnu packages clojure) #:use-module (gnu packages compression) @@ -26,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) @@ -35,15 +22,14 @@ (define leiningen-jar (package (name "leiningen-jar") - (version "2.9.8") + (version "2.10.0") (source (origin (method url-fetch) - (uri (string-append "https://github.com/technomancy/leiningen/releases/download/" - version "/leiningen-" version "-standalone.jar")) + (uri "https://codeberg.org/attachments/43cebda5-a7c2-405b-b641-5143a00051b5") (file-name "leiningen-standalone.jar") (sha256 (base32 - "13f4n15i0gsk9jq52gxivnsk32qjahmxgrddm54cf8ynw0a923ia")))) + "0d5vmpyp9ddxpj1s5c60fv2f5iimz1chbgfhchlaqxa0sfx9jwnj")))) (build-system trivial-build-system) (arguments `(#:modules ((guix build utils)) @@ -65,16 +51,16 @@ lets you focus on your code.") (package (inherit leiningen-jar) (name "leiningen") - (version "2.9.8") + (version "2.10.0") (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/technomancy/leiningen.git") + (url "https://codeberg.org/leiningen/leiningen.git") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 - "1i6pn8vzzhgnm9hmlb92z65l79nxcxa5zdsrgg5svq7vmbixgnhl")))) + "0xvniav6iy1yrbamvbg8i3dq8issiczv3rbig2yc3nm08d2q0rig")))) (build-system gnu-build-system) (arguments `(#:tests? #f @@ -101,7 +87,7 @@ lets you focus on your code.") (define-public clj-kondo (package (name "clj-kondo") - (version "2022.06.22") + (version "2023.10.20") (source (origin (method url-fetch/zipbomb) (uri (string-append @@ -109,23 +95,20 @@ lets you focus on your code.") version "/clj-kondo-" version "-linux-amd64.zip")) (sha256 (base32 - "057h48kf14pdnnyvgmbqkga1bspbr4ag22q2279s14c2c9bcinzz")))) + "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/compression.scm b/nongnu/packages/compression.scm index 60b1352..bb0ae88 100644 --- a/nongnu/packages/compression.scm +++ b/nongnu/packages/compression.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages compression) #:use-module (guix packages) @@ -25,14 +10,14 @@ (define-public unrar (package (name "unrar") - (version "6.0.2") + (version "6.2.2") (source (origin (method url-fetch) (uri (string-append "https://www.rarlab.com/rar/unrarsrc-" version ".tar.gz")) (sha256 (base32 - "1lzdsfb4d00silyk04lkvaklmxaiyqksyxx4h1krg77q6f1iigw1")))) + "1mbw20lh300r541dz4m84rvq7b542mnb70yc29afrjj6waknqza7")))) (build-system gnu-build-system) (arguments '(#:tests? #f ; No tests. diff --git a/nongnu/packages/coq.scm b/nongnu/packages/coq.scm index e95e00b..e8c9137 100644 --- a/nongnu/packages/coq.scm +++ b/nongnu/packages/coq.scm @@ -1,22 +1,7 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2021 Isaac Young <isyoung@pm.me> ;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages coq) #:use-module (ice-9 match) @@ -30,7 +15,7 @@ (define-public compcert (package (name "compcert") - (version "3.11") + (version "3.12") (source (origin (method git-fetch) (uri (git-reference @@ -39,11 +24,15 @@ (file-name (git-file-name name version)) (sha256 (base32 - "183b1fn7vhb9ykxax11x0bb2q6z5jnd874nzlxqnnm89j3ysr134")))) + "0pcrkz1as37iz2wcp8j226fjn672lrj0cip2s0wpkiy097qi0yc5")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases + (add-before 'configure 'allow-newer-coq-version + (lambda _ + (substitute* "configure" + (("8.15.2") "8.16.1")))) (replace 'configure (lambda* (#:key outputs #:allow-other-keys) (let ((system ,(match (or (%current-target-system) (%current-system)) diff --git a/nongnu/packages/databases.scm b/nongnu/packages/databases.scm new file mode 100644 index 0000000..96edcd9 --- /dev/null +++ b/nongnu/packages/databases.scm @@ -0,0 +1,45 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Krzysztof Baranowski <pharcosyle@gmail.com> + +(define-module (nongnu packages databases) + #:use-module (guix build-system copy) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (gnu packages compression) + #:use-module ((guix licenses) #:prefix license:)) + +(define-public datomic-cli-tools + (package + (name "datomic-cli-tools") + (version "1.0.91") + (source + (origin + (method url-fetch) + (uri (string-append "https://datomic-releases-1fc2183a.s3.amazonaws.com" + "/tools/datomic-cli/datomic-cli-" version ".zip")) + (sha256 + (base32 + "1xicmbsig8f1p5r9rxkhndi0f9l9w421zf49rbx44yc6v0db523b")))) + (build-system copy-build-system) + (arguments + `(#:install-plan + '(("." "bin" #:include-regexp ("^\\./datomic")) + ("README.txt" "share/doc/datomic/")) + #:phases + ,#~(modify-phases %standard-phases + (add-after 'install 'make-scripts-executable + (lambda _ + (for-each (lambda (f) (chmod f #o555)) + (find-files (string-append #$output "/bin")))))))) + (native-inputs + (list unzip)) + (home-page "https://docs.datomic.com/cloud/index.html") + (synopsis "Command-line tools for Datomic Cloud") + (description "View and Manage analytics, logs, and access control gateways +for a Datomic Cloud instance on AWS.") + (license license:asl2.0) + (properties + `((release-monitoring-url + . "https://docs.datomic.com/cloud/releases.html") + (upstream-name . "datomic-cli"))))) diff --git a/nongnu/packages/dotnet.scm b/nongnu/packages/dotnet.scm index bdf4111..a45a1ca 100644 --- a/nongnu/packages/dotnet.scm +++ b/nongnu/packages/dotnet.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021 Jelle Licht <jlicht@fsfe.org> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages dotnet) #:use-module (ice-9 match) @@ -82,20 +67,20 @@ various IDEs and plugins.") (license license:expat))) (define-public dotnet - (let ((dotnet-sdk-version "6.0.5")) + (let ((dotnet-sdk-version "6.0.9")) (package (name "dotnet") - (version "6.0.300") + (version "6.0.401") (source (origin (method url-fetch/tarbomb) (uri - (string-append "https://dotnetcli.azureedge.net/dotnet/Sdk/" - version "/dotnet-sdk-" - version "-linux-x64.tar.gz")) + (string-append "https://download.visualstudio.microsoft.com/download/pr/8159607a-e686-4ead-ac99-b4c97290a5fd/ec6070b1b2cc0651ebe57cf1bd411315/dotnet-sdk-" + version + "-linux-x64.tar.gz")) (sha256 (base32 - "01bhd7amirchcvimbyv07bzvs6i7jydcfwlq9vyfjbf3ln88qk0x")))) + "05yr64ffcaf48ripxzcv9nwlzp7r83cy9hz17dm5c0317lhksqch")))) (build-system binary-build-system) (arguments `(#:patchelf-plan @@ -295,7 +280,7 @@ building different types of applications.") ("mit-krb5" ,mit-krb5) ("openssl" ,openssl) ("zlib" ,zlib))) - (home-page "https://docs.microsoft.com/en-us/dotnet/") + (home-page "https://dotnet.microsoft.com/en-us/") (supported-systems '("x86_64-linux")) (synopsis "Binary build of the @code{.NET} SDK and runtime") (description "@code{.NET} is a cross-platform developer platform for diff --git a/nongnu/packages/dyalog.scm b/nongnu/packages/dyalog.scm new file mode 100644 index 0000000..7408b68 --- /dev/null +++ b/nongnu/packages/dyalog.scm @@ -0,0 +1,222 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022 B. Wilson <x@wilsonb.com> + +(define-module (nongnu packages dyalog) + #:use-module (gnu packages autotools) + #:use-module (gnu packages base) + #:use-module (gnu packages bootstrap) + #:use-module (gnu packages compression) + #:use-module (gnu packages cups) + #:use-module (gnu packages databases) + #:use-module (gnu packages elf) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages gcc) + #:use-module (gnu packages glib) + #:use-module (gnu packages gtk) + #:use-module (gnu packages icu4c) + #:use-module (gnu packages linux) + #:use-module (gnu packages nss) + #:use-module (gnu packages xorg) + #:use-module (gnu packages xml) + #:use-module (guix build utils) + #:use-module (guix build-system gnu) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module (guix records) + #:use-module (guix utils) + #:use-module (ice-9 regex) + #:use-module (ice-9 match) + #:use-module (nongnu packages dotnet) + #:use-module (nongnu packages ncurses) + #:use-module ((nonguix licenses) #:prefix license:)) + +(define-public dyalog-apl + (package + (name "dyalog-apl") + (version "18.2.45405") + (source + (origin + (method url-fetch) + (uri (string-append + "https://www.dyalog.com/uploads/php/download.dyalog.com/" + "download.php?file=" (version-major+minor version) + "/linux_64_" version "_unicode.x86_64.deb")) + (sha256 + (base32 "0qx6z4n9p0dfrk0wwh66s8z8m91cq4inwan8w03gqqis60cxc3x4")))) + (build-system gnu-build-system) + (outputs '("out" "fonts")) + (inputs (list alsa-lib + at-spi2-atk + at-spi2-core + atk + cups + dbus + dotnet-core-3.1 + fontconfig + expat + (list gcc "lib") + glib + glibc + gtk+-2 + icu4c + libx11 + libxcb + libxcomposite + libxcursor + libxdamage + libxext + libxfixes + libxi + libxrender + libxscrnsaver + libxtst + libxrandr + ncurses/tinfo-5 + nspr + nss + pango + unixodbc)) + (native-inputs (list binutils bzip2 patchelf tar)) + (arguments + `(#:modules (((guix build gremlin) #:select (file-runpath)) + ((guix elf) #:select (elf-segments parse-elf PT_INTERP)) + ((ice-9 binary-ports) #:select (get-bytevector-n)) + ((srfi srfi-1) #:select (last)) + ,@%gnu-build-system-modules) + #:tests? #f + #:phases + (modify-phases %standard-phases + (replace 'unpack + (lambda* (#:key inputs #:allow-other-keys) + (let ((source (assoc-ref inputs "source"))) + (invoke "ar" "x" source) + (invoke "tar" "-xzvf" "data.tar.gz")))) + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (lib (string-append out "/lib/dyalog")) + (in (string-append "opt/mdyalog/" + ,(version-major+minor version) + "/64/unicode/"))) + (substitute* (string-append in "mapl") + (("\"\\$\\{DYALOG\\}/dyalog\"" dyalog) + (string-append "exec -a dyalog " dyalog))) + (substitute* (string-append in "scriptbin/dyalogscript") + (("^INSTALLDIR=.*") (format #f "INSTALLDIR=\"~a\"~%" lib)))))) + (delete 'build) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (fonts (assoc-ref outputs "fonts")) + (lib (string-append out "/lib/dyalog")) + (bin (string-append out "/bin")) + (truetype (string-append fonts "/share/fonts/truetype")) + (dotnet (assoc-ref inputs "dotnet")) + (dotnet-root (string-append dotnet "/share/dotnet")) + (icu4c (assoc-ref inputs "icu4c")) + (icu4c-lib (string-append icu4c "/lib")) + (in (string-append "opt/mdyalog/" + ,(version-major+minor version) + "/64/unicode/"))) + (mkdir-p lib) + (copy-recursively in lib) + (delete-file-recursively (string-append lib "/fonts")) + + (mkdir-p truetype) + (install-file (string-append in "/fonts/Apl385.ttf") truetype) + (install-file (string-append in "/fonts/APL333.ttf") truetype) + + (mkdir-p bin) + (symlink (string-append lib "/mapl") + (string-append bin "/dyalog")) + (symlink (string-append lib "/scriptbin/dyalogscript") + (string-append bin "/dyalogscript")) + (wrap-program (string-append lib "/dyalog") + `("DOTNET_ROOT" = (,dotnet-root)) + `("LD_LIBRARY_PATH" ":" suffix (,icu4c-lib))) + #t))) + (add-after 'install 'patch-elf-files + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (lib (string-append out "/lib/dyalog")) + (glibc (assoc-ref inputs "glibc")) + (ld.so (string-append glibc ,(glibc-dynamic-linker))) + (rpath (pk (string-join + (cons* lib + (string-append lib "/lib") + (string-append (assoc-ref inputs "nss") + "/lib/nss") + (map (lambda (pkg) + (string-append (assoc-ref inputs pkg) + "/lib")) + '("alsa-lib" + "at-spi2-atk" + "at-spi2-core" + "atk" + "cups" + "dbus" + "expat" + "fontconfig-minimal" + "gcc" + "glib" + "glibc" + "gtk+" + "libx11" + "libxcb" + "libxcomposite" + "libxcursor" + "libxdamage" + "libxext" + "libxfixes" + "libxi" + "libxrender" + "libxscrnsaver" + "libxtst" + "libxrandr" + "ncurses-with-tinfo" + "nspr" + "pango" + "unixodbc"))) + ":"))) + (elf-file?* (lambda (file stat) (elf-file? file)))) + + (define* (file-segments file #:key type) + (let* ((bv (call-with-input-file file + (lambda (port) + (get-bytevector-n port 4096)) + #:binary #t #:guess-encoding #f)) + (segments (elf-segments (parse-elf bv))) + (select? (lambda (elf) + (eq? (elf-segment-type elf) type)))) + (if type + (filter select? segments) + segments))) + + (define* (set-runpath file #:optional (runpath rpath)) + (if (file-runpath file) + (begin + (format #f "Setting RUNPATH: ~a~&" file) + (invoke "patchelf" "--set-rpath" runpath file) + (invoke "patchelf" "--shrink-rpath" file)))) + + (define* (set-interpreter file #:optional (interp ld.so)) + (if (not (null? (file-segments file #:type PT_INTERP))) + (begin + (format #f "Setting interpreter: ~a~%" file) + (invoke "patchelf" "--set-interpreter" interp file)))) + + (define (patch-elf file) + (begin + (set-runpath file) + (set-interpreter file))) + + (for-each patch-elf (find-files out elf-file?*)) + #t)))))) + (home-page "https://www.dyalog.com/") + (synopsis "Dyalog APL interpreter and programming language environment") + (description "Dyalog APL is de facto the most widely deployed dialect of +APL in the wild. The interpreter boasts world-class performance benchmarks, +excellent tooling integration, and support for modern APL features.") + (license (license:nonfree + "https://www.dyalog.com/prices-and-licences.htm")))) diff --git a/nongnu/packages/editors.scm b/nongnu/packages/editors.scm new file mode 100644 index 0000000..d07bf1d --- /dev/null +++ b/nongnu/packages/editors.scm @@ -0,0 +1,97 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nongnu packages editors) + #:use-module (gnu packages base) + #:use-module (gnu packages gtk) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module ((guix licenses) :prefix license:) + #:use-module (nonguix build-system chromium-binary) + #:use-module (ice-9 match)) + +(define-public vscodium + (package + (name "vscodium") + (version "1.87.0.24060") + (source + (origin + (method url-fetch) + (uri + (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 "1lw7j8h0i96mg8si8dmi55ldbz5j63zb93qf1g59siavx84f1zpd")))) + (build-system chromium-binary-build-system) + (arguments + (list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files + #:substitutable? #f + #:wrapper-plan + #~'("opt/vscodium/codium") + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (mkdir-p "opt/vscodium") + (invoke "tar" "-xvf" #$source "-C" "opt/vscodium"))) + (add-before 'install-wrapper 'install-entrypoint + (lambda _ + (let* ((bin (string-append #$output "/bin"))) + (delete-file (string-append #$output "/environment-variables")) + (mkdir-p bin) + (symlink (string-append #$output "/opt/vscodium/codium") + (string-append bin "/codium"))))) + (add-after 'install-entrypoint 'install-resources + (lambda _ + (let* ((icons + (string-append #$output + "/share/icons/hicolor/512x512/apps")) + (icon.png + (string-append #$output + "/opt/vscodium/resources/app/" + "resources/linux/code.png")) + (apps (string-append #$output "/share/applications"))) + (mkdir-p icons) + (symlink icon.png + (string-append icons "/code.png")) + (mkdir-p apps) + (make-desktop-entry-file + (string-append apps "/" #$name ".desktop") + #:name "VSCodium" + #:generic-name "Text Editor" + #:exec (string-append #$output "/bin/codium") + #:icon "code" + #:type "Application" + #:actions '("new-empty-window") + #:keywords '("vscode") + #:categories '("TextEditor" "Development" + "IDE") + #:startup-notify #t + #:startup-w-m-class "Code" + #:comment + '(("en" "Code Editing. Redefined.") + (#f "Code Editing. Redefined.")))))) + (add-after 'install-wrapper 'wrap-where-patchelf-does-not-work + (lambda _ + (wrap-program (string-append #$output "/bin/codium") + `("LD_LIBRARY_PATH" ":" + prefix + (,(string-join + (list (string-append #$output "/opt/vscodium")) + ":"))))))))) + (supported-systems '("armhf-linux" "aarch64-linux" "x86_64-linux")) + (native-inputs + (list tar)) + (inputs + (list gdk-pixbuf)) + (home-page "https://vscodium.com/") + (synopsis "Community-driven, freely-licensed binary distribution of VSCode") + (description "VSCodium is a community-driven, freely-licensed binary +distribution of Microsoft’s editor VSCode.") + (license license:expat))) diff --git a/nongnu/packages/electron.scm b/nongnu/packages/electron.scm new file mode 100644 index 0000000..4a3ac0d --- /dev/null +++ b/nongnu/packages/electron.scm @@ -0,0 +1,83 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Pierre Neidhardt <mail@ambrevar.xyz> +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nongnu packages electron) + #:use-module (nonguix build-system chromium-binary) + #:use-module ((nonguix licenses) :prefix license:) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (gnu packages compression) + #:use-module (gnu packages gtk) + #:use-module (gnu packages video)) + +(define-public electron + (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")))) + (build-system chromium-binary-build-system) + (arguments + `(#:wrapper-plan + `("electron" + "libffmpeg.so" + "libGLESv2.so" + "libEGL.so") + #:install-plan + `(("." "share/electron/" #:include + ("electron" + "chrome-sandbox" + "chrome_100_percent.pak" + "chrome_200_percent.pak" + "chrome_crashpad_handler" + "icudtl.dat" + "resources.pak" + "v8_context_snapshot.bin" + "version" + "libffmpeg.so" + ;; electron seems to force-load these from its directory. + "libEGL.so" + "libGLESv2.so")) + ("resources" "share/electron/") + ("locales" "share/electron/")) + #:phases + (modify-phases %standard-phases + (add-before 'install-wrapper 'wrap-where-patchelf-does-not-work + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/share/electron/electron")) + (wrapper (string-append out "/bin/electron"))) + (mkdir-p (dirname wrapper)) + (make-wrapper wrapper bin + `("LD_LIBRARY_PATH" ":" + prefix + (,(string-join + (list + (string-append out "/share/electron")) + ":"))))) + #t))))) + (native-inputs `(("unzip" ,unzip))) + (inputs `(("gdk-pixbuf" ,gdk-pixbuf) + ("ffmpeg" ,ffmpeg))) + (home-page "https://www.electronjs.org/") + (synopsis "Cross platform desktop application shell") + (description "The Electron framework lets you write cross-platform desktop +applications using JavaScript, HTML and CSS. It is based on Node.js and +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"))))) diff --git a/nongnu/packages/emacs.scm b/nongnu/packages/emacs.scm index 3d3b3eb..ee1616c 100644 --- a/nongnu/packages/emacs.scm +++ b/nongnu/packages/emacs.scm @@ -1,27 +1,17 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2022 Fredrik Salomonsson <plattfot@posteo.net> +;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> (define-module (nongnu packages emacs) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages emacs-xyz) #:use-module (guix packages) #:use-module (guix build-system emacs) #:use-module (guix build-system copy) #:use-module (guix download) + #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (nonguix licenses) #:use-module (nongnu packages lisp)) @@ -131,3 +121,32 @@ Then you can start Allegro CL by entering @code{M-x fi:common-lisp}.") ;; While this may be a free license, this Emacs package is only useful ;; with the non-free Allegro CL. (license (nonfree "https://raw.githubusercontent.com/franzinc/eli/acl10.1express_Feb2022update2022-02-11/LICENSE"))))) + +(define-public emacs-org-roam-ui + (let ((commit "c75fc7506ee7f03840a9a93ed9336d7ed24551aa") + (revision "0")) + (package + (name "emacs-org-roam-ui") + (version (git-version "0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/org-roam/org-roam-ui") + (commit commit))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 "0mkcd2622np8s5qz2zvx7lch6dc586xqmn6914gi4ym7nvklf3zy")))) + (build-system emacs-build-system) + (arguments + (list #:include #~(cons "^out" %default-include))) + (propagated-inputs + (list emacs-org-roam emacs-simple-httpd emacs-websocket)) + (home-page "https://github.com/org-roam/org-roam-ui") + (synopsis "Web User Interface for Org Roam") + (description + "Org Roam UI is meant as a successor of Org Roam server that extends +functionality of Org Roam with a web application that runs side-by-side with +Emacs. It provides a web interface for navigating around notes created within +Org Roam.") + (license license:gpl3)))) diff --git a/nongnu/packages/emulators.scm b/nongnu/packages/emulators.scm index 0ec22c0..5dade3b 100644 --- a/nongnu/packages/emulators.scm +++ b/nongnu/packages/emulators.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages emulators) #:use-module (gnu packages backup) diff --git a/nongnu/packages/engineering.scm b/nongnu/packages/engineering.scm new file mode 100644 index 0000000..b05f6c0 --- /dev/null +++ b/nongnu/packages/engineering.scm @@ -0,0 +1,73 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022 Demis Balbach <db@minikn.xyz> +;;; Copyright © 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nongnu packages engineering) + #:use-module (gnu packages base) + #:use-module (gnu packages xorg) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module ((guix licenses) :prefix license:) + #:use-module (nonguix build-system chromium-binary) + #:use-module ((nonguix licenses) :prefix license:) + #:use-module (ice-9 match)) + +(define-public lycheeslicer + (package + (name "lycheeslicer") + (version "4.1.0") + (source + (origin + (method url-fetch) + (uri + (string-append + "https://mango-lychee.nyc3.cdn.digitaloceanspaces.com/LycheeSlicer-" version ".deb")) + (sha256 + (base32 "1rv3f8d1sb5irn4y8hjzk2m7c9irw71ls8p1mqambxg79q9ffj9m")))) + (supported-systems '("x86_64-linux")) + (build-system chromium-binary-build-system) + (arguments + (list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files + #:wrapper-plan + #~'("lib/LycheeSlicer/lycheeslicer") + #:phases + #~(modify-phases %standard-phases + (add-after 'binary-unpack 'setup-cwd + (lambda _ + ;; 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"))) + (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 + (lambda _ + (mkdir-p (string-append #$output "/bin")) + (symlink (string-append #$output "/lib/LycheeSlicer/lycheeslicer") + (string-append #$output "/bin/lycheeslicer")))) + (add-after 'install-wrapper 'wrap-where-patchelf-does-not-work + (lambda _ + (wrap-program (string-append #$output "/lib/LycheeSlicer/lycheeslicer") + `("LD_LIBRARY_PATH" ":" prefix + (,(string-join + (list + (string-append #$output "/lib/LycheeSlicer")) + ":"))))))))) + (inputs + (list libxscrnsaver)) + (home-page "https://mango3d.io") + (synopsis "Slicer for resin 3d printers of different manufacturers") + (description "A user-friendly slicing software for resin 3d printers. It +supports printers and resins of different manufacturers alongside +community-created profiles as well. It offers a paid- and free version with a +reduced feature set.") + (license (license:nonfree "https://mango3d.io/terms-and-conditions")))) diff --git a/nongnu/packages/firmware.scm b/nongnu/packages/firmware.scm new file mode 100644 index 0000000..218d375 --- /dev/null +++ b/nongnu/packages/firmware.scm @@ -0,0 +1,306 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022-2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com> +;;; Copyright © 2023 Krzysztof Baranowski <pharcosyle@gmail.com> + +(define-module (nongnu packages firmware) + #:use-module (gnu packages compression) + #:use-module (gnu packages cpio) + #:use-module (gnu packages efi) + #:use-module (gnu packages firmware) + #:use-module (guix build-system copy) + #:use-module (guix build-system gnu) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module ((guix licenses) #:prefix guix-license:) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (nonguix licenses) + #:use-module (nongnu packages compression)) + +;; fwupd with LVFS nonfree repositories enabled +(define-public fwupd-nonfree + (package + (inherit fwupd) + (name "fwupd-nonfree") + (arguments + (substitute-keyword-arguments (package-arguments fwupd) + ((#:configure-flags _ + #~'()) + #~(list "--wrap-mode=nofallback" + "-Dsystemd=false" + (string-append "-Defi_os_dir=" + #$gnu-efi "/lib") + "-Defi_binary=false" + (string-append "-Dudevdir=" + #$output "/lib/udev") + "--localstatedir=/var" + (string-append "--libexecdir=" + #$output "/libexec") + "-Dsupported_build=true")))))) + +(define-public ov5640-firmware + (let ((commit "6e8e591e17e207644dfe747e51026967bb1edab5") + (revision "1")) + (package + (name "ov5640-firmware") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://megous.com/git/linux-firmware") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "19xmkdvlkczc6zgigy8jdbgnp37i6pc03m2cm3gilvzg8m7v18ad")))) + (build-system copy-build-system) + (arguments + `(#:substitutable? #f + #:install-plan '(("ov5640_af.bin" "lib/firmware/")))) + (synopsis "Firmware for the OV5640 sensor in the PinePhone") + (description "This package provides binary firmware for the 0V5640 sensor +in the PinePhone.") + (home-page "https://megous.com/git/linux-firmware") + (license (nonfree (string-append "unknown")))))) + +(define-public rtl8723bt-firmware + (let ((commit "6e8e591e17e207644dfe747e51026967bb1edab5") + (revision "1")) + (package + (name "rtl8723bt-firmware") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://megous.com/git/linux-firmware") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "19xmkdvlkczc6zgigy8jdbgnp37i6pc03m2cm3gilvzg8m7v18ad")))) + (build-system copy-build-system) + (arguments + `(#:substitutable? #f + #:install-plan '(("rtl_bt/rtl8723cs_xx_fw.bin" "lib/firmware/")))) + (synopsis "Firmware for the RTL8723BS/CS") + (description "This package provides binary firmware for the RTL8723BS/CS +WiFi/Bluetooth chip in the PinePhone.") + (home-page "https://megous.com/git/linux-firmware") + (license (nonfree (string-append "unknown")))))) + +(define-public anx7688-firmware + (let ((commit "6e8e591e17e207644dfe747e51026967bb1edab5") + (revision "1")) + (package + (name "anx7688-firmware") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://megous.com/git/linux-firmware") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "19xmkdvlkczc6zgigy8jdbgnp37i6pc03m2cm3gilvzg8m7v18ad")))) + (build-system copy-build-system) + (arguments + `(#:substitutable? #f + #:install-plan '(("anx7688-fw.bin" "lib/firmware/")))) + (synopsis "Firmware for the ANX7688") + (description "This package provides binary firmware for the ANX7688 +HDMI to USB Type-C Bridge in the PinePhone.") + (home-page "https://megous.com/git/linux-firmware") + (license (nonfree (string-append "unknown")))))) + +(define-public ap6256-firmware + (let ((commit "056d5f6776e515f90bbbbead1be06857aaef17d0") + (revision "1")) + (package + (name "ap6256-firmware") + (version (git-version "2020.02" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url + "https://gitlab.manjaro.org/manjaro-arm/packages/community/ap6256-firmware") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1s52rpikw0gysph5lq7vr6b3nsxczg4ikgil9zdgmcknjnxk9kbv")))) + (build-system copy-build-system) + (arguments + `(#:substitutable? #f + #:install-plan '( ;Bluetooth firmware + ("BCM4345C5.hcd" "usr/lib/firmware/brcm/") + ;; WiFi firmware + ("fw_bcm43456c5_ag.bin" "usr/lib/firmware/brcm/") + ("brcmfmac43456-sdio.clm_blob" + "usr/lib/firmware/brcm/") + ("brcmfmac43456-sdio.AP6256.txt" + "usr/lib/firmware/brcm/") + ("brcmfmac43456-sdio.AP6256.txt" + "usr/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, +found in Pinebook Pro.") + (home-page "https://gitlab.manjaro.org/manjaro-arm/packages/community/ap6256-firmware") + (license (nonfree (string-append "unknown")))))) + +(define-public bluez-firmware + (package + (name "bluez-firmware") + (version "1.2") + (source (origin + (method url-fetch) + (uri (string-append "http://bluez.sf.net/download/" name "-" + version ".tar.gz")) + (sha256 + (base32 + "1v4yv6gvlvvwslpb0lj1nsp4r900zxpvxz2ab0sbvimbiw8rw4dn")))) + (build-system gnu-build-system) + (arguments + (list #:phases #~(modify-phases %standard-phases + (add-after 'install-license-files 'relocate-copyright + (lambda* _ + (install-file (string-append #$output + "/lib/firmware/BCM-LEGAL.txt") + (string-append #$output + "/share/doc/bluez-firmware-" + #$(package-version bluez-firmware) + "/BCM-LEGAL.txt"))))))) + (synopsis "Firmware for Broadcom BCM203x and STLC2300 Bluetooth chips") + (description "This package provides firmware for Broadcom BCM203x +and STLC2300 Bluetooth chips.") + (home-page "https://github.com/RPi-Distro/bluez-firmware") + (license (list guix-license:gpl2+ + (nonfree + "file:///share/doc/bluez-firmware-1.2/BCM-LEGAL.txt"))))) + +(define dump-file-chunk + #~(lambda (in out count start) + (use-modules (rnrs io ports)) + (call-with-output-file out + (lambda (out-port) + (put-bytevector + out-port + (call-with-input-file in + (lambda (in-port) + (seek in-port start SEEK_SET) + (get-bytevector-n in-port count)))))))) + +(define-public facetimehd-firmware + (package + (name "facetimehd-firmware") + (version "1.43") + (source + (origin + (method url-fetch) + (uri (string-append + "https://updates.cdn-apple.com/2019/cert" + "/041-88431-20191011-e7ee7d98-2878-4cd9-bc0a-d98b3a1e24b1" + "/OSXUpd10.11.5.dmg")) + (sha256 + (base32 + "009kfk1nrrialgp69c5smzgbmd5xpvk35xmqr2fzb15h6pp33ka6")))) + (build-system copy-build-system) + (arguments + (list + #:substitutable? #f + #:install-plan #~'(("firmware.bin" "/lib/firmware/facetimehd/")) + #:phases + (let ((dmg-subset-size 207733123) + (dmg-subset-offset 204909802) + (firmware-size 603715) + (firmware-offset 81920)) + #~(modify-phases %standard-phases + (add-before 'install 'extract + (lambda* (#:key inputs #:allow-other-keys) + (let ((firmware-in + (string-append + "System/Library/Extensions/AppleCameraInterface.kext" + "/Contents/MacOS/AppleCameraInterface"))) + (let ((dmg-subset "dmg-subset")) + (#$dump-file-chunk #$source + dmg-subset + #$dmg-subset-size + #$dmg-subset-offset) + (system + (string-join + (list (search-input-file inputs "/bin/xz") + "--decompress" + "--stdout" + dmg-subset + "|" + (search-input-file inputs "/bin/cpio") + "--format=odc" + "--extract" + "--make-directories" + (string-append "./" firmware-in))))) + (let ((firmware-out "firmware.bin.gz")) + (#$dump-file-chunk firmware-in + firmware-out + #$firmware-size + #$firmware-offset) + (invoke + (search-input-file inputs "/bin/gzip") + "--decompress" + (string-append firmware-out)))))))))) + (native-inputs + (list cpio gzip xz)) + (synopsis "Firmware for the FacetimeHD (Broadcom 1570) PCIe webcam") + (description "Firmware for the FacetimeHD webcam. See +@uref{https://github.com/patjak/facetimehd/wiki/Get-Started#firmware-extraction, +patjak's facetimehd wiki} for more information.") + (home-page "https://support.apple.com") + (license (nonfree "https://www.apple.com/legal")) + (supported-systems '("i686-linux" "x86_64-linux")))) + +(define-public facetimehd-calibration + (package + (name "facetimehd-calibration") + (version "5.1.5769") + (source + (origin + (method url-fetch/zipbomb) + (uri (string-append + "https://download.info.apple.com/Mac_OS_X" + "/031-30890-20150812-ea191174-4130-11e5-a125-930911ba098f" + "/bootcamp" version".zip")) + (sha256 + (base32 + "07jbh6d0djcvcgj5hhkkw7d6mvcl228yb8rp0a2qqw20ya72rpjf")))) + (build-system copy-build-system) + (arguments + (list + #:install-plan #~'(("." "/lib/firmware/facetimehd/" + #:include-regexp ("[0-9]{4}_01XX\\.dat"))) + #:phases + (let ((calibration-files + '(("1771_01XX.dat" 19040 1644880) + ("1871_01XX.dat" 19040 1606800) + ("1874_01XX.dat" 19040 1625840) + ("9112_01XX.dat" 33060 1663920)))) + #~(modify-phases %standard-phases + (add-before 'install 'extract + (lambda* (#:key inputs #:allow-other-keys) + (invoke (search-input-file inputs "/bin/unrar") + "x" + "BootCamp/Drivers/Apple/AppleCamera64.exe") + (for-each (lambda (spec) + (apply #$dump-file-chunk "AppleCamera.sys" spec)) + '#$calibration-files))))))) + (native-inputs + (list unrar unzip)) + (synopsis "Calibration files for the FacetimeHD (Broadcom 1570) PCIe webcam") + (description "Calibration files for the FacetimeHD webcam. These are +optional but make the colors look much better. See +@uref{https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files, +patjak's facetimehd wiki} for more information.") + (home-page "https://support.apple.com/kb/DL1837") + (license (nonfree "https://www.apple.com/legal")) + (supported-systems '("i686-linux" "x86_64-linux")))) diff --git a/nongnu/packages/fonts.scm b/nongnu/packages/fonts.scm index 7120fef..7b6eb75 100644 --- a/nongnu/packages/fonts.scm +++ b/nongnu/packages/fonts.scm @@ -1,26 +1,14 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021 Korytov Pavel <thexcloud@gmail.com> ;;; Copyright © 2021 Jonathan Brielmaier <jonathan.brielmaier@web.de> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 Krzysztof Baranowski <pharcosyle@gmail.com> (define-module (nongnu packages fonts) #:use-module (ice-9 string-fun) #:use-module (gnu packages compression) + #:use-module (guix deprecation) #:use-module (guix download) + #:use-module (guix gexp) #:use-module (guix packages) #:use-module (guix build-system font) #:use-module (guix build-system copy) @@ -90,13 +78,16 @@ font from the pack of Microsoft core fonts for the web.")) #:font-name "Comic Sans MS" #:hash "0ki0rljjc1pxkbsxg515fwx15yc95bdyaksa3pjd89nyxzzg6vcw")) -(define-public font-microsoft-couirer-new +(define-public font-microsoft-courier-new (mscorefont "courie32" #:version "2.82" #:font-name "Courier New" #:hash "111k3waxki9yyxpjwl2qrdkswvsd2dmvhbjmmrwyipam2s31sldv")) +(define-public font-microsoft-couirer-new + (deprecated-package "font-microsoft-couirer-new" font-microsoft-courier-new)) + (define-public font-microsoft-georgia (mscorefont "georgi32" @@ -174,3 +165,163 @@ Included fonts: ("font-microsoft-trebuchet-ms" ,font-microsoft-trebuchet-ms) ("font-microsoft-verdana" ,font-microsoft-verdana) ("font-microsoft-webdings" ,font-microsoft-webdings))))) + +(define* (apple-font #:key + font-name + archive-timestamp + version + file + hash + synopsis + description) + (package + (name (string-append "font-apple-" + (string-replace-substring + (string-downcase font-name) + " " "-"))) + (version version) + (source + (origin + (method url-fetch) + (uri (string-append + ;; Download link is unversioned, use a stable snapshot. + "https://web.archive.org/web/" archive-timestamp "/" + "https://devimages-cdn.apple.com/design/resources/download/" + file ".dmg")) + (sha256 + (base32 hash)))) + (build-system font-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda* (#:key source inputs #:allow-other-keys) + (let ((7z-exe (search-input-file inputs "/bin/7z"))) + (invoke 7z-exe "x" source) + (invoke 7z-exe "x" (car (find-files "." "\\.pkg$"))) + (invoke 7z-exe "x" "Payload~"))))))) + (native-inputs (list p7zip)) + (home-page "https://developer.apple.com/fonts") + (synopsis (string-append font-name " typeface by Apple.")) + (description description) + (license + (nonfree + "https://www.apple.com" + "Specific license information is embedded in the font files.")))) + +(define-public font-apple-sf-pro + (apple-font + #:font-name "SF Pro" + #:archive-timestamp "20230710073336" + #:file "SF-Pro" + #:version "19.0d6e1" + #:hash "19qa6fs6x5614sqw9a6idlizzsssw8256crz1ps2p2n6gwp2fvaq" + #:description "This neutral, flexible, sans-serif typeface is the system +font for iOS, iPad OS, macOS and tvOS. SF Pro features nine weights, variable +optical sizes for optimal legibility, four widths, and includes a rounded +variant. SF Pro supports over 150 languages across Latin, Greek, and Cyrillic +scripts.")) + +(define-public font-apple-sf-compact + (apple-font + #:font-name "SF Compact" + #:archive-timestamp "20230710073418" + #:file "SF-Compact" + #:version "19.0d6e1" + #:hash "02127drlqvwscq6vaphmvsp85cn8j4zfhi0kb9a3fzc0z8b95hdq" + #:description "Sharing many features with SF Pro, SF Compact features an +efficient, compact design that is optimized for small sizes and narrow columns. +SF Compact is the system font for watchOS and includes a rounded variant.")) + +(define-public font-apple-sf-mono + (apple-font + #:font-name "SF Mono" + #:archive-timestamp "20230710073457" + #:file "SF-Mono" + #:version "19.0d6e1" + #:hash "0vjdpl3xyxl2rmfrnjsxpxdizpdr4canqa1nm63s5d3djs01iad6" + #:description "This monospaced variant of San Francisco enables alignment +between rows and columns of text, and is used in coding environments like Xcode. +SF Mono features six weights and supports Latin, Greek, and Cyrillic scripts.")) + +(define-public font-apple-sf-arabic + (apple-font + #:font-name "SF Arabic" + #:archive-timestamp "20230710073501" + #:file "SF-Arabic" + #:version "19.0d6e1" + #:hash "0phl3wi0lq7djcg8nqg1ml1f73bsfjzmvd2n8hkl6dbprmw614jp" + #:description "A contemporary interpretation of the Naskh style with a +rational and flexible design, this extension of San Francisco is the Arabic +system font on Apple platforms. Like San Francisco, SF Arabic features nine +weights, variable optical sizes that automatically adjust spacing and contrast +based on the point size, and includes a rounded variant.")) + +(define-public font-apple-new-york + (apple-font + #:font-name "New York" + #:archive-timestamp "20230710073506" + #:file "NY" + #:version "17.0d5e1" + #:hash "1hgxyizpgam7y1xh36fsypd3a1nn417wdnnfk1zahq9vhxrrds2w" + #:description "A companion to San Francisco, this serif typeface is based on +essential aspects of historical type styles. New York features six weights, +supports Latin, Greek and Cyrillic scripts, and features variable optical sizes +allowing it to perform as a traditional reading face at small sizes and a +graphic display face at larger sizes.")) + +;; At the time of this writing, `sf-symbols' is just `sf-pro' and `sf-compact' +;; together plus one extra file, SFSymbolsFallback.otf. This package is +;; probably of limited use on non-macOS but we'll include it for completeness +;; and in case the situation changes in the future. +(define-public font-apple-sf-symbols + (apple-font + #:font-name "SF Symbols" + #:archive-timestamp "20230710073513" + #:file "SF-Symbols-5" + #:version "5" + #:hash "1bwlq1nf75bv0x36qdk371r2pd5slf3jlv50wgsl0kpj1dds22sf" + #:description "With over 5,000 symbols, SF Symbols is a library of +iconography designed to integrate seamlessly with San Francisco, the system +font for Apple platforms. Symbols come in nine weights and three scales, and +automatically align with text labels.")) + +(define-public font-apple-color-emoji + (package + (name "font-apple-color-emoji") + (version "18.0d4e1") + (source + (origin + (method url-fetch) + (uri (string-append + "https://github.com/pharcosyle/apple-fonts" + "/releases/download" + "/Apple-Color-Emoji-" version "/Apple.Color.Emoji.ttc")) + (sha256 + (base32 "06i1ady7b2g1i2hl3f8yxn64g2i82c2ni9vdw25gpdqdj28vyqw3")))) + (build-system font-build-system) + (home-page "https://www.apple.com") + (synopsis "Apple Color Emoji typeface by Apple.") + (description "Color and black-and-white Apple emoji fonts.") + (license (nonfree "https://www.apple.com")))) + +(define-public font-apple-symbols + (package + (name "font-apple-symbols") + (version "17.0d1e2") + (source + (origin + (method url-fetch) + (uri (string-append + "https://github.com/pharcosyle/apple-fonts" + "/releases/download" + "/Apple-Symbols-" version "/Apple.Symbols.ttf")) + (sha256 + (base32 "14ivhsiszmy1ql69kpr1f33n07qgpaj7w43w2p5qnmlwcrvs3ccr")))) + (build-system font-build-system) + (home-page "https://www.apple.com") + (synopsis "Apple Symbols typeface by Apple.") + (description "An Apple system font intended to provide coverage for +characters defined as symbols in the Unicode Standard.") + (license (nonfree "https://www.apple.com")))) diff --git a/nongnu/packages/game-client.scm b/nongnu/packages/game-client.scm new file mode 100644 index 0000000..03fd21a --- /dev/null +++ b/nongnu/packages/game-client.scm @@ -0,0 +1,343 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2020 pkill-9 +;;; Copyright © 2020, 2021 ison <ison@airmail.cc> +;;; 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 © 2023 Giacomo Leidi <goodoldpaul@autistici.org> +;;; Copyright © 2023 Elijah Malaby +;;; Copyright © 2023 Timo Wilken <guix@twilken.net> + +(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) + #:use-module (gnu packages base) + #: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) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gawk) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gl) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) + #:use-module (gnu packages graphics) + #:use-module (gnu packages gtk) + #:use-module (gnu packages libbsd) + #:use-module (gnu packages libusb) + #:use-module (gnu packages linux) + #:use-module (gnu packages llvm) + #:use-module (gnu packages logging) + #:use-module (gnu packages lsof) + #: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-web) + #:use-module (gnu packages python-xyz) + #: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.78") + (source + (origin + (method url-fetch) + (uri (string-append "http://repo.steampowered.com/steam/archive/precise/steam_" + version ".tar.gz")) + (sha256 + (base32 + "0390qy8vy7sx35hxl51yrbk6mvdz1vvpy96v07qva4bjbmsmjhhh")) + (file-name (string-append name "-" version ".tar.gz")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; There are no tests. + #:validate-runpath? #f ; Looks for bin/steam which doesn't exist. + #:make-flags + (list "PREFIX=" (string-append "DESTDIR=" (assoc-ref %outputs "out"))) + #:phases + (modify-phases %standard-phases + (delete 'configure) + ;; Patch Makefile so it creates links to the store rather than /lib. + (add-after 'unpack 'patch-makefile + (lambda _ + (substitute* "Makefile" + (("-fns ") + "-fns $(DESTDIR)")))) + (delete 'patch-dot-desktop-files) + (add-after 'unpack 'patch-startscript + (lambda _ + (substitute* "bin_steam.sh" + (("/usr") (assoc-ref %outputs "out"))))) + (add-after 'patch-dot-desktop-files 'patch-desktop-file + (lambda _ + (let ((path (string-append (assoc-ref %outputs "out") + "/share/applications/"))) + (substitute* (string-append path "steam.desktop") + (("Exec=.*/steam") "Exec=steam")) + (copy-file (string-append path "steam.desktop") + (string-append path "steam-asound32.desktop")) + (substitute* (string-append path "steam-asound32.desktop") + (("Exec=steam %U") "Exec=steam %U -- --asound32") + (("Name=Steam") "Name=Steam (32-bit ALSA)"))))) + ;; Steamdeps installs missing packages, which doesn't work with Guix. + (add-after 'install-binaries 'post-install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref %outputs "out"))) + (delete-file (string-append out "/lib/steam/bin_steamdeps.py")) + (delete-file (string-append out "/bin/steamdeps")))))))) + (home-page "https://store.steampowered.com") + (synopsis "Digital distribution platform for managing and playing games") + (description "Steam is a digital software distribution platform created by Valve.") + (license (license:nonfree "file:///share/doc/steam/steam_subscriber_agreement.txt")))) + +(define steam-client-libs + `(("at-spi2-core" ,at-spi2-core) ; Required (often) for SteamVR interface. + ("bash" ,bash) ; Required for steam startup. + ("coreutils" ,coreutils) + ("diffutils" ,diffutils) + ("dbus-glib" ,dbus-glib) ; Required for steam browser. + ("elfutils" ,elfutils) ; Required for capturing library dependencies in pv. + ("eudev" ,eudev) ; Required for steamwebhelper/heavy runtime. + ("fontconfig" ,fontconfig) ; Required for steam client. + ("file" ,file) ; Used for steam installation. + ("find" ,findutils) ; Required at least for some logging. + ("freetype" ,freetype) ; Required for steam login. + ("gawk" ,gawk) + ("gdk-pixbuf" ,gdk-pixbuf) ; Required for steam tray icon. + ("gcc:lib" ,gcc "lib") ; Required for steam startup. + ("grep" ,grep) + ("libbsd" ,libbsd) + ("libcap" ,libcap) ; Required for SteamVR, but needs pkexec too. + ("libusb" ,libusb) ; Required for SteamVR. + ("libva" ,libva) ; Required for hardware video encoding/decoding. + ("libvdpau" ,libvdpau) ; Required for hardware video encoding/decoding. + ("libvdpau-va-gl" ,libvdpau-va-gl) ; Additional VDPAU support. + ("llvm" ,llvm-for-mesa) ; Required for mesa. + ("lsof" ,lsof) ; Required for some friend's list actions. + ("mesa" ,mesa) ; Required for steam startup. + ("nss-certs" ,nss-certs) ; Required for steam login. + ("pciutils" ,pciutils) ; Tries to run lspci at steam startup. + ("procps" ,procps) + ("sed" ,sed) + ("tar" ,tar) + ("usbutils" ,usbutils) ; Required for SteamVR. + ("util-linux" ,util-linux) ; Required for steam login. + ("wayland" ,wayland) ; Required for mesa vulkan (e.g. libvulkan_radeon). + ("xdg-user-dirs" ,xdg-user-dirs) ; Suppress warning of missing xdg-user-dir. + ("flatpak-xdg-utils" ,flatpak-xdg-utils) + ("xz" ,xz) + ("zenity" ,zenity))) ; Required for progress dialogs. + +(define steam-gameruntime-libs + `(("alsa-lib" ,alsa-lib) ; Required for audio in most games. + ("alsa-plugins:pulseaudio" ,alsa-plugins "pulseaudio") ; Required for audio in most games. + ("font-dejavu" ,font-dejavu) + ("font-liberation" ,font-liberation) + ("imgui" ,imgui-1.86) ; Required for MangoHud. + ("mangohud" ,mangohud) + ("openal" ,openal) ; Prevents corrupt audio in Crypt of the Necrodancer. + ("pulseaudio" ,pulseaudio) ; Prevents corrupt audio in Sven Coop. + ("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 + ,@steam-gameruntime-libs + ,@fhs-min-libs) + #:name "fhs-union-64") + (fhs-union `(,@steam-client-libs + ,@steam-gameruntime-libs + ,@fhs-min-libs) + #:name "fhs-union-32" + #:system "i686-linux")))) + +(define steam-ld.so.cache + (ld.so.conf->ld.so.cache steam-ld.so.conf)) + +(define-public steam-container + (nonguix-container + (name "steam") + (wrap-package steam-client) + (run "/bin/steam") + (ld.so.conf steam-ld.so.conf) + (ld.so.cache steam-ld.so.cache) + (union64 + (fhs-union `(,@steam-client-libs + ,@steam-gameruntime-libs + ,@fhs-min-libs) + #:name "fhs-union-64")) + (union32 + (fhs-union `(,@steam-client-libs + ,@steam-gameruntime-libs + ,@fhs-min-libs) + #:name "fhs-union-32" + #:system "i686-linux")) + (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 +all games will be installed."))) + +(define-public steam-nvidia-container + (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") + (version "0.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/cloudishBenne/protonup-ng") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0yd2mhhqxzarqxk85zf42s931jzc94f1cssn1hblsqghr79laa45")))) + (build-system python-build-system) + (arguments + (list #:tests? #f)) ; there are no tests + (inputs + (list python-configparser python-requests)) + (home-page "https://github.com/cloudishBenne/protonup-ng") + (synopsis "Manage Proton-GE Installations") + (description "ProtonUp-ng is a CLI program and API to automate the installation +and update of GloriousEggroll's Proton-GE.") + (license license:gpl3))) diff --git a/nongnu/packages/game-development.scm b/nongnu/packages/game-development.scm index 16cd699..566cea2 100644 --- a/nongnu/packages/game-development.scm +++ b/nongnu/packages/game-development.scm @@ -1,21 +1,6 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2022 Attila Lendvai <attila@lendvai.name> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages game-development) #:use-module (ice-9 match) diff --git a/nongnu/packages/gog.scm b/nongnu/packages/gog.scm index 6c2f023..f6deffb 100644 --- a/nongnu/packages/gog.scm +++ b/nongnu/packages/gog.scm @@ -1,18 +1,7 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2021-2022 Timotej Lazar <timotej.lazar@araneo.si> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. +;;; Copyright © 2023 Eidvilas Markevičius <markeviciuseidvilas@gmail.com> (define-module (nongnu packages gog) #:use-module (gnu packages boost) @@ -33,7 +22,7 @@ (define-public lgogdownloader (package (name "lgogdownloader") - (version "3.9") + (version "3.12") (source (origin (method git-fetch) @@ -42,7 +31,7 @@ (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1hbwgwdm1vn7lkz366q9q8f44sk1pvhgjffndwx49lh3md66xps2")))) + (base32 "0kmz5zsbci7iilbqdvql9c1vk2b1q2flsdr6psnkln07xp664di2")))) (build-system qt-build-system) (arguments `(#:configure-flags '("-DUSE_QT_GUI=ON") diff --git a/nongnu/packages/k8s.scm b/nongnu/packages/k8s.scm new file mode 100644 index 0000000..6a8a216 --- /dev/null +++ b/nongnu/packages/k8s.scm @@ -0,0 +1,217 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nongnu packages k8s) + #:use-module (guix build-system copy) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module ((guix licenses) :prefix license:)) + +(define-public k9s + (package + (name "k9s") + (version "0.27.4") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/derailed/k9s/releases/download/v" + version "/k9s_Linux_amd64.tar.gz")) + (sha256 + (base32 + "14j37kl8pbmbid4np48cfv5k8vic6ngnc4pjh01qr6szplg861z5")))) + (build-system copy-build-system) + (arguments + (list + #:substitutable? #f + #:install-plan + #~'(("k9s" "bin/")) + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (invoke "tar" "-xvf" #$source)))))) + (home-page "https://k9scli.io") + (supported-systems '("x86_64-linux")) + (synopsis "Kubernetes CLI To Manage Your Clusters In Style") + (description + "K9s provides a terminal UI to interact with your Kubernetes clusters. The +aim of this project is to make it easier to navigate, observe and manage your +applications in the wild. K9s continually watches Kubernetes for changes and +offers subsequent commands to interact with your observed resources.") + (license license:asl2.0))) + +(define-public katenary + (package + (name "katenary") + (version "2.0.0-beta2") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/metal3d/katenary/releases/download/" + version "/katenary-linux-amd64")) + (sha256 + (base32 + "0vk5c82bf5aasrgz2b7qdjlbmlcjha0r3swmrbs9y5mms18y7m3i")))) + (build-system copy-build-system) + (arguments + (list + #:substitutable? #f + #:install-plan + #~'(("katenary" "bin/")) + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (copy-file #$source "./katenary") + (chmod "katenary" #o644))) + (add-before 'install 'chmod + (lambda _ + (chmod "katenary" #o555)))))) + (home-page "https://github.com/metal3d/katenary") + (supported-systems '("x86_64-linux")) + (synopsis "Convert docker-compose to a configurable helm chart") + (description + "Katenary is a tool to help to transform docker-compose files to a working +Helm Chart for Kubernetes.") + (license license:expat))) + +(define-public kubectl + (package + (name "kubectl") + (version "1.28.1") + (source (origin + (method url-fetch) + (uri (string-append + "https://dl.k8s.io/release/v" version "/bin/linux/amd64/kubectl")) + (sha256 + (base32 + "1qbl4a2xv795apvbwahdb9kzcm2wys0am1c72as3iavgs3wxd9z7")))) + (build-system copy-build-system) + (arguments + (list + #:substitutable? #f + #:install-plan + #~'(("kubectl" "bin/")) + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (copy-file #$source "./kubectl") + (chmod "kubectl" #o644))) + (add-before 'install 'chmod + (lambda _ + (chmod "kubectl" #o555)))))) + (home-page "https://github.com/kubernetes/kubectl") + (supported-systems '("x86_64-linux")) + (synopsis "Kubernetes command line tool") + (description + "kubectl allows you to run commands against Kubernetes clusters. You can +use kubectl to deploy applications, inspect and manage cluster resources, and +view logs.") + (license license:asl2.0))) + +(define-public kompose + (package + (name "kompose") + (version "1.30.0") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/kubernetes/kompose/releases/download/v" + version "/kompose-linux-amd64")) + (sha256 + (base32 + "0sy3ci7s2dkjigasyv01nm1vg30wwhmdc0cmglzb23ws8bfrfjlh")))) + (build-system copy-build-system) + (arguments + (list + #:substitutable? #f + #:install-plan + #~'(("kompose" "bin/")) + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (copy-file #$source "./kompose"))) + (add-before 'install 'chmod + (lambda _ + (chmod "kompose" #o555)))))) + (home-page "https://kompose.io") + (supported-systems '("x86_64-linux")) + (synopsis "Go from Docker Compose to Kubernetes") + (description + "Kompose is a conversion tool for Docker Compose to container orchestrators +such as Kubernetes (or OpenShift).") + (license license:expat))) + +(define-public helm-kubernetes + (package + (name "helm-kubernetes") + (version "3.12.3") + (source (origin + (method url-fetch) + (uri (string-append + "https://get.helm.sh/helm-v" version "-linux-amd64.tar.gz")) + (sha256 + (base32 + "1d99c506shnz5cr9xhkrla5r82nan7v3hz631jqflicd376i68qv")))) + (build-system copy-build-system) + (arguments + (list + #:substitutable? #f + #:install-plan + #~'(("linux-amd64/helm" "bin/")) + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (invoke "tar" "-xvf" #$source))) + (add-before 'install 'chmod + (lambda _ + (chmod "linux-amd64/helm" #o555)))))) + (home-page "https://helm.sh") + (supported-systems '("x86_64-linux")) + (synopsis "The package manager for Kubernetes") + (description + "Helm helps you manage Kubernetes applications - Helm Charts help you +define, install, and upgrade Kubernetes applications.") + (license license:asl2.0))) + +(define-public kind + (package + (name "kind") + (version "0.20.0") + (source (origin + (method url-fetch) + (uri (string-append "https://kind.sigs.k8s.io/dl/v" version "/kind-linux-amd64")) + (sha256 + (base32 + "1v9x953a5n0l3kz78wm29yh11vz56nmlvhi7xzcjscyksq9p4fji")))) + (build-system copy-build-system) + (arguments + (list + #:substitutable? #f + #:install-plan + #~'(("kind" "bin/")) + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (copy-file #$source "./kind") + (chmod "kind" #o644))) + (add-before 'install 'chmod + (lambda _ + (chmod "kind" #o555)))))) + (home-page "https://kind.sigs.k8s.io") + (synopsis "Tool for running local Kubernetes clusters using Docker containers") + (description "kind (Kubernetes in Docker) is designed for creating and managing +local Kubernetes clusters using Docker containers as nodes. It provides +a fast and straightforward way to run Kubernetes for development and +testing tasks. + +Supporting multi-node cluster configurations, kind is ideal for testing +more complex, real-world scenarios without demanding extensive resources. +It’s a lightweight, portable, and configurable solution useful in +continuous integration (CI) workflows.") + (license license:asl2.0))) diff --git a/nongnu/packages/linux.scm b/nongnu/packages/linux.scm index f5f396e..51bbfb0 100644 --- a/nongnu/packages/linux.scm +++ b/nongnu/packages/linux.scm @@ -1,9 +1,13 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org> ;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si> ;;; Copyright © 2020, 2021 James Smith <jsubuntuxp@disroot.org> -;;; Copyright © 2020, 2021, 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2020-2024 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de> +;;; Copyright © 2020, 2021, 2022 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2020, 2021, 2022 Zhu Zihao <all_but_last@163.com> ;;; Copyright © 2021 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re> ;;; Copyright © 2021 Risto Stevcev <me@risto.codes> @@ -12,29 +16,28 @@ ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com> ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com> ;;; Copyright © 2022 Remco van 't Veer <remco@remworks.net> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. +;;; Copyright © 2022 Simen Endsjø <simendsjo@gmail.com> +;;; Copyright © 2022 Leo Famulari <leo@famulari.name> +;;; Copyright © 2023 Krzysztof Baranowski <pharcosyle@gmail.com> +;;; Copyright © 2023 Morgan Smith <Morgan.J.Smith@outlook.com> +;;; Copyright © 2023 Jelle Licht <jlicht@fsfe.org> +;;; Copyright © 2023 Adam Kandur <rndd@tuta.io> +;;; Copyright © 2023 Hilton Chain <hako@ultrarare.space> +;;; Copyright © 2023 Ada Stevenson <adanskana@gmail.com> +;;; Copyright © 2023 Tomas Volf <~@wolfsden.cz> +;;; Copyright © 2023 PRESFIL <presfil@protonmail.com> (define-module (nongnu packages linux) #:use-module (gnu packages) #:use-module (gnu packages base) #:use-module (gnu packages compression) + #:use-module (gnu packages cpio) #:use-module (gnu packages linux) #:use-module (guix licenses) #:use-module (guix packages) #:use-module (guix utils) #:use-module (guix download) + #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix build-system copy) #:use-module (guix build-system gnu) @@ -42,92 +45,294 @@ #:use-module (guix build-system trivial) #:use-module (ice-9 match) #:use-module (nonguix licenses) + #:use-module (srfi srfi-1) #:export (corrupt-linux)) -(define (linux-urls version) - "Return a list of URLS for Linux VERSION." - (list (string-append "https://www.kernel.org/pub/linux/kernel/v" - (version-major version) ".x/linux-" version ".tar.xz"))) +(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")) -(define* (corrupt-linux freedo version hash #:key (name "linux")) - (package - (inherit freedo) - (name name) - (version version) - (source (origin - (method url-fetch) - (uri (linux-urls version)) - (sha256 (base32 hash)))) - (home-page "https://www.kernel.org/") - (synopsis "Linux kernel with nonfree binary blobs included") - (description - "The unmodified Linux kernel, including nonfree blobs, for running Guix -System on hardware which requires nonfree software to function."))) +;;; 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 (nonguix-extra-linux-options freedo)) + (defconfig #f)) + + ;; TODO: This very directly depends on guix internals. + ;; Throw it all out when we manage kernel hashes. + (define gexp-inputs (@@ (guix gexp) gexp-inputs)) + + (define extract-gexp-inputs + (compose gexp-inputs force origin-uri)) + + (define (find-source-hash sources url) + (let ((versioned-origin + (find (lambda (source) + (let ((uri (origin-uri source))) + (and (string? uri) (string=? uri url)))) sources))) + (if versioned-origin + (origin-hash versioned-origin) + #f))) + + (let* ((version (package-version freedo)) + (url (linux-url version)) + (pristine-source (package-source freedo)) + (inputs (map gexp-input-thing (extract-gexp-inputs pristine-source))) + (sources (filter origin? inputs)) + (hash (find-source-hash sources url))) + (package + (inherit + (customize-linux + #:name name + #:linux freedo + #:source (origin + (method url-fetch) + (uri url) + (hash hash)) + #:configs configs + #:defconfig defconfig)) + (version version) + (home-page "https://www.kernel.org/") + (synopsis "Linux kernel with nonfree binary blobs included") + (description + "The unmodified Linux kernel, including nonfree blobs, for running Guix System +on hardware which requires nonfree software to function.")))) -(define-public linux-5.18 - (corrupt-linux linux-libre-5.18 "5.18.16" - "1khi1npn8d8jimwdy8bf3r7l780mxdmvk5azdv419pk33qjqdxgi")) +(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.1 + (corrupt-linux linux-libre-6.1)) (define-public linux-5.15 - (corrupt-linux linux-libre-5.15 "5.15.59" - "1jxw6fnc7yaw7r6193wy6l8wdlpy3frw48drnc3dnh3k0m1cdpg6")) + (corrupt-linux linux-libre-5.15)) (define-public linux-5.10 - (corrupt-linux linux-libre-5.10 "5.10.135" - "0i1kahv739qpyyml7d7sx306nv7gp55i5d97vlb0fryfx4dsd6g4")) + (corrupt-linux linux-libre-5.10)) (define-public linux-5.4 - (corrupt-linux linux-libre-5.4 "5.4.209" - "1kdnz99k7zspzaxqaxahbf6hncigy4cvjlb79jsy7a95qxxr31qf")) + (corrupt-linux linux-libre-5.4)) (define-public linux-4.19 - (corrupt-linux linux-libre-4.19 "4.19.254" - "1rd40wmdaymbly2zvf60mjqsflkd4n1y232qz0ixn1rfl28yz62i")) + (corrupt-linux linux-libre-4.19)) -(define-public linux-4.14 - (corrupt-linux linux-libre-4.14 "4.14.290" - "0zyxb99a7fa2l85vnzmvg2nry99clj20d4j38piqm921iqxak2j4")) +(define-public linux linux-6.6) +;; linux-lts points to the *newest* released long-term support version. +(define-public linux-lts linux-6.1) -(define-public linux-4.9 - (corrupt-linux linux-libre-4.9 "4.9.325" - "04msx0x0d8v93zjr3jj0qqkgg7m4hb7rj6hk5vzrzasmgbjmb3dl")) +(define-public linux-arm64-generic-5.10 + (corrupt-linux linux-libre-arm64-generic-5.10 #:name "linux-arm64-generic")) -(define-public linux linux-5.18) -;; linux-lts points to the *newest* released long-term support version. -(define-public linux-lts linux-5.15) +(define-public linux-arm64-generic-5.4 + (corrupt-linux linux-libre-arm64-generic-5.4 #:name "linux-arm64-generic")) + +(define-public linux-arm64-generic + (corrupt-linux linux-libre-arm64-generic #:name "linux-arm64-generic")) + + +;;; +;;; Linux-XanMod +;;; -(define-public linux-arm64-generic-5.18 - (corrupt-linux linux-libre-arm64-generic "5.18.16" - "1khi1npn8d8jimwdy8bf3r7l780mxdmvk5azdv419pk33qjqdxgi" - #:name "linux-arm64-generic")) +(define* (make-linux-xanmod-source version xanmod-revision + #:key xanmod-branch kernel-hash xanmod-hash) -(define-public linux-arm64-generic-5.15 - (corrupt-linux linux-libre-arm64-generic "5.15.59" - "1jxw6fnc7yaw7r6193wy6l8wdlpy3frw48drnc3dnh3k0m1cdpg6" - #:name "linux-arm64-generic")) + (define %upstream-linux-source + (@@ (gnu packages linux) %upstream-linux-source)) -(define-public linux-arm64-generic linux-arm64-generic-5.18) + (define kernel-source + (%upstream-linux-source (version-major+minor version) kernel-hash)) -(define-public linux-arm64-generic-lts linux-arm64-generic-5.15) + (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 + (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")) + + (define %default-extra-linux-options + (@@ (gnu packages linux) %default-extra-linux-options)) + + (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."))) + +;; Linux-XanMod sources +(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 + #:xanmod-branch "main" + #:kernel-hash (base32 "0s8hbcsg7fdvspqam8kzcxygjsznr4zfi60nqgc81l3n4m518cgg") + #:xanmod-hash (base32 "0hv76dj9z17w6zcy25v1ndlmdw593wlbmnw5x903vidb3c6a1dfi"))) + +(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 + #:xanmod-branch "lts" + #:kernel-hash (base32 "1l2nisx9lf2vdgkq910n5ldbi8z25ky1zvl67zgwg2nxcdna09nr") + #:xanmod-hash (base32 "1q33bd4a65l46333l2m7vjn46b0xhdbz508bq7q0bphbmy0bf35m"))) + +;; Linux-XanMod packages +(define-public linux-xanmod + (make-linux-xanmod linux-xanmod-version + linux-xanmod-revision + linux-xanmod-source)) + +(define-public linux-xanmod-lts + (make-linux-xanmod linux-xanmod-lts-version + linux-xanmod-lts-revision + linux-xanmod-lts-source)) + + +;;; +;;; Firmwares +;;; (define-public linux-firmware (package (name "linux-firmware") - (version "20220509") + (version "20240115") (source (origin (method url-fetch) - (uri (string-append "https://git.kernel.org/pub/scm/linux/kernel" - "/git/firmware/linux-firmware.git/snapshot/" - "linux-firmware-" version ".tar.gz")) + (uri (string-append "mirror://kernel.org/linux/kernel/firmware/" + "linux-firmware-" version ".tar.xz")) (sha256 (base32 - "09461dcfxvzzsl768myywb64jivnxyx3m4apbygq4501l8h8ybig")))) + "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") @@ -567,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 "8396a4ebb4bde6b5c919d291838320f0e5b480dd") - (revision "3")) + (let ((commit "a928f08c1dd4f9a1e84d85811a543e974551bc4f") + (revision "6")) (package (name "rtl8192eu-linux-module") (version (git-version "0.0.0" revision commit)) @@ -581,7 +786,7 @@ package contains nonfree firmware for the following chips: (file-name (git-file-name name version)) (sha256 (base32 - "0kbfrvrfbi1r6if9vi7ccn0nc4lcqp85insiksyg3kg99mx78xhk")))) + "1q26kyic4glmgy0hbaq46r067m6cqf7d41chgivyxn8y32rf1fgc")))) (build-system linux-module-build-system) (arguments `(#:make-flags @@ -603,8 +808,176 @@ network adapters.") ;; hal/rtl8192e/hal8192e_fw.c (license gpl2)))) +(define-public rtl8821ce-linux-module + (let ((commit "a478095a45d8aa957b45be4f9173c414efcacc6f") + (revision "10")) + (package + (name "rtl8821ce-linux-module") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tomaspinho/rtl8821ce") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "00cn87jjrcxjqr3n8jv4w3n64zksmzz05fdr1gdvnbx1ab5739f6")))) + (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)) ; no test suite + (home-page "https://github.com/tomaspinho/rtl8821ce") + (synopsis "Linux driver for Realtek RTL8821CE wireless network adapters") + (description "This is Realtek's RTL8821CE Linux driver for wireless +network adapters.") + ;; Rejected by Guix beause it contains a binary blob in: + ;; 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")) + (package + (inherit rtl8821ce-linux-module) + (name "rtl8812au-aircrack-ng-linux-module") + (version (git-version "5.6.4.2" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/aircrack-ng/rtl8812au") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1clqrgmq5fhzybbiapmdbhg5qfx9k21r0hqa9pqmyinaqhvfnhfj")) + (modules '((guix build utils))) + (snippet + #~(begin + ;; Remove bundled tarballs, APKs, word lists, speadsheets, + ;; and other unnecessary unlicenced things. + (for-each delete-file-recursively (list "android" + "docs" + "tools")))))) + (supported-systems '("x86_64-linux" "i686-linux")) + (home-page "https://github.com/aircrack-ng/rtl8812au") + (synopsis "Linux driver for Realtek USB wireless network adapters") + (description + "This is Realtek's rtl8812au Linux driver for USB 802.11n wireless +network adapters, modified by the aircrack-ng project to support monitor mode +and frame injection. It provides a @code{88XXau} kernel module that supports +RTL8812AU, RTL8821AU, and RTL8814AU chips.") + ;; Rejected by Guix beause it contains a binary blob in: + ;; hal/rtl8812a/hal8812a_fw.c + (license gpl2+)))) + +(define-public r8168-linux-module + (package + (name "r8168-linux-module") + (version "8.052.01") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mtorromeo/r8168") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "01mi7hh92nc7jaxkfrpz7j0ci78djrhgmq0im4k1270mwmvr0yzj")))) + (arguments + (list #:tests? #f)) + (build-system linux-module-build-system) + (home-page "https://github.com/mtorromeo/r8168") + (synopsis "Linux driver for Realtek PCIe network adapters") + (description + "Linux driver for Realtek PCIe network adapters. If the r8169 kernel module is +giving you trouble, you can try this module.") + (license gpl2))) + (define broadcom-sta-version "6.30.223.271") +(define (broadcom-sta-patch name commit hash) + (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com/NixOS/nixpkgs/" + commit + "/pkgs/os-specific/linux/broadcom-sta/" + name + ".patch")) + (sha256 + (base32 + hash)))) + (define broadcom-sta-x86_64-source (origin (method url-fetch/tarbomb) @@ -613,29 +986,30 @@ network adapters.") (string-replace-substring broadcom-sta-version "." "_") ".tar.gz")) (patches - (parameterize - ((%patch-path - (map (lambda (directory) - (string-append directory "/nongnu/packages/patches")) - %load-path))) - ;; https://github.com/NixOS/nixpkgs/tree/master/pkgs/os-specific/linux/broadcom-sta - ;; https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/broadcom-wl-dkms - (search-patches "broadcom-sta-gcc.patch" - "broadcom-sta-license.patch" - "broadcom-sta-null-pointer-fix.patch" - "broadcom-sta-rdtscl.patch" - "broadcom-sta-linux-4.7.patch" - "broadcom-sta-linux-4.8.patch" - "broadcom-sta-debian-fix-kernel-warnings.patch" - "broadcom-sta-linux-4.11.patch" - "broadcom-sta-linux-4.12.patch" - "broadcom-sta-linux-4.15.patch" - "broadcom-sta-fix_mac_profile_discrepancy.patch" - "broadcom-sta-linux-5.1.patch" - ;; source: https://github.com/NixOS/nixpkgs/commit/8ce65087c333097ab714d23800b69fc471ec48ca - "broadcom-sta-linux-5.6.patch" - "broadcom-sta-linux-5.9.patch" - "broadcom-sta-linux-5.10.patch"))) + ;; Keep these in sync with the list at + ;; https://github.com/NixOS/nixpkgs/tree/master/pkgs/os-specific/linux/broadcom-sta. + ;; Nixpkgs is good about keeping broadcom patches up to date so updating + ;; for a new kernel release should be as simple as chaging the commit to + ;; the newest available and adding any new patches. + (let ((commit "355042e2ff5933b245e804c5eaff4ec3f340e71b")) + (list + (broadcom-sta-patch "i686-build-failure" commit "1522w2gb698svlkb2b4lijbd740agvs2ibpz4g0jlv8v31cybkf4") + (broadcom-sta-patch "license" commit "0rwlhafcmpp97cknqwv8gwf8sbxgqavgci1ywfkdxiylh4mhcvhr") + (broadcom-sta-patch "linux-4.7" commit "1nn1p6j77s9zfpxy5gl6qg1kha45pc7ww0yfkn5dmhazi288wamf") + (broadcom-sta-patch "linux-4.8" commit "0bjx4ayi30jbdm3sh38p52d6dnb3c44mqzqi8g51hhbn1kghkmq9") + (broadcom-sta-patch "linux-4.11" commit "1s3n87v9cn3qicd5v4wzj20psl4gcn1ghz0fnsq60n05rriicywp") + (broadcom-sta-patch "linux-4.12" commit "1kj7sfnw9hxjxzqm48565vniq7fkhapaqadfpw6l9bcnpf53xld3") + (broadcom-sta-patch "linux-4.15" commit "0bvk7nrvqa066dpn6vvb6x00yrxa37iqv87135kay9mllmkjd70b") + (broadcom-sta-patch "linux-5.1" commit "1kykpzhs19dwww6grav3qxsd28kn8y84i4b4csx2y5m2j629ncn0") + (broadcom-sta-patch "linux-5.6" commit "0v1jkaf60jgjkrjfcmx1gin4b65cdv39glqy7l3cswkmzb60lz4l") + (broadcom-sta-patch "linux-5.9" commit "1sgmbaahydk4j3i1jf8q1fz3a210fmakrpz0w1n9v3dcn23ladah") + (broadcom-sta-patch "linux-5.17" commit "1qsllvykhs3nvjwv8d6bgsm2sc9a1lxf8yqf6fa99p60ggd253ps") + (broadcom-sta-patch "linux-5.18" commit "1img0a0vqnkmq4c21aywq2ajyigzcfhbbpg1hw9nx7cbj9hf6d0l") + (broadcom-sta-patch "linux-6.0" commit "0rv74j5giafzl19f01yvfa5rgvsdvcimxzhks2fp44wpnxq241nb") + (broadcom-sta-patch "linux-6.1" commit "1pvx1h7iimcbfqdc13n1980ngxk9q6iyip8svn293x4h7jn472kf") + (broadcom-sta-patch "pedantic-fix" commit "1kxmw1iyxnfwad75h981sak5qk16p81xy1f2qxss2d0v97vkfkl5") + (broadcom-sta-patch "null-pointer-fix" commit "15c2vxgf7v5wy4s8w9jk7irf3fxxghy05gxmav1ss73a2azajdx7") + (broadcom-sta-patch "gcc" commit "0jcqk2vapyy2pbsjv9n8b3qp6vqz17d6s07cr04cx7075q7yhz5h")))) (sha256 (base32 "1gj485qqr190idilacpxwgqyw21il03zph2rddizgj7fbd6pfyaz")))) @@ -661,7 +1035,7 @@ network adapters.") (_ broadcom-sta-i686-source))) (build-system linux-module-build-system) (arguments - `(#:linux ,linux-lts + `(#:linux ,linux #:tests? #f)) (supported-systems '("i686-linux" "x86_64-linux")) (home-page "https://www.broadcom.com/support/802.11") @@ -682,10 +1056,7 @@ Linux device driver for the following chipsets: @item BCM4331 @item BCM4352 @item BCM4360 -@end itemize - -It is recommended that anyone who uses this package stays with Linux LTS -releases.") +@end itemize") (license (nonfree "https://www.broadcom.com/support/802.11")))) (define-public broadcom-bt-firmware @@ -780,10 +1151,44 @@ chipsets from Broadcom: "/b60fa04881bf8f9b9d578f57d1dfa596cae2a82e" "/LICENSE.broadcom_bcm20702"))))) +(define-public facetimehd + (package + (name "facetimehd") + (version "0.6.8") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/patjak/facetimehd") + (commit version))) + (file-name (git-file-name "facetimehd" version)) + (sha256 + (base32 + "1g0ky9w5klkjndf30mjymq78r6yls9gri9x702nn8qkmgkjbqdsg")))) + (build-system linux-module-build-system) + (arguments + '(#:tests? #f)) + (synopsis "Linux driver for the FacetimeHD (Broadcom 1570) PCIe webcam") + (description "Linux driver for the FacetimeHD webcam. According to Apple the +following models contain a Facetime HD camera and should be compatible with this +driver: +@itemize +@item iMac (21,5\", since mid 2011) +@item iMac (27\", since mid 2011) +@item MacBook Air (since mid 2011) +@item MacBook Pro (15\", since early 2011) +@item MacBook Pro (17\", since early 2011) +@item MacBook Pro (13\", since early 2011) +@item Thunderbolt display +@end itemize") + (home-page "https://github.com/patjak/facetimehd") + (license gpl2) + (supported-systems '("i686-linux" "x86_64-linux")))) + (define-public intel-microcode (package (name "intel-microcode") - (version "20220809") + (version "20231114") (source (origin (method git-fetch) @@ -794,15 +1199,15 @@ chipsets from Broadcom: (commit (string-append "microcode-" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0252ig6lp39rh87zgiadsmlwjwjr6q0275k5j28rpbq6f108pjxx")))) + (base32 "07c7hkwpvb9056s73s55sg04cxr1d9n1sd9r1g7sm3gh70yc17ki")))) (build-system copy-build-system) (arguments - `(#:install-plan - (let ((doc (string-append "share/doc/" ,name "-" ,version "/"))) - `(("intel-ucode" "lib/firmware/") - ("README.md" ,doc) - ("releasenote.md" ,doc) - ("security.md" ,doc))))) + (list #:install-plan + #~(let ((doc (string-append "share/doc/" #$name "-" #$version "/"))) + `(("intel-ucode" "lib/firmware/") + ("README.md" ,doc) + ("releasenote.md" ,doc) + ("security.md" ,doc))))) (home-page "https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files") (synopsis "Processor microcode firmware for Intel CPUs") @@ -836,16 +1241,15 @@ documented in the respective processor revision guides.") (define-public sof-firmware (package (name "sof-firmware") - (version "1.7") + (version "2.2.6") (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/thesofproject/sof-bin") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) + (method url-fetch) + (uri (string-append "https://github.com/thesofproject/sof-bin/releases/download/v" + version "/sof-bin-v" version ".tar.gz")) (sha256 - (base32 "1fb4rxgg3haxqg2gcm89g7af6v0a0h83c1ar2fyfa8h8pcf7hik7")))) + (base32 + "018901g5hshrqf2d0rn7yhzxcy4gmdc4v6167df880kdcfkw48lk")))) (build-system copy-build-system) (arguments `(#:install-plan diff --git a/nongnu/packages/lisp.scm b/nongnu/packages/lisp.scm index a6c6948..527dd9f 100644 --- a/nongnu/packages/lisp.scm +++ b/nongnu/packages/lisp.scm @@ -1,31 +1,25 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2022 Pierre Neidhardt <mail@ambrevar.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 André A. Gomes <andremegafone@gmail.com> (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) + #:use-module (guix build-system asdf) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix packages) #:use-module (nonguix build-system binary) + #:use-module ((guix licenses) #:prefix license:) #:use-module ((nonguix licenses) #:prefix license:)) ;; TODO: Split into differents outputs: @@ -53,7 +47,7 @@ "/acl" version "express-" arch2 ".tbz2"))) (sha256 (base32 - "0ir1irpq5hhcmy0yp5p2jpnq5if1gr1fgxybqyvppx1j1jdfkcsp")))) + "1zxajn238aibsv0qknm5kiqjiplb4ggynjsxar390rwznh57qc46")))) (build-system binary-build-system) (inputs (list bash-minimal zlib openssl)) (arguments @@ -75,6 +69,16 @@ "--directory=source" "-xvf" (assoc-ref inputs "source") "--strip-components" "1") (chdir "source"))) + (add-after 'install 'update-license + (lambda* (#:key outputs #:allow-other-keys) + (substitute* + (string-append (assoc-ref outputs "out") + "/share/allegro-cl/devel.lic") + ((";; License created on January 25, 2021, 8:32:19\\.") + ";; License created on January 17, 2023, 10:42:54.") + ((";; Expiration date: 2023-1-31 00:00:00") + ";; Expiration date: 2024-1-31 00:00:00")) + #t)) (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -119,3 +123,36 @@ then open a browser at http://localhost:PORT, where PORT is the indicated port." (home-page "https://franz.com/products/allegrocl/") (license (license:nonfree "https://franz.com/ftp/pub/legal/ACL-Express-20170301.pdf")))) + +(define-public sbcl-cl-electron + (let ((commit "458a60d8c9baae71906294ffae891c3d0686c672") + (revision "2")) + (package + (name "sbcl-cl-electron") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/atlas-engineer/cl-electron") + (commit commit))) + (file-name (git-file-name "cl-electron" version)) + (sha256 + (base32 "1ya6y55kv0g3h19ifnmwbc752p00s9mj1b1n4ljw4n7ycxmdpb24")))) + (build-system asdf-build-system/sbcl) + (native-inputs (list ;; sbcl-lisp-unit2 + sbcl)) + (inputs (list electron node + sbcl-cl-json sbcl-iolib sbcl-cl-str sbcl-nclasses + sbcl-parenscript sbcl-bordeaux-threads)) + (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 +Common Lisp.") + (license license:bsd-3)))) + +(define-public cl-electron + (sbcl-package->cl-source-package sbcl-cl-electron)) + +(define-public ecl-cl-electron + (sbcl-package->ecl-package sbcl-cl-electron)) diff --git a/nongnu/packages/messaging.scm b/nongnu/packages/messaging.scm new file mode 100644 index 0000000..74e65ed --- /dev/null +++ b/nongnu/packages/messaging.scm @@ -0,0 +1,407 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2021, 2022 PantherX OS Team <team@pantherx.org> +;;; Copyright © 2022, 2023, 2024 John Kehayias <john.kehayias@protonmail.com> +;;; Copyright © 2022 Evgenii Lepikhin <johnlepikhin@gmail.com> +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> +;;; Copyright © 2023 Raven Hallsby <karl@hallsby.org> + +(define-module (nongnu packages messaging) + #:use-module (gnu packages base) + #:use-module (gnu packages bash) + #:use-module (gnu packages compression) + #:use-module (gnu packages cups) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gl) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) + #:use-module (gnu packages gtk) + #:use-module (gnu packages kerberos) + #:use-module (gnu packages linux) + #:use-module (gnu packages nss) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module ((guix licenses) :prefix license:) + #:use-module (nonguix build-system binary) + #:use-module (nonguix build-system chromium-binary) + #:use-module ((nonguix licenses) :prefix license:) + #:use-module (ice-9 match)) + +(define-public element-desktop + (package + (name "element-desktop") + (version "1.11.57") + (source + (origin + (method url-fetch) + (uri + (string-append + "https://packages.riot.im/debian/pool/main/e/" name "/" name "_" version + "_amd64.deb")) + (sha256 + (base32 "05318i6z5kkzi01ygr77g5ij0hs4xmy0j23hznkqc4zia02q1vgx")))) + (supported-systems '("x86_64-linux")) + (build-system chromium-binary-build-system) + (arguments + (list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files + #:wrapper-plan + #~'("lib/Element/element-desktop") + #: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/element-desktop.desktop") + (("/opt/Element/") + (string-append #$output "/bin/"))))) + (add-after 'install 'symlink-binary-file + (lambda _ + (mkdir-p (string-append #$output "/bin")) + (symlink (string-append #$output "/lib/Element/element-desktop") + (string-append #$output "/bin/element-desktop")))) + (add-after 'install-wrapper 'wrap-where-patchelf-does-not-work + (lambda _ + (wrap-program (string-append #$output "/lib/Element/element-desktop") + `("LD_LIBRARY_PATH" ":" prefix + (,(string-join + (list + (string-append #$output "/lib/Element")) + ":"))))))))) + (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 +its core.") + ;; not working? + (properties + '((release-monitoring-url . "https://github.com/vector-im/element-desktop/releases"))) + (license license:asl2.0))) + +(define-public signal-desktop + (package + (name "signal-desktop") + (version "6.46.0") + (source + (origin + (method url-fetch) + (uri + (string-append + "https://updates.signal.org/desktop/apt/pool/s/" name "/" name "_" version + "_amd64.deb")) + (sha256 + (base32 "1pjv8v1hhycwbvqvih83axv41jkyksq6d9152fqic9d61lbb1kpa")))) + (supported-systems '("x86_64-linux")) + (build-system chromium-binary-build-system) + (arguments + (list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files + #:wrapper-plan + #~'("lib/Signal/signal-desktop") + #: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/signal-desktop.desktop") + (("/opt/Signal/") + (string-append #$output "/bin/"))))) + (add-after 'install 'symlink-binary-file + (lambda _ + (mkdir-p (string-append #$output "/bin")) + (symlink (string-append #$output "/lib/Signal/signal-desktop") + (string-append #$output "/bin/signal-desktop")))) + (add-after 'install-wrapper 'wrap-where-patchelf-does-not-work + (lambda _ + (wrap-program (string-append #$output "/lib/Signal/signal-desktop") + `("LD_LIBRARY_PATH" ":" prefix + (,(string-join + (list + (string-append #$output "/lib/Signal")) + ":"))))))))) + (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 +or iOS.") + ;; doesn't work? + (properties + '((release-monitoring-url . "https://github.com/signalapp/Signal-Desktop/releases"))) + (license license:agpl3))) + +(define-public zoom + (package + (name "zoom") + (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 "06m53d3jrpiq1z5wd7m61lb3w8m8g72iaqx5sixnzn290gyyzgim")))) + (supported-systems '("x86_64-linux")) + (build-system binary-build-system) + (arguments + (list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files + #:patchelf-plan + ;; Note: it seems like some (all?) of these only do anything in + ;; LD_LIBRARY_PATH, or at least needed there as well. + #~(let ((libs '("alsa-lib" + "at-spi2-atk" + "at-spi2-core" + "atk" + "cairo" + "cups" + "dbus" + "eudev" + "expat" + "fontconfig-minimal" + "gcc" + "glib" + "gtk+" + "libdrm" + "libx11" + "libxcb" + "libxcomposite" + "libxcursor" + "libxdamage" + "libxext" + "libxfixes" + "libxi" + "libxkbcommon" + "libxkbfile" + "libxrandr" + "libxshmfence" + "libxtst" + "mesa" + "nspr" + "pango" + "pulseaudio" + "xcb-util-image" + "xcb-util-keysyms" + "zlib"))) + `(("lib/zoom/ZoomLauncher" + ,libs) + ("lib/zoom/zoom" + ,libs) + ("lib/zoom/zopen" + ,libs) + ("lib/zoom/aomhost" + ,libs))) + #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (invoke "tar" "xvf" #$source) + ;; Use the more standard lib directory for everything. + (mkdir-p "lib") + (rename-file "zoom/" "lib/zoom"))) + (add-after 'install 'wrap-where-patchelf-does-not-work + (lambda _ + (wrap-program (string-append #$output "/lib/zoom/zopen") + `("LD_LIBRARY_PATH" prefix + ,(list #$@(map (lambda (pkg) + (file-append (this-package-input pkg) "/lib")) + '("fontconfig-minimal" + "freetype" + "gcc" + "glib" + "libxcomposite" + "libxdamage" + "libxkbcommon" + "libxkbfile" + "libxrandr" + "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 + (string-append #$(this-package-input "fontconfig-minimal") "/etc/fonts") + #$output) + ":"))) + `("LD_LIBRARY_PATH" prefix + ,(list (string-append #$(this-package-input "nss") "/lib/nss") + #$@(map (lambda (pkg) + (file-append (this-package-input pkg) "/lib")) + ;; TODO: Reuse this long list as it is + ;; needed for aomhost. Or perhaps + ;; aomhost has a shorter needed list, + ;; but untested. + '("alsa-lib" + "atk" + "at-spi2-atk" + "at-spi2-core" + "cairo" + "cups" + "dbus" + "eudev" + "expat" + "gcc" + "glib" + "mesa" + "mit-krb5" + "nspr" + "libxcb" + "libxcomposite" + "libxdamage" + "libxext" + "libxkbcommon" + "libxkbfile" + "libxrandr" + "libxshmfence" + "pango" + "pulseaudio" + "xcb-util" + "xcb-util-image" + "xcb-util-keysyms" + "xcb-util-wm" + "xcb-util-renderutil" + "zlib"))))) + (wrap-program (string-append #$output "/lib/zoom/aomhost") + `("FONTCONFIG_PATH" ":" prefix + (,(string-join + (list + (string-append #$(this-package-input "fontconfig-minimal") "/etc/fonts") + #$output) + ":"))) + `("LD_LIBRARY_PATH" prefix + ,(list (string-append #$(this-package-input "nss") "/lib/nss") + #$@(map (lambda (pkg) + (file-append (this-package-input pkg) "/lib")) + '("alsa-lib" + "atk" + "at-spi2-atk" + "at-spi2-core" + "cairo" + "cups" + "dbus" + "eudev" + "expat" + "gcc" + "glib" + "mesa" + "mit-krb5" + "nspr" + "libxcb" + "libxcomposite" + "libxdamage" + "libxext" + "libxkbcommon" + "libxkbfile" + "libxrandr" + "libxshmfence" + "pango" + "pulseaudio" + "xcb-util" + "xcb-util-image" + "xcb-util-keysyms" + "xcb-util-wm" + "xcb-util-renderutil" + "zlib"))))))) + (add-after 'wrap-where-patchelf-does-not-work 'rename-binary + ;; IPC (for single sign-on and handling links) fails if the + ;; name does not end in "zoom," so rename the real binary. + ;; Thanks to the Nix packagers for figuring this out. + (lambda _ + (rename-file (string-append #$output "/lib/zoom/.zoom-real") + (string-append #$output "/lib/zoom/.zoom")) + (substitute* (string-append #$output "/lib/zoom/zoom") + (("zoom-real") + "zoom")))) + (add-after 'rename-binary 'symlink-binaries + (lambda _ + (delete-file (string-append #$output "/environment-variables")) + (mkdir-p (string-append #$output "/bin")) + (symlink (string-append #$output "/lib/zoom/aomhost") + (string-append #$output "/bin/aomhost")) + (symlink (string-append #$output "/lib/zoom/zoom") + (string-append #$output "/bin/zoom")) + (symlink (string-append #$output "/lib/zoom/zopen") + (string-append #$output "/bin/zopen")) + (symlink (string-append #$output "/lib/zoom/ZoomLauncher") + (string-append #$output "/bin/ZoomLauncher")))) + (add-after 'symlink-binaries 'create-desktop-file + (lambda _ + (let ((apps (string-append #$output "/share/applications"))) + (mkdir-p apps) + (make-desktop-entry-file + (string-append apps "/zoom.desktop") + #:name "Zoom" + #:generic-name "Zoom Client for Linux" + #:exec (string-append #$output "/bin/ZoomLauncher %U") + #:mime-type (list + "x-scheme-handler/zoommtg" + "x-scheme-handler/zoomus" + "x-scheme-handler/tel" + "x-scheme-handler/callto" + "x-scheme-handler/zoomphonecall" + "application/x-zoom") + #:categories '("Network" "InstantMessaging" + "VideoConference" "Telephony") + #:startup-w-m-class "zoom" + #:comment + '(("en" "Zoom Video Conference") + (#f "Zoom Video Conference"))))))))) + (native-inputs (list tar)) + (inputs (list alsa-lib + at-spi2-atk + at-spi2-core + atk + bash-minimal + cairo + cups + dbus + eudev + expat + fontconfig + freetype + `(,gcc "lib") + glib + gtk+ + libdrm + librsvg + libx11 + libxcb + libxcomposite + libxdamage + libxext + libxfixes + libxkbcommon + libxkbfile + libxrandr + libxrender + libxshmfence + mesa + mit-krb5 + nspr + nss + pango + pulseaudio + xcb-util + xcb-util-image + xcb-util-keysyms + xcb-util-renderutil + xcb-util-wm + zlib)) + (home-page "https://zoom.us/") + (synopsis "Video conference client") + (description "The Zoom video conferencing and messaging client. Zoom must be run via an +app launcher to use its .desktop file, or with @code{ZoomLauncher}.") + (license (license:nonfree "https://explore.zoom.us/en/terms/")))) diff --git a/nongnu/packages/mozilla.scm b/nongnu/packages/mozilla.scm index b1da29f..f159446 100644 --- a/nongnu/packages/mozilla.scm +++ b/nongnu/packages/mozilla.scm @@ -1,7 +1,7 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com> @@ -14,27 +14,13 @@ ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net> ;;; Copyright © 2019, 2020 Adrian Malacoda <malacoda@monarch-pass.net> -;;; Copyright © 2020-2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2020-2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com> ;;; Copyright © 2021 pineapples <guixuser6392@protonmail.com> ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re> -;;; Copyright © 2021, 2022 John Kehayias <john.kehayias@protonmail.com> +;;; Copyright © 2021, 2022, 2023 John Kehayias <john.kehayias@protonmail.com> ;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 Tomas Volf <wolf@wolfsden.cz> (define-module (nongnu packages mozilla) #:use-module (guix build-system gnu) @@ -60,6 +46,7 @@ #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gtk) + #:use-module (gnu packages hunspell) #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages jemalloc) @@ -67,7 +54,6 @@ #:use-module (gnu packages libcanberra) #:use-module (gnu packages libevent) #:use-module (gnu packages libffi) - #:use-module (gnu packages libreoffice) ;for hunspell #:use-module (gnu packages linux) #:use-module (gnu packages llvm) #:use-module (gnu packages m4) @@ -79,473 +65,51 @@ #:use-module (gnu packages python) #:use-module (gnu packages rust) #:use-module (gnu packages rust-apps) + #:use-module (gnu packages speech) #:use-module (gnu packages sqlite) #:use-module (gnu packages video) #:use-module (nongnu packages wasm) #:use-module (gnu packages xdisorg) #:use-module (gnu packages xorg)) -;; Copied from guix/gnu/packages/rust.scm -(define* (rust-uri version #:key (dist "static")) - (string-append "https://" dist ".rust-lang.org/dist/" - "rustc-" version "-src.tar.gz")) +;; Define the versions of rust needed to build firefox, trying to match +;; upstream. See the file taskcluster/ci/toolchain/rust.yml at +;; https://searchfox.org under the particular firefox release, like +;; mozilla-esr102. +(define-public rust-firefox-esr rust) ; 1.60 is the default in Guix +(define-public rust-firefox rust) ; 1.65 is the minimum -(define* (rust-bootstrapped-package base-rust version checksum) - "Bootstrap rust VERSION with source checksum CHECKSUM using BASE-RUST." +(define icu4c-73 (package - (inherit base-rust) - (version version) - (source - (origin - (inherit (package-source base-rust)) - (uri (rust-uri version)) - (sha256 (base32 checksum)))) - (native-inputs - (alist-replace "cargo-bootstrap" (list base-rust "cargo") - (alist-replace "rustc-bootstrap" (list base-rust) - (package-native-inputs base-rust)))))) - -(define rust-firefox-1.58 - (rust-bootstrapped-package - rust "1.58.1" "1iq7kj16qfpkx8gvw50d8rf7glbm6s0pj2y1qkrz7mi56vfsyfd8")) - -(define rust-firefox-1.59 - (rust-bootstrapped-package - rust-firefox-1.58 "1.59.0" "1yc5bwcbmbwyvpfq7zvra78l0r8y3lbv60kbr62fzz2vx2pfxj57")) - -(define-public rust-firefox rust-firefox-1.59) - -;; rust-cbindgen-0.23/0.24 dependencies -(define-public rust-unicode-ident-1 - (package - (name "rust-unicode-ident") - (version "1.0.3") - (source (origin - (method url-fetch) - (uri (crate-uri "unicode-ident" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1bqswc96ws8l6k7xx56dg521a3l5imi3mhlcz7rsi6a92mxb7xf4")))) - (build-system cargo-build-system) - (arguments - `(#:skip-build? #t)) - (home-page "https://github.com/dtolnay/unicode-ident") - (synopsis - "Better optimized implementation of the older unicode-xid crate") - (description - "Determine whether characters have the XID_Start or XID_Continue properties -according to Unicode Standard Annex #31") - (license (list license:unicode license:expat)))) - -(define-public rust-proc-macro2-1.0.43 - (package - (inherit rust-proc-macro2-1) - (name "rust-proc-macro2") - (version "1.0.43") - (source (origin - (method url-fetch) - (uri (crate-uri "proc-macro2" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1avvpf4qki8mg2na60yr3afbsfl5p6vllac6516xgwy93g3a4b0a")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-unicode-ident" ,rust-unicode-ident-1)))))) - -(define-public rust-syn-1.0.99 - (package - (inherit rust-syn-1) - (name "rust-syn") - (version "1.0.99") - (source (origin - (method url-fetch) - (uri (crate-uri "syn" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "04xba78p559nl737llv7nqcwm723dp6ah5bbp0h5w1amqrpfznsq")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-proc-macro2" ,rust-proc-macro2-1.0.43) - ("rust-quote" ,rust-quote-1) - ("rust-unicode-ident" ,rust-unicode-ident-1)))))) - -(define-public rust-textwrap-0.15 - (package - (inherit rust-textwrap-0.12) - (name "rust-textwrap") - (version "0.15.0") - (source (origin - (method url-fetch) - (uri (crate-uri "textwrap" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1yw513k61lfiwgqrfvsjw1a5wpvm0azhpjr2kr0jhnq9c56is55i")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-hyphenation" ,rust-hyphenation-0.8) - ("rust-smawk" ,rust-smawk-0.3) - ("rust-terminal-size" ,rust-terminal-size-0.1) - ("rust-unicode-linebreak" ,rust-unicode-linebreak-0.1) - ("rust-unicode-width" ,rust-unicode-width-0.1)))))) - -(define-public rust-windows-x86-64-msvc-0.36 - (package - (inherit rust-windows-x86-64-msvc-0.28) - (name "rust-windows-x86-64-msvc") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_x86_64_msvc" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "103n3xijm5vr7qxr1dps202ckfnv7njjnnfqmchg8gl5ii5cl4f8")))))) - -(define-public rust-windows-x86-64-gnu-0.36 - (package - (inherit rust-windows-x86-64-gnu-0.28) - (name "rust-windows-x86-64-gnu") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_x86_64_gnu" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1qfrck3jnihymfrd01s8260d4snql8ks2p8yaabipi3nhwdigkad")))))) - -(define-public rust-windows-i686-msvc-0.36 - (package - (inherit rust-windows-i686-msvc-0.28) - (name "rust-windows-i686-msvc") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_i686_msvc" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "097h2a7wig04wbmpi3rz1akdy4s8gslj5szsx8g2v0dj91qr3rz2")))))) - -(define-public rust-windows-i686-gnu-0.36 - (package - (inherit rust-windows-i686-gnu-0.28) - (name "rust-windows-i686-gnu") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_i686_gnu" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1dm3svxfzamrv6kklyda9c3qylgwn5nwdps6p0kc9x6s077nq3hq")))))) - -(define-public rust-windows-aarch64-msvc-0.36 - (package - (inherit rust-windows-aarch64-msvc-0.28) - (name "rust-windows-aarch64-msvc") - (version "0.36.1") + (inherit icu4c) + (version "73.1") (source (origin (method url-fetch) - (uri (crate-uri "windows_aarch64_msvc" version)) - (file-name (string-append name "-" version ".tar.gz")) + (uri (string-append + "https://github.com/unicode-org/icu/releases/download/release-" + (string-map (lambda (x) (if (char=? x #\.) #\- x)) version) + "/icu4c-" + (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version) + "-src.tgz")) (sha256 (base32 - "0ixaxs2c37ll2smprzh0xq5p238zn8ylzb3lk1zddqmd77yw7f4v")))))) + "0iccpdvc0kvpww5a31k9gjkqigyz016i7v80r9zamd34w4fl6mx4")))))) -(define-public rust-windows-sys-0.36 - (package - (inherit rust-windows-sys-0.28) - (name "rust-windows-sys") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows-sys" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1lmqangv0zg1l46xiq7rfnqwsx8f8m52mqbgg2mrx7x52rd1a17a")))) - (build-system cargo-build-system) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-windows-aarch64-msvc" ,rust-windows-aarch64-msvc-0.36) - ("rust-windows-i686-gnu" ,rust-windows-i686-gnu-0.36) - ("rust-windows-i686-msvc" ,rust-windows-i686-msvc-0.36) - ("rust-windows-x86-64-gnu" ,rust-windows-x86-64-gnu-0.36) - ("rust-windows-x86-64-msvc" ,rust-windows-x86-64-msvc-0.36)))))) - -(define-public rust-hashbrown-0.12 - (package - (inherit rust-hashbrown-0.11) - (name "rust-hashbrown") - (version "0.12.3") - (source (origin - (method url-fetch) - (uri (crate-uri "hashbrown" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1268ka4750pyg2pbgsr43f0289l5zah4arir2k4igx5a8c6fg7la")))))) - -(define-public rust-object-0.29 - (package - (inherit rust-object-0.28) - (name "rust-object") - (version "0.29.0") - (source (origin - (method url-fetch) - (uri (crate-uri "object" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0lzblxwxcih7j4z2cfx9094caax97hlfm9n0y5hlavda6cn8n591")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-compiler-builtins" ,rust-compiler-builtins-0.1) - ("rust-crc32fast" ,rust-crc32fast-1) - ("rust-flate2" ,rust-flate2-1) - ("rust-hashbrown" ,rust-hashbrown-0.12) - ("rust-indexmap" ,rust-indexmap-1) - ("rust-memchr" ,rust-memchr-2) - ("rust-rustc-std-workspace-alloc" ,rust-rustc-std-workspace-alloc-1) - ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1) - ("rust-wasmparser" ,rust-wasmparser-0.57)))))) - -(define-public rust-object-0.27 - (package - (inherit rust-object-0.28) - (name "rust-object") - (version "0.27.1") - (source (origin - (method url-fetch) - (uri (crate-uri "object" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1ygv9zgi9wz6q5f2z9xn72i0c97jjr1dgj30kbyicdhxk8zivb37")))))) - -(define-public rust-gimli-0.26 - (package - (inherit rust-gimli-0.23) - (name "rust-gimli") - (version "0.26.2") - (source (origin - (method url-fetch) - (uri (crate-uri "gimli" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0pafbk64rznibgnvfidhm1pqxd14a5s9m50yvsgnbv38b8n0w0r2")))))) - -(define-public rust-addr2line-0.17 - (package - (inherit rust-addr2line-0.14) - (name "rust-addr2line") - (version "0.17.0") - (source (origin - (method url-fetch) - (uri (crate-uri "addr2line" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0sw16zqy6w0ar633z69m7lw6gb0k1y7xj3387a8wly43ij5div5r")))))) - -(define-public rust-backtrace-0.3.66 - (package - (inherit rust-backtrace-0.3) - (name "rust-backtrace") - (version "0.3.66") - (source (origin - (method url-fetch) - (uri (crate-uri "backtrace" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "19yrfx0gprqmzphmf6qv32g93w76ny5g751ks1abdkqnsqcl7f6a")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-addr2line" ,rust-addr2line-0.17) - ("rust-cc" ,rust-cc-1) - ("rust-cfg-if" ,rust-cfg-if-1) - ("rust-cpp-demangle" ,rust-cpp-demangle-0.3) - ("rust-libc" ,rust-libc-0.2) - ("rust-miniz-oxide" ,rust-miniz-oxide-0.5) - ("rust-object" ,rust-object-0.29) - ("rust-rustc-demangle" ,rust-rustc-demangle-0.1) - ("rust-rustc-serialize" ,rust-rustc-serialize-0.3) - ("rust-serde" ,rust-serde-1) - ("rust-winapi" ,rust-winapi-0.3)))))) - -(define-public rust-parking-lot-core-0.9 - (package - (inherit rust-parking-lot-core-0.8) - (name "rust-parking-lot-core") - (version "0.9.3") - (source (origin - (method url-fetch) - (uri (crate-uri "parking_lot_core" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0ab95rljb99rm51wcic16jgbajcr6lgbqkrr21w7bc2wyb5pk8h9")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-backtrace" ,rust-backtrace-0.3.66) - ("rust-cfg-if" ,rust-cfg-if-1) - ("rust-libc" ,rust-libc-0.2) - ("rust-petgraph" ,rust-petgraph-0.6) - ("rust-redox-syscall" ,rust-redox-syscall-0.2) - ("rust-smallvec" ,rust-smallvec-1) - ("rust-thread-id" ,rust-thread-id-4) - ("rust-windows-sys" ,rust-windows-sys-0.36)))))) - -(define-public rust-once-cell-1.13.0 - (package - (inherit rust-once-cell-1) - (name "rust-once-cell") - (version "1.13.0") - (source (origin - (method url-fetch) - (uri (crate-uri "once_cell" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1qfqvgnwfzzwxd13ybvplzshaqwnjnna9ghcn0zgijaq0zixp9hq")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-atomic-polyfill" ,rust-atomic-polyfill-0.1) - ("rust-parking-lot-core" ,rust-parking-lot-core-0.9)))))) - -(define-public rust-clap-lex-0.2 - (package - (name "rust-clap-lex") - (version "0.2.4") - (source (origin - (method url-fetch) - (uri (crate-uri "clap_lex" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1ib1a9v55ybnaws11l63az0jgz5xiy24jkdgsmyl7grcm3sz4l18")))) - (build-system cargo-build-system) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-os-str-bytes" ,rust-os-str-bytes-6)))) - (home-page "https://github.com/clap-rs/clap/tree/master/clap_lex") - (synopsis "Minimal, flexible command line parser") - (description "Minimal, flexible command line parser") - (license (list license:expat license:asl2.0)))) - -(define-public rust-clap-derive-3.2.15 - (package - (inherit rust-clap-derive-3) - (name "rust-clap-derive") - (version "3.2.15") - (source (origin - (method url-fetch) - (uri (crate-uri "clap_derive" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1d2c4vs345fwihkd8cc7m6acbiydcwramkd5mnp36p0a7g6jm9cv")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-heck" ,rust-heck-0.4) - ("rust-proc-macro-error" ,rust-proc-macro-error-1) - ("rust-proc-macro2" ,rust-proc-macro2-1.0.43) - ("rust-quote" ,rust-quote-1) - ("rust-syn" ,rust-syn-1.0.99)))))) - -(define-public rust-clap-3.2.16 - (package - (inherit rust-clap-3) - (name "rust-clap") - (version "3.2.16") - (source (origin - (method url-fetch) - (uri (crate-uri "clap" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1af06z8z7m3327yz1xvzxfjanclgpvvy3lssb745rig7adkbpnx3")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-atty" ,rust-atty-0.2) - ("rust-backtrace" ,rust-backtrace-0.3.66) - ("rust-bitflags" ,rust-bitflags-1) - ("rust-clap-derive" ,rust-clap-derive-3.2.15) - ("rust-clap-lex" ,rust-clap-lex-0.2) - ("rust-indexmap" ,rust-indexmap-1) - ("rust-once-cell" ,rust-once-cell-1.13.0) - ("rust-regex" ,rust-regex-1) - ("rust-strsim" ,rust-strsim-0.10) - ("rust-termcolor" ,rust-termcolor-1) - ("rust-terminal-size" ,rust-terminal-size-0.1) - ("rust-textwrap" ,rust-textwrap-0.15) - ("rust-unicase" ,rust-unicase-2) - ("rust-yaml-rust" ,rust-yaml-rust-0.4)))))) - -(define-public rust-cbindgen-0.24 - (package - (inherit rust-cbindgen-0.19) - (name "rust-cbindgen") - (version "0.24.3") - (source (origin - (method url-fetch) - (uri (crate-uri "cbindgen" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1yqxqsz2d0cppd8zwihk2139g5gy38wqgl9snj6rnk8gyvnqsdd6")))) - (arguments - `(#:cargo-inputs (("rust-clap" ,rust-clap-3.2.16) - ("rust-heck" ,rust-heck-0.4) - ("rust-indexmap" ,rust-indexmap-1) - ("rust-log" ,rust-log-0.4) - ("rust-proc-macro2" ,rust-proc-macro2-1.0.43) - ("rust-quote" ,rust-quote-1) - ("rust-serde" ,rust-serde-1) - ("rust-serde-json" ,rust-serde-json-1) - ("rust-syn" ,rust-syn-1.0.99) - ("rust-tempfile" ,rust-tempfile-3) - ("rust-toml" ,rust-toml-0.5)) - #:cargo-development-inputs (("rust-serial-test" ,rust-serial-test-0.5)))))) - -;; Bug with firefox build (v101-102) with cbindgen-0.24, see -;; https://bugzilla.mozilla.org/show_bug.cgi?id=1773259#c5 for possible patch -;; (untested) -(define-public rust-cbindgen-0.23 - (package - (inherit rust-cbindgen-0.24) - (name "rust-cbindgen") - (version "0.23.0") - (source (origin - (method url-fetch) - (uri (crate-uri "cbindgen" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "006rn3fn4njayjxr2vd24g1awssr9i3894nbmfzkybx07j728vav")))))) - -;; Update this id with every firefox update to it's release date. -;; It's used for cache validation and therefor can lead to strange bugs. -(define %firefox-esr-build-id "20220726000000") +;; 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 "20240219101823") (define-public firefox-esr (package (name "firefox-esr") - (version "102.1.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 "0q4lawxynvdiihlqnqiwxdp0ai71qq2fp6mkdsy5p08vgmr6wyv3")))) + (base32 "1slmp2v1q3my81z8kiym9rpxw5d9n4sn07v7hv99517w7vr8d05g")))) (build-system gnu-build-system) (arguments (list @@ -592,8 +156,14 @@ according to Unicode Standard Annex #31") "--disable-elf-hack")) #:imported-modules %cargo-utils-modules #:modules `((ice-9 regex) + (ice-9 string-fun) (ice-9 ftw) + (srfi srfi-1) (srfi srfi-26) + (rnrs bytevectors) + (rnrs io ports) + (guix elf) + (guix build gremlin) ,@%gnu-build-system-modules) #:phases #~(modify-phases %standard-phases @@ -663,6 +233,22 @@ according to Unicode Standard Annex #31") (substitute* "build/RunCbindgen.py" (("\"--frozen\",") "")))) (delete 'bootstrap) + (add-before 'configure 'patch-SpeechDispatcherService.cpp + (lambda _ + (let* ((lib "libspeechd.so.2") + (file "dom/media/webspeech/synth/speechd/SpeechDispatcherService.cpp") + (old-content (call-with-input-file file get-string-all))) + (substitute + file + `((,(format #f "~s" lib) + . ,(lambda (line _) + (string-replace-substring + line + lib + (string-append #$speech-dispatcher "/lib/" lib)))))) + (if (string=? old-content + (call-with-input-file file get-string-all)) + (error "substitute did nothing, phase requires an update"))))) (add-before 'configure 'set-build-id ;; Firefox will write the timestamp to output, which is harmful ;; for reproducibility, so change it to a fixed date. Use a @@ -753,6 +339,19 @@ according to Unicode Standard Annex #31") (lambda _ (invoke "./mach" "install"))) (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) + ;; The following two functions are from Guix's icecat package in + ;; (gnu packages gnuzilla). See commit + ;; b7a0935420ee630a29b7e5ac73a32ba1eb24f00b. + (define (runpath-of lib) + (call-with-input-file lib + (compose elf-dynamic-info-runpath + elf-dynamic-info + parse-elf + get-bytevector-all))) + (define (runpaths-of-input label) + (let* ((dir (string-append (assoc-ref inputs label) "/lib")) + (libs (find-files dir "\\.so$"))) + (append-map runpath-of libs))) (let* ((out (assoc-ref outputs "out")) (lib (string-append out "/lib")) ;; TODO: make me a loop again @@ -763,6 +362,20 @@ according to Unicode Standard Annex #31") ;; For hardware video acceleration via VA-API (libva-lib (string-append (assoc-ref inputs "libva") "/lib")) + ;; VA-API is run in the RDD (Remote Data Decoder) sandbox + ;; and must be explicitly given access to files it needs. + ;; Rather than adding the whole store (as Nix had + ;; upstream do, see + ;; <https://github.com/NixOS/nixpkgs/pull/165964> and + ;; linked upstream patches), we can just follow the + ;; runpaths of the needed libraries to add everything to + ;; LD_LIBRARY_PATH. These will then be accessible in the + ;; RDD sandbox. + (rdd-whitelist + (map (cut string-append <> "/") + (delete-duplicates + (append-map runpaths-of-input + '("mesa" "ffmpeg"))))) (pulseaudio-lib (string-append (assoc-ref inputs "pulseaudio") "/lib")) ;; For U2F and WebAuthn @@ -771,7 +384,7 @@ according to Unicode Standard Annex #31") "/share"))) (wrap-program (car (find-files lib "^firefox$")) `("LD_LIBRARY_PATH" prefix (,mesa-lib ,libnotify-lib ,libva-lib - ,pulseaudio-lib ,eudev-lib)) + ,pulseaudio-lib ,eudev-lib ,@rdd-whitelist)) `("XDG_DATA_DIRS" prefix (,gtk-share)) `("MOZ_LEGACY_PROFILES" = ("1")) `("MOZ_ALLOW_DOWNGRADE" = ("1")))))) @@ -824,7 +437,7 @@ according to Unicode Standard Annex #31") gtk+ gtk+-2 hunspell - icu4c-71 + icu4c-73 jemalloc libcanberra libevent @@ -845,10 +458,12 @@ according to Unicode Standard Annex #31") nspr-4.32 ;; nss pango + pipewire pixman pulseaudio - startup-notification + speech-dispatcher sqlite + startup-notification eudev unzip zip @@ -857,18 +472,18 @@ according to Unicode Standard Annex #31") (list alsa-lib autoconf-2.13 - `(,rust-firefox "cargo") - clang-12 - llvm-12 + `(,rust-firefox-esr "cargo") + clang + llvm wasm32-wasi-clang-toolchain m4 nasm - node + node-lts perl pkg-config python - rust-firefox - rust-cbindgen-0.23 + rust-firefox-esr + rust-cbindgen-0.24 which yasm)) (home-page "https://mozilla.org/firefox/") @@ -915,22 +530,22 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" ((firefox) out)) #t)))))) -;; Update this id with every firefox update to it's release date. -;; It's used for cache validation and therefor can lead to strange bugs. -(define %firefox-build-id "20220809000000") +;; 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 "20240219104035") (define-public firefox (package (inherit firefox-esr) (name "firefox") - (version "103.0.2") + (version "123.0") (source (origin (method url-fetch) (uri (string-append "https://archive.mozilla.org/pub/firefox/releases/" version "/source/firefox-" version ".source.tar.xz")) (sha256 - (base32 "1ajkshdsbbi4fdxdkjf632qaxzqrg4is6pd80m1sh5wwwgl86qbn")))) + (base32 "1dscgn1ymqi4zr29fpj43y8gaspc5wl7a59w657ws56vmnymm24y")))) (arguments (substitute-keyword-arguments (package-arguments firefox-esr) ((#:phases phases) @@ -940,43 +555,14 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" (setenv "MOZ_BUILD_DATE" #$%firefox-build-id))))))) (native-inputs (modify-inputs (package-native-inputs firefox-esr) - (replace "rust-cbindgen" rust-cbindgen-0.24))) + (replace "rust" rust-firefox) + (replace "rust:cargo" `(,rust-firefox "cargo")) + (replace "rust-cbindgen" rust-cbindgen-0.26))) (description "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/music.scm b/nongnu/packages/music.scm new file mode 100644 index 0000000..dffd758 --- /dev/null +++ b/nongnu/packages/music.scm @@ -0,0 +1,103 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022 Sughosha <sughosha@proton.me> +;;; Copyright © 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> + +(define-module (nongnu packages music) + #:use-module (gnu packages audio) + #:use-module (gnu packages base) + #:use-module (gnu packages cpp) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gcc) + #:use-module (gnu packages linux) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module ((nonguix licenses) #:prefix license:) + #:use-module (nonguix build-system binary)) + +(define-public reaper + (package + (name "reaper") + (version "6.73") + (source + (origin + (method url-fetch) + (uri (string-append "https://www.reaper.fm/files/" + (version-major version) + ".x/reaper" + (string-replace-substring version "." "") + "_" + (match (%current-system) + ("x86_64-linux" "linux_x86_64") + ("i686-linux" "linux_i686") + ("aarch64-linux" "linux_aarch64") + ("armhf-linux" "linux_armv7l")) + ".tar.xz")) + (sha256 + (base32 + (match (%current-system) + ("x86_64-linux" "1hd7fbk0px45fxhqa7nqcnij8ls2fhpjp60v840vy2zqs9fkcr52") + ("i686-linux" "11vk32mxyda9xl08pp2ivd1vsahnw6w7d08in4syz6iannfwp19b") + ("aarch64-linux" "0zpkaiwwxn8yh3s1d22qswshbgaxx5d8iy17hb3w256zgb722yjw") + ("armhf-linux" "18174b1lgsk73gxhala471ppzbrpa1cs953b5par998yqgh74znk")))))) + (build-system binary-build-system) + (arguments + (list #:strip-binaries? #f ;allocated section `.dynsym' not in segment + #:patchelf-plan #~`(("REAPER/reaper" ("libc" "gcc" "alsa-lib")) + ("REAPER/reamote-server" ("libc" "gcc")) + ("REAPER/Plugins/reaper_host_x86_64" ("libc" "gcc"))) + #:phases #~(modify-phases %standard-phases + (replace 'install + (lambda* (#:key outputs inputs #:allow-other-keys) + (let* ((target (string-append #$output "/opt")) + (bin (string-append #$output "/bin")) + (libexec (string-append #$output "/libexec")) + (data (string-append #$output "/share")) + (doc (string-append data "/doc/reaper-" + #$version))) + (setenv "HOME" "/tmp") + (setenv "XDG_DATA_HOME" data) + (invoke "sh" "./install-reaper.sh" "--install" + target "--integrate-user-desktop") + (delete-file (string-append target + "/REAPER/uninstall-reaper.sh")) + (delete-file (string-append target + "/REAPER/libSwell.so")) + (symlink (search-input-file inputs + "/lib/libSwell.so") + (string-append target + "/REAPER/libSwell.so")) + (mkdir-p bin) + (symlink (string-append target "/REAPER/reaper") + (string-append bin "/reaper")) + (mkdir-p libexec) + (symlink (string-append target + "/REAPER/Plugins/reaper_host_x86_64") + (string-append libexec + "/reaper_host_x86_64")) + (mkdir-p doc) + (symlink (string-append target + "/REAPER/EULA.txt") + (string-append doc "/LICENSE")))))))) + (native-inputs + (list + which + xdg-utils)) + (inputs + (list + alsa-lib + `(,gcc "lib") + wdl)) + (supported-systems '("x86_64-linux" "i686-linux" "aarch64-linux" + "armhf-linux")) + (home-page "https://www.reaper.fm") + (synopsis "Digital audio workstation") + (description + "REAPER is a digital audio production application offering multitrack +audio and MIDI recording, editing, processing, mixing and mastering toolset. +It supports a vast range of hardware, digital formats and plugins, and can be +comprehensively extended, scripted and modified.") + (license (license:nonfree "file:///opt/REAPER/EULA.txt")))) diff --git a/nongnu/packages/ncurses.scm b/nongnu/packages/ncurses.scm index 5c27ae9..1a51d2c 100644 --- a/nongnu/packages/ncurses.scm +++ b/nongnu/packages/ncurses.scm @@ -1,4 +1,4 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2016 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015, 2017 Leo Famulari <leo@famulari.name> @@ -8,26 +8,13 @@ ;;; Copyright © 2017, 2019, 2020, 2021 Marius Bakke <marius@gnu.org> ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de> -;;; Copyright © 2022 B. Wilson <x@wilsonb.com> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2022-2023 B. Wilson <x@wilsonb.com> (define-module (nongnu packages ncurses) #:use-module (gnu packages) + #:use-module (guix gexp) #:use-module (guix licenses) + #:use-module (guix memoization) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) @@ -40,6 +27,17 @@ #:use-module (guix utils) #:use-module (ice-9 match)) +(define ncurses-rollup-patch + (mlambda (version hash) + (origin + (method url-fetch) + (uri (match (string-split (version-major+minor+point version) #\.) + ((major minor point) + (string-append "https://invisible-mirror.net/archives" + "/ncurses/" major "." minor "/ncurses-" + major "." minor "-" point "-patch.sh.bz2")))) + (sha256 (base32 hash))))) + (define-public ncurses-5 (package (name "ncurses") @@ -57,172 +55,157 @@ "doc")) ;1 MiB of man pages (arguments (let ((patch-makefile-phase - '(lambda _ - (for-each patch-makefile-SHELL - (find-files "." "Makefile.in")))) + #~(lambda _ + (for-each patch-makefile-SHELL + (find-files "." "Makefile.in")))) (configure-phase ;; The 'configure' script does not understand '--docdir', so we must ;; override that and use '--mandir' instead. - '(lambda* (#:key build target outputs configure-flags - #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (doc (assoc-ref outputs "doc"))) - (apply invoke "./configure" - (string-append "SHELL=" (which "sh")) - (string-append "--build=" build) - (string-append "--prefix=" out) - (string-append "--mandir=" doc "/share/man") - (if target - (cons (string-append "--host=" target) - configure-flags) - configure-flags))))) + #~(lambda* (#:key build target outputs configure-flags + #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc"))) + (apply invoke "./configure" + (string-append "SHELL=" (which "sh")) + (string-append "--build=" build) + (string-append "--prefix=" out) + (string-append "--mandir=" doc "/share/man") + (if target + (cons (string-append "--host=" target) + configure-flags) + configure-flags))))) (apply-rollup-patch-phase ;; Ncurses distributes "stable" patchsets to be applied on top ;; of the release tarball. These are only available as shell ;; scripts(!) so we decompress and apply them in a phase. ;; See <https://invisible-mirror.net/archives/ncurses/6.1/README>. - '(lambda* (#:key inputs native-inputs #:allow-other-keys) - (let ((rollup-patch (assoc-ref (or native-inputs inputs) - "rollup-patch"))) - (when rollup-patch - (copy-file rollup-patch - (string-append (getcwd) "/rollup-patch.sh.bz2")) - (invoke "bzip2" "-d" "rollup-patch.sh.bz2") - (invoke "sh" "rollup-patch.sh"))))) + #~(lambda* (#:key inputs native-inputs #:allow-other-keys) + (let ((rollup-patch #$(ncurses-rollup-patch + (package-version this-package) + "16ny892yhimy6r4mmsgw3rcl0i15570ifn9c54g1ndyrk7kpmlgs"))) + (copy-file rollup-patch + (string-append (getcwd) "/rollup-patch.sh.bz2")) + (invoke "bzip2" "-d" "rollup-patch.sh.bz2") + (invoke "sh" "rollup-patch.sh")))) (remove-shebang-phase - '(lambda _ - ;; To avoid retaining a reference to the bootstrap Bash via the - ;; shebang of the 'ncursesw6-config' script, simply remove that - ;; shebang: it'll work just as well without it. Likewise, do not - ;; retain a reference to the "doc" output. - (substitute* "misc/ncurses-config.in" - (("#!@SHELL@") - "# No shebang here, use /bin/sh!\n") - (("@SHELL@ \\$0") - "$0") - (("mandir=.*$") - "mandir=share/man")))) + #~(lambda _ + ;; To avoid retaining a reference to the bootstrap Bash via the + ;; shebang of the 'ncursesw6-config' script, simply remove that + ;; shebang: it'll work just as well without it. Likewise, do not + ;; retain a reference to the "doc" output. + (substitute* "misc/ncurses-config.in" + (("#!@SHELL@") + "# No shebang here, use /bin/sh!\n") + (("@SHELL@ \\$0") + "$0") + (("mandir=.*$") + "mandir=share/man")))) (post-install-phase - `(lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - ;; When building a wide-character (Unicode) build, create backward - ;; compatibility links from the the "normal" libraries to the - ;; wide-character ones (e.g. libncurses.so to libncursesw.so). - ,@(if (target-mingw?) - '( ;; TODO: create .la files to link to the .dll? - (with-directory-excursion (string-append out "/bin") - (for-each - (lambda (lib) - (define lib.dll - (string-append "lib" lib ".dll")) - (define libw6.dll - (string-append "lib" lib "w6.dll")) + #~(lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; When building a wide-character (Unicode) build, create backward + ;; compatibility links from the the "normal" libraries to the + ;; wide-character ones (e.g. libncurses.so to libncursesw.so). + #$@(if (target-mingw?) + `( ;; TODO: create .la files to link to the .dll? + (with-directory-excursion (string-append out "/bin") + (for-each + (lambda (lib) + (define lib.dll + (string-append "lib" lib ".dll")) + (define libwx.dll + (string-append "lib" lib "w" + ,(version-major version) ".dll")) - (when (file-exists? libw6.dll) - (format #t "creating symlinks for `lib~a'~%" lib) - (symlink libw6.dll lib.dll))) - '("curses" "ncurses" "form" "panel" "menu")))) - '()) - (with-directory-excursion (string-append out "/lib") - (for-each (lambda (lib) - (define libw.a - (string-append "lib" lib "w.a")) - (define lib.a - (string-append "lib" lib ".a")) + (when (file-exists? libwx.dll) + (format #t "creating symlinks for `lib~a'~%" lib) + (symlink libw6.dll lib.dll))) + '("curses" "ncurses" "form" "panel" "menu")))) + #~()) + (with-directory-excursion (string-append out "/lib") + (for-each (lambda (lib) + (define libw.a + (string-append "lib" lib "w.a")) + (define lib.a + (string-append "lib" lib ".a")) - ,@(if (not (target-mingw?)) - `((define libw.so.x - (string-append "lib" lib "w.so." - ,(version-major version))) - (define lib.so.x - (string-append "lib" lib ".so." - ,(version-major version))) - (define lib.so - (string-append "lib" lib ".so")) - (define packagew.pc - (string-append lib "w.pc")) - (define package.pc - (string-append lib ".pc"))) - '()) + #$@(if (not (target-mingw?)) + #~((define libw.so.x + (string-append "lib" lib "w.so." + #$(version-major version))) + (define lib.so.x + (string-append "lib" lib ".so." + #$(version-major version))) + (define lib.so + (string-append "lib" lib ".so")) + (define packagew.pc + (string-append lib "w.pc")) + (define package.pc + (string-append lib ".pc"))) + #~()) - (when (file-exists? libw.a) - (format #t "creating symlinks for `lib~a'~%" lib) - (symlink libw.a lib.a) - ,@(if (not (target-mingw?)) - '((symlink libw.so.x lib.so.x) - (false-if-exception (delete-file lib.so)) - (call-with-output-file lib.so - (lambda (p) - (format p "INPUT (-l~aw)~%" lib))) - (with-directory-excursion "pkgconfig" - (format #t "creating symlink for `~a'~%" - package.pc) - (when (file-exists? packagew.pc) - (symlink packagew.pc package.pc)))) - '()))) - '("curses" "ncurses" "form" "panel" "menu"))))))) - `(#:configure-flags - ,(cons* - 'quasiquote - `(("--with-shared" "--without-debug" "--enable-widec" + (when (file-exists? libw.a) + (format #t "creating symlinks for `lib~a'~%" lib) + (symlink libw.a lib.a) + #$@(if (not (target-mingw?)) + '((symlink libw.so.x lib.so.x) + (false-if-exception (delete-file lib.so)) + (call-with-output-file lib.so + (lambda (p) + (format p "INPUT (-l~aw)~%" lib))) + (with-directory-excursion "pkgconfig" + (format #t "creating symlink for `~a'~%" + package.pc) + (when (file-exists? packagew.pc) + (symlink packagew.pc package.pc)))) + #~()))) + '("curses" "ncurses" "form" "panel" "menu"))))))) + (list #:configure-flags + #~`("--with-shared" "--without-debug" "--enable-widec" - "--enable-pc-files" "--with-versioned-syms=yes" - ,(list 'unquote '(string-append "--with-pkg-config-libdir=" - (assoc-ref %outputs "out") - "/lib/pkgconfig")) + "--enable-pc-files" "--with-versioned-syms=yes" + ,(string-append "--with-pkg-config-libdir=" + #$output "/lib/pkgconfig") - ;; By default headers land in an `ncursesw' subdir, which is not - ;; what users expect. - ,(list 'unquote '(string-append "--includedir=" (assoc-ref %outputs "out") - "/include")) - "--enable-overwrite" ;really honor --includedir + ;; By default headers land in an `ncursesw' subdir, which is not + ;; what users expect. + ,(string-append "--includedir=" #$output "/include") + "--enable-overwrite" ;really honor --includedir - ;; Make sure programs like 'tic', 'reset', and 'clear' have a - ;; correct RUNPATH. - ,(list 'unquote '(string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") - "/lib")) + ;; Make sure programs like 'tic', 'reset', and 'clear' have a + ;; correct RUNPATH. + ,(string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib") - ;; Starting from ncurses 6.1, "make install" runs "install -s" - ;; by default, which doesn't work for cross-compiled binaries - ;; because it invokes 'strip' instead of 'TRIPLET-strip'. Work - ;; around this. - ,@(if (%current-target-system) '("--disable-stripping") '()) + ;; Starting from ncurses 6.1, "make install" runs "install -s" + ;; by default, which doesn't work for cross-compiled binaries + ;; because it invokes 'strip' instead of 'TRIPLET-strip'. Work + ;; around this. + #$@(if (%current-target-system) #~("--disable-stripping") #~()) - ;; Do not assume a default search path in ld, even if it is only to - ;; filter it out in ncurses-config. Mainly because otherwise it ends - ;; up using the libdir from binutils, which makes little sense and - ;; causes an unnecessary runtime dependency. - "cf_cv_ld_searchpath=/no-ld-searchpath" + ;; Do not assume a default search path in ld, even if it is only to + ;; filter it out in ncurses-config. Mainly because otherwise it ends + ;; up using the libdir from binutils, which makes little sense and + ;; causes an unnecessary runtime dependency. + "cf_cv_ld_searchpath=/no-ld-searchpath" - ;; MinGW: Use term-driver created for the MinGW port. - ,@(if (target-mingw?) '("--enable-term-driver") '())))) - #:tests? #f ; no "check" target - #:phases (modify-phases %standard-phases - (add-after 'unpack 'apply-rollup-patch - ,apply-rollup-patch-phase) - (replace 'configure ,configure-phase) - (add-after 'install 'post-install - ,post-install-phase) - (add-before 'configure 'patch-makefile-SHELL - ,patch-makefile-phase) - (add-before 'patch-source-shebangs 'remove-unneeded-shebang - ,remove-shebang-phase))))) + ;; MinGW: Use term-driver created for the MinGW port. + #$@(if (target-mingw?) #~("--enable-term-driver") #~()) + "CXXFLAGS=-std=c++11") + #:tests? #f ; no "check" target + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'apply-rollup-patch + #$apply-rollup-patch-phase) + (replace 'configure #$configure-phase) + (add-after 'install 'post-install + #$post-install-phase) + (add-before 'configure 'patch-makefile-SHELL + #$patch-makefile-phase) + (add-before 'patch-source-shebangs 'remove-unneeded-shebang + #$remove-shebang-phase))))) (native-inputs - `(,@(if (%current-target-system) - `(("self" ,this-package)) ;for `tic' - '()) - ("rollup-patch" - ,(origin - (method url-fetch) - (uri (match (string-split (version-major+minor+point version) #\.) - ((major minor point) - (string-append "https://invisible-mirror.net/archives" - "/ncurses/" major "." minor "/ncurses-" - major "." minor "-" point "-patch.sh.bz2")))) - (sha256 - (base32 - "16ny892yhimy6r4mmsgw3rcl0i15570ifn9c54g1ndyrk7kpmlgs")))) - ("pkg-config" ,pkg-config))) + (if (%current-target-system) + (list pkg-config this-package) ;for 'tic' + (list pkg-config))) (native-search-paths (list (search-path-specification (variable "TERMINFO_DIRS") @@ -237,13 +220,10 @@ ncursesw library provides wide character support.") (license x11) (home-page "https://www.gnu.org/software/ncurses/"))) -;; Needed by u-boot 2022.04+ -;; Consider merging into ncurses for next core-updates cycle. (define-public ncurses/tinfo-5 (package/inherit ncurses-5 (name "ncurses-with-tinfo") (arguments (substitute-keyword-arguments (package-arguments ncurses-5) ((#:configure-flags cf) - `(cons "--with-termlib=tinfo" - ,cf)))))) + #~(cons "--with-termlib=tinfo" #$cf)))))) diff --git a/nongnu/packages/nvidia.scm b/nongnu/packages/nvidia.scm index 5f03b8a..97039d9 100644 --- a/nongnu/packages/nvidia.scm +++ b/nongnu/packages/nvidia.scm @@ -1,28 +1,16 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 Hebi Li <hebi@lihebi.com> ;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com> ;;; Copyright © 2020, 2021 Jean-Baptiste Volatier <jbv@pm.me> ;;; Copyright © 2020-2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com> -;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. +;;; Copyright © 2022, 2023 Petr Hodina <phodina@protonmail.com> +;;; Copyright © 2022 Alexey Abramov <levenson@mmer.org> +;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space> (define-module (nongnu packages nvidia) #:use-module (guix packages) + #:use-module (guix deprecation) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) @@ -30,25 +18,37 @@ #:use-module ((guix licenses) #:prefix license-gnu:) #:use-module ((nonguix licenses) #:prefix license:) #:use-module (guix build-system linux-module) + #:use-module (guix build-system cmake) #:use-module (guix build-system copy) #:use-module (guix build-system gnu) + #:use-module (guix build-system python) #:use-module (guix build-system trivial) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages bootstrap) + #:use-module (gnu packages check) #:use-module (gnu packages compression) #:use-module (gnu packages elf) #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gawk) #:use-module (gnu packages gcc) #:use-module (gnu packages gl) #:use-module (gnu packages glib) #:use-module (gnu packages gtk) #:use-module (gnu packages linux) #:use-module (gnu packages m4) + #:use-module (gnu packages lsof) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages python-web) + #:use-module (gnu packages qt) + #:use-module (gnu packages terminals) #:use-module (gnu packages video) + #:use-module (gnu packages web) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xml) #:use-module (gnu packages xorg) #:use-module (nongnu packages linux) #:use-module (ice-9 match) @@ -58,400 +58,484 @@ #:use-module (ice-9 match) #:use-module (srfi srfi-1)) -; Used for closed-source packages -(define nvidia-version "470.86") +(define nvidia-version "515.76") -; Used for the open-source kernel module package -(define nversion "515.57") +(define computed-origin-method + (@@ (guix packages) computed-origin-method)) -(define-public nvidia-driver - (package - (name "nvidia-driver") - (version nvidia-version) - (source +;; Extract the driver installer and make it a new origin instance for reusing. +(define (make-nvidia-source version installer) + (origin + (method computed-origin-method) + (file-name (string-append "nvidia-driver-" version "-checkout")) + (sha256 #f) + (uri + (delay + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (ice-9 ftw)) + (set-path-environment-variable + "PATH" '("bin") + (list (canonicalize-path #+bash-minimal) + (canonicalize-path #+coreutils) + (canonicalize-path #+gawk) + (canonicalize-path #+grep) + (canonicalize-path #+tar) + (canonicalize-path #+which) + (canonicalize-path #+xz))) + (setenv "XZ_OPT" (string-join (%xz-parallel-args))) + (invoke "sh" #$installer "-x") + (copy-recursively + (car (scandir (canonicalize-path (getcwd)) + (lambda (file) + (not (member file '("." "..")))))) + #$output))))))) + +(define nvidia-source + (let ((version nvidia-version)) + (make-nvidia-source + version (origin - (uri (format #f "http://us.download.nvidia.com/XFree86/Linux-x86_64/~a/~a.run" - version - (format #f "NVIDIA-Linux-x86_64-~a" version))) - (sha256 (base32 "0krwcxc0j19vjnk8sv6mx1lin2rm8hcfhc2hg266846jvcws1dsg")) (method url-fetch) - (file-name (string-append "nvidia-driver-" version "-checkout")))) - (build-system linux-module-build-system) - (arguments - (list #:linux linux-lts - #:tests? #f - #:phases - #~(modify-phases %standard-phases - (replace 'unpack - (lambda* (#:key inputs #:allow-other-keys #:rest r) - (let ((source (assoc-ref inputs "source"))) - (invoke "sh" source "--extract-only") - (chdir #$(format #f "NVIDIA-Linux-x86_64-~a" version))))) - (replace 'build - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; We cannot use with-directory-excursion, because the install - ;; phase needs to be in the kernel folder. Otherwise no .ko - ;; would be installed. - (chdir "kernel") - ;; Patch Kbuild - (substitute* "Kbuild" - (("/bin/sh") (string-append #$bash-minimal "/bin/sh"))) - (invoke "make" - "-j" - (string-append "SYSSRC=" - (assoc-ref inputs "linux-module-builder") - "/lib/modules/build") - "CC=gcc"))) - (delete 'strip) - (add-after 'install 'install-copy - (lambda* (#:key inputs native-inputs outputs #:allow-other-keys) - (chdir "..") - (use-modules (ice-9 ftw) - (ice-9 regex) - (ice-9 textual-ports)) - (let* ((libdir (string-append #$output "/lib")) - (bindir (string-append #$output "/bin")) - (etcdir (string-append #$output "/etc"))) - ;; ------------------------------ - ;; Copy .so files - (for-each - (lambda (file) - (format #t "Copying '~a'...~%" file) - (install-file file libdir)) - (scandir "." (lambda (name) - (string-contains name ".so")))) - - (install-file "nvidia_drv.so" (string-append #$output "/lib/xorg/modules/drivers/")) - (install-file (string-append "libglxserver_nvidia.so." - #$(package-version nvidia-driver)) - (string-append #$output "/lib/xorg/modules/extensions/")) - - ;; ICD Loader for OpenCL - (let ((file (string-append etcdir "/OpenCL/vendors/nvidia.icd"))) - (mkdir-p (string-append etcdir "/OpenCL/vendors/")) - (call-with-output-file file - (lambda (port) - (display (string-append #$output "/lib/libnvidia-opencl.so.1") port))) - (chmod file #o555)) + (uri (string-append + "https://us.download.nvidia.com/XFree86/Linux-x86_64/" + version "/NVIDIA-Linux-x86_64-" version ".run")) + (sha256 + (base32 "0i5zyvlsjnfkpfqhw6pklp0ws8nndyiwxrg4pj04jpwnxf6a38n6")))))) - ;; Add udev rules for nvidia - (let ((rulesdir (string-append #$output "/lib/udev/rules.d/")) - (rules (string-append #$output "/lib/udev/rules.d/90-nvidia.rules")) - (sh (string-append #$bash-minimal "/bin/sh")) - (mknod (string-append #$coreutils "/bin/mknod")) - (cut (string-append #$coreutils "/bin/cut")) - (grep (string-append #$grep "/bin/grep"))) - (mkdir-p rulesdir) - (call-with-output-file rules - (lambda (port) - (put-string port - (string-append - "KERNEL==\"nvidia\", " - "RUN+=\"" sh " -c '" mknod " -m 666 /dev/nvidiactl c $$(" grep " nvidia-frontend /proc/devices | " cut " -d \\ -f 1) 255'\"" "\n" - "KERNEL==\"nvidia_modeset\", " - "RUN+=\"" sh " -c '" mknod " -m 666 /dev/nvidia-modeset c $$(" grep " nvidia-frontend /proc/devices | " cut " -d \\ -f 1) 254'\"" "\n" - "KERNEL==\"card*\", SUBSYSTEM==\"drm\", DRIVERS==\"nvidia\", " - "RUN+=\"" sh " -c '" mknod " -m 666 /dev/nvidia0 c $$(" grep " nvidia-frontend /proc/devices | " cut " -d \\ -f 1) 0'\"" "\n" - "KERNEL==\"nvidia_uvm\", " - "RUN+=\"" sh " -c '" mknod " -m 666 /dev/nvidia-uvm c $$(" grep " nvidia-uvm /proc/devices | " cut " -d \\ -f 1) 0'\"" "\n" - "KERNEL==\"nvidia_uvm\", " - "RUN+=\"" sh " -c '" mknod " -m 666 /dev/nvidia-uvm-tools c $$(" grep " nvidia-uvm /proc/devices | " cut " -d \\ -f 1) 0'\"" "\n" ))))) - - ;; ------------------------------ - ;; Add a file to load nvidia drivers - (mkdir-p bindir) - (let ((file (string-append bindir "/nvidia-insmod")) - (moddir (string-append "/lib/modules/" (utsname:release (uname)) "-gnu/extra"))) - (call-with-output-file file - (lambda (port) - (put-string port (string-append "#!" (assoc-ref inputs "bash-minimal") "/bin/sh" "\n" - "modprobe ipmi_devintf" "\n" - "insmod " #$output moddir "/nvidia.ko" "\n" - "insmod " #$output moddir "/nvidia-modeset.ko" "\n" - "insmod " #$output moddir "/nvidia-uvm.ko" "\n" - "insmod " #$output moddir "/nvidia-drm.ko" "\n")))) - (chmod file #o555)) - (let ((file (string-append bindir "/nvidia-rmmod"))) - (call-with-output-file file - (lambda (port) - (put-string port (string-append "#!" #$bash-minimal "/bin/sh" "\n" - "rmmod " "nvidia-drm" "\n" - "rmmod " "nvidia-uvm" "\n" - "rmmod " "nvidia-modeset" "\n" - "rmmod " "nvidia" "\n" - "rmmod " "ipmi_devintf" "\n")))) - (chmod file #o555)) - - ;; ------------------------------ - ;; nvidia-smi - - (install-file "nvidia-smi" bindir) +(define-public gpustat + (package + (name "gpustat") + (version "1.0.0") + (source (origin + (method url-fetch) + (uri (pypi-uri "gpustat" version)) + (sha256 + (base32 + "1wg3yikkqdrcxp5xscyb9rxifgfwv7qh73xv4airab63b3w8y7jq")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs (list python-blessed python-nvidia-ml-py python-psutil + python-six)) + (native-inputs (list python-mock python-pytest python-pytest-runner)) + (home-page "https://github.com/wookayin/gpustat") + (synopsis "Utility to monitor NVIDIA GPU status and usage") + (description + "This package provides an utility to monitor NVIDIA GPU status +and usage.") + (license license-gnu:expat))) - ;; ------------------------------ - ;; patchelf - (let* ((ld.so (string-append #$glibc #$(glibc-dynamic-linker))) +(define-public python-nvidia-ml-py + (package + (name "python-nvidia-ml-py") + (version "11.495.46") + (source (origin + (method url-fetch) + (uri (pypi-uri "nvidia-ml-py" version)) + (sha256 + (base32 + "09cnb7xasd7brby52j70y7fqsfm9n6gvgqf769v0cmj74ypy2s4g")))) + (build-system python-build-system) + (arguments + (list #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'fix-libnvidia + (lambda _ + (substitute* "pynvml.py" + (("libnvidia-ml.so.1") + (string-append #$(this-package-input + "nvidia-driver") + "/lib/libnvidia-ml.so.1")))))))) + (inputs (list nvidia-driver)) + (home-page "https://forums.developer.nvidia.com") + (synopsis "Python Bindings for the NVIDIA Management Library") + (description "This package provides official Python Bindings for the NVIDIA +Management Library") + (license license-gnu:bsd-3))) - (rpath (string-join - (list "$ORIGIN" - (string-append #$output "/lib") - (string-append #$glibc "/lib") - (string-append #$libx11 "/lib") - (string-append #$libxext "/lib") - (string-append #$pango "/lib") - (string-append #$gtk+ "/lib") - (string-append #$gtk+-2 "/lib") - (string-append #$atk "/lib") - (string-append #$glib "/lib") - (string-append #$cairo "/lib") - (string-append #$gdk-pixbuf "/lib") - (string-append #$wayland "/lib") - (string-append #$gcc:lib "/lib")) - ":"))) - (define (patch-elf file) - (format #t "Patching ~a ...~%" file) - (unless (string-contains file ".so") - (invoke "patchelf" "--set-interpreter" ld.so file)) - (invoke "patchelf" "--set-rpath" rpath file)) - (for-each (lambda (file) - (when (elf-file? file) - (patch-elf file))) - (find-files #$output ".*\\.so")) - (patch-elf (string-append bindir "/" "nvidia-smi"))) +(define-public nvidia-htop + (package + (name "nvidia-htop") + (version "1.0.5") + (source (origin + (method url-fetch) + (uri (pypi-uri "nvidia-htop" version)) + (sha256 + (base32 + "0lv9cpccpkbg0d577irm1lp9rx6pacyk2pk9v41k9s9hyl4b7hvx")))) + (build-system python-build-system) + (arguments + (list #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'fix-libnvidia + (lambda _ + (substitute* "nvidia-htop.py" + (("nvidia-smi") + (string-append #$(this-package-input + "nvidia-driver") + "/bin/nvidia-smi")))))))) + (inputs (list nvidia-driver)) + (propagated-inputs (list python-termcolor)) + (home-page "https://github.com/peci1/nvidia-htop") + (synopsis "Tool to enrich the output of nvidia-smi") + (description "This package provides tool for enriching the output of +nvidia-smi.") + (license license-gnu:bsd-3))) - ;; ------------------------------ - ;; Create short name symbolic links - (for-each (lambda (file) - (let* ((short (regexp-substitute - #f - (string-match "([^/]*\\.so).*" file) - 1)) - (major (cond - ((or (string=? short "libGLX.so") - (string=? short "libGLX_nvidia.so") - (string=? short "libEGL_nvidia.so")) "0") - ((string=? short "libGLESv2.so") "2") - (else "1"))) - (mid (string-append short "." major)) - (short-file (string-append libdir "/" short)) - (mid-file (string-append libdir "/" mid))) - ;; FIXME the same name, print out warning at least - ;; [X] libEGL.so.1.1.0 - ;; [ ] libEGL.so.435.21 - (when (not (file-exists? short-file)) - (format #t "Linking ~a to ~a ...~%" short file) - (symlink (basename file) short-file)) - (when (not (file-exists? mid-file)) - (format #t "Linking ~a to ~a ...~%" mid file) - (symlink (basename file) mid-file)))) - (find-files libdir "\\.so\\.")) - (symlink (string-append "libglxserver_nvidia.so." - #$(package-version nvidia-driver)) - (string-append #$output "/lib/xorg/modules/extensions/" "libglxserver_nvidia.so")))))))) - (supported-systems '("x86_64-linux")) - (native-inputs - (list - patchelf - perl - python-2 - which - xz)) - (inputs - (list - atk - bash-minimal - cairo - coreutils - `(,gcc "lib") - gdk-pixbuf - glib - grep - gtk+ - gtk+-2 - kmod - glibc - libx11 - libxext - linux-lts - pango - wayland)) - (home-page "https://www.nvidia.com") - (synopsis "Proprietary Nvidia driver") - (description "This is the evil Nvidia driver. Don't forget to add -nvidia-driver to the udev-rules in your config.scm: -@code{(simple-service 'custom-udev-rules udev-service-type (list nvidia-driver))} -Further xorg should be configured by adding: -@code{(modules (cons* nvidia-driver %default-xorg-modules)) -(drivers '(\"nvidia\"))} to @code{xorg-configuration}.") - (license (license:nonfree (format #f "file:///share/doc/nvidia-driver-~a/LICENSE" version))))) +(define-public python-py3nvml + (package + (name "python-py3nvml") + (version "0.2.7") + (source (origin + (method url-fetch) + (uri (pypi-uri "py3nvml" version)) + (sha256 + (base32 + "0wxxky9amy38q7qjsdmmznk1kqdzwd680ps64i76cvlab421vvh9")))) + (build-system python-build-system) + (arguments + (list #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'fix-libnvidia + (lambda _ + (substitute* "py3nvml/py3nvml.py" + (("libnvidia-ml.so.1") + (string-append #$(this-package-input + "nvidia-driver") + "/lib/libnvidia-ml.so.1")))))))) + (propagated-inputs (list nvidia-driver python-xmltodict)) + (home-page "https://github.com/fbcotter/py3nvml") + (synopsis "Unoffcial Python 3 Bindings for the NVIDIA Management Library") + (description "This package provides unofficial Python 3 Bindings for the +NVIDIA Management Library") + (license license-gnu:bsd-3))) -(define-public nvidia-libs +(define-public nvidia-driver (package - (name "nvidia-libs") + (name "nvidia-driver") (version nvidia-version) - (source - (origin - (uri (format #f "http://us.download.nvidia.com/XFree86/Linux-x86_64/~a/~a.run" - version - (format #f "NVIDIA-Linux-x86_64-~a" version))) - (sha256 (base32 "0krwcxc0j19vjnk8sv6mx1lin2rm8hcfhc2hg266846jvcws1dsg")) - (method url-fetch) - (file-name (string-append "nvidia-driver-" version "-checkout")))) + (source nvidia-source) (build-system copy-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (replace 'unpack - (lambda* (#:key inputs #:allow-other-keys #:rest r) - (let ((source (assoc-ref inputs "source"))) - (invoke "sh" source "--extract-only") - (chdir ,(format #f "NVIDIA-Linux-x86_64-~a" version)) - #t))) - (delete 'build) - (delete 'check) - (add-after 'install 'patch-symlink - (lambda* (#:key inputs native-inputs outputs #:allow-other-keys) - (use-modules (ice-9 ftw) - (ice-9 regex) - (ice-9 textual-ports)) - (let* ((out (assoc-ref outputs "out")) - (libdir (string-append out "/lib")) - (bindir (string-append out "/bin")) - (etcdir (string-append out "/etc"))) - ;; ------------------------------ - ;; patchelf - (let* ((libc (assoc-ref inputs "libc")) - (ld.so (string-append libc ,(glibc-dynamic-linker))) + (list #:modules '((guix build copy-build-system) + (guix build utils) + (ice-9 ftw) + (ice-9 popen) + (ice-9 rdelim) + (ice-9 regex) + (ice-9 textual-ports)) + #:install-plan + #~`((,#$(match (or (%current-target-system) (%current-system)) + ("i686-linux" "32") + ("x86_64-linux" ".") + (_ ".")) + "lib/" #:include-regexp ("^./[^/]+\\.so") #:exclude-regexp ("nvidia_drv\\.so" "libglxserver_nvidia\\.so\\..*")) + ("." "share/nvidia/" #:include-regexp ("nvidia-application-profiles.*")) + ("." "share/egl/egl_external_platform.d/" #:include-regexp (".*_nvidia_.*\\.json")) + ("90-nvidia.rules" "lib/udev/rules.d/") + ("nvidia-drm-outputclass.conf" "share/x11/xorg.conf.d/") + ("nvidia-dbus.conf" "share/dbus-1/system.d/") + ("nvidia-smi.1.gz" "share/man/man1/") + ("nvidia.icd" "etc/OpenCL/vendors/") + ("nvidia_drv.so" "lib/xorg/modules/drivers/") + ("nvidia_icd.json" "share/vulkan/icd.d/") + ("nvidia_layers.json" "share/vulkan/implicit_layer.d/") + (,(string-append "libglxserver_nvidia.so." #$version) "lib/xorg/modules/extensions/")) + #:phases + #~(modify-phases %standard-phases + (delete 'strip) + (add-after 'unpack 'create-misc-files + (lambda* (#:key inputs #:allow-other-keys) + ;; Vulkan layer configuration + (for-each (lambda (file) + (substitute* file + (("lib(GLX|nvidia).*\\.so\\..*" all) + (string-append #$output "/lib/" all)))) + (scandir "." (lambda (name) + (string-contains name ".json")))) - (out (assoc-ref outputs "out")) - (rpath (string-join - (list "$ORIGIN" - (string-append out "/lib") - (string-append libc "/lib") - (string-append (assoc-ref inputs "atk") "/lib") - (string-append (assoc-ref inputs "cairo") "/lib") - (string-append (assoc-ref inputs "gcc:lib") "/lib") - (string-append (assoc-ref inputs "gdk-pixbuf") "/lib") - (string-append (assoc-ref inputs "glib") "/lib") - (string-append (assoc-ref inputs "gtk+") "/lib") - (string-append (assoc-ref inputs "gtk2") "/lib") - (string-append (assoc-ref inputs "libx11") "/lib") - (string-append (assoc-ref inputs "libxext") "/lib") - (string-append (assoc-ref inputs "pango") "/lib") - (string-append (assoc-ref inputs "wayland") "/lib")) - ":"))) - (define (patch-elf file) - (format #t "Patching ~a ...~%" file) - (unless (string-contains file ".so") - (invoke "patchelf" "--set-interpreter" ld.so file)) - (invoke "patchelf" "--set-rpath" rpath file)) - (for-each (lambda (file) - (when (elf-file? file) - (patch-elf file))) - (find-files out ".*\\.so"))) + ;; OpenCL vendor ICD configuration + (substitute* "nvidia.icd" + ((".*" all) (string-append #$output "/lib/" all))) - ;; ------------------------------ - ;; Create short name symbolic links - (for-each (lambda (file) - (let* ((short (regexp-substitute - #f + ;; Add udev rules for nvidia + (let ((rules "90-nvidia.rules")) + (call-with-output-file rules + (lambda (port) + (put-string port (format #f "~ +KERNEL==\"nvidia\", RUN+=\"@sh@ -c '@mknod@ -m 666 /dev/nvidiactl c $$(@grep@ nvidia-frontend /proc/devices | @cut@ -d \\ -f 1) 255'\" +KERNEL==\"nvidia_modeset\", RUN+=\"@sh@ -c '@mknod@ -m 666 /dev/nvidia-modeset c $$(@grep@ nvidia-frontend /proc/devices | @cut@ -d \\ -f 1) 254'\" +KERNEL==\"card*\", SUBSYSTEM==\"drm\", DRIVERS==\"nvidia\", RUN+=\"@sh@ -c '@mknod@ -m 666 /dev/nvidia0 c $$(@grep@ nvidia-frontend /proc/devices | @cut@ -d \\ -f 1) 0'\" +KERNEL==\"nvidia_uvm\", RUN+=\"@sh@ -c '@mknod@ -m 666 /dev/nvidia-uvm c $$(@grep@ nvidia-uvm /proc/devices | @cut@ -d \\ -f 1) 0'\" +KERNEL==\"nvidia_uvm\", RUN+=\"@sh@ -c '@mknod@ -m 666 /dev/nvidia-uvm-tools c $$(@grep@ nvidia-uvm /proc/devices | @cut@ -d \\ -f 1) 0'\" +")))) + (substitute* rules + (("@\\<(sh|grep|mknod|cut)\\>@" all cmd) + (search-input-file inputs (string-append "/bin/" cmd))))))) + (add-after 'install 'patch-elf + (lambda _ + (let* ((ld.so (string-append #$(this-package-input "glibc") + #$(glibc-dynamic-linker))) + (rpath (string-join + (list "$ORIGIN" + (string-append #$output "/lib") + (string-append #$gcc:lib "/lib") + (string-append #$gtk+-2 "/lib") + (string-append #$(this-package-input "atk") "/lib") + (string-append #$(this-package-input "cairo") "/lib") + (string-append #$(this-package-input "gdk-pixbuf") "/lib") + (string-append #$(this-package-input "glib") "/lib") + (string-append #$(this-package-input "glibc") "/lib") + (string-append #$(this-package-input "gtk+") "/lib") + (string-append #$(this-package-input "libdrm") "/lib") + (string-append #$(this-package-input "libx11") "/lib") + (string-append #$(this-package-input "libxext") "/lib") + (string-append #$(this-package-input "mesa") "/lib") + (string-append #$(this-package-input "pango") "/lib") + (string-append #$(this-package-input "wayland") "/lib")) + ":"))) + (define (patch-elf file) + (format #t "Patching ~a ..." file) + (unless (string-contains file ".so") + (invoke "patchelf" "--set-interpreter" ld.so file)) + (invoke "patchelf" "--set-rpath" rpath file) + (display " done\n")) + (for-each (lambda (file) + (when (elf-file? file) + (patch-elf file))) + (append (find-files #$output ".*\\.so") + (find-files (string-append #$output "/bin"))))))) + (add-before 'patch-elf 'install-nvidia-smi + (lambda _ + (if (string-match "x86_64-linux" + (or #$(%current-target-system) #$(%current-system))) + (install-file "nvidia-smi" (string-append #$output "/bin"))))) + (add-after 'patch-elf 'create-short-name-symlinks + (lambda _ + (define (get-soname file) + (when elf-file? file + (let* ((cmd (string-append "patchelf --print-soname " file)) + (port (open-input-pipe cmd)) + (soname (read-line port))) + (close-pipe port) + soname))) - (string-match "([^/]*\\.so).*" file) - 1)) - (major (cond - ((or (string=? short "libGLX.so") - (string=? short "libGLX_nvidia.so") - (string=? short "libEGL_nvidia.so")) "0") - ((string=? short "libGLESv2.so") "2") - (else "1"))) - (mid (string-append short "." major)) - (short-file (string-append libdir "/" short)) - (mid-file (string-append libdir "/" mid))) - ;; FIXME the same name, print out warning at least - ;; [X] libEGL.so.1.1.0 - ;; [ ] libEGL.so.435.21 - (when (not (file-exists? short-file)) - (format #t "Linking ~a to ~a ...~%" short file) - (symlink (basename file) short-file)) - (when (not (file-exists? mid-file)) - (format #t "Linking ~a to ~a ...~%" mid file) - (symlink (basename file) mid-file)))) - (find-files libdir "\\.so\\.")) - #t)))) - #:install-plan - ,@(match (%current-system) - ("x86_64-linux" '(`(("." "lib" #:include-regexp ("^./[^/]+\\.so"))))) - ("i686-linux" '(`(("32" "lib" #:include-regexp ("^./[^/]+\\.so"))))) - (_ '())))) + (for-each + (lambda (lib) + (let ((lib-soname (get-soname lib))) + (when (string? lib-soname) + (let* ((soname (string-append + (dirname lib) "/" lib-soname)) + (base (string-append + (regexp-substitute + #f (string-match "(.*)\\.so.*" soname) 1) + ".so")) + (source (basename lib))) + (for-each + (lambda (target) + (unless (file-exists? target) + (format #t "Symlinking ~a -> ~a..." + target source) + (symlink source target) + (display " done\n"))) + (list soname base)))))) + (find-files #$output "\\.so")) + (symlink (string-append "libglxserver_nvidia.so." #$version) + (string-append #$output "/lib/xorg/modules/extensions/" "libglxserver_nvidia.so")) + (symlink (string-append "libnvidia-allocator.so." #$version) + (string-append #$output "/lib/nvidia-drm_gbm.so" ))))))) (supported-systems '("i686-linux" "x86_64-linux")) - (native-inputs - `(("patchelf" ,patchelf) - ("perl" ,perl) - ("python" ,python-2) - ("which" ,which) - ("xz" ,xz))) + (native-inputs (list patchelf)) (inputs - `(("atk" ,atk) - ("cairo" ,cairo) - ("gcc:lib" ,gcc "lib") - ("gdk-pixbuf" ,gdk-pixbuf) - ("glib" ,glib) - ("gtk+" ,gtk+) - ("gtk2" ,gtk+-2) - ("libc" ,glibc) - ("libx11" ,libx11) - ("libxext" ,libxext) - ("wayland" ,wayland))) + (list `(,gcc "lib") + atk + bash-minimal + cairo + coreutils + gdk-pixbuf + glib + glibc + grep + gtk+ + gtk+-2 + kmod + libdrm + libx11 + libxext + linux-lts + mesa + pango + wayland)) (home-page "https://www.nvidia.com") - (synopsis "Libraries of the proprietary Nvidia driver") - (description "These are the libraries of the evil Nvidia driver compatible -with the ones usually provided by Mesa. To use these libraries with -packages that have been compiled with a mesa output, take a look at the nvda -package.") - (license (license:nonfree (format #f "file:///share/doc/nvidia-driver-~a/LICENSE" version))))) + (synopsis "Proprietary NVIDIA driver") + (description + "This is the evil NVIDIA driver. Don't forget to add @code{service +nvidia-service-type} to your @file{config.scm}. Further xorg should be +configured by adding: @code{(modules (cons* nvidia-driver +%default-xorg-modules)) (drivers '(\"nvidia\"))} to @code{xorg-configuration}. +") + (license + (license:nonfree + (format #f "file:///share/doc/nvidia-driver-~a/LICENSE" version))))) -(define-public nvidia-module +(define-public nvidia-firmware + (let ((base nvidia-driver)) + (package + (inherit base) + (name "nvidia-firmware") + (arguments + (list #:install-plan + #~'(("firmware" #$(string-append + "lib/firmware/nvidia/" (package-version base)))) + #:phases + #~(modify-phases %standard-phases + (delete 'strip)))) + (inputs '()) + (native-inputs '()) + (properties `((hidden? . #t)))))) + +(define-public nvidia-exec (package - (name "nvidia-module") - (version nversion) + (name "nvidia-exec") + (version "0.1.0") (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/NVIDIA/open-gpu-kernel-modules") - (commit nversion))) + (url "https://github.com/pedro00dk/nvidia-exec") + (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 - "11f723xjj700pmxffz4v5mv6fyl5zc44i6ix042pj446dfbdgiqg")))) + "079alqgz3drv5mvx059fzhj3f20rnljl7r4yihfd5qq7djgmvv0v")))) + (build-system copy-build-system) + (arguments + (list #:install-plan #~`(("nvx" "bin/")) + #:modules #~((guix build copy-build-system) + (guix build utils) + (srfi srfi-1)) + #:phases #~(modify-phases %standard-phases + (add-after 'install 'wrap-nvx + (lambda* (#:key inputs outputs #:allow-other-keys) + (wrap-program (string-append #$output "/bin/nvx") + `("PATH" ":" prefix + ,(fold (lambda (input paths) + (let* ((in (assoc-ref + inputs input)) + (bin (string-append + in "/bin"))) + (append (filter + file-exists? + (list bin)) + paths))) + '() + '("jq" "lshw" "lsof"))))))))) + (inputs (list bash-minimal jq lshw lsof)) + (home-page "https://github.com/pedro00dk/nvidia-exec") + (synopsis "GPU switching without login out for Nvidia Optimus laptops") + (description + "This package provides GPU switching without login out for Nvidia Optimus +laptops.") + (license license-gnu:gpl3+))) + +(define-public nvidia-nvml + (package + (name "nvidia-nvml") + (version "352.79") + (source + (origin + (method url-fetch) + (uri (string-append "https://developer.download.nvidia.com/compute/cuda/7.5/Prod/gdk/" + (format #f "gdk_linux_amd64_~a_release.run" + (string-replace-substring version "." "_")))) + (sha256 + (base32 + "1r2cwm0j9svaasky3qw46cpg2q6rrazwzrc880nxh6bismyd3a9z")) + (file-name (string-append "nvidia-nvml-" version "-checkout")))) + (build-system copy-build-system) + (arguments + (list #:phases + #~(modify-phases %standard-phases + (replace 'unpack + (lambda _ + (invoke "sh" #$source "--tar" "xvf")))) + #:install-plan + ''(("payload/nvml/lib" "lib") + ("payload/nvml/include" "include/nvidia/gdk") + ("payload/nvml/example" "src/gdk/nvml/examples") + ("payload/nvml/doc/man" "share/man") + ("payload/nvml/README.txt" "README.txt") + ("payload/nvml/COPYRIGHT.txt" "COPYRIGHT.txt")))) + (home-page "https://www.nvidia.com") + (synopsis "The NVIDIA Management Library (NVML)") + (description "C-based programmatic interface for monitoring and managing various +states within NVIDIA Tesla GPUs. It is intended to be a platform for +building 3rd party applications, and is also the underlying library for the +NVIDIA-supported nvidia-smi tool. NVML is thread-safe so it is safe to make +simultaneous NVML calls from multiple threads.") + ;; Doesn't have any specific LICENSE file, but see COPYRIGHT.txt for details. + (license (license:nonfree "file://COPYRIGHT.txt")))) + +(define-public nvidia-libs + (deprecated-package "nvidia-libs" nvidia-driver)) + +(define-public nvidia-module + (package + (name "nvidia-module") + (version nvidia-version) + (source nvidia-source) (build-system linux-module-build-system) (arguments - (list #:linux linux - #:source-directory "kernel-open" - #:tests? #f + (list #:linux linux-lts + #:source-directory "kernel" + #:tests? #f #:make-flags - #~(list (string-append "CC=" #$(cc-for-target)) - (string-append "SYSSRC=" (assoc-ref %build-inputs - "linux-module-builder") - "/lib/modules/build")) + #~(list (string-append "CC=" #$(cc-for-target))) #:phases #~(modify-phases %standard-phases - (add-after 'unpack 'fixpath - (lambda* (#:key inputs outputs #:allow-other-keys) - (substitute* "kernel-open/Kbuild" - (("/bin/sh") (string-append #$bash-minimal "/bin/sh"))))) + (delete 'strip) + (add-before 'configure 'fixpath + (lambda* (#:key (source-directory ".") #:allow-other-keys) + (substitute* (string-append source-directory "/Kbuild") + (("/bin/sh") (which "sh"))))) (replace 'build - (lambda* (#:key make-flags outputs #:allow-other-keys) - (apply invoke - `("make" "-j" - ,@make-flags "modules"))))))) - (inputs (list bash-minimal)) - (home-page "https://github.com/NVIDIA/open-gpu-kernel-modules") - (synopsis "Nvidia kernel module") + (lambda* (#:key (make-flags '()) (parallel-build? #t) + (source-directory ".") + inputs + #:allow-other-keys) + (apply invoke "make" "-C" (canonicalize-path source-directory) + (string-append "SYSSRC=" (search-input-directory + inputs "/lib/modules/build")) + `(,@(if parallel-build? + `("-j" ,(number->string + (parallel-job-count))) + '()) + ,@make-flags))))))) + (home-page "https://www.nvidia.com") + (synopsis "Proprietary NVIDIA kernel modules") (description - "This package provides Nvidia open-gpu-kernel-modules. However, -they are only for the latest GPU architectures Turing and Ampere. Also they -still require firmware file @code{gsp.bin} to be loaded as well as closed -source userspace tools from the corresponding driver release.") - (license license-gnu:gpl2))) + "This package provides the evil NVIDIA proprietary kernel modules.") + (license + (license:nonfree + (format #f "file:///share/doc/nvidia-driver-~a/LICENSE" version))))) + +(define-public nvidia-module-open + (let ((base nvidia-module)) + (package/inherit base + (name "nvidia-module-open") + (arguments + (substitute-keyword-arguments (package-arguments base) + ;; NOTE: Kernels compiled with CONFIG_LTO_CLANG_THIN would cause an + ;; error here. See also: + ;; <https://github.com/NVIDIA/open-gpu-kernel-modules/issues/214> + ;; <https://github.com/llvm/llvm-project/issues/55820> + ((#:source-directory _) "kernel-open"))) + (home-page "https://github.com/NVIDIA/open-gpu-kernel-modules") + (synopsis "NVIDIA kernel module") + (description + "This package provides NVIDIA open-gpu-kernel-modules. However, they +are only for the latest GPU architectures Turing and Ampere. Also they still +require firmware file @code{gsp.bin} to be loaded as well as closed source +userspace tools from the corresponding driver release.") + (license license-gnu:gpl2)))) (define-public nvidia-settings (package @@ -465,7 +549,7 @@ source userspace tools from the corresponding driver release.") (file-name (git-file-name name version)) (sha256 (base32 - "1lnj5hwmfkzs664fxlhljqy323394s1i7qzlpsjyrpm07sa93bky")))) + "1hplc42115c06cc555cjmw3c9371qn7ibwjpqjybcf6ixfd6lryq")))) (build-system gnu-build-system) (arguments (list #:tests? #f ;no test suite @@ -501,34 +585,79 @@ configuration, creating application profiles, gpu monitoring and more.") (home-page "https://github.com/NVIDIA/nvidia-settings") (license license-gnu:gpl2))) +(define-public nvidia-system-monitor + (package + (name "nvidia-system-monitor") + (version "1.5") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/congard/nvidia-system-monitor-qt") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0aghdqljvjmc02g9jpc7sb3yhha738ywny51riska56hkxd3jg2l")))) + (build-system cmake-build-system) + (arguments + (list #:tests? #f + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'fix-nvidia-smi + (lambda _ + (let ((nvidia-smi (string-append #$(this-package-input + "nvidia-driver") + "/bin/nvidia-smi"))) + (substitute* "src/core/InfoProvider.cpp" + (("nvidia-smi") + nvidia-smi)) + (substitute* "src/main.cpp" + (("which nvidia-smi") + (string-append "which " nvidia-smi)) + (("exec..nvidia-smi") + (string-append "exec(\"" nvidia-smi)))))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((bin (string-append #$output "/bin"))) + (mkdir-p bin) + (install-file "qnvsm" bin))))))) + (inputs (list qtbase-5 qtdeclarative-5 nvidia-driver)) + (home-page "https://github.com/congard/nvidia-system-monitor-qt") + (synopsis "Task manager for Nvidia graphics cards") + (description + "This package provides a task manager for Nvidia graphics cards.") + (license license-gnu:expat))) + ;; nvda is used as a name because it has the same length as mesa which is ;; required for grafting (define-public nvda (package - (inherit nvidia-libs) + (inherit nvidia-driver) (name "nvda") (source #f) (build-system trivial-build-system) (arguments (list #:modules '((guix build union)) - #:builder #~(begin - (use-modules (guix build union) - (srfi srfi-1) - (ice-9 regex)) - (union-build (assoc-ref %outputs "out") - (list #$mesa #$nvidia-libs) - #:resolve-collision (lambda (files) (let ((file - (if (string-match "nvidia-libs" (first files)) - (first files) - (last files)))) - (format #t "chosen ~a ~%" file) - file)))))) - (description "These are the libraries of the evil Nvidia driver, -packaged in such a way that you can use the transformation option -@code{--with-graft=mesa=nvda} to use the nvidia driver with a package that requires mesa.") - (inputs - (list mesa - nvidia-libs)) + #:builder + #~(begin + (use-modules (guix build union) + (srfi srfi-1) + (ice-9 regex)) + (union-build #$output + (list #$(this-package-input "mesa") + #$(this-package-input "nvidia-driver")) + #:resolve-collision + (lambda (files) + (let ((file (if (string-match "nvidia-driver" + (first files)) + (first files) + (last files)))) + (format #t "chosen ~a ~%" file) + file)))))) + (description + "These are the libraries of the evil NVIDIA driver, packaged in such a +way that you can use the transformation option @code{--with-graft=mesa=nvda} +to use the NVIDIA driver with a package that requires mesa.") + (inputs (list mesa nvidia-driver)) (outputs '("out")))) (define mesa/fake diff --git a/nongnu/packages/patches/broadcom-sta-debian-fix-kernel-warnings.patch b/nongnu/packages/patches/broadcom-sta-debian-fix-kernel-warnings.patch deleted file mode 100644 index e9bf66a..0000000 --- a/nongnu/packages/patches/broadcom-sta-debian-fix-kernel-warnings.patch +++ /dev/null @@ -1,161 +0,0 @@ ---- a/src/wl/sys/wl_cfg80211_hybrid.c -+++ b/src/wl/sys/wl_cfg80211_hybrid.c -@@ -1968,7 +1968,7 @@ - - if (dtoh32(bi->length) > WL_BSS_INFO_MAX) { - WL_DBG(("Beacon is larger than buffer. Discarding\n")); -- return err; -+ return -E2BIG; - } - notif_bss_info = kzalloc(sizeof(*notif_bss_info) + sizeof(*mgmt) - sizeof(u8) + - WL_BSS_INFO_MAX, GFP_KERNEL); -@@ -1992,9 +1992,15 @@ - beacon_proberesp->capab_info = cpu_to_le16(bi->capability); - wl_rst_ie(wl); - -- wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length); -- wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX - -+ err = wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length); -+ if (err) -+ goto inform_single_bss_out; -+ -+ err = wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX - - offsetof(struct wl_cfg80211_bss_info, frame_buf)); -+ if (err) -+ goto inform_single_bss_out; -+ - notif_bss_info->frame_len = offsetof(struct ieee80211_mgmt, u.beacon.variable) + - wl_get_ielen(wl); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39) -@@ -2006,14 +2012,14 @@ - #endif - if (freq == 0) { - WL_ERR(("Invalid channel, fail to chcnage channel to freq\n")); -- kfree(notif_bss_info); -- return -EINVAL; -+ err = -EINVAL; -+ goto inform_single_bss_out; - } - channel = ieee80211_get_channel(wiphy, freq); - if (unlikely(!channel)) { - WL_ERR(("ieee80211_get_channel error\n")); -- kfree(notif_bss_info); -- return -EINVAL; -+ err = -EINVAL; -+ goto inform_single_bss_out; - } - - WL_DBG(("SSID : \"%s\", rssi %d, channel %d, capability : 0x04%x, bssid %pM\n", -@@ -2021,28 +2027,37 @@ - mgmt->u.beacon.capab_info, &bi->BSSID)); - - signal = notif_bss_info->rssi * 100; -- cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt, -- le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL); -- if (unlikely(!cbss)) { -- WL_ERR(("cfg80211_inform_bss_frame error\n")); -- kfree(notif_bss_info); -- return -EINVAL; -- } - -- notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset); -- notify_ielen = le32_to_cpu(bi->ie_length); -+ if (!wl->scan_request) { -+ cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt, -+ le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL); -+ if (unlikely(!cbss)) { -+ WL_ERR(("cfg80211_inform_bss_frame error\n")); -+ err = -ENOMEM; -+ goto inform_single_bss_out; -+ } -+ } else { -+ notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset); -+ notify_ielen = le32_to_cpu(bi->ie_length); - #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) -- cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet), -- 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int, -- (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL); -+ cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet), -+ 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int, -+ (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL); - #else -- cbss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN, (const u8 *)(bi->BSSID.octet), -- 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int, -- (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL); -+ cbss = cfg80211_inform_bss(wiphy, channel, -+ wl->active_scan ? -+ CFG80211_BSS_FTYPE_PRESP : CFG80211_BSS_FTYPE_BEACON, -+ (const u8 *)(bi->BSSID.octet), 0, -+ beacon_proberesp->capab_info, -+ beacon_proberesp->beacon_int, -+ (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL); - #endif -- -- if (unlikely(!cbss)) -- return -ENOMEM; -+ if (unlikely(!cbss)) { -+ WL_ERR(("cfg80211_inform_bss error\n")); -+ err = -ENOMEM; -+ goto inform_single_bss_out; -+ } -+ } - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) - cfg80211_put_bss(wiphy, cbss); -@@ -2050,6 +2065,7 @@ - cfg80211_put_bss(cbss); - #endif - -+inform_single_bss_out: - kfree(notif_bss_info); - - return err; -@@ -2316,6 +2332,9 @@ - if (err) - goto update_bss_info_out; - -+ bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid, -+ ssid->SSID, ssid->SSID_len, WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); -+ - ie = ((u8 *)bi) + bi->ie_offset; - ie_len = bi->ie_length; - } else { -@@ -2328,11 +2347,18 @@ - ie_len = bss->len_information_elements; - #endif - wl->conf->channel = *bss->channel; -+ } -+ -+ if (bss) { - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) - cfg80211_put_bss(wiphy, bss); - #else - cfg80211_put_bss(bss); - #endif -+ } else { -+ WL_DBG(("Could not update BSS\n")); -+ err = -EINVAL; -+ goto update_bss_info_out; - } - - tim = bcm_parse_tlvs(ie, ie_len, WLAN_EID_TIM); -@@ -2360,10 +2386,17 @@ - struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl); - s32 err = 0; - -- wl_get_assoc_ies(wl); -+ err = wl_get_assoc_ies(wl); -+ if (err) -+ return err; -+ - memcpy(wl->profile->bssid, &e->addr, ETHER_ADDR_LEN); - memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN); -- wl_update_bss_info(wl); -+ -+ err = wl_update_bss_info(wl); -+ if (err) -+ return err; -+ - cfg80211_roamed(ndev, - #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) - &wl->conf->channel, diff --git a/nongnu/packages/patches/broadcom-sta-fix_mac_profile_discrepancy.patch b/nongnu/packages/patches/broadcom-sta-fix_mac_profile_discrepancy.patch deleted file mode 100644 index 586bfcc..0000000 --- a/nongnu/packages/patches/broadcom-sta-fix_mac_profile_discrepancy.patch +++ /dev/null @@ -1,16 +0,0 @@ -https://bugs.archlinux.org/task/61090 - ---- a/src/wl/sys/wl_cfg80211_hybrid.c 2015-09-19 00:47:30.000000000 +0200 -+++ b/src/wl/sys/wl_cfg80211_hybrid.c 2018-11-14 14:06:03.313487995 +0100 -@@ -1444,11 +1444,10 @@ - s32 rate; - s32 err = 0; - - if (memcmp(mac, wl->profile->bssid, ETHER_ADDR_LEN)) { - WL_ERR(("Wrong Mac address, mac = %pM profile =%pM\n", mac, wl->profile->bssid)); -- return -ENOENT; - } - - err = wl_dev_ioctl(dev, WLC_GET_RATE, &rate, sizeof(rate)); - if (err) { - WL_DBG(("Could not get rate (%d)\n", err)); diff --git a/nongnu/packages/patches/broadcom-sta-gcc.patch b/nongnu/packages/patches/broadcom-sta-gcc.patch deleted file mode 100644 index f93e3f1..0000000 --- a/nongnu/packages/patches/broadcom-sta-gcc.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/Makefile 2014-06-26 10:42:08.000000000 +0000 -+++ b/Makefile 2014-07-17 22:44:01.662297228 +0000 -@@ -126,6 +126,8 @@ - EXTRA_CFLAGS += -I$(src)/src/shared/bcmwifi/include - #EXTRA_CFLAGS += -DBCMDBG_ASSERT -DBCMDBG_ERR - -+EXTRA_CFLAGS += -Wno-date-time -+ - EXTRA_LDFLAGS := $(src)/lib/wlc_hybrid.o_shipped - - KBASE ?= /lib/modules/`uname -r` diff --git a/nongnu/packages/patches/broadcom-sta-license.patch b/nongnu/packages/patches/broadcom-sta-license.patch deleted file mode 100644 index aebb463..0000000 --- a/nongnu/packages/patches/broadcom-sta-license.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -Naur hybrid-portsrc-x86_32-v5_10_91_9.orig/src/wl/sys/wl_linux.c hybrid-portsrc-x86_32-v5_10_91_9/src/wl/sys/wl_linux.c ---- hybrid-portsrc-x86_32-v5_10_91_9.orig/src/wl/sys/wl_linux.c 2009-04-23 02:48:59.000000000 +0900 -+++ hybrid-portsrc-x86_32-v5_10_91_9/src/wl/sys/wl_linux.c 2009-05-08 00:48:20.000000000 +0900 -@@ -171,6 +171,8 @@ - static void wl_free_if(wl_info_t *wl, wl_if_t *wlif); - static void wl_get_driver_info(struct net_device *dev, struct ethtool_drvinfo *info); - -+MODULE_LICENSE("MIXED/Proprietary"); -+ - #if defined(WL_CONFIG_RFKILL) - #include <linux/rfkill.h> - static int wl_init_rfkill(wl_info_t *wl); - diff --git a/nongnu/packages/patches/broadcom-sta-linux-4.11.patch b/nongnu/packages/patches/broadcom-sta-linux-4.11.patch deleted file mode 100644 index a779f8c..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-4.11.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c -index a9671e2..da36405 100644 ---- a/src/wl/sys/wl_cfg80211_hybrid.c -+++ b/src/wl/sys/wl_cfg80211_hybrid.c -@@ -30,6 +30,9 @@ - #include <linux/kthread.h> - #include <linux/netdevice.h> - #include <linux/ieee80211.h> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) -+#include <linux/sched/signal.h> -+#endif - #include <net/cfg80211.h> - #include <linux/nl80211.h> - #include <net/rtnetlink.h> -diff --git a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c -index 489c9f5..f8278ad 100644 ---- a/src/wl/sys/wl_linux.c -+++ b/src/wl/sys/wl_linux.c -@@ -117,6 +117,9 @@ int wl_found = 0; - - typedef struct priv_link { - wl_if_t *wlif; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) -+ unsigned long last_rx; -+#endif - } priv_link_t; - - #define WL_DEV_IF(dev) ((wl_if_t*)((priv_link_t*)DEV_PRIV(dev))->wlif) -@@ -2450,6 +2453,9 @@ wl_monitor(wl_info_t *wl, wl_rxsts_t *rxsts, void *p) - { - struct sk_buff *oskb = (struct sk_buff *)p; - struct sk_buff *skb; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) -+ priv_link_t *priv_link; -+#endif - uchar *pdata; - uint len; - -@@ -2916,7 +2922,13 @@ wl_monitor(wl_info_t *wl, wl_rxsts_t *rxsts, void *p) - if (skb == NULL) return; - - skb->dev = wl->monitor_dev; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) -+ priv_link = MALLOC(wl->osh, sizeof(priv_link_t)); -+ priv_link = netdev_priv(skb->dev); -+ priv_link->last_rx = jiffies; -+#else - skb->dev->last_rx = jiffies; -+#endif - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) - skb_reset_mac_header(skb); - #else diff --git a/nongnu/packages/patches/broadcom-sta-linux-4.12.patch b/nongnu/packages/patches/broadcom-sta-linux-4.12.patch deleted file mode 100644 index 8abc73d..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-4.12.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c -index da36405..d3741eb 100644 ---- a/src/wl/sys/wl_cfg80211_hybrid.c -+++ b/src/wl/sys/wl_cfg80211_hybrid.c -@@ -53,7 +53,11 @@ u32 wl_dbg_level = WL_DBG_ERR; - #endif - - static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev, -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) -+ enum nl80211_iftype type, struct vif_params *params); -+#else - enum nl80211_iftype type, u32 *flags, struct vif_params *params); -+#endif - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) - static s32 - wl_cfg80211_scan(struct wiphy *wiphy, -@@ -466,7 +470,11 @@ wl_dev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len) - - static s32 - wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev, -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) -+ enum nl80211_iftype type, -+#else - enum nl80211_iftype type, u32 *flags, -+#endif - struct vif_params *params) - { - struct wl_cfg80211_priv *wl = wiphy_to_wl(wiphy); -@@ -2361,6 +2369,20 @@ wl_bss_roaming_done(struct wl_cfg80211_priv *wl, struct net_device *ndev, - const wl_event_msg_t *e, void *data) - { - struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl); -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) -+ struct cfg80211_bss *bss; -+ struct wlc_ssid *ssid; -+ ssid = &wl->profile->ssid; -+ bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid, -+ ssid->SSID, ssid->SSID_len, WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); -+ struct cfg80211_roam_info roam_info = { -+ .bss = bss, -+ .req_ie = conn_info->req_ie, -+ .req_ie_len = conn_info->req_ie_len, -+ .resp_ie = conn_info->resp_ie, -+ .resp_ie_len = conn_info->resp_ie_len, -+ }; -+#endif - s32 err = 0; - - wl_get_assoc_ies(wl); -@@ -2368,12 +2390,17 @@ wl_bss_roaming_done(struct wl_cfg80211_priv *wl, struct net_device *ndev, - memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN); - wl_update_bss_info(wl); - cfg80211_roamed(ndev, -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) -+ &roam_info, -+#else - #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) - &wl->conf->channel, - #endif - (u8 *)&wl->bssid, - conn_info->req_ie, conn_info->req_ie_len, -- conn_info->resp_ie, conn_info->resp_ie_len, GFP_KERNEL); -+ conn_info->resp_ie, conn_info->resp_ie_len, -+#endif -+ GFP_KERNEL); - WL_DBG(("Report roaming result\n")); - - set_bit(WL_STATUS_CONNECTED, &wl->status); diff --git a/nongnu/packages/patches/broadcom-sta-linux-4.15.patch b/nongnu/packages/patches/broadcom-sta-linux-4.15.patch deleted file mode 100644 index 523fa29..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-4.15.patch +++ /dev/null @@ -1,47 +0,0 @@ -See: https://lkml.org/lkml/2017/11/25/90 - -diff -urNZ a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c ---- a/src/wl/sys/wl_linux.c 2015-09-18 22:47:30.000000000 +0000 -+++ b/src/wl/sys/wl_linux.c 2018-01-31 22:52:10.859856221 +0000 -@@ -93,7 +93,11 @@ - - #include <wlc_wowl.h> - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) -+static void wl_timer(struct timer_list *tl); -+#else - static void wl_timer(ulong data); -+#endif - static void _wl_timer(wl_timer_t *t); - static struct net_device *wl_alloc_linux_if(wl_if_t *wlif); - -@@ -2298,9 +2302,15 @@ - } - - static void -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) -+wl_timer(struct timer_list *tl) -+{ -+ wl_timer_t *t = from_timer(t, tl, timer); -+#else - wl_timer(ulong data) - { - wl_timer_t *t = (wl_timer_t *)data; -+#endif - - if (!WL_ALL_PASSIVE_ENAB(t->wl)) - _wl_timer(t); -@@ -2352,9 +2362,13 @@ - - bzero(t, sizeof(wl_timer_t)); - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) -+ timer_setup(&t->timer, wl_timer, 0); -+#else - init_timer(&t->timer); - t->timer.data = (ulong) t; - t->timer.function = wl_timer; -+#endif - t->wl = wl; - t->fn = fn; - t->arg = arg; diff --git a/nongnu/packages/patches/broadcom-sta-linux-4.7.patch b/nongnu/packages/patches/broadcom-sta-linux-4.7.patch deleted file mode 100644 index 566680a..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-4.7.patch +++ /dev/null @@ -1,109 +0,0 @@ -Since Linux 4.7, the enum ieee80211_band is no longer used - -This shall cause no problem's since both enums ieee80211_band -and nl80211_band were added in the same commit: -https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=13ae75b103e07304a34ab40c9136e9f53e06475c - -This patch refactors the references of IEEE80211_BAND_* to NL80211_BAND_* - -Reference: -https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=57fbcce37be7c1d2622b56587c10ade00e96afa3 - ---- a/src/wl/sys/wl_cfg80211_hybrid.c 2016-06-13 11:57:36.159340297 -0500 -+++ b/src/wl/sys/wl_cfg80211_hybrid.c 2016-06-13 11:58:18.442323435 -0500 -@@ -236,7 +236,7 @@ - #endif - - #define CHAN2G(_channel, _freq, _flags) { \ -- .band = IEEE80211_BAND_2GHZ, \ -+ .band = NL80211_BAND_2GHZ, \ - .center_freq = (_freq), \ - .hw_value = (_channel), \ - .flags = (_flags), \ -@@ -245,7 +245,7 @@ - } - - #define CHAN5G(_channel, _flags) { \ -- .band = IEEE80211_BAND_5GHZ, \ -+ .band = NL80211_BAND_5GHZ, \ - .center_freq = 5000 + (5 * (_channel)), \ - .hw_value = (_channel), \ - .flags = (_flags), \ -@@ -379,7 +379,7 @@ - }; - - static struct ieee80211_supported_band __wl_band_2ghz = { -- .band = IEEE80211_BAND_2GHZ, -+ .band = NL80211_BAND_2GHZ, - .channels = __wl_2ghz_channels, - .n_channels = ARRAY_SIZE(__wl_2ghz_channels), - .bitrates = wl_g_rates, -@@ -387,7 +387,7 @@ - }; - - static struct ieee80211_supported_band __wl_band_5ghz_a = { -- .band = IEEE80211_BAND_5GHZ, -+ .band = NL80211_BAND_5GHZ, - .channels = __wl_5ghz_a_channels, - .n_channels = ARRAY_SIZE(__wl_5ghz_a_channels), - .bitrates = wl_a_rates, -@@ -395,7 +395,7 @@ - }; - - static struct ieee80211_supported_band __wl_band_5ghz_n = { -- .band = IEEE80211_BAND_5GHZ, -+ .band = NL80211_BAND_5GHZ, - .channels = __wl_5ghz_n_channels, - .n_channels = ARRAY_SIZE(__wl_5ghz_n_channels), - .bitrates = wl_a_rates, -@@ -1876,8 +1876,8 @@ - wdev->wiphy->max_num_pmkids = WL_NUM_PMKIDS_MAX; - #endif - wdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); -- wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &__wl_band_2ghz; -- wdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &__wl_band_5ghz_a; -+ wdev->wiphy->bands[NL80211_BAND_2GHZ] = &__wl_band_2ghz; -+ wdev->wiphy->bands[NL80211_BAND_5GHZ] = &__wl_band_5ghz_a; - wdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; - wdev->wiphy->cipher_suites = __wl_cipher_suites; - wdev->wiphy->n_cipher_suites = ARRAY_SIZE(__wl_cipher_suites); -@@ -2000,7 +2000,7 @@ - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39) - freq = ieee80211_channel_to_frequency(notif_bss_info->channel, - (notif_bss_info->channel <= CH_MAX_2G_CHANNEL) ? -- IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ); -+ NL80211_BAND_2GHZ : NL80211_BAND_5GHZ); - #else - freq = ieee80211_channel_to_frequency(notif_bss_info->channel); - #endif -@@ -2116,7 +2116,7 @@ - return err; - } - chan = wf_chspec_ctlchan(chanspec); -- band = (chan <= CH_MAX_2G_CHANNEL) ? IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; -+ band = (chan <= CH_MAX_2G_CHANNEL) ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ; - freq = ieee80211_channel_to_frequency(chan, band); - channel = ieee80211_get_channel(wiphy, freq); - cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, channel, GFP_KERNEL); -@@ -2250,10 +2250,10 @@ - join_params->params.chanspec_list[0] = - ieee80211_frequency_to_channel(chan->center_freq); - -- if (chan->band == IEEE80211_BAND_2GHZ) { -+ if (chan->band == NL80211_BAND_2GHZ) { - chanspec |= WL_CHANSPEC_BAND_2G; - } -- else if (chan->band == IEEE80211_BAND_5GHZ) { -+ else if (chan->band == NL80211_BAND_5GHZ) { - chanspec |= WL_CHANSPEC_BAND_5G; - } - else { -@@ -2885,7 +2885,7 @@ - - if (phy == 'n' || phy == 'a' || phy == 'v') { - wiphy = wl_to_wiphy(wl); -- wiphy->bands[IEEE80211_BAND_5GHZ] = &__wl_band_5ghz_n; -+ wiphy->bands[NL80211_BAND_5GHZ] = &__wl_band_5ghz_n; - } - - return err; diff --git a/nongnu/packages/patches/broadcom-sta-linux-4.8.patch b/nongnu/packages/patches/broadcom-sta-linux-4.8.patch deleted file mode 100644 index 20e8a9a..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-4.8.patch +++ /dev/null @@ -1,64 +0,0 @@ -From d3f93542326a06d920c6eb89b703384290d37b8b Mon Sep 17 00:00:00 2001 -From: Alberto Milone <alberto.milone@canonical.com> -Date: Fri, 2 Sep 2016 17:35:34 +0200 -Subject: [PATCH 1/1] Add support for Linux 4.8 - -Orginal author: Krzysztof Kolasa ---- - src/wl/sys/wl_cfg80211_hybrid.c | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c -index 2fc71fe..ec5e472 100644 ---- a/src/wl/sys/wl_cfg80211_hybrid.c -+++ b/src/wl/sys/wl_cfg80211_hybrid.c -@@ -2388,8 +2388,16 @@ wl_bss_connect_done(struct wl_cfg80211_priv *wl, struct net_device *ndev, - s32 err = 0; - - if (wl->scan_request) { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ struct cfg80211_scan_info info = { -+ .aborted = true, -+ }; -+ WL_DBG(("%s: Aborting scan\n", __FUNCTION__)); -+ cfg80211_scan_done(wl->scan_request, &info); -+#else - WL_DBG(("%s: Aborting scan\n", __FUNCTION__)); - cfg80211_scan_done(wl->scan_request, true); -+#endif - wl->scan_request = NULL; - } - -@@ -2490,7 +2498,14 @@ wl_notify_scan_status(struct wl_cfg80211_priv *wl, struct net_device *ndev, - - scan_done_out: - if (wl->scan_request) { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ struct cfg80211_scan_info info = { -+ .aborted = false, -+ }; -+ cfg80211_scan_done(wl->scan_request, &info); -+#else - cfg80211_scan_done(wl->scan_request, false); -+#endif - wl->scan_request = NULL; - } - rtnl_unlock(); -@@ -2909,7 +2924,14 @@ s32 wl_cfg80211_down(struct net_device *ndev) - s32 err = 0; - - if (wl->scan_request) { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ struct cfg80211_scan_info info = { -+ .aborted = true, -+ }; -+ cfg80211_scan_done(wl->scan_request, &info); -+#else - cfg80211_scan_done(wl->scan_request, true); -+#endif - wl->scan_request = NULL; - } - --- -2.7.4 - diff --git a/nongnu/packages/patches/broadcom-sta-linux-5.1.patch b/nongnu/packages/patches/broadcom-sta-linux-5.1.patch deleted file mode 100644 index 8f04a73..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-5.1.patch +++ /dev/null @@ -1,32 +0,0 @@ -commit bcb06af629a36eb84f9a35ac599ec7e51e2d39fb -Author: georgewhewell <georgerw@gmail.com> -Date: Sat May 18 21:22:37 2019 +0100 - - find src -type f -name \'*.c\' -exec sed -i "s/get_ds()/KERNEL_DS/g" {} \; - -diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c -index 7b606e0..51c81bc 100644 ---- a/src/wl/sys/wl_cfg80211_hybrid.c -+++ b/src/wl/sys/wl_cfg80211_hybrid.c -@@ -450,7 +450,7 @@ wl_dev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len) - ifr.ifr_data = (caddr_t)&ioc; - - fs = get_fs(); -- set_fs(get_ds()); -+ set_fs(KERNEL_DS); - #if defined(WL_USE_NETDEV_OPS) - err = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, SIOCDEVPRIVATE); - #else -diff --git a/src/wl/sys/wl_iw.c b/src/wl/sys/wl_iw.c -index c4c610b..9c3c74e 100644 ---- a/src/wl/sys/wl_iw.c -+++ b/src/wl/sys/wl_iw.c -@@ -117,7 +117,7 @@ dev_wlc_ioctl( - ifr.ifr_data = (caddr_t) &ioc; - - fs = get_fs(); -- set_fs(get_ds()); -+ set_fs(KERNEL_DS); - #if defined(WL_USE_NETDEV_OPS) - ret = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, SIOCDEVPRIVATE); - #else diff --git a/nongnu/packages/patches/broadcom-sta-linux-5.10.patch b/nongnu/packages/patches/broadcom-sta-linux-5.10.patch deleted file mode 100644 index c77fdc5..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-5.10.patch +++ /dev/null @@ -1,211 +0,0 @@ -From f3d652840f8dd959395065a1cf67ca40b04ec69b Mon Sep 17 00:00:00 2001 -From: Joan Bruguera <joanbrugueram@gmail.com> -Date: Tue, 13 Oct 2020 19:35:55 +0200 -Subject: [PATCH] Get rid of get_fs/set_fs calls in Broadcom WL driver. - -Tentative patch for broadcom-wl 6.30.223.271 driver for Linux 5.10 (tested -rc1 up to 5.10.1) - -Applies on top of all the patches applied to broadcom-wl-dkms 6.30.223.271-23 on Arch Linux. - -NB: Some checks in wlc_ioctl_internal are likely superfluous, - but I'm not familiar enough with the driver to remove them with confidence. - -See also: https://lwn.net/Articles/722267/ - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=47058bb54b57962b3958a936ddbc59355e4c5504 - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5e6e9852d6f76e01b2e6803c74258afa5b432bc5 - -Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com> ---- - src/wl/sys/wl_cfg80211_hybrid.c | 25 ++------------------- - src/wl/sys/wl_iw.c | 25 ++------------------- - src/wl/sys/wl_linux.c | 40 ++++++++++++++++++++++++++++----- - src/wl/sys/wl_linux.h | 2 ++ - src/wl/sys/wlc_pub.h | 1 + - 5 files changed, 42 insertions(+), 51 deletions(-) - -diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c -index 73c4b82..2e6df32 100644 ---- a/src/wl/sys/wl_cfg80211_hybrid.c -+++ b/src/wl/sys/wl_cfg80211_hybrid.c -@@ -38,6 +38,7 @@ - #include <wlioctl.h> - #include <proto/802.11.h> - #include <wl_cfg80211_hybrid.h> -+#include <wl_linux.h> - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) - #include <linux/sched/signal.h> -@@ -443,30 +444,8 @@ static void key_endian_to_host(struct wl_wsec_key *key) - static s32 - wl_dev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len) - { -- struct ifreq ifr; -- struct wl_ioctl ioc; -- mm_segment_t fs; -- s32 err = 0; -- - BUG_ON(len < sizeof(int)); -- -- memset(&ioc, 0, sizeof(ioc)); -- ioc.cmd = cmd; -- ioc.buf = arg; -- ioc.len = len; -- strcpy(ifr.ifr_name, dev->name); -- ifr.ifr_data = (caddr_t)&ioc; -- -- fs = get_fs(); -- set_fs(KERNEL_DS); --#if defined(WL_USE_NETDEV_OPS) -- err = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, SIOCDEVPRIVATE); --#else -- err = dev->do_ioctl(dev, &ifr, SIOCDEVPRIVATE); --#endif -- set_fs(fs); -- -- return err; -+ return wlc_ioctl_internal(dev, cmd, arg, len); - } - - static s32 -diff --git a/src/wl/sys/wl_iw.c b/src/wl/sys/wl_iw.c -index 9c3c74e..e346b15 100644 ---- a/src/wl/sys/wl_iw.c -+++ b/src/wl/sys/wl_iw.c -@@ -37,6 +37,7 @@ typedef const struct si_pub si_t; - - #include <wl_dbg.h> - #include <wl_iw.h> -+#include <wl_linux.h> - - extern bool wl_iw_conn_status_str(uint32 event_type, uint32 status, - uint32 reason, char* stringBuf, uint buflen); -@@ -103,29 +104,7 @@ dev_wlc_ioctl( - int len - ) - { -- struct ifreq ifr; -- wl_ioctl_t ioc; -- mm_segment_t fs; -- int ret; -- -- memset(&ioc, 0, sizeof(ioc)); -- ioc.cmd = cmd; -- ioc.buf = arg; -- ioc.len = len; -- -- strcpy(ifr.ifr_name, dev->name); -- ifr.ifr_data = (caddr_t) &ioc; -- -- fs = get_fs(); -- set_fs(KERNEL_DS); --#if defined(WL_USE_NETDEV_OPS) -- ret = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, SIOCDEVPRIVATE); --#else -- ret = dev->do_ioctl(dev, &ifr, SIOCDEVPRIVATE); --#endif -- set_fs(fs); -- -- return ret; -+ return wlc_ioctl_internal(dev, cmd, arg, len); - } - - static int -diff --git a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c -index cca7ee1..e491df7 100644 ---- a/src/wl/sys/wl_linux.c -+++ b/src/wl/sys/wl_linux.c -@@ -1647,10 +1647,7 @@ wl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) - goto done2; - } - -- if (get_fs().seg == KERNEL_DS.seg) -- buf = ioc.buf; -- -- else if (ioc.buf) { -+ if (ioc.buf) { - if (!(buf = (void *) MALLOC(wl->osh, MAX(ioc.len, WLC_IOCTL_MAXLEN)))) { - bcmerror = BCME_NORESOURCE; - goto done2; -@@ -1671,7 +1668,7 @@ wl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) - WL_UNLOCK(wl); - - done1: -- if (ioc.buf && (ioc.buf != buf)) { -+ if (ioc.buf) { - if (copy_to_user(ioc.buf, buf, ioc.len)) - bcmerror = BCME_BADADDR; - MFREE(wl->osh, buf, MAX(ioc.len, WLC_IOCTL_MAXLEN)); -@@ -1684,6 +1681,39 @@ done2: - return (OSL_ERROR(bcmerror)); - } - -+int -+wlc_ioctl_internal(struct net_device *dev, int cmd, void *buf, int len) -+{ -+ wl_info_t *wl; -+ wl_if_t *wlif; -+ int bcmerror; -+ -+ if (!dev) -+ return -ENETDOWN; -+ -+ wl = WL_INFO(dev); -+ wlif = WL_DEV_IF(dev); -+ if (wlif == NULL || wl == NULL || wl->dev == NULL) -+ return -ENETDOWN; -+ -+ bcmerror = 0; -+ -+ WL_TRACE(("wl%d: wlc_ioctl_internal: cmd 0x%x\n", wl->pub->unit, cmd)); -+ -+ WL_LOCK(wl); -+ if (!capable(CAP_NET_ADMIN)) { -+ bcmerror = BCME_EPERM; -+ } else { -+ bcmerror = wlc_ioctl(wl->wlc, cmd, buf, len, wlif->wlcif); -+ } -+ WL_UNLOCK(wl); -+ -+ ASSERT(VALID_BCMERROR(bcmerror)); -+ if (bcmerror != 0) -+ wl->pub->bcmerror = bcmerror; -+ return (OSL_ERROR(bcmerror)); -+} -+ - static struct net_device_stats* - wl_get_stats(struct net_device *dev) - { -diff --git a/src/wl/sys/wl_linux.h b/src/wl/sys/wl_linux.h -index 5b1048e..c8c1f41 100644 ---- a/src/wl/sys/wl_linux.h -+++ b/src/wl/sys/wl_linux.h -@@ -22,6 +22,7 @@ - #define _wl_linux_h_ - - #include <wlc_types.h> -+#include <wlc_pub.h> - - typedef struct wl_timer { - struct timer_list timer; -@@ -187,6 +188,7 @@ extern irqreturn_t wl_isr(int irq, void *dev_id, struct pt_regs *ptregs); - extern int __devinit wl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent); - extern void wl_free(wl_info_t *wl); - extern int wl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); -+extern int wlc_ioctl_internal(struct net_device *dev, int cmd, void *buf, int len); - extern struct net_device * wl_netdev_get(wl_info_t *wl); - - #endif -diff --git a/src/wl/sys/wlc_pub.h b/src/wl/sys/wlc_pub.h -index 53a98b8..2b5a029 100644 ---- a/src/wl/sys/wlc_pub.h -+++ b/src/wl/sys/wlc_pub.h -@@ -24,6 +24,7 @@ - - #include <wlc_types.h> - #include <wlc_utils.h> -+#include <siutils.h> - #include "proto/802.11.h" - #include "proto/bcmevent.h" - --- -2.28.0 diff --git a/nongnu/packages/patches/broadcom-sta-linux-5.6.patch b/nongnu/packages/patches/broadcom-sta-linux-5.6.patch deleted file mode 100644 index df5af79..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-5.6.patch +++ /dev/null @@ -1,87 +0,0 @@ -From dd057e40a167f4febb1a7c77dd32b7d36056952c Mon Sep 17 00:00:00 2001 -From: Herman van Hazendonk <github.com@herrie.org> -Date: Tue, 31 Mar 2020 17:09:55 +0200 -Subject: [PATCH] Add fixes for 5.6 kernel - -Use ioremap instead of ioremap_nocache and proc_ops instead of file_operations on Linux kernel 5.6 and above. - -Signed-off-by: Herman van Hazendonk <github.com@herrie.org> ---- - src/shared/linux_osl.c | 6 +++++- - src/wl/sys/wl_linux.c | 21 ++++++++++++++++++++- - 2 files changed, 25 insertions(+), 2 deletions(-) - -diff --git a/src/shared/linux_osl.c b/src/shared/linux_osl.c -index 6157d18..dcfc075 100644 ---- a/src/shared/linux_osl.c -+++ b/src/shared/linux_osl.c -@@ -942,7 +942,11 @@ osl_getcycles(void) - void * - osl_reg_map(uint32 pa, uint size) - { -- return (ioremap_nocache((unsigned long)pa, (unsigned long)size)); -+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) -+ return (ioremap((unsigned long)pa, (unsigned long)size)); -+ #else -+ return (ioremap_nocache((unsigned long)pa, (unsigned long)size)); -+ #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) */ - } - - void -diff --git a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c -index 0d05100..6d9dd0d 100644 ---- a/src/wl/sys/wl_linux.c -+++ b/src/wl/sys/wl_linux.c -@@ -582,10 +582,17 @@ wl_attach(uint16 vendor, uint16 device, ulong regs, - } - wl->bcm_bustype = bustype; - -+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) -+ if ((wl->regsva = ioremap(dev->base_addr, PCI_BAR0_WINSZ)) == NULL) { -+ WL_ERROR(("wl%d: ioremap() failed\n", unit)); -+ goto fail; -+ } -+ #else - if ((wl->regsva = ioremap_nocache(dev->base_addr, PCI_BAR0_WINSZ)) == NULL) { - WL_ERROR(("wl%d: ioremap() failed\n", unit)); - goto fail; - } -+ #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) */ - - wl->bar1_addr = bar1_addr; - wl->bar1_size = bar1_size; -@@ -772,8 +779,13 @@ wl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) - if ((val & 0x0000ff00) != 0) - pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); - bar1_size = pci_resource_len(pdev, 2); -+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) -+ bar1_addr = (uchar *)ioremap(pci_resource_start(pdev, 2), -+ bar1_size); -+ #else - bar1_addr = (uchar *)ioremap_nocache(pci_resource_start(pdev, 2), - bar1_size); -+ #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) */ - wl = wl_attach(pdev->vendor, pdev->device, pci_resource_start(pdev, 0), PCI_BUS, pdev, - pdev->irq, bar1_addr, bar1_size); - -@@ -3335,12 +3347,19 @@ wl_proc_write(struct file *filp, const char __user *buff, size_t length, loff_t - } - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0) -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) -+static const struct proc_ops wl_fops = { -+ .proc_read = wl_proc_read, -+ .proc_write = wl_proc_write, -+}; -+#else - static const struct file_operations wl_fops = { - .owner = THIS_MODULE, - .read = wl_proc_read, - .write = wl_proc_write, - }; --#endif -+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) */ -+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0) */ - - static int - wl_reg_proc_entry(wl_info_t *wl) diff --git a/nongnu/packages/patches/broadcom-sta-linux-5.9.patch b/nongnu/packages/patches/broadcom-sta-linux-5.9.patch deleted file mode 100644 index 56de11d..0000000 --- a/nongnu/packages/patches/broadcom-sta-linux-5.9.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -u -r a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c ---- a/src/wl/sys/wl_linux.c 2020-10-12 21:19:15.256305165 +0000 -+++ b/src/wl/sys/wl_linux.c 2020-10-12 21:20:38.687530895 +0000 -@@ -1643,7 +1643,7 @@ - goto done2; - } - -- if (segment_eq(get_fs(), KERNEL_DS)) -+ if (get_fs().seg == KERNEL_DS.seg) - buf = ioc.buf; - - else if (ioc.buf) { diff --git a/nongnu/packages/patches/broadcom-sta-null-pointer-fix.patch b/nongnu/packages/patches/broadcom-sta-null-pointer-fix.patch deleted file mode 100644 index adef19f..0000000 --- a/nongnu/packages/patches/broadcom-sta-null-pointer-fix.patch +++ /dev/null @@ -1,27 +0,0 @@ -Description: Fixing null pointer crash - -Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=773713 -Bug-Ubuntu: https://launchpad.net/bugs/1415880 -Last-Update: 2015-08-18 - ---- - src/wl/sys/wl_linux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c -index 860b935..295156f 100644 ---- a/src/wl/sys/wl_linux.c -+++ b/src/wl/sys/wl_linux.c -@@ -2157,8 +2157,8 @@ wl_start(struct sk_buff *skb, struct net_device *dev) - wlif = WL_DEV_IF(dev); - wl = WL_INFO(dev); - -+ skb->prev = NULL; - if (WL_ALL_PASSIVE_ENAB(wl) || (WL_RTR() && WL_CONFIG_SMP())) { -- skb->prev = NULL; - - TXQ_LOCK(wl); - --- -1.9.1 - diff --git a/nongnu/packages/patches/broadcom-sta-rdtscl.patch b/nongnu/packages/patches/broadcom-sta-rdtscl.patch deleted file mode 100644 index 1b9862c..0000000 --- a/nongnu/packages/patches/broadcom-sta-rdtscl.patch +++ /dev/null @@ -1,22 +0,0 @@ -Since Linux 4.3, rdtscl() is no longer available and native_read_tsc() -is renamed to rdtsc(). Move the macro contents in-line and call the -new function. References: - -https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=fe47ae6e1a5005b2e82f7eab57b5c3820453293a -https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=4ea1636b04dbd66536fa387bae2eea463efc705b - -diff -ru a/src/shared/linux_osl.c b/src/shared/linux_osl.c ---- a/src/shared/linux_osl.c 2015-09-19 01:47:15.000000000 +0300 -+++ b/src/shared/linux_osl.c 2015-11-21 15:20:30.585902518 +0200 -@@ -932,7 +932,11 @@ - uint cycles; - - #if defined(__i386__) -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) -+ cycles = (u32)rdtsc(); -+#else - rdtscl(cycles); -+#endif - #else - cycles = 0; - #endif diff --git a/nongnu/packages/playonlinux.scm b/nongnu/packages/playonlinux.scm index 45f8340..8027c2d 100644 --- a/nongnu/packages/playonlinux.scm +++ b/nongnu/packages/playonlinux.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages playonlinux) #:use-module ((guix licenses) :prefix license:) diff --git a/nongnu/packages/printers.scm b/nongnu/packages/printers.scm index 6a10da2..77d5f98 100644 --- a/nongnu/packages/printers.scm +++ b/nongnu/packages/printers.scm @@ -1,26 +1,12 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com> ;;; Copyright © 2021 Kahka F -;;; Copyright © 2021 Jonathan Brielmaier <jonathan.brielmaier@web.de> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2021, 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> (define-module (nongnu packages printers) #:use-module (gnu packages) #:use-module (gnu packages cups) + #:use-module (guix gexp) #:use-module (guix packages) #:use-module (guix utils) #:use-module (srfi srfi-1) @@ -29,149 +15,147 @@ (define-public hplip-plugin (package - (inherit hplip) - (name "hplip-plugin") - (description "Hewlett-Packard printer drivers with nonfree plugin.") - (source (origin (inherit (package-source hplip)) - (snippet - (delete '(for-each - delete-file - (find-files "." (lambda - (file stat) - (elf-file? file)))) - (origin-snippet (package-source hplip)))))) - (inputs (alist-delete "python-pyqt" (package-inputs hplip))) - (native-inputs - (append - `(("hplip-plugin" - ,(origin - (method url-fetch) - (uri (string-append "https://developers.hp.com/sites/default/files/hplip-" - (package-version hplip) "-plugin.run")) - (sha256 - (base32 - "1ffqnmmghxqclv66qq14wypfha2xalcrbrjw0dqkmpvbnzwbn49g"))))) - (package-native-inputs hplip))) - (arguments - (substitute-keyword-arguments - (package-arguments hplip) - ((#:configure-flags cf) - `(delete "--enable-qt5" ,cf)) - ((#:phases ph) - `(modify-phases - ,ph - (replace - 'fix-hard-coded-file-names - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - ;; FIXME: use merged ppds (I think actually only - ;; drvs need to be merged). - (cupsdir (assoc-ref inputs "cups-minimal"))) - (substitute* "base/g.py" - (("'/usr/share;[^']*'") - (string-append "'" cupsdir "/share'")) - (("'/etc/hp/hplip.conf'") - (string-append "'" out - "/etc/hp/hplip.conf" "'")) - (("/var/lib/hp") - (string-append - out - "/var/lib/hp"))) + (inherit hplip) + (name "hplip-plugin") + (description "Hewlett-Packard printer drivers with nonfree plugin.") + (source (origin + (inherit (package-source hplip)) + (snippet + (delete '(for-each + delete-file + (find-files "." (lambda (file stat) + (elf-file? file)))) + (origin-snippet (package-source hplip)))))) + (inputs (alist-delete "python-pyqt" (package-inputs hplip))) + (native-inputs + (append + `(("hplip-plugin" + ,(origin + (method url-fetch) + (uri (string-append "https://developers.hp.com/sites/default/files/hplip-" + (package-version hplip) "-plugin.run")) + ;; TODO: Since this needs to be updated on every update to Guix's + ;; hplip in order to build, might be better to decouple this + ;; package from hplip. In the meantime, update this hash when + ;; hplip is updated in Guix. + (sha256 + (base32 + "0zq66hm7ni6w1c3cxy1gxrxzvyvfn0lhjnia8p4azvz2r309j9s0"))))) + (package-native-inputs hplip))) + (arguments + (substitute-keyword-arguments (package-arguments hplip) + ((#:configure-flags cf) + #~(delete "--enable-qt5" #$cf)) + ((#:phases ph) + #~(modify-phases #$ph + (replace 'fix-hard-coded-file-names + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + ;; FIXME: use merged ppds (I think actually only + ;; drvs need to be merged). + (cupsdir (assoc-ref inputs "cups-minimal"))) + (substitute* "base/g.py" + (("'/usr/share;[^']*'") + (string-append "'" cupsdir "/share'")) + (("'/etc/hp/hplip.conf'") + (string-append "'" out + "/etc/hp/hplip.conf" "'")) + (("/var/lib/hp") + (string-append + out + "/var/lib/hp"))) - (substitute* "Makefile.in" - (("[[:blank:]]check-plugin\\.py[[:blank:]]") " ") - ;; FIXME Use beginning-of-word in regexp. - (("[[:blank:]]plugin\\.py[[:blank:]]") " ") - (("/usr/include/libusb-1.0") - (string-append (assoc-ref inputs "libusb") - "/include/libusb-1.0")) - (("hplip_statedir =.*$") - ;; Don't bail out while trying to create - ;; /var/lib/hplip. We can safely change its value - ;; here because it's hard-coded in the code anyway. - "hplip_statedir = $(prefix)/var/lib/hp\n") - (("hplip_confdir = /etc/hp") - ;; This is only used for installing the default config. - (string-append "hplip_confdir = " out - "/etc/hp")) - (("halpredir = /usr/share/hal/fdi/preprobe/10osvendor") - ;; We don't use hal. - (string-append "halpredir = " out - "/share/hal/fdi/preprobe/10osvendor")) - (("rulesdir = /etc/udev/rules.d") - ;; udev rules will be merged by base service. - (string-append "rulesdir = " out - "/lib/udev/rules.d")) - (("rulessystemdir = /usr/lib/systemd/system") - ;; We don't use systemd. - (string-append "rulessystemdir = " out - "/lib/systemd/system")) - (("/etc/sane.d") - (string-append out "/etc/sane.d"))) + (substitute* "Makefile.in" + (("[[:blank:]]check-plugin\\.py[[:blank:]]") " ") + ;; FIXME Use beginning-of-word in regexp. + (("[[:blank:]]plugin\\.py[[:blank:]]") " ") + (("/usr/include/libusb-1.0") + (string-append (assoc-ref inputs "libusb") + "/include/libusb-1.0")) + (("hplip_statedir =.*$") + ;; Don't bail out while trying to create + ;; /var/lib/hplip. We can safely change its value + ;; here because it's hard-coded in the code anyway. + "hplip_statedir = $(prefix)/var/lib/hp\n") + (("hplip_confdir = /etc/hp") + ;; This is only used for installing the default config. + (string-append "hplip_confdir = " out + "/etc/hp")) + (("halpredir = /usr/share/hal/fdi/preprobe/10osvendor") + ;; We don't use hal. + (string-append "halpredir = " out + "/share/hal/fdi/preprobe/10osvendor")) + (("rulesdir = /etc/udev/rules.d") + ;; udev rules will be merged by base service. + (string-append "rulesdir = " out + "/lib/udev/rules.d")) + (("rulessystemdir = /usr/lib/systemd/system") + ;; We don't use systemd. + (string-append "rulessystemdir = " out + "/lib/systemd/system")) + (("/etc/sane.d") + (string-append out "/etc/sane.d"))) - (substitute* "common/utils.h" - (("/var/lib/hp") - (string-append - out - "/var/lib/hp"))) - #t))) - (add-after - 'install-models-dat 'install-plugins - (lambda* (#:key outputs system inputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (state-dir (string-append out "/var/lib/hp")) - (hp-arch (assoc-ref - '(("i686-linux" . "x86_32") - ("x86_64-linux" . "x86_64") - ("armhf-linux" . "arm32") - ("aarch64-linux" . "aarch64")) - system))) - (unless hp-arch - (error (string-append - "HPLIP plugin not supported on " - system))) - (invoke "sh" (assoc-ref inputs "hplip-plugin") - "--noexec" "--keep") - (chdir "plugin_tmp") - (install-file "plugin.spec" - (string-append out "/share/hplip/")) + (substitute* "common/utils.h" + (("/var/lib/hp") + (string-append + out + "/var/lib/hp")))))) + (add-after 'install-models-dat 'install-plugins + (lambda* (#:key outputs system inputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (state-dir (string-append out "/var/lib/hp")) + (hp-arch (assoc-ref + '(("i686-linux" . "x86_32") + ("x86_64-linux" . "x86_64") + ("armhf-linux" . "arm32") + ("aarch64-linux" . "aarch64")) + system))) + (unless hp-arch + (error (string-append + "HPLIP plugin not supported on " + system))) + (invoke "sh" (assoc-ref inputs "hplip-plugin") + "--noexec" "--keep") + (chdir "plugin_tmp") + (install-file "plugin.spec" + (string-append out "/share/hplip/")) - (for-each - (lambda (file) - (install-file - file - (string-append out "/share/hplip/data/firmware"))) - (find-files "." "\\.fw.gz$")) + (for-each + (lambda (file) + (install-file + file + (string-append out "/share/hplip/data/firmware"))) + (find-files "." "\\.fw.gz$")) - (install-file "license.txt" - (string-append out "/share/hplip/data/plugins")) - (mkdir-p - (string-append out "/share/hplip/prnt/plugins")) - (for-each - (lambda (type plugins) - (for-each - (lambda (plugin) - (let ((file (string-append plugin "-" hp-arch ".so")) - (dir (string-append out "/share/hplip/" - type "/plugins"))) - (install-file file dir) - (chmod (string-append dir "/" file) #o755) - (symlink (string-append dir "/" file) - (string-append dir "/" plugin ".so")))) - plugins)) - '("prnt" "scan") - '(("lj" "hbpl1") - ("bb_soap" "bb_marvell" "bb_soapht" "bb_escl"))) - (mkdir-p state-dir) - (call-with-output-file - (string-append state-dir "/hplip.state") - (lambda (port) - (simple-format port "[plugin] + (install-file "license.txt" + (string-append out "/share/hplip/data/plugins")) + (mkdir-p + (string-append out "/share/hplip/prnt/plugins")) + (for-each + (lambda (type plugins) + (for-each + (lambda (plugin) + (let ((file (string-append plugin "-" hp-arch ".so")) + (dir (string-append out "/share/hplip/" + type "/plugins"))) + (install-file file dir) + (chmod (string-append dir "/" file) #o755) + (symlink (string-append dir "/" file) + (string-append dir "/" plugin ".so")))) + plugins)) + '("prnt" "scan") + '(("lj" "hbpl1") + ("bb_soap" "bb_marvell" "bb_soapht" "bb_escl"))) + (mkdir-p state-dir) + (call-with-output-file + (string-append state-dir "/hplip.state") + (lambda (port) + (simple-format port "[plugin] installed=1 eula=1 version=~A -" ,(package-version hplip)))) +" #$(package-version hplip)))) - (substitute* (string-append out "/etc/hp/hplip.conf") - (("/usr") out)) - #t))))))))) + (substitute* (string-append out "/etc/hp/hplip.conf") + (("/usr") out))))))))))) diff --git a/nongnu/packages/productivity.scm b/nongnu/packages/productivity.scm new file mode 100644 index 0000000..5ccabb7 --- /dev/null +++ b/nongnu/packages/productivity.scm @@ -0,0 +1,107 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nongnu packages productivity) + #:use-module (gnu packages base) + #:use-module (gnu packages compression) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gl) + #:use-module (gnu packages gtk) + #:use-module (gnu packages image) + #:use-module (gnu packages linux) + #:use-module (gnu packages pciutils) + #:use-module (gnu packages photo) + #:use-module (gnu packages xiph) + #:use-module (gnu packages xorg) + #:use-module (gnu packages video) + #:use-module (gnu packages wget) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (nonguix build-system chromium-binary) + #:use-module ((nonguix licenses) #:prefix license:)) + +(define-public anytype + (package + (name "anytype") + (version "0.38") + (source + (origin + (method url-fetch) + (uri + (string-append "https://download.anytype.io?action=download" + "&key=desktop&id=148487107")) + (file-name (string-append "anytype-" version ".deb")) + (sha256 + (base32 + "1xc57ppk3l16mq2a53scf79m8hx43x21kac96ws66awlkz14swc7")))) + (build-system chromium-binary-build-system) + (arguments + (list + ;; almost 300MB + #:substitutable? #f + #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files + #:wrapper-plan + #~(map (lambda (file) + (string-append "opt/Anytype/" file)) + '("anytype" + "chrome-sandbox" + "chrome_crashpad_handler" + "libEGL.so" + "libffmpeg.so" + "libGLESv2.so" + "libvk_swiftshader.so" + "libvulkan.so.1" + "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 '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")) + (usr/share "./usr/share") + (old-exe "/opt/Anytype/anytype") + (exe (string-append bin "/anytype"))) + (substitute* (string-append usr/share "/applications/anytype.desktop") + (((string-append "^Exec=" old-exe)) (string-append "Exec=" exe)))))) + (add-before 'install-wrapper 'symlink-entrypoint + (lambda _ + (let* ((bin (string-append #$output "/bin")) + (exe (string-append bin "/anytype")) + (share (string-append #$output "/share/Anytype")) + (target (string-append share "/anytype"))) + (mkdir-p bin) + (symlink target exe) + (wrap-program exe + `("LD_LIBRARY_PATH" = (,share))))))))) + (inputs + (list bzip2 + flac + gdk-pixbuf + harfbuzz + libexif + libglvnd + libpng + libva + libxscrnsaver + opus + pciutils + snappy + util-linux + xdg-utils + wget)) + (synopsis "Productivity and note-taking app") + (supported-systems '("x86_64-linux")) + (description "Anytype is an E2E encrypted, cross-platform, productivity and +note taking app. It stores all the data locally and allows for peer-to-peer +synchronization.") + (home-page "https://anytype.io") + (license (license:nonfree + "https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md")))) diff --git a/nongnu/packages/radio.scm b/nongnu/packages/radio.scm index d697bdc..a7ed2c3 100644 --- a/nongnu/packages/radio.scm +++ b/nongnu/packages/radio.scm @@ -1,17 +1,5 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. (define-module (nongnu packages radio) #:use-module (gnu packages gcc) @@ -97,25 +85,27 @@ package. E.g.: @code{(udev-rules-service 'sdrplay sdrplay)}") "/license.txt"))))) (define-public soapysdrplay3 - (package - (name "soapysdrplay3") - (version "0.4.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/pothosware/SoapySDRPlay3") - (commit (string-append "soapy-sdrplay3-" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0kp5gz03c29kxclaqijpyqknaijlbldrhy04mn98vnli9g1h1isq")))) - (build-system cmake-build-system) - (inputs - (list sdrplay soapysdr)) - (arguments - `(#:tests? #f)) ; No test suite - (home-page "https://github.com/pothosware/SoapySDRPlay3/wiki") - (synopsis "SoapySDR SDRplay module") - (description "This package provides SDRplay devices support to the + (let ((commit "9e5c80c45454db56b8b10bb997369f37e750631b") + (revision "1")) + (package + (name "soapysdrplay3") + (version (git-version "0.4.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pothosware/SoapySDRPlay3") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1sl3i1id0fily7qfm0yihxsaqy4f4gr85vl5ip05azhhbrnmnayx")))) + (build-system cmake-build-system) + (inputs + (list sdrplay soapysdr)) + (arguments + `(#:tests? #f)) ; No test suite + (home-page "https://github.com/pothosware/SoapySDRPlay3/wiki") + (synopsis "SoapySDR SDRplay module") + (description "This package provides SDRplay devices support to the SoapySDR library.") - (license expat))) + (license expat)))) diff --git a/nongnu/packages/scanner.scm b/nongnu/packages/scanner.scm index 9a8b3cf..ab4772f 100644 --- a/nongnu/packages/scanner.scm +++ b/nongnu/packages/scanner.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages scanner) #:use-module (ice-9 match) diff --git a/nongnu/packages/version-control.scm b/nongnu/packages/version-control.scm new file mode 100644 index 0000000..675bf88 --- /dev/null +++ b/nongnu/packages/version-control.scm @@ -0,0 +1,58 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022 dan <i@dan.games> +;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> + +(define-module (nongnu packages version-control) + #:use-module (gnu packages base) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (nonguix build-system binary) + #:use-module (nonguix licenses) + #:use-module (ice-9 match)) + +(define-public helix-core + (package + (name "helix-core") + (version "r23.1") + (source (origin + (method url-fetch) + (uri (string-append "https://ftp.perforce.com/perforce/" version + "/bin.linux26" + (match (%current-system) + ("i686-linux" "x86") + (_ "x86_64")) + "/helix-core-server.tgz")) + (sha256 + (base32 + (match (%current-system) + ("i686-linux" + "0f5qs55rspw86axnmml3nxx551lwbxwz1cgi9kmy2f9g5rrplnkn") + (_ + "1vqfkhgbx6ch7710w8mmm7hydl6jmd9qgzs0gfjg8gvd5gnh1csr")))))) + (build-system binary-build-system) + (arguments + `(#:strip-binaries? #f + #:phases (modify-phases %standard-phases + (add-before 'patchelf 'patchelf-writable + (lambda _ + (for-each make-file-writable + (find-files "."))))) + #:patchelf-plan '(("p4" ("glibc")) + ("p4d" ("glibc")) + ("p4p" ("glibc")) + ("p4broker" ("glibc"))) + #:install-plan '(("p4" "bin/") + ("p4d" "bin/") + ("p4p" "bin/") + ("p4broker" "bin/")))) + (inputs (list glibc)) + (home-page "https://www.perforce.com/products/helix-core") + (synopsis + "A version control software for large scale development environments") + (description + "Helix Core is a version control software for large scale development +environments. The Helix Version Control System manages a central database and +a master repository of file versions.") + (supported-systems '("i686-linux" "x86_64-linux")) + (license (nonfree + "https://www.perforce.com/sites/default/files/pdfs/Helix_Core%20On%20Prem%20Software%20License%20Agmt%20ClickThru_FINAL%2006.28.2021.pdf")))) diff --git a/nongnu/packages/video.scm b/nongnu/packages/video.scm index b7f9b5b..b2cec1b 100644 --- a/nongnu/packages/video.scm +++ b/nongnu/packages/video.scm @@ -1,34 +1,21 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2022 Jelle Licht <jlicht@fsfe.org> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages video) #:use-module (gnu packages pkg-config) #:use-module (gnu packages video) #:use-module (guix build utils) #:use-module (guix build-system cmake) + #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix packages) + #:use-module (guix utils) #:use-module ((guix licenses) #:prefix license:)) (define-public gmmlib (package (name "gmmlib") - (version "22.1.3") + (version "22.3.9") (source (origin (method git-fetch) (uri (git-reference @@ -37,7 +24,7 @@ (file-name (git-file-name name version)) (sha256 (base32 - "10gk8bi8xa2bgiqmjbphb9acvbmvgwv9kg0z75cfxazlsx5k7jb1")))) + "0m88lxlqqs5wdk4icf2ahbigr0q87j1c0damq7q0r55h72pf6zyv")))) (build-system cmake-build-system) (arguments ;; Tests are run as part of the normal build step @@ -53,7 +40,7 @@ for VAAPI.") (define-public intel-media-driver (package (name "intel-media-driver") - (version "22.2.2") + (version "23.3.0") (source (origin (method git-fetch) (uri (git-reference @@ -62,16 +49,16 @@ for VAAPI.") (file-name (git-file-name name version)) (sha256 (base32 - "1wvx3kvsdq7n5khl0pf7hf1ks4lwqnyjdq8sbjhd7irs3v3prj4j")))) + "1zh6zgfyp14zlnd6jvhqz9q5rlyk7cb3nam791slh0h7r5f0iimm")))) (build-system cmake-build-system) (inputs (list libva gmmlib)) (native-inputs (list pkg-config)) (arguments - '(#:tests? #f ;Tests are run as part of the normal build step - #:configure-flags - (list "-DENABLE_NONFREE_KERNELS=OFF" - (string-append "-DLIBVA_DRIVERS_PATH=" - (assoc-ref %outputs "out") "/lib/dri")))) + (list #:tests? #f ;Tests are run as part of the normal build step + #:configure-flags + #~(list "-DENABLE_NONFREE_KERNELS=OFF" + (string-append "-DLIBVA_DRIVERS_PATH=" + #$output "/lib/dri")))) ;; XXX Because of <https://issues.guix.gnu.org/issue/22138>, we need to add ;; this to all VA-API back ends instead of once to libva. (native-search-paths @@ -86,3 +73,22 @@ for VAAPI.") accelerated decoding, encoding, and video post processing for the GEN based graphics hardware.") (license (list license:expat license:bsd-3)))) + +(define-public intel-media-driver/nonfree + (package + (inherit intel-media-driver) + (name "intel-media-driver-nonfree") + (arguments + (substitute-keyword-arguments (package-arguments intel-media-driver) + ((#:configure-flags flags #~'()) + #~(cons "-DENABLE_NONFREE_KERNELS=ON" + (delete "-DENABLE_NONFREE_KERNELS=OFF" #$flags))))) + (synopsis + (string-append + (package-synopsis intel-media-driver) + " with nonfree kernels")) + (description + (string-append + (package-description intel-media-driver) + " This build of intel-media-driver includes nonfree blobs to fully enable the +video decode capabilities of supported Intel GPUs.")))) diff --git a/nongnu/packages/vpn.scm b/nongnu/packages/vpn.scm index 856a45b..c7be7e4 100644 --- a/nongnu/packages/vpn.scm +++ b/nongnu/packages/vpn.scm @@ -1,21 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 Alexey Abramov <levenson@mmer.org> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - (define-module (nongnu packages vpn) #:use-module (guix build utils) diff --git a/nongnu/packages/wasm.scm b/nongnu/packages/wasm.scm index 6aa8211..fa236d1 100644 --- a/nongnu/packages/wasm.scm +++ b/nongnu/packages/wasm.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022-2023 Pierre Langlois <pierre.langlois@gmx.com> (define-module (nongnu packages wasm) #:use-module (guix base32) @@ -31,60 +16,62 @@ #:use-module (gnu packages python)) (define-public wasi-libc - (let ((commit "ad5133410f66b93a2381db5b542aad5e0964db96") - (revision "1")) - (package - (name "wasi-libc") - (version (git-version "0.1-alpha" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/WebAssembly/wasi-libc") - (commit commit) - (recursive? #t))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "146jamq2q24vxjfpcwlqj84wzc80cbpbg0ns2wimyvzbanah48j6")))) - (build-system gnu-build-system) - (native-inputs (list clang-13)) - (arguments - (list #:tests? #f ;No test suite - #:phases - #~(modify-phases %standard-phases - (delete 'configure) - (add-before 'build 'set-sysroot-include - (lambda _ - (setenv "C_INCLUDE_PATH" - (string-append (getcwd) "/sysroot/include")))) - (add-before 'install 'set-install-dir - (lambda _ - (setenv "INSTALL_DIR" - (string-append #$output "/wasm32-wasi"))))))) - (home-page "https://wasi.dev") - (synopsis "WASI libc implementation for WebAssembly") - (description - "WASI Libc is a libc for WebAssembly programs built on top of WASI + (package + (name "wasi-libc") + (version "sdk-19") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/WebAssembly/wasi-libc") + (commit (string-append "wasi-" version)) + (recursive? #t))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0bnpz8wk9wiic938296gxp4vz820bvpi1w41jksjzz5552hql169")))) + (build-system gnu-build-system) + (native-inputs (list clang-15)) + (arguments + (list #:tests? #f ;No test suite + ;; Firefox uses wasm2c to compile WebAssembly to C code, and it + ;; does not support the memory.copy opcode. + ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1773200#c4 + #:make-flags ''("BULK_MEMORY_SOURCES=") + #:phases + #~(modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'set-sysroot-include + (lambda _ + (setenv "C_INCLUDE_PATH" + (string-append (getcwd) "/sysroot/include")))) + (add-before 'install 'set-install-dir + (lambda _ + (setenv "INSTALL_DIR" + (string-append #$output "/wasm32-wasi"))))))) + (home-page "https://wasi.dev") + (synopsis "WASI libc implementation for WebAssembly") + (description + "WASI Libc is a libc for WebAssembly programs built on top of WASI system calls. It provides a wide array of POSIX-compatible C APIs, including support for standard I/O, file I/O, filesystem manipulation, memory management, time, string, environment variables, program startup, and many other APIs.") - (license (list - ;; For wasi-libc, with LLVM exceptions - license:asl2.0 - ;; For malloc.c. - license:cc0 - ;; For cloudlibc. - license:bsd-2 - ;; For wasi-libc and musl-libc. - license:expat))))) + (license (list + ;; For wasi-libc, with LLVM exceptions + license:asl2.0 + ;; For malloc.c. + license:cc0 + ;; For cloudlibc. + license:bsd-2 + ;; For wasi-libc and musl-libc. + license:expat)))) (define-public wasm32-wasi-clang-runtime - (package (inherit clang-runtime-13) + (package (inherit clang-runtime-15) (native-inputs - (list clang-13 + (list clang-15 wasi-libc)) - (inputs (list llvm-13)) + (inputs (list llvm-15)) (arguments (list #:build-type "Release" @@ -107,9 +94,7 @@ other APIs.") ;; WASM only needs libclang_rt.builtins-wasm32.a from ;; compiler-rt. - (string-append "../compiler-rt-" - #$(package-version clang-runtime-13) - ".src/lib/builtins")))))) + "../source/compiler-rt/lib/builtins"))))) ;; FIXME: Ideally we wouldn't need to build a separate compiler because clang ;; can support multiple targets at runtime. However Guix patches the default @@ -117,12 +102,10 @@ other APIs.") ;; upstream Guix's support for cross-compiling with clang. (define clang-from-llvm (@@ (gnu packages llvm) clang-from-llvm)) +(define llvm-monorepo (@@ (gnu packages llvm) llvm-monorepo)) (define-public wasm32-wasi-clang - (let ((base (clang-from-llvm llvm-13 wasm32-wasi-clang-runtime - (bytevector->nix-base32-string - (content-hash-value - (origin-hash (package-source clang-13))))))) + (let ((base (clang-from-llvm llvm-15 wasm32-wasi-clang-runtime))) (package (inherit base) (name "wasm32-wasi-clang") (inputs @@ -143,17 +126,8 @@ other APIs.") (define-public wasm32-wasi-libcxx (package (name "wasm32-wasi-libcxx") - (version "13.0.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/llvm/llvm-project") - (commit (string-append "llvmorg-" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "0cjl0vssi4y2g4nfr710fb6cdhxmn5r0vis15sf088zsc5zydfhw")))) + (version (package-version llvm-15)) + (source (llvm-monorepo version)) (build-system cmake-build-system) (arguments (list diff --git a/nongnu/packages/wine.scm b/nongnu/packages/wine.scm index ff15e23..62e6106 100644 --- a/nongnu/packages/wine.scm +++ b/nongnu/packages/wine.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu packages wine) #:use-module (ice-9 match) @@ -36,7 +21,7 @@ (define-public winetricks (package (name "winetricks") - (version "20220411") + (version "20230212") (source (origin (method git-fetch) (uri (git-reference @@ -45,7 +30,7 @@ (file-name (git-file-name name version)) (sha256 (base32 - "09bv6wsm3y9p6jhlcmnjlnczdyr996b2mvxg4fbvlqa3fv9gac8n")))) + "15glm6ws0zihcks93l39mli8wf5b5vkijb0vaid9cqra6x0zppd5")))) (build-system gnu-build-system) (inputs `(("cabextract" ,cabextract) @@ -157,7 +142,7 @@ Use @command{setup_dxvk} to install the required libraries to a Wine prefix.") (define-public dxvk-next (package (name "dxvk") - (version "1.10.1") + (version "2.0") (home-page "https://github.com/doitsujin/dxvk/") (source (origin (method url-fetch) @@ -166,7 +151,7 @@ Use @command{setup_dxvk} to install the required libraries to a Wine prefix.") version "/dxvk-" version ".tar.gz") ) (sha256 (base32 - "1ah7nci49ipaj7z7zac4dqbrxq1ic3zyky42kkid8wqarf198d6w")))) + "0xr4lq4zdmqwxh5x19am2y4lvy6q6s6bl1nfr4ixfgy2l2sghliq")))) (build-system copy-build-system) (arguments `(#:install-plan @@ -211,3 +196,19 @@ allows running complex 3D applications with high performance using Wine. Use @command{setup_dxvk} to install the required libraries to a Wine prefix.") (supported-systems '("i686-linux" "x86_64-linux")) (license license:zlib))) + +;; Keep 1.10 since it's backward-compatible with older hardware unlike 2.* +;; See https://github.com/doitsujin/dxvk/releases/tag/v2.0 +(define-public dxvk-1.10 + (package + (inherit dxvk-1.7) + (version "1.10.3") + (home-page "https://github.com/doitsujin/dxvk/") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/doitsujin/dxvk/releases/download/v" + version "/dxvk-" version ".tar.gz")) + (sha256 + (base32 + "1ijkznb8asqg18blhs6f82g67xpncjp7i17rg7451d314y8kq6ld")))))) diff --git a/nongnu/services/nvidia.scm b/nongnu/services/nvidia.scm new file mode 100644 index 0000000..985e12b --- /dev/null +++ b/nongnu/services/nvidia.scm @@ -0,0 +1,56 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space> + +(define-module (nongnu services nvidia) + #:use-module (gnu packages) + #:use-module (gnu packages linux) + #:use-module (gnu services) + #:use-module (gnu services base) + #:use-module (gnu services linux) + #:use-module (gnu services shepherd) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (nongnu packages nvidia) + #:export (nvidia-configuration + nvidia-configuration? + nvidia-configuration-record? + nvidia-service-type)) + +(define-record-type* <nvidia-configuration> + nvidia-configuration make-nvidia-configuration + nvidia-configuration? + (nvidia-driver nvidia-configuration-nvidia-driver + (default (list nvidia-driver))) ; list of file-like + (nvidia-firmware nvidia-configuration-nvidia-firmware + (default (list nvidia-firmware))) ; list of file-like + (nvidia-module nvidia-configuration-nvidia-module + (default (list nvidia-module))) ; list of file-like + (modules nvidia-configuration-modules + (default (list "nvidia-uvm")))) ; list of string + +(define (nvidia-shepherd-service config) + (list (shepherd-service + (documentation "Unload nvidia-uvm module on powering off.") + (provision '(nvidia)) + (requirement '(user-processes)) + (start #~(const #t)) + (stop #~(lambda _ + (let ((rmmod #$(file-append kmod "/bin/rmmod"))) + (zero? (system* rmmod "nvidia-uvm")))))))) + +(define nvidia-service-type + (service-type + (name 'nvidia) + (extensions + (list (service-extension shepherd-root-service-type + nvidia-shepherd-service) + (service-extension udev-service-type + nvidia-configuration-nvidia-driver) + (service-extension firmware-service-type + nvidia-configuration-nvidia-firmware) + (service-extension linux-loadable-module-service-type + nvidia-configuration-nvidia-module) + (service-extension kernel-module-loader-service-type + nvidia-configuration-modules))) + (default-value (nvidia-configuration)) + (description "Load NVIDIA modules."))) diff --git a/nongnu/services/vpn.scm b/nongnu/services/vpn.scm index d9f0bcc..71a15dc 100644 --- a/nongnu/services/vpn.scm +++ b/nongnu/services/vpn.scm @@ -1,20 +1,5 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 Alexey Abramov <levenson@mmer.org> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nongnu services vpn) #:use-module (guix gexp) diff --git a/nongnu/system/install.scm b/nongnu/system/install.scm index 24bc6ec..100e278 100644 --- a/nongnu/system/install.scm +++ b/nongnu/system/install.scm @@ -1,19 +1,7 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. ;; Generate a bootable image (e.g. for USB sticks, etc.) with: ;; $ guix system disk-image nongnu/system/install.scm diff --git a/nongnu/system/linux-initrd.scm b/nongnu/system/linux-initrd.scm index 5b29235..5f34e79 100644 --- a/nongnu/system/linux-initrd.scm +++ b/nongnu/system/linux-initrd.scm @@ -1,17 +1,5 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. (define-module (nongnu system linux-initrd) #:use-module (gnu system linux-initrd) @@ -79,7 +67,9 @@ MICROCODE-PACKAGES, in the format expected by the kernel." "/initrd.cpio")) (define (combined-initrd . initrds) - "Return a combined initrd, the result of concatenating INITRDS." + "Return a combined initrd, the result of concatenating INITRDS. This relies +on the kernel ability to detect and load multiple initrds archives from a +single file." (define builder (with-imported-modules (source-module-closure '((guix build utils) @@ -87,13 +77,28 @@ MICROCODE-PACKAGES, in the format expected by the kernel." #:select? import-nonguix-module?) #~(begin (use-modules (guix build utils) - (nonguix build utils)) + (nonguix build utils) + (srfi srfi-1)) ;; Use .img suffix since the result is no longer easily inspected by ;; standard tools like cpio and gzip. - (let ((initrd (string-append #$output "/initrd.img"))) + ;; + ;; The initrds may contain "references" files to keep some items + ;; such as the static guile alive. Concatenate them in a single, + ;; top-level references file. + (let ((initrd (string-append #$output "/initrd.img")) + (references + (filter-map + (lambda (initrd) + (let ((ref (string-append (dirname initrd) + "/references"))) + (and (file-exists? ref) ref))) + '#$initrds)) + (new-references + (string-append #$output "/references"))) (mkdir-p #$output) - (concatenate-files '#$initrds initrd))))) + (concatenate-files '#$initrds initrd) + (concatenate-files references new-references))))) (file-append (computed-file "combined-initrd" builder) "/initrd.img")) diff --git a/nonguix/build-system/binary.scm b/nonguix/build-system/binary.scm index 4fed623..121162d 100644 --- a/nonguix/build-system/binary.scm +++ b/nonguix/build-system/binary.scm @@ -1,21 +1,6 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2021 Josselin Poiret <dev@jpoiret.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (nonguix build-system binary) #:use-module (guix store) diff --git a/nonguix/build-system/chromium-binary.scm b/nonguix/build-system/chromium-binary.scm new file mode 100644 index 0000000..931a6ef --- /dev/null +++ b/nonguix/build-system/chromium-binary.scm @@ -0,0 +1,209 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nonguix build-system chromium-binary) + #:use-module (gnu packages bash) + #:use-module (gnu packages compression) + #:use-module (gnu packages cups) + #:use-module (gnu packages databases) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gl) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) + #:use-module (gnu packages gtk) + #:use-module (gnu packages kerberos) + #:use-module (gnu packages linux) + #:use-module (gnu packages nss) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xorg) + #:use-module (gnu packages xml) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix derivations) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (guix packages) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (nonguix build-system binary) + #:use-module (nonguix utils) + #:export (%chromium-binary-build-system-modules + lower + chromium-binary-build + chromium-binary-build-system)) + +;; Commentary: +;; +;; Standard build procedure for Chromium based binary packages. This is +;; implemented as an extension of `binary-build-system'. +;; +;; Code: + +(define %chromium-binary-build-system-modules + ;; Build-side modules imported by default. + `((nonguix build chromium-binary-build-system) + (nonguix build utils) + ,@%binary-build-system-modules)) + +(define (build-patchelf-plan wrapper-plan inputs) + #~(let ((patchelf-inputs + (list #$@(map car inputs)))) + (map (lambda (file) + (cons file (list patchelf-inputs))) + #$wrapper-plan))) + +(define* (lower name + #:key source inputs native-inputs outputs system target + (patchelf (default-patchelf)) + (glibc (default-glibc)) + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME." + (define private-keywords + '(#:target #:patchelf #:inputs #:native-inputs)) + (define host-inputs + `(,@(if source + `(("source" ,source)) + '()) + + ("alsa-lib" ,alsa-lib) + ("atk" ,atk) + ("at-spi2-atk" ,at-spi2-atk) + ("at-spi2-core" ,at-spi2-core) + ("bash-minimal" ,bash-minimal) + ("cairo" ,cairo) + ("cups" ,cups) + ("dbus" ,dbus) + ("eudev" ,eudev) + ("expat" ,expat) + ("fontconfig" ,fontconfig) + ("freetype" ,freetype) + ("gcc:lib" ,gcc "lib") + ("glib" ,glib) + ("gtk+" ,gtk+) + ("libdrm" ,libdrm) + ("libnotify" ,libnotify) + ("librsvg" ,librsvg) + ("libsecret" ,libsecret) + ("libx11" ,libx11) + ("libxcb" ,libxcb) + ("libxcomposite" ,libxcomposite) + ("libxcursor" ,libxcursor) + ("libxdamage" ,libxdamage) + ("libxext" ,libxext) + ("libxfixes" ,libxfixes) + ("libxi" ,libxi) + ("libxkbcommon" ,libxkbcommon) + ("libxkbfile" ,libxkbfile) + ("libxrandr" ,libxrandr) + ("libxrender" ,libxrender) + ("libxshmfence" ,libxshmfence) + ("libxtst" ,libxtst) + ("mesa" ,mesa) + ("mit-krb5" ,mit-krb5) + ("nspr" ,nspr) + ("nss" ,nss) + ("pango" ,pango) + ("pulseaudio" ,pulseaudio) + ("sqlcipher" ,sqlcipher) + ("xcb-util" ,xcb-util) + ("xcb-util-image" ,xcb-util-image) + ("xcb-util-keysyms" ,xcb-util-keysyms) + ("xcb-util-renderutil" ,xcb-util-renderutil) + ("xcb-util-wm" ,xcb-util-wm) + ("zlib" ,zlib) + + ,@inputs + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(standard-packages))) + + (and (not target) ;XXX: no cross-compilation + (bag + (name name) + (system system) + (host-inputs host-inputs) + (build-inputs `(("patchelf" ,patchelf) + ,@native-inputs + ;; If current system is i686, the *32 packages will be the + ;; same as the non-32, but that's OK. + ("libc32" ,(to32 glibc)))) + (outputs outputs) + (build chromium-binary-build) + (arguments (append + (strip-keyword-arguments private-keywords arguments) + (list #:wrap-inputs host-inputs)))))) + +(define* (chromium-binary-build name inputs + #:key + guile source wrap-inputs + (outputs '("out")) + (wrapper-plan ''()) + (patchelf-plan ''()) + (install-plan ''(("." "./"))) + (search-paths '()) + (out-of-source? #t) + (validate-runpath? #t) + (patch-shebangs? #t) + (strip-binaries? #t) + (strip-flags ''("--strip-debug")) + (strip-directories ''("lib" "lib64" "libexec" + "bin" "sbin")) + (phases '(@ (nonguix build chromium-binary-build-system) + %standard-phases)) + (system (%current-system)) + (imported-modules %chromium-binary-build-system-modules) + (modules '((nonguix build chromium-binary-build-system) + (guix build utils) + (nonguix build utils))) + (substitutable? #t) + allowed-references + disallowed-references) + "Build SOURCE using binary-build-system." + (define builder + (with-imported-modules imported-modules + #~(begin + (use-modules #$@modules) + + #$(with-build-variables inputs outputs + #~(chromium-binary-build #:source #+source + #:system #$system + #:outputs %outputs + #:inputs %build-inputs + #:patchelf-plan + #$(if (equal? wrapper-plan ''()) + patchelf-plan + (build-patchelf-plan wrapper-plan + wrap-inputs)) + #:install-plan #$install-plan + #:search-paths '#$(map search-path-specification->sexp + search-paths) + #:phases #$phases + #:out-of-source? #$out-of-source? + #:validate-runpath? #$validate-runpath? + #:patch-shebangs? #$patch-shebangs? + #:strip-binaries? #$strip-binaries? + #:strip-flags #$strip-flags + #:strip-directories #$strip-directories))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system #:graft? #f))) + (gexp->derivation name builder + #:system system + #:target #f + #:substitutable? substitutable? + #:allowed-references allowed-references + #:disallowed-references disallowed-references + #:guile-for-build guile))) + +(define chromium-binary-build-system + (build-system + (name 'chromium-binary) + (description "The Chromium based binary build system") + (lower lower))) + +;;; chromium-binary.scm ends here diff --git a/nonguix/build/binary-build-system.scm b/nonguix/build/binary-build-system.scm index 913ff44..e5bbc48 100644 --- a/nonguix/build/binary-build-system.scm +++ b/nonguix/build/binary-build-system.scm @@ -1,21 +1,7 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2022 Attila Lendvai <attila@lendvai.name> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> (define-module (nonguix build binary-build-system) #:use-module ((guix build gnu-build-system) #:prefix gnu:) @@ -148,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/build/chromium-binary-build-system.scm b/nonguix/build/chromium-binary-build-system.scm new file mode 100644 index 0000000..0fed9bf --- /dev/null +++ b/nonguix/build/chromium-binary-build-system.scm @@ -0,0 +1,75 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nonguix build chromium-binary-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module ((nonguix build binary-build-system) #:prefix binary:) + #:use-module (nonguix build utils) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:export (%standard-phases + chromium-binary-build)) + +;; Commentary: +;; +;; Builder-side code of the Chromium binary build procedure. +;; +;; Code: + +(define* (install-wrapper #:key inputs outputs #:allow-other-keys) + (let* ((output (assoc-ref outputs "out")) + (bin (string-append output "/bin")) + (fontconfig-minimal (assoc-ref inputs "fontconfig")) + (nss (assoc-ref inputs "nss")) + (wrap-inputs (map cdr inputs)) + (lib-directories + (build-paths-from-inputs '("lib") wrap-inputs)) + (bin-directories + (build-paths-from-inputs + '("bin" "sbin" "libexec") + wrap-inputs))) + (for-each + (lambda (exe) + (display (string-append "Wrapping " exe "\n")) + (wrap-program exe + `("FONTCONFIG_PATH" ":" prefix + (,(string-join + (list + (string-append fontconfig-minimal "/etc/fonts") + output) + ":"))) + `("PATH" ":" prefix + (,(string-join + (append + bin-directories + (list + bin)) + ":"))) + `("LD_LIBRARY_PATH" ":" prefix + (,(string-join + (append + lib-directories + (list + (string-append nss "/lib/nss") + output)) + ":"))))) + (map + (lambda (exe) (string-append bin "/" exe)) + (filter + (lambda (exe) (not (string-prefix? "." exe))) + (scandir bin)))) + #t)) + +(define %standard-phases + ;; Everything is as with the binary-build-system except for the + ;; `install-wrapper' phase. + (modify-phases binary:%standard-phases + (add-after 'install 'install-wrapper install-wrapper))) + +(define* (chromium-binary-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; chromium-binary-build-system.scm ends here diff --git a/nonguix/build/utils.scm b/nonguix/build/utils.scm index ab437f2..e7d6966 100644 --- a/nonguix/build/utils.scm +++ b/nonguix/build/utils.scm @@ -1,30 +1,18 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> (define-module (nonguix build utils) #:use-module (ice-9 match) #:use-module (ice-9 binary-ports) #:use-module (guix build utils) + #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:export (64-bit? make-wrapper - concatenate-files)) + concatenate-files + build-paths-from-inputs)) (define (64-bit? file) "Return true if ELF file is in 64-bit format, false otherwise. @@ -109,3 +97,23 @@ contents: (call-with-output-file result (lambda (port) (for-each (cut dump <> port) files)))) + +(define build-paths-for-input + (lambda (dirs input) + (filter-map + (lambda (sub-directory) + (let ((directory + (string-append + input "/" sub-directory))) + (and + (directory-exists? directory) + directory))) + dirs))) + +(define build-paths-from-inputs + (lambda (dirs inputs) + (reduce append '() + (map + (lambda (input) + (build-paths-for-input dirs input)) + inputs)))) diff --git a/nonguix/download.scm b/nonguix/download.scm index 11087ff..0eb661a 100644 --- a/nonguix/download.scm +++ b/nonguix/download.scm @@ -1,17 +1,5 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. (define-module (nonguix download) #:use-module (guix derivations) diff --git a/nonguix/licenses.scm b/nonguix/licenses.scm index 84d2346..a09452a 100644 --- a/nonguix/licenses.scm +++ b/nonguix/licenses.scm @@ -1,17 +1,5 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. (define-module (nonguix licenses) #:use-module (guix licenses) diff --git a/nonguix/modules.scm b/nonguix/modules.scm index 24d4267..cd07d44 100644 --- a/nonguix/modules.scm +++ b/nonguix/modules.scm @@ -1,17 +1,5 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com> -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <https://www.gnu.org/licenses/>. (define-module (nonguix modules) #:use-module (ice-9 match) diff --git a/nongnu/packages/steam-client.scm b/nonguix/multiarch-container.scm index d9a83be..3d040c2 100644 --- a/nongnu/packages/steam-client.scm +++ b/nonguix/multiarch-container.scm @@ -1,34 +1,23 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2020 pkill-9 ;;; Copyright © 2020, 2021 ison <ison@airmail.cc> ;;; Copyright © 2021 pineapples ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me> ;;; Copyright © 2021 Kozo <kozodev@runbox.com> ;;; Copyright © 2021, 2022 John Kehayias <john.kehayias@protonmail.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> +;;; Copyright © 2023 Attila Lendvai <attila@lendvai.name> +;;; Copyright © 2023 Elijah Malaby +;;; Copyright © 2023 Timo Wilken <guix@twilken.net> -;;; The steam script provided by this package may optionally be started as -;;; a shell instead of automatically launching Steam by setting the -;;; environment variable DEBUG=1. If the sandbox is started this way then -;;; Steam should subsequently be launched via fhs-internal. +;;; The script provided by this package may optionally be started as +;;; a shell instead of automatically launching the wrapped entrypoint by setting +;;; the environment variable DEBUG=1. If the sandbox is started this way then +;;; the package should subsequently be launched via fhs-internal. ;;; The sandbox shell aids in debugging missing container elements. For -;;; example a missing symlink may be created manually before launching Steam -;;; to verify that the fix works before filing a bug report. +;;; example a missing symlink may be created manually before launching the +;;; package to verify that the fix works before filing a bug report. ;;; A container wrapper creates the following store items: ;;; * Main container package [nonguix-container->package] (basically a dummy @@ -43,61 +32,59 @@ ;;; (script run in-container which performs additional setup before ;;; launching the desired application) ;;; References: -;;; -> Wrapped package {inside container} (in this case Steam). +;;; -> Wrapped package {inside container}. ;;; Note: The extra container-internal package is necessary because there is no ;;; way to add the container package's own store path to its own manifest unless ;;; the manifest is printed inside the build phases. However, the (guix gexp) ;;; module is apparently disallowed inside build phases. -(define-module (nongnu packages steam-client) - #:use-module ((guix licenses) #:prefix license:) - #:use-module ((nonguix licenses) #:prefix license:) - #:use-module (guix gexp) - #:use-module (guix git-download) - #:use-module (guix utils) - #:use-module (guix packages) - #:use-module (guix records) - #:use-module (guix download) - #:use-module (guix build-system gnu) - #:use-module (guix build-system python) - #:use-module (guix build-system trivial) - #:use-module (guix transformations) +(define-module (nonguix multiarch-container) #:use-module (gnu packages) - #:use-module (gnu packages audio) #:use-module (gnu packages base) - #:use-module (gnu packages bash) - #:use-module (gnu packages certs) - #:use-module (gnu packages compression) - #:use-module (gnu packages elf) - #:use-module (gnu packages file) - #:use-module (gnu packages fonts) - #:use-module (gnu packages fontutils) - #:use-module (gnu packages freedesktop) - #:use-module (gnu packages gawk) - #:use-module (gnu packages gcc) - #:use-module (gnu packages gl) - #:use-module (gnu packages glib) - #:use-module (gnu packages gnome) - #:use-module (gnu packages graphics) - #:use-module (gnu packages libbsd) - #:use-module (gnu packages libusb) - #:use-module (gnu packages linux) - #:use-module (gnu packages llvm) - #:use-module (gnu packages logging) - #: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-web) - #:use-module (gnu packages python-xyz) - #:use-module (gnu packages toolkits) - #:use-module (nonguix utils)) + #:use-module (guix build-system trivial) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (guix packages) + + #:export (nonguix-container + nonguix-container? + ngc-name + ngc-binary-name + ngc-version + ngc-wrap-package + ngc-run + ngc-wrapper-name + ngc-manifest-name + ngc-internal-name + ngc-sandbox-home + ngc-ld.so.conf + ngc-ld.so.cache + ngc-union64 + ngc-union32 + ngc-preserved-env + ngc-exposed + ngc-shared + ngc-modules + ngc-packages + ngc-link-files + ngc-home-page + ngc-synopsis + ngc-description + ngc-license + + fhs-min-libs + fhs-union + ld.so.conf->ld.so.cache + packages->ld.so.conf + nonguix-container->package)) (define-record-type* <nonguix-container> 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) @@ -105,6 +92,8 @@ (manifest-name ngc-manifest-name (default "nonguix-container-manifest.scm")) (internal-name ngc-internal-name (default "fhs-internal")) (sandbox-home ngc-sandbox-home (default ".local/share/guix-sandbox-home")) + (ld.so.conf ngc-ld.so.conf) + (ld.so.cache ngc-ld.so.cache) (union64 ngc-union64 (default '())) (union32 ngc-union32 (default '())) (preserved-env ngc-preserved-env (default '())) @@ -118,134 +107,10 @@ (description ngc-description (default #f)) (license ngc-license (default #f))) -(define steam-client - (package - (name "steam-client") - (version "1.0.0.74") - (source - (origin - (method url-fetch) - (uri (string-append "http://repo.steampowered.com/steam/archive/precise/steam_" - version ".tar.gz")) - (sha256 - (base32 - "0d52n6ifsc3ix3w1qw02yg6w0vddhnfmi2wdnvdfhhgmg21kpvdh")) - (file-name (string-append name "-" version ".tar.gz")))) - (build-system gnu-build-system) - (arguments - `(#:tests? #f ; There are no tests. - #:validate-runpath? #f ; Looks for bin/steam which doesn't exist. - #:make-flags - (list "PREFIX=" (string-append "DESTDIR=" (assoc-ref %outputs "out"))) - #:phases - (modify-phases %standard-phases - (delete 'configure) - ;; Patch Makefile so it creates links to the store rather than /lib. - (add-after 'unpack 'patch-makefile - (lambda _ - (substitute* "Makefile" - (("-fns ") - "-fns $(DESTDIR)")))) - (delete 'patch-dot-desktop-files) - (add-after 'unpack 'patch-startscript - (lambda _ - (substitute* "bin_steam.sh" - (("/usr") (assoc-ref %outputs "out"))))) - (add-after 'patch-dot-desktop-files 'patch-desktop-file - (lambda _ - (let ((path (string-append (assoc-ref %outputs "out") - "/share/applications/"))) - (substitute* (string-append path "steam.desktop") - (("Exec=.*/steam") "Exec=steam")) - (copy-file (string-append path "steam.desktop") - (string-append path "steam-asound32.desktop")) - (substitute* (string-append path "steam-asound32.desktop") - (("Exec=steam %U") "Exec=steam %U -- --asound32") - (("Name=Steam") "Name=Steam (32-bit ALSA)"))))) - ;; Steamdeps installs missing packages, which doesn't work with Guix. - (add-after 'install-binaries 'post-install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref %outputs "out"))) - (delete-file (string-append out "/lib/steam/bin_steamdeps.py")) - (delete-file (string-append out "/bin/steamdeps")))))))) - (home-page "https://store.steampowered.com") - (synopsis "Digital distribution platform for managing and playing games") - (description "Steam is a digital software distribution platform created by Valve.") - (license (license:nonfree "file:///share/doc/steam/steam_subscriber_agreement.txt")))) - -(define glibc-for-fhs - (package - (inherit glibc) - (name "glibc-for-fhs") - (source (origin (inherit (package-source glibc)) - ;; Remove Guix's patch to read ld.so.cache from /gnu/store - ;; directories, re-enabling the default /etc/ld.so.cache - ;; behavior. - (patches (delete (car (search-patches "glibc-dl-cache.patch")) - (origin-patches (package-source glibc)))))))) - -;; After guix commit to add a replacement for expat (security fixes), -;; https://git.savannah.gnu.org/cgit/guix.git/commit/?id=2045852b096131a714409aa0cc4fe17938f60b15 -;; a profile collision happens with the propagated expat (now grafted) from -;; fontconfig. See upstream report https://issues.guix.gnu.org/53406 -;; So we define a fontconfig variation that explicitly does the expat replacement -;; which works around this bug for now, at the cost of building fontconfig. -;; TODO: remove once upstream bug is fixed -(define fontconfig-fixed - (package - (inherit fontconfig) - (propagated-inputs - (modify-inputs (package-propagated-inputs fontconfig) - (replace "expat" (@@ (gnu packages xml) expat/fixed)))))) - (define fhs-min-libs - `(("glibc" ,glibc-for-fhs) + `(("glibc" ,(@@ (gnu packages base) glibc-for-fhs)) ("glibc-locales" ,glibc-locales))) -(define steam-client-libs - `(("bash" ,bash) ; Required for steam startup. - ("coreutils" ,coreutils) - ("diffutils" ,diffutils) - ("dbus-glib" ,dbus-glib) ; Required for steam browser. - ("elfutils" ,elfutils) ; Required for capturing library dependencies in pv. - ("eudev" ,eudev) ; Required for steamwebhelper/heavy runtime. - ;; TODO: set back to ,fontconfig once https://issues.guix.gnu.org/53406 is fixed - ("fontconfig" ,fontconfig-fixed) ; Required for steam client. - ("file" ,file) ; Used for steam installation. - ("find" ,findutils) ; Required at least for some logging. - ("freetype" ,freetype) ; Required for steam login. - ("gawk" ,gawk) - ("gcc:lib" ,gcc "lib") ; Required for steam startup. - ("grep" ,grep) - ("libbsd" ,libbsd) - ("libcap" ,libcap) ; Required for SteamVR, but needs pkexec too. - ("libusb" ,libusb) ; Required for SteamVR. - ("llvm" ,llvm-11) ; Required for mesa. - ("mesa" ,mesa) ; Required for steam startup. - ("nss-certs" ,nss-certs) ; Required for steam login. - ("pciutils" ,pciutils) ; Tries to run lspci at steam startup. - ("procps" ,procps) - ("sed" ,sed) - ("tar" ,tar) - ("usbutils" ,usbutils) ; Required for SteamVR. - ("util-linux" ,util-linux) ; Required for steam login. - ("wayland" ,wayland) ; Required for mesa vulkan (e.g. libvulkan_radeon). - ("xdg-utils" ,xdg-utils) - ("xz" ,xz) - ("zenity" ,zenity))) ; Required for progress dialogs. - -(define steam-gameruntime-libs - `(("alsa-lib" ,alsa-lib) ; Required for audio in most games. - ("alsa-plugins:pulseaudio" ,alsa-plugins "pulseaudio") ; Required for audio in most games. - ("font-dejavu" ,font-dejavu) - ("font-liberation" ,font-liberation) - ("imgui" ,imgui-1.86) ; Required for MangoHud. - ("mangohud" ,mangohud) - ("openal" ,openal) ; Prevents corrupt audio in Crypt of the Necrodancer. - ("pulseaudio" ,pulseaudio) ; Prevents corrupt audio in Sven Coop. - ("python" ,python) ; Required for KillingFloor2 and Wreckfest. - ("spdlog" ,spdlog))) ; Required for MangoHud. - (define* (fhs-union inputs #:key (name "fhs-union") (version "0.0") (system "x86_64-linux")) "Create a package housing the union of inputs." (package @@ -290,45 +155,25 @@ in the Guix store" (computed-file "ld.so.conf" - (with-imported-modules - `((guix build union) - (guix build utils)) - #~(begin - (use-modules (guix build union) - (guix build utils)) - ;; Need to quote "#$packages" as #$packages tries to "apply" the first item to the rest, like a procedure. - (let* ((packages '#$packages) - ;; Add "/lib" to each package. - ;; TODO Make this more general for other needed directories. - (dirs-lib - (lambda (packages) - (map (lambda (package) - (string-append package "/lib")) - packages))) - (fhs-lib-dirs - (dirs-lib packages))) - (call-with-output-file #$output - (lambda (port) - (for-each (lambda (directory) - (display directory port) - (newline port)) - fhs-lib-dirs))) - #$output))))) - -(define steam-ld.so.conf - (packages->ld.so.conf - (list (fhs-union `(,@steam-client-libs - ,@steam-gameruntime-libs - ,@fhs-min-libs) - #:name "fhs-union-64") - (fhs-union `(,@steam-client-libs - ,@steam-gameruntime-libs - ,@fhs-min-libs) - #:name "fhs-union-32" - #:system "i686-linux")))) - -(define steam-ld.so.cache - (ld.so.conf->ld.so.cache steam-ld.so.conf)) + #~(begin + ;; Need to quote "#$packages" as #$packages tries to "apply" the first item to the rest, like a procedure. + (let* ((packages '#$packages) + ;; Add "/lib" to each package. + ;; TODO Make this more general for other needed directories. + (dirs-lib + (lambda (packages) + (map (lambda (package) + (string-append package "/lib")) + packages))) + (fhs-lib-dirs + (dirs-lib packages))) + (call-with-output-file #$output + (lambda (port) + (for-each (lambda (directory) + (display directory port) + (newline port)) + fhs-lib-dirs))) + #$output)))) (define (nonguix-container->package container) "Return a package with wrapper script to launch the supplied container object @@ -365,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")) @@ -394,8 +239,7 @@ in a sandboxed FHS environment." in a sandboxed FHS environment." (program-file (ngc-wrapper-name container) - (with-imported-modules - `((guix build utils)) + (with-imported-modules '((guix build utils)) #~(begin (use-modules (guix build utils)) (define (preserve-var var) @@ -419,16 +263,39 @@ in a sandboxed FHS environment." (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 + ;; <https://github.com/ValveSoftware/steam-for-linux/issues/9306> + ;; and tracked on our end as + ;; <https://gitlab.com/nonguix/nonguix/-/issues/267>. + ;; 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$" @@ -447,10 +314,12 @@ in a sandboxed FHS environment." "/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"))) + ,@(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: @@ -464,16 +333,24 @@ in a sandboxed FHS environment." ,@(exists-> (string-append home "/.config/pulse")) ,@(exists-> (string-append xdg-runtime "/pulse")) ,@(exists-> (string-append xdg-runtime "/bus")) - ,@(exists-> (getenv "XAUTHORITY")))) + ,@(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)))) - ;; TODO: Remove once upstream change is merged and in stable pressure-vessel - ;; (although may want to hold off for anyone using older pressure-vessel versions - ;; for whatever reason), see: - ;; https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/merge_requests/406 - (setenv "PRESSURE_VESSEL_FILESYSTEMS_RO" "/gnu/store") + ;; 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 @@ -490,7 +367,9 @@ in a sandboxed FHS environment." ,@(map add-path expose) ,@(map (lambda (item) (add-path item #:writable? #t)) - share) + (if extra-shares + (append share extra-shares) + share)) "-m" ,manifest-file ,@command))))))) @@ -539,7 +418,8 @@ the exact path for the fhs-internal package." (version (or (ngc-version container) (package-version (ngc-wrap-package container)))) (source #f) - (inputs `(("fhs-internal-script" ,(make-internal-script container)))) + (inputs `(("fhs-internal-script" + ,(make-internal-script container)))) (build-system trivial-build-system) (arguments `(#:modules ((guix build utils)) @@ -565,8 +445,8 @@ application." ;; contains are directly to /gnu/store/. Instead, it could be generated with ;; a generic ld.so.conf and result in paths more typical in an FHS distro, ;; like /lib within the container. This may be useful for future compatibility. - (let* ((ld.so.conf steam-ld.so.conf) - (ld.so.cache steam-ld.so.cache) + (let* ((ld.so.conf (ngc-ld.so.conf container)) + (ld.so.cache (ngc-ld.so.cache container)) (pkg (ngc-wrap-package container)) (run (ngc-run container))) (program-file @@ -597,9 +477,9 @@ application." (ld.so.cache #$(file-append ld.so.cache)) (all-args (cdr (command-line))) (fhs-args (member "--" all-args)) - (steam-args (if fhs-args - (reverse (cdr (member "--" (reverse all-args)))) - all-args))) + (package-args (if fhs-args + (reverse (cdr (member "--" (reverse all-args)))) + all-args))) (delete-file "/bin/sh") (rmdir "/bin") (for-each @@ -607,12 +487,15 @@ application." '("/run/current-system/profile/etc" "/run/current-system/profile/share" "/sbin" - "/usr/share/vulkan/icd.d" - "/usr/share/vulkan/implicit_layer.d")) ; Implicit layers like MangoHud + "/usr/lib" + "/usr/share/vulkan/icd.d")) (for-each new-symlink `((,ld.so.cache . "/etc/ld.so.cache") (,ld.so.conf . "/etc/ld.so.conf") ;; needed? + ;; For MangoHud implicit layers. + ((,guix-env "share/vulkan/implicit_layer.d") . + "/usr/share/vulkan/implicit_layer.d") ((,guix-env "etc/ssl") . "/etc/ssl") ((,guix-env "etc/ssl") . "/run/current-system/profile/etc/ssl") ((,union32 "lib") . "/lib") @@ -622,18 +505,17 @@ application." ((,union64 "lib") . "/lib64") ((,union64 "lib") . "/run/current-system/profile/lib64") ((,union64 "lib/locale") . "/run/current-system/locale") + ;; Despite using GUIX_LOCPATH, stil need locales in their + ;; expected location for pressure-vessel to use them. + ((,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") ((,union64 "share/vulkan/explicit_layer.d") . - "/usr/share/vulkan/explicit_layer.d") - ;; The MangoHud layer has the same file name for 64- and 32-bit, - ;; so create links with different names. - ((,union64 "share/vulkan/implicit_layer.d/MangoHud.json") . - "/usr/share/vulkan/implicit_layer.d/MangoHud.json") - ((,union32 "share/vulkan/implicit_layer.d/MangoHud.json") . - "/usr/share/vulkan/implicit_layer.d/MangoHud.x86.json"))) + "/usr/share/vulkan/explicit_layer.d"))) (for-each icd-symlink ;; Use stat to follow links from packages like MangoHud. @@ -641,11 +523,21 @@ application." #:directories? #t #:stat stat) ,@(find-files (string-append union64 "/share/vulkan/icd.d") #:directories? #t #:stat stat))) - ;; TODO: Is this the right place for this? + ;; TODO: This is not the right place for this. ;; Newer versions of Steam won't startup if they can't copy to here ;; (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 + ;; <https://gitlab.com/nonguix/nonguix/-/issues/303> + (setenv "LD_LIBRARY_PATH" "/lib64:/lib") ;; Process FHS-specific command line options. (let* ((options (getopt-long (or fhs-args '("")) fhs-option-spec)) @@ -653,9 +545,13 @@ application." (asound-lib (if asound32-opt "lib" "lib64"))) (if asound32-opt (display "\n\n/etc/asound.conf configured for 32-bit.\n\n\n") - (display "\n\n/etc/asound.conf configured for 64-bit.\nLaunch steam with \"steam -- --asound32\" to use 32-bit instead.\n\n\n")) + (display (string-append "\n\n/etc/asound.conf configured for 64-bit.\nLaunch " + #$(ngc-binary-name container) + " with \"" + (basename #$(ngc-run container)) + " -- --asound32\" to use 32-bit instead.\n\n\n"))) (with-output-to-file "/etc/asound.conf" - (lambda _ (format (current-output-port) "# Generated by steam-client + (lambda _ (format (current-output-port) "# Generated by nonguix's internal script # Use PulseAudio by default pcm_type.pulse { @@ -680,78 +576,4 @@ ctl.!default { fallback \"sysdefault\" }\n\n" asound-lib asound-lib)))) - (apply system* `(#$(file-append pkg run) ,@steam-args)))))))) - -(define-public steam - (nonguix-container->package - (nonguix-container - (name "steam") - (wrap-package steam-client) - (run "/bin/steam") - (union64 - (fhs-union `(,@steam-client-libs - ,@steam-gameruntime-libs - ,@fhs-min-libs) - #:name "fhs-union-64")) - (union32 - (fhs-union `(,@steam-client-libs - ,@steam-gameruntime-libs - ,@fhs-min-libs) - #:name "fhs-union-32" - #:system "i686-linux")) - (link-files '("share/applications/steam.desktop" - "share/applications/steam-asound32.desktop")) - (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 -all games will be installed.")))) - -(define-public steam-nvidia - (nonguix-container->package - (nonguix-container - (name "steam-nvidia") - (wrap-package steam-client) - (run "/bin/steam") - (union64 - (replace-mesa - (fhs-union `(,@steam-client-libs - ,@steam-gameruntime-libs - ,@fhs-min-libs) - #:name "fhs-union-64"))) - (union32 - (replace-mesa - (fhs-union `(,@steam-client-libs - ,@steam-gameruntime-libs - ,@fhs-min-libs) - #:name "fhs-union-32" - #:system "i686-linux"))) - (link-files '("share/applications/steam.desktop" - "share/applications/steam-asound32.desktop")) - (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 -all games will be installed.")))) - -(define-public protonup-ng - (package - (name "protonup-ng") - (version "0.2.1") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/cloudishBenne/protonup-ng") - (commit version))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0yd2mhhqxzarqxk85zf42s931jzc94f1cssn1hblsqghr79laa45")))) - (build-system python-build-system) - (arguments - (list #:tests? #f)) ; there are no tests - (inputs - (list python-configparser python-requests)) - (home-page "https://github.com/cloudishBenne/protonup-ng") - (synopsis "Manage Proton-GE Installations") - (description "ProtonUp-ng is a CLI program and API to automate the installation -and update of GloriousEggroll's Proton-GE.") - (license license:gpl3))) + (apply system* `(#$(file-append pkg run) ,@package-args)))))))) diff --git a/nonguix/utils.scm b/nonguix/utils.scm index 7611a47..6703f4a 100644 --- a/nonguix/utils.scm +++ b/nonguix/utils.scm @@ -1,20 +1,6 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de> (define-module (nonguix utils) #:use-module (srfi srfi-26) |