summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dir-locals.el12
-rw-r--r--.guix-authorizations3
-rw-r--r--.guix-channel1
-rw-r--r--NEWS21
-rw-r--r--README.org108
-rw-r--r--news.txt64
-rw-r--r--nongnu/ci.scm14
-rw-r--r--nongnu/packages/anydesk.scm21
-rw-r--r--nongnu/packages/benchmark.scm43
-rw-r--r--nongnu/packages/cad.scm165
-rw-r--r--nongnu/packages/chrome.scm152
-rw-r--r--nongnu/packages/chromium.scm148
-rw-r--r--nongnu/packages/clojure.scm121
-rw-r--r--nongnu/packages/compression.scm21
-rw-r--r--nongnu/packages/coq.scm36
-rw-r--r--nongnu/packages/databases.scm45
-rw-r--r--nongnu/packages/dotnet.scm37
-rw-r--r--nongnu/packages/dyalog.scm222
-rw-r--r--nongnu/packages/editors.scm97
-rw-r--r--nongnu/packages/electron.scm104
-rw-r--r--nongnu/packages/emacs.scm114
-rw-r--r--nongnu/packages/emulators.scm17
-rw-r--r--nongnu/packages/engineering.scm73
-rw-r--r--nongnu/packages/firmware.scm309
-rw-r--r--nongnu/packages/fonts.scm185
-rw-r--r--nongnu/packages/game-client.scm368
-rw-r--r--nongnu/packages/game-development.scm223
-rw-r--r--nongnu/packages/gog.scm53
-rw-r--r--nongnu/packages/k8s.scm217
-rw-r--r--nongnu/packages/linux.scm773
-rw-r--r--nongnu/packages/lisp.scm165
-rw-r--r--nongnu/packages/messaging.scm407
-rw-r--r--nongnu/packages/mozilla.scm819
-rw-r--r--nongnu/packages/music.scm103
-rw-r--r--nongnu/packages/ncurses.scm229
-rw-r--r--nongnu/packages/nvidia.scm1333
-rw-r--r--nongnu/packages/patches/broadcom-sta-debian-fix-kernel-warnings.patch161
-rw-r--r--nongnu/packages/patches/broadcom-sta-fix_mac_profile_discrepancy.patch16
-rw-r--r--nongnu/packages/patches/broadcom-sta-gcc.patch11
-rw-r--r--nongnu/packages/patches/broadcom-sta-license.patch13
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-4.11.patch52
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-4.12.patch68
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-4.15.patch47
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-4.7.patch109
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-4.8.patch64
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-5.1.patch32
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-5.10.patch211
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-5.6.patch87
-rw-r--r--nongnu/packages/patches/broadcom-sta-linux-5.9.patch12
-rw-r--r--nongnu/packages/patches/broadcom-sta-null-pointer-fix.patch27
-rw-r--r--nongnu/packages/patches/broadcom-sta-rdtscl.patch22
-rw-r--r--nongnu/packages/playonlinux.scm45
-rw-r--r--nongnu/packages/printers.scm294
-rw-r--r--nongnu/packages/productivity.scm108
-rw-r--r--nongnu/packages/radio.scm111
-rw-r--r--nongnu/packages/scanner.scm17
-rw-r--r--nongnu/packages/version-control.scm58
-rw-r--r--nongnu/packages/video.scm94
-rw-r--r--nongnu/packages/vpn.scm29
-rw-r--r--nongnu/packages/wasm.scm250
-rw-r--r--nongnu/packages/wine.scm41
-rw-r--r--nongnu/services/nvidia.scm64
-rw-r--r--nongnu/services/vpn.scm18
-rw-r--r--nongnu/system/install.scm69
-rw-r--r--nongnu/system/linux-initrd.scm39
-rw-r--r--nonguix/build-system/binary.scm17
-rw-r--r--nonguix/build-system/chromium-binary.scm209
-rw-r--r--nonguix/build/binary-build-system.scm77
-rw-r--r--nonguix/build/chromium-binary-build-system.scm74
-rw-r--r--nonguix/build/utils.scm22
-rw-r--r--nonguix/download.scm14
-rw-r--r--nonguix/licenses.scm14
-rw-r--r--nonguix/modules.scm14
-rw-r--r--nonguix/multiarch-container.scm (renamed from nongnu/packages/steam-client.scm)494
-rw-r--r--nonguix/utils.scm18
75 files changed, 7076 insertions, 2869 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 1d6aa61..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.
@@ -17,5 +18,7 @@
(name "jonsger"))
("D319 C7A9 8F2C 3A11 D9C0 0E30 F369 0CBE 3152 EF58"
(name "pineapples"))
+ ("A420 7B56 C255 109F 2CB3 157E 4990 97AE 5EA8 15D9"
+ (name "podiki"))
("1EFB 0909 1F17 D28C CBF9 B13A 53D4 57B2 D636 EE82"
(name "roptat"))))
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
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..724ca08
--- /dev/null
+++ b/NEWS
@@ -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.
diff --git a/README.org b/README.org
index dc13104..1054904 100644
--- a/README.org
+++ b/README.org
@@ -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,98 @@ 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
+
+** NVIDIA graphics card
+
+NVIDIA graphics card support in Nonguix consists of a system service =nvidia-service-type= and a package =nvda= for application setup.
+
+The following code serves as an example for system setup:
+
+#+BEGIN_SRC scheme
+ (use-modules (gnu services gnome)
+ (gnu services xorg)
+ (nongnu packages nvidia)
+ (nongnu services nvidia))
+
+ (operating-system
+ (kernel-arguments '("modprobe.blacklist=nouveau"
+ ;; Set this if the card is not used for displaying or
+ ;; you're using Wayland:
+ "nvidia_drm.modeset=1"))
+ (services
+ (cons* (service nvidia-service-type)
+ ;; Configure desktop environment, GNOME for example.
+ (service gnome-desktop-service-type
+ ;; Enable NVIDIA support, only do this when the card is
+ ;; used for displaying.
+ (gnome-desktop-configuration
+ (gnome (replace-mesa gnome))))
+ ;; Configure Xorg server, only do this when the card is used for
+ ;; displaying.
+ (set-xorg-configuration
+ (xorg-configuration
+ (modules (cons nvda %default-xorg-modules))
+ (drivers '("nvidia"))))
+ ...))
+ ...)
+#+END_SRC
+
+For application setup, =mesa= has to be replaced with =nvda= for every individual package that requires the NVIDIA driver, this can be done with grafting (which doesn't rebuild packages) or rewriting inputs (which rebuilds packages) (see [[https://guix.gnu.org/manual/devel/en/guix.html#Package-Transformation-Options][Package Transformation Options]] in GNU Guix Reference Manual). For example:
+
+#+BEGIN_SRC shell
+ guix build mesa-utils --with-graft=mesa=nvda
+ guix build mesa-utils --with-input=mesa=nvda
+#+END_SRC
+
+The above transformation can be used within an one-off software environment spawned by =guix shell= as well, for correct environment variables, the =nvda= package may be added into the environment:
+
+#+BEGIN_SRC shell
+ guix shell mesa-utils nvda --with-graft=mesa=nvda \
+ -- glxinfo
+#+END_SRC
+
+To graft mesa with nvda programmatically, use =replace-mesa= defined in =(nongnu packages nvidia)=:
+
+#+BEGIN_SRC scheme
+ (use-modules (nongnu packages nvidia))
+
+ ;; Replace mesa with nvda for a single package.
+ (replace-mesa <some-package>)
+
+ ;; Replace mesa with nvda for a package list.
+ (map replace-mesa (list <some-package> ...))
+
+ ;; A package with mesa replaced is still a package, it can be part of a
+ ;; package list.
+ (list (replace-mesa <some-package>)
+ ...)
+#+END_SRC
+
+When the card is not used for displaying, environment variables =__GLX_VENDOR_LIBRARY_NAME=nvidia= and =__NV_PRIME_RENDER_OFFLOAD=1= may be set.
+
** Substitutes for nonguix
A Nonguix substitute server is available at [[https://substitutes.nonguix.org]].
diff --git a/news.txt b/news.txt
index eac4cae..4ce13a5 100644
--- a/news.txt
+++ b/news.txt
@@ -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,68 @@
(channel-news
(version 0)
+ (entry (commit "be61a1829a19724299e46d6e3c1038229039c3ee")
+ (title
+ (en "Nvidia driver package/service updates and changes"))
+ (body
+ (en "In addition to the Nvidia driver package being updated to 550.67,
+the service, procedures, and configuration has changed. Please see the new
+directions in the Nonguix README.org for how to use the Nvidia driver in your
+system configuration, and of course report any issues with these changes or
+improvements for the documentation.")))
+
+ (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
new file mode 100644
index 0000000..a66bef3
--- /dev/null
+++ b/nongnu/packages/cad.scm
@@ -0,0 +1,165 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; Copyright © 2021-2022 Petr Hodina <phodina@protonmail.com>
+
+(define-module (nongnu packages cad)
+ #:use-module (guix packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages bootstrap)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages cups)
+ #:use-module (gnu packages elf)
+ #:use-module (gnu packages fontutils)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages gl)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages gstreamer)
+ #:use-module (gnu packages libusb)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages nss)
+ #:use-module (gnu packages maths)
+ #:use-module (gnu packages pulseaudio)
+ #:use-module (gnu packages qt)
+ #:use-module (gnu packages xorg)
+ #:use-module (guix download)
+ #:use-module (nonguix build-system binary)
+ #:use-module ((nonguix licenses) #:prefix license:))
+
+(define-public lightburn
+ (package
+ (name "lightburn")
+ (version "1.2.01")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/LightBurnSoftware/deployment/"
+ "releases/download/" version
+ "/LightBurn-Linux64-v" version ".7z"))
+ (sha256
+ (base32
+ "1yqxkf0izcfz05wrxh9xpmm7qi5wd5f1w9d2kni2wbzs531nr22p"))))
+ (build-system binary-build-system)
+ (arguments
+ `(#:strip-binaries? #f ;TODO: For some reason it fails validate-runpath
+ ;; phase if enbaled
+ #:install-plan
+ `(("LightBurn" "bin/LightBurn") ("LightBurn.png" "Lightburn.png")
+ ("qt.conf" "qt.conf")
+ ("languages" "languages")
+ ("plugins" "plugins")
+ ("translations" "translations"))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'unpack
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((source (assoc-ref inputs "source")))
+ (invoke "7z" "x" source)
+ (chdir "LightBurn")
+ (delete-file-recursively "lib"))))
+ (replace 'patchelf
+ (lambda* (#:key inputs outputs patchelf-plan #:allow-other-keys)
+ (let* ((lightburn "LightBurn")
+ (plugins (list
+ "audio/libqtaudio_alsa.so"
+ "audio/libqtmedia_pulse.so"
+ "bearer/libqconnmanbearer.so"
+ "bearer/libqgenericbearer.so"
+ "bearer/libqnmbearer.so"
+ "imageformats/libqgif.so"
+ "imageformats/libqicns.so"
+ "imageformats/libqico.so"
+ "imageformats/libqjpeg.so"
+ "imageformats/libqtga.so"
+ "imageformats/libqtiff.so"
+ "imageformats/libqwbmp.so"
+ "imageformats/libqwebp.so"
+ "mediaservice/libgstaudiodecoder.so"
+ "mediaservice/libgstcamerabin.so"
+ "mediaservice/libgstmediacapture.so"
+ "mediaservice/libgstmediaplayer.so"
+ (string-append
+ "platforminputcontexts"
+ "/libcomposeplatforminputcontextplugin.so")
+ (string-append
+ "platforminputcontexts"
+ "/libibusplatforminputcontextplugin.so")
+ "platforms/libqxcb.so"
+ "printsupport/libcupsprintersupport.so"
+ "xcbglintegrations/libqxcb-egl-integration.so"
+ "xcbglintegrations/libqxcb-glx-integration.so"))
+ (libc (assoc-ref inputs "libc"))
+ (nss (assoc-ref inputs "nss"))
+ (rpath (string-append (apply string-append
+ (map (lambda (pkg)
+ (string-append (assoc-ref
+ inputs
+ pkg)
+ "/lib:"))
+ '("alsa-lib"
+ "cups-minimal"
+ "fontconfig-minimal"
+ "freetype"
+ "gcc"
+ "glib"
+ "gst-plugins-base"
+ "gstreamer"
+ "libusb"
+ "libx11"
+ "libxcb"
+ "libxext"
+ "libxi"
+ "libxrender"
+ "mesa"
+ "nspr"
+ "openlibm"
+ "pulseaudio"
+ "qtbase"
+ "qtserialport"
+ "qtmultimedia"
+ "zlib"))) nss
+ "/lib/nss:"))
+ (ld-so (string-append libc
+ ,(glibc-dynamic-linker))))
+ (invoke "patchelf" "--set-rpath" rpath lightburn)
+ (invoke "patchelf" "--set-interpreter" ld-so lightburn)
+ (map (lambda (x)
+ (invoke "patchelf" "--set-rpath" rpath
+ (string-append "plugins/" x))) plugins)))))))
+ (supported-systems '("x86_64-linux"))
+ (native-inputs (list p7zip
+ patchelf))
+ (inputs (list alsa-lib
+ cups-minimal
+ fontconfig
+ `(,gcc "lib")
+ glib
+ gst-plugins-base
+ gstreamer
+ libusb
+ libx11
+ libxcb
+ libxext
+ libxi
+ libxrender
+ nspr
+ nss
+ mesa
+ openlibm
+ pulseaudio
+ qtbase-5
+ qtserialport-5
+ qtmultimedia-5
+ zlib))
+ (synopsis "Layout, editing, and control software for your laser cutter")
+ (description
+ "This package provides layout, editing, and control software
+for your laser cutter. Following features are supported:
+@enumerate
+@item Import artwork from formats such as AI, PDF, SVG, DXF, PLT, PNG, JPG, GIF
+, BMP
+@item arrange, edit, and even create new vector shapes within the editor
+@item apply production settings such as like power, speed, number of passes,
+cut order, etc.
+@item send the result directly to your laser cutter
+@end enumerate")
+ (home-page "https://lightburnsoftware.com/")
+ (license (license:nonfree "https://lightburnsoftware.com/pages/how-the-lightburn-license-works"))))
diff --git a/nongnu/packages/chrome.scm b/nongnu/packages/chrome.scm
new file mode 100644
index 0000000..d3bc509
--- /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" "123.0.6312.86" "1fjpwz5pdzjak7932kxvmp3ba2s5qyvj5b908sndg9l4qv1hkh96"))
+
+(define-public google-chrome-beta
+ (make-google-chrome "beta" "124.0.6367.18" "18gv6s4v6g8nw80rfiamz0xx6bwzn567xvmmn95xx70lhcvz9s34"))
+
+(define-public google-chrome-unstable
+ (make-google-chrome "unstable" "125.0.6368.2" "0cfsq2qh9apbafapxqdz8sb65mm6yqxpcl7kwx9g9yi0sngqcxsz"))
diff --git a/nongnu/packages/chromium.scm b/nongnu/packages/chromium.scm
new file mode 100644
index 0000000..4467714
--- /dev/null
+++ b/nongnu/packages/chromium.scm
@@ -0,0 +1,148 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; Copyright © 2022 Pierre Neidhardt <mail@ambrevar.xyz>
+
+(define-module (nongnu packages chromium)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (guix download)
+ #:use-module (guix utils)
+ #:use-module (guix build-system gnu)
+ #:use-module (nonguix build-system binary)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages cmake)
+ #:use-module (gnu packages cups)
+ #: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 nss)
+ #:use-module (gnu packages xml)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xorg)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-1))
+
+(define-public chromium-embedded-framework
+ (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 "117.2.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://cef-builds.spotifycdn.com/cef_binary_"
+ version
+ "+g" git-revision
+ "+chromium-" chromium-version
+ "_" arch "_minimal.tar.bz2"))
+ (sha256
+ (base32
+ "0vzzwq1k6bv9d209yg3samvfnfwj7s58y9r3p3pd98wxa9iyzf4j"))))
+ (build-system binary-build-system)
+ (arguments
+ `(#:patchelf-plan
+ `(("Release/libcef.so" ("alsa-lib"
+ "at-spi2-atk"
+ "at-spi2-core"
+ "atk"
+ "cairo"
+ "cups"
+ "dbus"
+ "expat"
+ "gcc"
+ "glib"
+ "glibc"
+ "gtk+"
+ "libdrm"
+ "libx11"
+ "libxcb"
+ "libxcomposite"
+ "libxdamage"
+ "libxext"
+ "libxfixes"
+ "libxkbcommon"
+ "libxrandr"
+ "libxshmfence"
+ "mesa"
+ "nspr"
+ ("nss" "/lib/nss")
+ "pango")))
+ #:install-plan
+ `(("Release/libcef.so" "lib/")
+ ("libcef_dll_wrapper/libcef_dll_wrapper.a" "lib/")
+ ("Release/" "share/cef/"
+ #:include-regexp (".*.bin"))
+ ("Resources/" "share/cef/")
+ ("include" "./"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'install 'build
+ (lambda _
+ (invoke "cmake" "-DCMAKE_BUILD_TYPE=Release" ".")
+ (invoke "make" "libcef_dll_wrapper"))))))
+ (inputs
+ (list
+ alsa-lib
+ at-spi2-atk
+ at-spi2-core
+ atk
+ cairo
+ cups
+ dbus
+ expat
+ `(,gcc "lib")
+ glib
+ gtk+
+ libdrm
+ libx11
+ libxcb
+ libxcomposite
+ libxdamage
+ libxext
+ libxfixes
+ libxkbcommon
+ libxrandr
+ libxshmfence
+ mesa
+ nspr
+ nss
+ pango))
+ (native-inputs
+ ;; FIXME: We specify glibc here so that Cmake does not pick the wrong
+ ;; architecture (e.g. glibc32 while on a 64-bit system).
+ ;; The build system could be smarter.
+ (list glibc
+ cmake))
+ (synopsis "Embed Chromium-based browsers in other applications")
+ (supported-systems '("armhf-linux" "aarch64-linux" "x86_64-linux"))
+ (description "This library provides a simple framework for embedding
+Chromium-based browsers in other applications.
+
+Unlike the Chromium project itself, which focuses mainly on Google Chrome
+application development, CEF focuses on facilitating embedded browser use
+cases in third-party applications. CEF insulates the user from the underlying
+Chromium and Blink code complexity by offering production-quality stable
+APIs.
+
+Some use cases for CEF include:
+
+@itemize
+@item Embedding an HTML5-compliant Web browser control in an existing native
+application.
+@item Creating a light-weight native \"shell\" application that hosts a user
+interface developed primarily using Web technologies.
+@item Rendering Web content “off-screen” in applications that have their own
+custom drawing frameworks.
+@item Acting as a host for automated testing of existing Web properties and
+applications.
+@end itemize\n")
+ (home-page "https://bitbucket.org/chromiumembedded/cef")
+ (license license:bsd-3))))
diff --git a/nongnu/packages/clojure.scm b/nongnu/packages/clojure.scm
index a275da5..1e9df62 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 "2021.12.16")
+ (version "2024.03.13")
(source (origin
(method url-fetch/zipbomb)
(uri (string-append
@@ -109,26 +95,87 @@ lets you focus on your code.")
version "/clj-kondo-" version "-linux-amd64.zip"))
(sha256
(base32
- "16sxrf4080wpqjis4clj1nrljcibabaxb3h24055kiad4fh6pj2q"))))
+ "0qdimdf854wsy19i39j18f01b3dhj4zccslymbkn8j9rm90k91m3"))))
(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")
(description "Clj-kondo performs static analysis on Clojure, ClojureScript
and EDN, without the need of a running REPL.")
(license license:epl1.0)))
+
+(define-public clojure-lsp
+ (package
+ (name "clojure-lsp")
+ (version "2024.03.13-13.11.00")
+ (source (origin
+ (method url-fetch/zipbomb)
+ (uri (string-append "https://github.com/clojure-lsp/clojure-lsp"
+ "/releases/download/" version
+ "/clojure-lsp-native-static-linux-amd64.zip"))
+ (sha256
+ (base32
+ "1l6w55aragyf8rzy087iqw97xnpih5syjwhf0jwbgrqps2k44ms5"))))
+ (build-system binary-build-system)
+ (arguments
+ `(#:install-plan
+ '(("./clojure-lsp" "/bin/"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chmod
+ (lambda _
+ (chmod "./clojure-lsp" #o755))))))
+ (inputs (list `(,gcc "lib") zlib))
+ (supported-systems '("x86_64-linux"))
+ (home-page "https://github.com/clojure-lsp/clojure-lsp")
+ (synopsis "Clojure & ClojureScript Language Server (LSP) implementation")
+ (description "This package provides a Language Server for Clojure and ClojureScript
+languages. The goal of this project is to bring great editing tools for
+Clojure/Clojurescript to all editors and programatically via its CLI and API.
+It aims to work alongside you to help you navigate, identify and fix errors,
+perform refactors and more.")
+ (license license:expat)))
+
+(define-public babashka
+ (package
+ (name "babashka")
+ (version "1.3.189")
+ (source (origin
+ (method url-fetch/tarbomb)
+ (uri (string-append "https://github.com/babashka/babashka"
+ "/releases/download/v" version "/babashka-"
+ version "-linux-amd64.tar.gz"))
+ (sha256
+ (base32
+ "1gzra3y5iljjqi4rj1qxr3yniqla3qnhv881gkzrp788fwsvlmwv"))))
+ (build-system binary-build-system)
+ (arguments
+ `(#:patchelf-plan
+ '(("bb" ("gcc" "zlib")))
+ #:install-plan
+ '(("./bb" "/bin/"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chmod
+ (lambda _
+ (chmod "bb" #o755))))))
+ (inputs (list `(,gcc "lib") zlib))
+ (supported-systems '("x86_64-linux"))
+ (home-page "https://github.com/babashka/babashka")
+ (synopsis "Native, fast starting Clojure interpreter for scripting")
+ (description "Babashka is a native Clojure interpreter for scripting with
+fast startup. Its main goal is to leverage Clojure in places where you would
+be using bash otherwise.")
+ (license license:epl1.0)))
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 58e3eed..6fcf7a7 100644
--- a/nongnu/packages/coq.scm
+++ b/nongnu/packages/coq.scm
@@ -1,21 +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>
-;;;
-;;; 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 Isaac Young <isyoung@pm.me>
+;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
(define-module (nongnu packages coq)
#:use-module (ice-9 match)
@@ -29,7 +15,7 @@
(define-public compcert
(package
(name "compcert")
- (version "3.10")
+ (version "3.13.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -38,11 +24,15 @@
(file-name (git-file-name name version))
(sha256
(base32
- "19rmx8r8v46101ij5myfrz60arqjy7q3ra3fb8mxqqi3c8c4l4j6"))))
+ "0yvj9g144p26k7674vcai12sh3jahs64ny9pana9zla16nxxpmcm"))))
(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.17.1"))))
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(let ((system ,(match (or (%current-target-system) (%current-system))
@@ -68,11 +58,11 @@
;; MIPS is not supported.
(supported-systems (delete "mips64el-linux" %supported-systems))
(native-inputs
- `(("ocaml" ,ocaml)
- ("ocaml-findlib" ,ocaml-findlib); for menhir --suggest-menhirlib
- ("coq" ,coq)))
+ (list coq
+ ocaml
+ ocaml-findlib)) ; for menhir --suggest-menhirlib
(inputs
- `(("menhir" ,ocaml-menhir)))
+ (list ocaml-menhir))
(home-page "http://compcert.inria.fr")
(synopsis "Certified C compiler")
(description "The CompCert project investigates the formal verification of
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 b874d54..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 "5.0.4"))
+ (let ((dotnet-sdk-version "6.0.9"))
(package
(name "dotnet")
- (version "5.0.201")
+ (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
- "0hdkwz39ql7madg5dzy50by6q4vyagpwjvjn34ks730yhf3p1xwz"))))
+ "05yr64ffcaf48ripxzcv9nwlzp7r83cy9hz17dm5c0317lhksqch"))))
(build-system binary-build-system)
(arguments
`(#:patchelf-plan
@@ -193,10 +178,10 @@ building different types of applications.")
(license license:expat))))
(define-public dotnet-core-3.1
- (let ((dotnet-sdk-version "3.1.13"))
+ (let ((dotnet-sdk-version "3.1.25"))
(package
(name "dotnet")
- (version "3.1.113")
+ (version "3.1.419")
(source
(origin
(method url-fetch/tarbomb)
@@ -206,7 +191,7 @@ building different types of applications.")
version "-linux-x64.tar.gz"))
(sha256
(base32
- "0dm4kxpq235yfxzf41m1iyfg5avlxdic0nwr865g5wyzc6kz9nhw"))))
+ "0wg91y5czimcrcv4rfvza9qc1n7l29szbs9qnmr437175zl10ksi"))))
(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..a4a7b67
--- /dev/null
+++ b/nongnu/packages/electron.scm
@@ -0,0 +1,104 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; Copyright © 2023 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2024 Andre A. Gomes <andremegafone@gmail.com>
+;;; Copyright © 2024 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+
+(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 (electron-source version hash)
+ (origin
+ (method url-fetch/zipbomb)
+ (uri
+ (string-append
+ "https://github.com/electron/electron/releases/download/v"
+ version "/electron-v" version "-"
+ (match (or (%current-system) (%current-target-system))
+ ("x86_64-linux" "linux-x64")
+ ("i686-linux" "linux-ia32")
+ ("aarch64-linux" "linux-arm64")
+ ("armhf-linux" "linux-armv7l"))
+ ".zip"))
+ (sha256 (base32 hash))))
+
+(define-public electron-27
+ (package
+ (name "electron")
+ (version "27.3.6")
+ (source (electron-source version
+ "12hjn1bfk8c25f54kk561mkjl7hsk8b16rj7a7gczswjdpx6fpi0"))
+ (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")))))
+
+(define-public electron electron-27)
+
+(define-public electron-28
+ (package
+ (inherit electron-27)
+ (version "28.2.7")
+ (source (electron-source version
+ "0sw8nn1jr9x0p4s2g5yp5lrpy8mzq0sjd099x7axbg6cm1c80iff"))))
+(define-public electron-29
+ (package
+ (inherit electron-27)
+ (version "29.1.4")
+ (source (electron-source version
+ "1d96nhx9j9mzc3q3ald1imqdxdgq9by1qm4q703sjy3knq1p38w3"))))
diff --git a/nongnu/packages/emacs.scm b/nongnu/packages/emacs.scm
index 4e070e2..ee1616c 100644
--- a/nongnu/packages/emacs.scm
+++ b/nongnu/packages/emacs.scm
@@ -1,27 +1,20 @@
-;;; 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 (nonguix licenses))
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
+ #:use-module (nonguix licenses)
+ #:use-module (nongnu packages lisp))
(define-public clhs
(package
@@ -70,3 +63,90 @@ browsing. An Emacs package is provided for easy access. Load it with:
@end lisp
")
(license (nonfree "http://quickdocs.org/clhs/"))))
+
+(define-public emacs-eli
+ ;; 10.1 HEAD has a fix for Emacs 28.1, as opposed to the latest "express" tag.
+ (let ((commit "8f9a8b9eb1aa518774c54d51e4f38ba534356415"))
+ (package
+ (name "emacs-eli")
+ (version (git-version "acl10.1express_Feb2022update2022-02-11" "1" commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/franzinc/eli/")
+ (commit commit)))
+ (file-name (git-file-name "emacs-eli" version))
+ (sha256
+ (base32
+ "0w1hdkr9x3byf1l6dbcbnd4x8110wvps3527ivyj1bmdk1hyqnzb"))))
+ ;; The `emacs-build-system' fails here, probably because ELI is meant to
+ ;; be load with (load "fi-site-init.el") and not with `require'. See
+ ;; https://franz.com/emacs/.
+ (build-system copy-build-system)
+ (inputs (list allegro-cl))
+ (arguments
+ `(#:install-plan
+ `(("." ,,(string-append "share/emacs/site-lisp/eli-" version)
+ ;; Remove useless Windows or build files.
+ #:exclude ("emacsdir.pl" "nsis" "Makefile" "local.mak")))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((allegro-cl (assoc-ref inputs "allegro-cl")))
+ ;; FIXME: Can't get `emacs-substitute-variables' to work here, why?
+ (substitute* "fi-vars.el"
+ (("defvar fi:common-lisp-image-name \"alisp\"")
+ (string-append "defvar fi:common-lisp-image-name \""
+ allegro-cl "/bin/alisp\""))
+ (("defvar fi:common-lisp-image-file nil")
+ (string-append "defvar fi:common-lisp-image-file \""
+ allegro-cl "/share/allegro-cl/alisp.dxl\""))
+ (("defvar fi:common-lisp-directory nil")
+ (string-append "defvar fi:common-lisp-directory \""
+ allegro-cl "/share/allegro-cl\"")))))))))
+ (home-page "https://franz.com/emacs/")
+ (synopsis "Allegro Common Lisp Emacs interface")
+ (description
+ "An integral part of the Allegro CL programming environment is the interface
+between Emacs and Allegro CL, hereafter referred to as the Emacs-Lisp
+interface. This interface allows the editing and running of Common Lisp
+programs, and contains enhancements that allow a tight coupling between Emacs
+and Lisp, very similar to those which used to be available only on Lisp
+machines.
+
+To load it, call @code{(load \"fi-site-init.el\")} from Emacs.
+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..22fd072
--- /dev/null
+++ b/nongnu/packages/firmware.scm
@@ -0,0 +1,309 @@
+;;; 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>
+;;; Copyright © 2024 Efraim Flashner <efraim@flashner.co.il>
+
+(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" "/lib/firmware/brcm/")
+ ;; WiFi firmware
+ ("fw_bcm43456c5_ag.bin" "/lib/firmware/brcm/")
+ ("fw_bcm43456c5_ag.bin"
+ "/lib/firmware/brcm/brcmfmac43456-sdio.bin")
+ ("brcmfmac43456-sdio.clm_blob"
+ "/lib/firmware/brcm/")
+ ("brcmfmac43456-sdio.AP6256.txt"
+ "/lib/firmware/brcm/")
+ ("brcmfmac43456-sdio.AP6256.txt"
+ "/lib/firmware/brcm/brcmfmac43456-sdio.pine64,pinebook-pro.txt"))))
+ (synopsis "Firmware for the wifi/bt module AP6256")
+ (description
+ "This package provides Firmware for the wifi/bt module AP6256,
+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..d9843ee
--- /dev/null
+++ b/nongnu/packages/game-client.scm
@@ -0,0 +1,368 @@
+;;; 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 steam-container-libs
+ (append steam-client-libs
+ steam-gameruntime-libs
+ fhs-min-libs))
+
+(define steam-nvidia-container-libs
+ (modify-inputs steam-container-libs
+ (replace "mesa" nvda)))
+
+(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-container-libs
+ #:name "fhs-union-64")
+ (fhs-union steam-container-libs
+ #:name "fhs-union-32"
+ #:system "i686-linux"))))
+
+(define steam-ld.so.cache
+ (ld.so.conf->ld.so.cache steam-ld.so.conf))
+
+(define steam-nvidia-ld.so.conf
+ (packages->ld.so.conf
+ (list (fhs-union steam-nvidia-container-libs
+ #:name "fhs-union-64")
+ (fhs-union steam-nvidia-container-libs
+ #:name "fhs-union-32"
+ #:system "i686-linux"))))
+
+(define steam-nvidia-ld.so.cache
+ (ld.so.conf->ld.so.cache steam-nvidia-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-container-libs
+ #:name "fhs-union-64"))
+ (union32
+ (fhs-union steam-container-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")
+ (ld.so.conf steam-nvidia-ld.so.conf)
+ (ld.so.cache steam-nvidia-ld.so.cache)
+ (union64
+ (fhs-union steam-nvidia-container-libs
+ #:name "fhs-union-64"))
+ (union32
+ (fhs-union steam-nvidia-container-libs
+ #:name "fhs-union-32"
+ #:system "i686-linux"))
+ (preserved-env %nvidia-environment-variable-regexps)))
+
+(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-container-libs)
+ #:name "fhs-union-64"))
+ ;; Don't include heroic-client-libs as they are not needed in 32-bit.
+ (union32
+ (fhs-union steam-container-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")
+ (ld.so.conf steam-nvidia-ld.so.conf)
+ (ld.so.cache steam-nvidia-ld.so.cache)
+ (union64
+ (fhs-union `(,@heroic-extra-client-libs
+ ,@steam-nvidia-container-libs)
+ #:name "fhs-union-64"))
+ (union32
+ (fhs-union steam-nvidia-container-libs
+ #:name "fhs-union-32"
+ #:system "i686-linux"))
+ (preserved-env %nvidia-environment-variable-regexps)))
+
+(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 0974af5..e23c4ca 100644
--- a/nongnu/packages/game-development.scm
+++ b/nongnu/packages/game-development.scm
@@ -1,30 +1,20 @@
-;;; GNU Guix --- Functional package management for GNU
+;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2019, 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/>.
+;;; Copyright © 2022 Attila Lendvai <attila@lendvai.name>
+;;; Copyright © 2024 Timotej Lazar <timotej.lazar@araneo.si>
(define-module (nongnu packages game-development)
#:use-module (ice-9 match)
+ #:use-module (srfi srfi-1)
#:use-module ((nonguix licenses) :prefix license:)
#:use-module (guix packages)
#:use-module (nonguix build-system binary)
#:use-module (guix build-system gnu)
#:use-module (guix download)
+ #:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix utils)
+ #:use-module ((guix licenses) :prefix license:)
#:use-module (gnu packages audio)
#:use-module (gnu packages base)
#:use-module (gnu packages gcc)
@@ -147,12 +137,10 @@ development should opt for GLSL rather than Cg.")
(supported-systems '("i686-linux" "x86_64-linux"))
(arguments
`(#:system "i686-linux"
- #:validate-runpath? #f ; TODO: Why doesn't it pass?
#:patchelf-plan
- `(("libsteam_api.so"
- ("gcc:lib")))
+ `(("libsteam_api.so" ("gcc" "glibc")))
#:install-plan
- `(("." ("steam") "lib/"))
+ `(("libsteam_api.so" "lib/"))
#:phases
(modify-phases %standard-phases
(replace 'unpack
@@ -167,7 +155,7 @@ development should opt for GLSL rather than Cg.")
(string-append out "/lib/libsteam_api.so.1")))
#t)))))
(inputs
- `(("gcc:lib" ,gcc "lib")))
+ (list (list gcc "lib") glibc))
(home-page "https://developer.valvesoftware.com/wiki/SDK2013_GettingStarted")
(synopsis "Redistribution binary needed by some video games")
(description "")
@@ -175,128 +163,95 @@ development should opt for GLSL rather than Cg.")
"https://raw.githubusercontent.com/ValveSoftware/source-sdk-2013/master/LICENSE"))))
(define-public eduke32
- ;; There are no official releases.
- (let ((commit "188e14622cfe5c6f63b04b989b350bf2a29a893c")
- (revision "1")
- (duke-nukem-3d-directory "share/dukenukem3d"))
- (package
- (name "eduke32")
- (version (git-version "0" revision commit))
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://voidpoint.io/terminx/eduke32.git")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0wy4bppiw4q2hn0v38msrjyvj2hzfvigakc23c2wqfnbl7rm0hrz"))
- ;; Unbundle libxmp.
- (modules '((guix build utils)))
- (snippet
- '(begin (delete-file-recursively "source/libxmp-lite") #t))))
- (build-system gnu-build-system)
- (arguments
- `(#:tests? #f
- ;; Add glu to rpath so that SDL can dlopen it.
- #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
- (assoc-ref %build-inputs "glu") "/lib"))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'unbundle-libxmp
- (lambda _
- (substitute* "GNUmakefile"
- (("-I\\$\\(libxmplite_inc\\)")
- (string-append "-I" (assoc-ref %build-inputs "libxmp") "/include"))
- (("^ *audiolib_deps \\+= libxmplite.*$") "")
- (("-logg") "-logg -lxmp"))
- (with-directory-excursion "source/audiolib/src"
- (for-each (lambda (file) (substitute* file (("libxmp-lite/") "")))
- '("multivoc.cpp" "xmp.cpp")))
- #t))
- (delete 'configure)
- (replace 'install
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (glu (assoc-ref inputs "glu"))
- (eduke (string-append out "/bin/eduke32"))
- (eduke-real (string-append out "/bin/.eduke32-real")))
- ;; TODO: Install custom .desktop file? Need icon.
- ;; See https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=eduke32.
- (install-file "eduke32" (string-append out "/bin"))
- (install-file "mapster32" (string-append out "/bin"))
- (install-file "package/common/buildlic.txt"
- (string-append out "/share/licenses"))
- ;; Wrap program:
- ;; - Make sure current directory is writable, else eduke32 will segfault.
- ;; - Add ../share/dukenukem3d to the dir search list.
- ;; TODO: Skip store duke3d.grp When ~/.config/eduke32/duke3d.grp is found.
- (rename-file eduke eduke-real)
- (call-with-output-file eduke
- (lambda (p)
- (format p "\
-#!~a
-mkdir -p ~~/.config/eduke32
-cd ~~/.config/eduke32
-exec -a \"$0\" ~a\
- -g \"${0%/*}\"/../~a/*.grp\
- -g \"${0%/*}\"/../~a/*.zip\
- -g \"${0%/*}\"/../~a/*.map\
- -g \"${0%/*}\"/../~a/*.con\
- -g \"${0%/*}\"/../~a/*.def\
- \"$@\"~%"
- (which "bash") eduke-real
- ,duke-nukem-3d-directory
- ,duke-nukem-3d-directory
- ,duke-nukem-3d-directory
- ,duke-nukem-3d-directory
- ,duke-nukem-3d-directory)))
- (chmod eduke #o755)))))))
- (native-inputs
- `(("pkg-config" ,pkg-config)))
- (inputs
- `(("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer)))
- ("alsa-lib" ,alsa-lib)
- ("glu" ,glu)
- ("libvorbis" ,libvorbis)
- ("libvpx" ,libvpx)
- ("libxmp" ,libxmp)
- ("flac" ,flac)
- ("gtk+" ,gtk+-2)))
- (synopsis "Engine of the classic PC first person shooter Duke Nukem 3D")
- (description "EDuke32 is a free homebrew game engine and source port of the
-classic PC first person shooter Duke Nukem 3D—Duke3D for short. A thousands
-of features and upgrades were added for regular players and additional editing
-capabilities and scripting extensions for homebrew developers and mod
-creators. EDuke32 is open source but non-free software.
+ (package
+ (name "eduke32")
+ (version "20240316-10564-0bc78c53d")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://dukeworld.com/eduke32/synthesis/"
+ version "/eduke32_src_" version ".tar.xz"))
+ (sha256
+ (base32 "1a9fw1kfriyrybjxl72b2434w3yiz2nxg6541lnyhzbdka2cp2lf"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; Remove bundled libxmp and platform-specific stuff.
+ #~(for-each delete-file-recursively '("platform" "source/libxmp-lite")))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:license-file-regexp "buildlic.txt"
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'link-license
+ (lambda _
+ ;; Ensure the install-license-files phase can find it.
+ (link "package/common/buildlic.txt" "buildlic.txt")))
+ (add-after 'unpack 'unbundle-libxmp
+ (lambda _
+ (substitute* "Common.mak"
+ (("^LIBS :=" match) (string-append match " -lxmp")))
+ (with-directory-excursion "source/audiolib/src"
+ (for-each (lambda (file) (substitute* file (("libxmp-lite/") "")))
+ '("multivoc.cpp" "xmp.cpp")))))
+ (add-after 'unpack 'fix-share-path
+ (lambda _
+ (substitute* "source/duke3d/src/common.cpp"
+ (("/usr/local/share/games") (string-append #$output "/share")))))
+ (delete 'configure)
+ (replace 'install
+ (lambda _
+ (let ((bin (string-append #$output "/bin")))
+ (install-file "eduke32" bin)
+ (install-file "mapster32" bin)
+ (install-file "package/sdk/m32help.hlp"
+ (string-append #$output "/share/eduke32"))))))))
+ (inputs (list alsa-lib
+ flac
+ glu
+ gtk+-2
+ libvorbis
+ libvpx
+ libxmp
+ sdl2
+ sdl2-mixer))
+ (native-inputs
+ (list gdk-pixbuf pkg-config))
+ (synopsis "Engine of the classic PC first person shooter Duke Nukem 3D")
+ (description "EDuke32 is a free homebrew game engine and source port of
+the classic PC first person shooter Duke Nukem 3D—Duke3D for short. A
+thousands of features and upgrades were added for regular players and
+additional editing capabilities and scripting extensions for homebrew
+developers and mod creators. EDuke32 is open source but non-free software.
This package does not contain any game file. You can either install packages
with game files or or put @file{.grp} game files manually in
@file{~/.config/eduke32/}.")
- (home-page "https://eduke32.com/")
- (license (license:nonfree
- "https://eduke32.com/buildlic.txt")))))
+ (home-page "https://eduke32.com")
+ (license
+ (list license:gpl2
+ (license:nonfree "file://package/common/buildlic.txt")))))
(define-public fury
- (package
- (inherit eduke32)
+ (package/inherit eduke32
(name "fury")
(arguments
(substitute-keyword-arguments (package-arguments eduke32)
- ((#:make-flags flags ''()) `(cons* "FURY=1" ,flags))
- ((#:phases phases '%standard-phases)
- `(modify-phases ,phases
- (replace 'install
- (lambda _
- (let* ((out (assoc-ref %outputs "out")))
- (install-file "fury" (string-append out "/bin"))
- (install-file "mapster32" (string-append out "/bin"))
- (install-file "package/common/buildlic.txt"
- (string-append out "/share/licenses")))
- #t))))))
+ ((#:make-flags flags #~'())
+ #~(cons* "FURY=1" #$flags))
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'disable-sdl-static
+ (lambda _
+ (substitute* "GNUmakefile"
+ (("SDL_STATIC := 1") ""))))
+ (replace 'install
+ (lambda _
+ (install-file "fury" (string-append #$output "/bin"))))))))
+ (inputs
+ (alist-delete "libvpx" (package-inputs eduke32)))
(synopsis "Game engine for the first-person shooter Ion Fury")
(description
- (string-append
- "This is the @code{eduke32} engine built with support for the Ion Fury
+ "This is the @code{eduke32} engine built with support for the Ion Fury
game. Game data is not provided. Run @command{fury} with the option
-@option{-j} to specify the directory containing @file{fury.grp}."))))
+@option{-j} to specify the directory containing @file{fury.grp}.")))
diff --git a/nongnu/packages/gog.scm b/nongnu/packages/gog.scm
index 88a8a84..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 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 © 2021-2022 Timotej Lazar <timotej.lazar@araneo.si>
+;;; Copyright © 2023 Eidvilas Markevičius <markeviciuseidvilas@gmail.com>
(define-module (nongnu packages gog)
#:use-module (gnu packages boost)
@@ -27,13 +16,13 @@
#:use-module (gnu packages xml)
#:use-module (guix packages)
#:use-module (guix git-download)
- #:use-module (guix build-system cmake)
+ #:use-module (guix build-system qt)
#:use-module ((guix licenses) #:prefix license:))
(define-public lgogdownloader
(package
(name "lgogdownloader")
- (version "3.7")
+ (version "3.12")
(source
(origin
(method git-fetch)
@@ -42,27 +31,27 @@
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "02zn4zc9hqym81vbs88x5ayk2xb808jlvfyvn96ksx1ai4b6a4fz"))))
- (build-system cmake-build-system)
+ (base32 "0kmz5zsbci7iilbqdvql9c1vk2b1q2flsdr6psnkln07xp664di2"))))
+ (build-system qt-build-system)
(arguments
`(#:configure-flags '("-DUSE_QT_GUI=ON")
#:tests? #f)) ; no tests
(inputs
- `(("boost" ,boost)
- ("curl" ,curl)
- ("htmlcxx" ,htmlcxx)
- ("jsoncpp" ,jsoncpp)
- ("liboauth" ,liboauth)
- ("qtbase" ,qtbase-5)
- ("qtdeclarative" ,qtdeclarative)
- ("qtwebchannel" ,qtwebchannel)
- ("qtwebengine" ,qtwebengine)
- ("rhash" ,rhash)
- ("tinyxml2" ,tinyxml2)
- ("zlib" ,zlib)))
+ (list boost
+ curl
+ htmlcxx
+ jsoncpp
+ liboauth
+ qtbase-5
+ qtdeclarative-5
+ qtwebchannel-5
+ qtwebengine-5
+ rhash
+ tinyxml2
+ zlib))
(native-inputs
- `(("help2man" ,help2man)
- ("pkg-config" ,pkg-config)))
+ (list help2man
+ pkg-config))
(home-page "https://sites.google.com/site/gogdownloader/")
(synopsis "Downloader for GOG.com files")
(description "LGOGDownloader is a client for the GOG.com download API,
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 e5b3815..a18ed7e 100644
--- a/nongnu/packages/linux.scm
+++ b/nongnu/packages/linux.scm
@@ -1,36 +1,44 @@
+;;; 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>
;;; Copyright © 2021 aerique <aerique@xs4all.nl>
-;;;
-;;; 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 Josselin Poiret <dev@jpoiret.xyz>
+;;; Copyright © 2022, 2023, 2024 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2022 Remco van 't Veer <remco@remworks.net>
+;;; 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 admin)
#: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)
@@ -38,79 +46,291 @@
#: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)
- (package
- (inherit freedo)
- (name "linux")
- (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-6.8
+ (corrupt-linux linux-libre-6.8))
+
+(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.14"
- "0kbayz4k72hx9b0l9yz2mbgb2xpnpm13snms06r2absv3gkv9wid"))
+ (corrupt-linux linux-libre-5.15))
(define-public linux-5.10
- (corrupt-linux linux-libre-5.10 "5.10.91"
- "1lcmhp6njj4ypwkq471mdjapbqvcn6jfqx7z422h8fn6q62gpkk2"))
+ (corrupt-linux linux-libre-5.10))
(define-public linux-5.4
- (corrupt-linux linux-libre-5.4 "5.4.145"
- "1yb8vk5sbnyswylkpqw5i4n9cmnmlrfmbrnmy3nif579q8p7ixsw"))
+ (corrupt-linux linux-libre-5.4))
(define-public linux-4.19
- (corrupt-linux linux-libre-4.19 "4.19.206"
- "1h44lvzxd0cngj71bk8qba9dz7jlqj68ir6xjwfafglb81ppgsxp"))
+ (corrupt-linux linux-libre-4.19))
+
+(define-public linux linux-6.8)
+;; linux-lts points to the *newest* released long-term support version.
+(define-public linux-lts linux-6.6)
-(define-public linux-4.14
- (corrupt-linux linux-libre-4.14 "4.14.246"
- "0fpgig84shpas1jc0h4s3aw9brkcq1as84gjbk4bfhc48bpi4mlw"))
+(define-public linux-arm64-generic-5.10
+ (corrupt-linux linux-libre-arm64-generic-5.10 #:name "linux-arm64-generic"))
-(define-public linux-4.9
- (corrupt-linux linux-libre-4.9 "4.9.282"
- "059fin4si93ya13xy831w84q496ksxidpd3kyw38918sfy4p6wk7"))
+(define-public linux-arm64-generic-5.4
+ (corrupt-linux linux-libre-arm64-generic-5.4 #:name "linux-arm64-generic"))
-(define-public linux-4.4
- (corrupt-linux linux-libre-4.4 "4.4.283"
- "1d9v4h4cbc4i371lhhwpxbmg88gna6xyi2ahfvv0clz60802y982"))
+(define-public linux-arm64-generic
+ (corrupt-linux linux-libre-arm64-generic #:name "linux-arm64-generic"))
-(define-public linux linux-5.15)
-;; linux-lts points to the *newest* released long-term support version.
-(define-public linux-lts linux-5.10)
+
+;;;
+;;; Linux-XanMod
+;;;
+
+(define* (make-linux-xanmod-source version xanmod-revision
+ #:key xanmod-branch kernel-hash xanmod-hash)
+
+ (define %upstream-linux-source
+ (@@ (gnu packages linux) %upstream-linux-source))
+
+ (define kernel-source
+ (%upstream-linux-source (version-major+minor version) kernel-hash))
+
+ (define xanmod-patch
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://sourceforge/xanmod/releases/" xanmod-branch "/"
+ version "-" xanmod-revision "/patch-"
+ version "-" xanmod-revision ".xz"))
+ (sha256 xanmod-hash)))
+
+ (origin
+ (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))))))
+ (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.8.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 "1wv5x7qhcd05m8m0myyqm2il6mha1sx11h7ppf8yjsxvx2jdwsf9")
+ #:xanmod-hash (base32 "1ry4qmsis7s2bb6hpkvq30ffgvhzj1w33js67ybnvagzda5vbmci")))
+
+(define-public linux-xanmod-lts-version "6.6.27")
+(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 "0inlpdscdpqahwlsf8kc2zjp2p83yr2cfqyaxld6m4bjkbg23lvz")))
+
+;; 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 "20210919")
+ (version "20240312")
(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
- "1fy6alg7pz5bc09vq0icmgbwqpribws6nyc6k2pkip8jljmxvlr0"))))
+ "152bpl3lzd7jb2z1cl1sfax6jm71bspn7bwc00lci5qqmma7lcmj"))))
(build-system gnu-build-system)
(arguments
- `(#:tests? #f
- #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
- #:phases
- (modify-phases %standard-phases
- (delete 'validate-runpath))))
+ (list #:tests? #f
+ #:strip-binaries? #f
+ #:validate-runpath? #f
+ #:make-flags #~(list (string-append "DESTDIR=" #$output))))
+ (native-inputs
+ (list rdfind))
(home-page
"https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git")
(synopsis "Nonfree firmware blobs for Linux")
@@ -124,23 +344,23 @@ if your hardware is supported by one of the smaller firmware packages.")
(define (select-firmware keep)
"Modify linux-firmware copy list to retain only files matching KEEP regex."
- `(lambda _
- (use-modules (ice-9 regex))
- (substitute* "WHENCE"
- (("^(File|Link): *([^ ]*)(.*)" _ type file rest)
- (string-append (if (string-match ,keep file) type "Skip") ": " file rest)))))
+ #~(lambda _
+ (use-modules (ice-9 regex))
+ (substitute* "WHENCE"
+ (("^(File|RawFile|Link): *([^ ]*)(.*)" _ type file rest)
+ (string-append (if (string-match #$keep file) type "Skip") ": " file rest)))))
(define-public amdgpu-firmware
(package
(inherit linux-firmware)
(name "amdgpu-firmware")
(arguments
- `(#:license-file-regexp "LICENSE.amdgpu"
- ,@(substitute-keyword-arguments (package-arguments linux-firmware)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'select-firmware
- ,(select-firmware "^amdgpu/")))))))
+ (cons* #:license-file-regexp "LICENSE.amdgpu"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^amdgpu/")))))))
(home-page "http://support.amd.com/en-us/download/linux")
(synopsis "Nonfree firmware for AMD graphics chips")
(description "Nonfree firmware for AMD graphics chips. While most AMD
@@ -158,12 +378,12 @@ advanced 3D.")
(inherit amdgpu-firmware)
(name "radeon-firmware")
(arguments
- `(#:license-file-regexp "LICENSE.radeon"
- ,@(substitute-keyword-arguments (package-arguments linux-firmware)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'select-firmware
- ,(select-firmware "^radeon/")))))))
+ (cons* #:license-file-regexp "LICENSE.radeon"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^radeon/")))))))
(synopsis "Nonfree firmware for older AMD graphics chips")
(description "Nonfree firmware for AMD graphics chips. While most AMD
graphics cards can be run with the free Mesa, some cards require a nonfree
@@ -173,16 +393,30 @@ advanced 3D.")))
(define-public raspberrypi-firmware
(package
(name "raspberrypi-firmware")
- (version "1.20210527")
+ (version "1.20220331")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/raspberrypi/firmware")
(commit version)))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (srfi srfi-26)))
+ (snippet
+ '(begin
+ (for-each (lambda (name)
+ (delete-file-recursively name))
+ `("documentation" "extra" ".github" "hardfp" "modules" "opt" "README.md"
+ ,@(map (lambda (name)
+ (string-append "boot/" name))
+ (scandir "boot" (cut (file-name-predicate "^(kernel.*|COPYING\\.linux)$") <> #f)))))))
(file-name (git-file-name name version))
(sha256
(base32
- "08lgg90k6lhqm3ccg7db0lrrng0pgf63dvbrxpfpwm1pswrc5vf5"))))
+ "1hd1vkghkgdlmw04fap28f68nsf7d7i8dq6h9r4xa0h9y4f6j6ag"))))
+ (arguments
+ '(#:install-plan
+ '(("boot/" "."))))
(build-system copy-build-system)
(synopsis "Firmware for the Raspberry Pi boards")
(description "Pre-compiled binaries of the current Raspberry Pi kernel
@@ -201,12 +435,12 @@ and modules, userspace libraries, and bootloader/GPU firmware.")
(inherit linux-firmware)
(name "atheros-firmware")
(arguments
- `(#:license-file-regexp "LICEN[CS]E.*[Aa]th"
- ,@(substitute-keyword-arguments (package-arguments linux-firmware)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'select-firmware
- ,(select-firmware "^(ar[3579]|ath[1369]|htc_[79]|qca/|wil6)")))))))
+ (cons* #:license-file-regexp "LICEN[CS]E.*[Aa]th"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^(ar[3579]|ath[1369]|htc_[79]|qca/|wil6)")))))))
(synopsis "Nonfree firmware blobs for Atheros wireless cards")
(description "Nonfree firmware blobs for Atheros wireless cards. This
package contains nonfree firmware for the following chips:
@@ -377,12 +611,12 @@ WLAN.TF.2.1-00021-QCARMSWP-1 (ath10k/QCA9377/hw1.0/firmware-6.bin)
(inherit linux-firmware)
(name "ibt-hw-firmware")
(arguments
- `(#:license-file-regexp "LICENCE.ibt_firmware"
- ,@(substitute-keyword-arguments (package-arguments linux-firmware)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'select-firmware
- ,(select-firmware "^intel/ibt-")))))))
+ (cons* #:license-file-regexp "LICENCE.ibt_firmware"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^intel/ibt-")))))))
(home-page "http://www.intel.com/support/wireless/wlan/sb/CS-016675.htm")
(synopsis "Non-free firmware for Intel bluetooth chips")
(description "This firmware is required by the btintel kernel module to
@@ -398,12 +632,12 @@ laptops).")
(inherit linux-firmware)
(name "iwlwifi-firmware")
(arguments
- `(#:license-file-regexp "LICENCE.iwlwifi_firmware"
- ,@(substitute-keyword-arguments (package-arguments linux-firmware)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'select-firmware
- ,(select-firmware "^iwlwifi-")))))))
+ (cons* #:license-file-regexp "LICENCE.iwlwifi_firmware"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^iwlwifi-")))))))
(home-page "https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi")
(synopsis "Nonfree firmware for Intel wifi chips")
(description "The proprietary iwlwifi kernel module is required by many
@@ -414,17 +648,37 @@ support for 5GHz and 802.11ac, among others.")
"https://git.kernel.org/pub/scm/linux/kernel/git/firmware"
"/linux-firmware.git/plain/LICENCE.iwlwifi_firmware")))))
+(define-public i915-firmware
+ (package
+ (inherit linux-firmware)
+ (name "i915-firmware")
+ (arguments
+ (cons* #:license-file-regexp "LICENCE.i915"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^i915/")))))))
+ (home-page "https://01.org/linuxgraphics/gfx-docs/drm/gpu/i915.html")
+ (synopsis "Nonfree firmware for Intel integrated graphics")
+ (description "This package contains the various firmware for Intel
+integrated graphics chipsets, including GuC, HuC and DMC.")
+ (license
+ (nonfree (string-append
+ "https://git.kernel.org/pub/scm/linux/kernel/git/firmware"
+ "/linux-firmware.git/plain/LICENCE.i915")))))
+
(define-public realtek-firmware
(package
(inherit linux-firmware)
(name "realtek-firmware")
(arguments
- `(#:license-file-regexp "LICENCE.rtlwifi_firmware.txt"
- ,@(substitute-keyword-arguments (package-arguments linux-firmware)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'select-firmware
- ,(select-firmware "^(rtlwifi|rtl_nic|rtl_bt)/")))))))
+ (cons* #:license-file-regexp "LICENCE.rtlwifi_firmware.txt"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^(rtlwifi|rtl_nic|rtl_bt|rtw88|rtw89)/")))))))
(home-page "https://wireless.wiki.kernel.org/en/users/drivers/rtl819x")
(synopsis "Nonfree firmware for Realtek ethernet, wifi, and bluetooth chips")
(description
@@ -514,8 +768,8 @@ package contains nonfree firmware for the following chips:
(deprecated-package "rtl-bt-firmware" realtek-firmware))
(define-public rtl8192eu-linux-module
- (let ((commit "fb81d860ea4f6d54bfc2a9a8f1aa5c37eb6aea6b")
- (revision "2"))
+ (let ((commit "3af9a868a0ca622d830966ac83aea2bf17cd0d65")
+ (revision "7"))
(package
(name "rtl8192eu-linux-module")
(version (git-version "0.0.0" revision commit))
@@ -528,7 +782,7 @@ package contains nonfree firmware for the following chips:
(file-name (git-file-name name version))
(sha256
(base32
- "1cr5agl19srbpkklpjlhnrc9v3xdzm1lwrka4iafvp02k4sbwh02"))))
+ "0d2qzf7xbipjdp1zm2ffqhnda8wasqriqnv6dkl0mhqn2f8za3i8"))))
(build-system linux-module-build-system)
(arguments
`(#:make-flags
@@ -550,8 +804,176 @@ network adapters.")
;; hal/rtl8192e/hal8192e_fw.c
(license gpl2))))
+(define-public rtl8821ce-linux-module
+ (let ((commit "66983b69120a13699acf40a12979317f29012111")
+ (revision "11"))
+ (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
+ "0kj12jll0df1h4z6kzv3vylh22xlniki5kg414fv9sqgx1qgs5k7"))))
+ (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 "4f6004af4c4171882f37e2e5d8fb3609fe260617")
+ (revision "2"))
+ (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 "09ig0rrkkn00i3d1n6p62n1610kcjgb2h9kbcqdsrmpnlnw5kfl2"))))
+ (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 "63cf0b4584aa8878b0fe8ab38017f31c319bde3d")
+ (revision "13"))
+ (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 "103pn6qlj116dm244ygf1wic9dq2qn80lafiyxynyhpckkyhhfxl"))
+ (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)
@@ -560,29 +982,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"))))
@@ -629,10 +1052,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
@@ -653,9 +1073,7 @@ releases.")
"1b1qjwxjk4y91l3iz157kms8601n0mmiik32cs6w9b1q4sl4pxx9"))))
(build-system trivial-build-system)
(arguments
- `(#:modules ((guix build utils)
- (ice-9 rdelim)
- (ice-9 regex))
+ `(#:modules ((guix build utils))
#:builder
(begin
(use-modules (guix build utils)
@@ -729,10 +1147,44 @@ chipsets from Broadcom:
"/b60fa04881bf8f9b9d578f57d1dfa596cae2a82e"
"/LICENSE.broadcom_bcm20702")))))
+(define-public facetimehd
+ (package
+ (name "facetimehd")
+ (version "0.6.8.1")
+ (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
+ "18x12g55bw99ap9cw54v50s5m39dli4nx41jfhb35551mn0jp4c7"))))
+ (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 "20210608")
+ (version "20240312")
(source
(origin
(method git-fetch)
@@ -743,15 +1195,15 @@ chipsets from Broadcom:
(commit (string-append "microcode-" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "08nk353z2lcqsjbm2qdsfapfgrvlfw0rj7r9scr9pllzkjj5n9x3"))))
+ (base32 "1j1krkmp9kxmpq8bbbld8bm3y9rqhmlj5qfm43czikawnpw81571"))))
(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")
@@ -767,12 +1219,12 @@ your CPU.")
(inherit linux-firmware)
(name "amd-microcode")
(arguments
- `(#:license-file-regexp "LICENSE.amd-ucode"
- ,@(substitute-keyword-arguments (package-arguments linux-firmware)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'unpack 'select-firmware
- ,(select-firmware "^amd-ucode/")))))))
+ (cons* #:license-file-regexp "LICENSE.amd-ucode"
+ (substitute-keyword-arguments (package-arguments linux-firmware)
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'select-firmware
+ #$(select-firmware "^amd-ucode/")))))))
(synopsis "Processor microcode firmware for AMD CPUs")
(description "Updated system processor microcode for AMD x86-64
processors. AMD releases microcode updates to correct processor behavior as
@@ -785,16 +1237,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
@@ -803,7 +1254,7 @@ documented in the respective processor revision guides.")
(home-page "https://www.sofproject.org")
(synopsis "Sound Open Firmware")
(description "This package contains Linux firmwares and topology files for
-audio DSPs that can be found on the Intel Skylake architecture. Those
-firmware can be built for source but need to be signed by Intel in order to be
+audio DSPs that can be found on the Intel Skylake architecture. This
+firmware can be built from source but need to be signed by Intel in order to be
loaded by Linux.")
(license bsd-3)))
diff --git a/nongnu/packages/lisp.scm b/nongnu/packages/lisp.scm
new file mode 100644
index 0000000..d868a5f
--- /dev/null
+++ b/nongnu/packages/lisp.scm
@@ -0,0 +1,165 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; Copyright © 2022 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2023, 2024 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 lisp)
+ #:use-module (gnu packages lisp-xyz)
+ #: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:
+;; - emacs: for ELI. Or just remove it and use our own up-to-date package?
+;; - doc: For the doc. (> 40+10 MiB).
+;; - gui: For the express GUI (including all the JS stuff).
+;; - out: Everything else: alisp, alisp.dxl, etc.
+(define-public allegro-cl
+ (package
+ (name "allegro-cl")
+ (version "10.1")
+ (source (origin
+ (method url-fetch)
+ (uri
+ (let ((arch1 (match (or (%current-target-system) (%current-system))
+ ("armhf-linux" "linuxarm64")
+ ("i686-linux" "linux86")
+ (s "linuxamd64.64")))
+ (arch2 (match (or (%current-target-system) (%current-system))
+ ("armhf-linux" "linux-aarch64")
+ ("i686-linux" "linux-x86")
+ (s "linux-x64"))))
+ (string-append "https://franz.com/ftp/pub/acl"
+ version "express/" arch1
+ "/acl" version "express-" arch2 ".tbz2")))
+ (sha256
+ (base32
+ "1zxajn238aibsv0qknm5kiqjiplb4ggynjsxar390rwznh57qc46"))))
+ (build-system binary-build-system)
+ (inputs (list bash-minimal zlib openssl))
+ (arguments
+ ;; FIXME: Patchelf the .so files as well? Does not seem necessary.
+ `(#:patchelf-plan '(("alisp")
+ ("allegro-express"))
+ #:install-plan
+ '(("." "share/allegro-cl/"
+ ;; The "eli" Emacs interface is outdated and broken.
+ ;; Use the Nonguix emacs-eli package instead.
+ #:exclude ("update.sh" "eli")))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'unpack
+ ;; Guix does not know how to extract .tbz2.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (mkdir-p "source")
+ (invoke "tar"
+ "--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"))
+ (zlib-lib (string-append (assoc-ref inputs "zlib") "/lib"))
+ (openssl-lib (string-append (assoc-ref inputs "openssl") "/lib"))
+ (openssl-bin (string-append (assoc-ref inputs "openssl") "/bin"))
+ (bash-bin (string-append (assoc-ref inputs "bash") "/bin"))
+ (wrapper (string-append out "/bin/allegro-express"))
+ (bin (string-append out "/share/allegro-cl/"
+ "allegro-express"))
+ (cli-wrapper (string-append out "/bin/alisp"))
+ (cli-bin (string-append out "/share/allegro-cl/"
+ "alisp")))
+ (mkdir-p (dirname wrapper))
+ (pk 'BIN bin)
+ (make-wrapper wrapper bin
+ `("LD_LIBRARY_PATH" ":" prefix
+ ,(list zlib-lib openssl-lib))
+ `("PATH" ":" prefix
+ ,(list openssl-bin bash-bin)))
+ (make-wrapper cli-wrapper cli-bin))
+ #t)))))
+ (native-search-paths
+ ;; XDG_DATA_DIRS is required to find the cl-* libraries.
+ (list
+ (search-path-specification
+ (variable "XDG_DATA_DIRS")
+ (files '("share")))))
+ (synopsis "Commercial software implementation of the language Common Lisp")
+ (description
+ "This is a Lisp implementation by Franz Inc.
+It includes AllegroCache, a command line based REPL as well as a web-based GUI.
+
+The Express Edition has a heap limitation compared to the commercial versions
+of Allegro CL.
+
+You can run the GUI from a container, for instance:
+
+ guix shell --container --network allegro-cl -- allegro-express
+
+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 "f2245dc1450a6ad416984cf932be50e00957390a")
+ (revision "3"))
+ (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 "0c18xbwwnjaiwzd01dprdrwzp27nwihaf7pmkql1f5yk43x3ajs0"))))
+ (build-system asdf-build-system/sbcl)
+ (inputs (list electron
+ sbcl-cl-json sbcl-iolib sbcl-cl-str sbcl-nclasses
+ sbcl-cl-ppcre sbcl-bordeaux-threads sbcl-lparallel
+ sbcl-parenscript sbcl-spinneret))
+ (arguments
+ '(#:tests? #f
+ #:asd-systems '("cl-electron" "cl-electron/demos")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "source/core.lisp"
+ (("\"electron\"")
+ (string-append "\"" (assoc-ref inputs "electron") "/bin/electron\""))))))))
+ (synopsis "Common Lisp interface to Electron")
+ (home-page "https://github.com/atlas-engineer/cl-electron")
+ (description "@command{cl-electron} is a binding to Electron for
+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..aeb8f3e
--- /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.64")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "https://packages.riot.im/debian/pool/main/e/" name "/" name "_" version
+ "_amd64.deb"))
+ (sha256
+ (base32 "043017i51kdpb6aqz7542dyrdw8d6jhqd9zw6v1c63phh1633y56"))))
+ (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 "7.3.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "https://updates.signal.org/desktop/apt/pool/s/" name "/" name "_" version
+ "_amd64.deb"))
+ (sha256
+ (base32 "1gkcfh94l5nj8p3jk7g80jqq11fb8igi4wm84g67a9qi8n56wcrc"))))
+ (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 8d28928..7a51866 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>
@@ -9,31 +9,18 @@
;;; Copyright © 2017, 2018 Nikita <nikita@n0.is>
;;; Copyright © 2017, 2018 ng0 <gillmann@infotropique.org>
;;; Copyright © 2017, 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018, 2020, 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
;;; 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, 2021 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 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 © 2021, 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2023 Tomas Volf <wolf@wolfsden.cz>
(define-module (nongnu packages mozilla)
#:use-module (guix build-system gnu)
@@ -41,8 +28,10 @@
#:use-module (guix build-system trivial)
#:use-module (guix download)
#:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix utils)
+ #:use-module ((guix build utils) #:select (alist-replace))
#:use-module (gnu packages)
#:use-module (gnu packages assembly)
@@ -57,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)
@@ -64,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)
@@ -76,375 +65,511 @@
#: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))
-;; 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 "20211219000000")
+;; 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-public firefox
+(define icu4c-73
(package
- (name "firefox")
- (version "95.0.2")
+ (inherit icu4c)
+ (version "73.1")
+ (source (origin
+ (method url-fetch)
+ (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
+ "0iccpdvc0kvpww5a31k9gjkqigyz016i7v80r9zamd34w4fl6mx4"))))))
+
+;; 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 "20240415130026")
+
+(define-public firefox-esr
+ (package
+ (name "firefox-esr")
+ (version "115.10.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 "0r2dwymgrv25yz8jlsgdmmxs77880dp9r859val3kgbr37vcny61"))))
+ (base32 "1wpf4vcrvnvhnfzqavbkzqbn51bds1l9f6ld4mzh9xwm7mrkrz8a"))))
(build-system gnu-build-system)
(arguments
- `(#:configure-flags
- (let ((clang (assoc-ref %build-inputs "clang")))
- `("--enable-application=browser"
+ (list
+ #:configure-flags
+ #~(let ((clang #$(this-package-native-input "clang"))
+ (wasi-sysroot #$(this-package-native-input "wasm32-wasi-clang-toolchain")))
+ `("--enable-application=browser"
- ;; Configuration
- "--with-system-jpeg"
- "--with-system-zlib"
- ;; "--with-system-png" ;require libpng-apng >= 1.6.35
- "--with-system-icu"
- "--enable-system-ffi"
- "--enable-system-pixman"
- "--enable-jemalloc"
+ ;; Configuration
+ "--with-system-jpeg"
+ "--with-system-zlib"
+ ;; "--with-system-png" ;require libpng-apng >= 1.6.35
+ "--with-system-icu"
+ "--enable-system-ffi"
+ "--enable-system-pixman"
+ "--enable-jemalloc"
- ;; see https://bugs.gnu.org/32833
- ;; "--with-system-nspr"
- ;; "--with-system-nss"
+ ;; see https://bugs.gnu.org/32833
+ "--with-system-nspr"
+ ;; "--with-system-nss"
- ,(string-append "--with-clang-path="
- clang "/bin/clang")
- ,(string-append "--with-libclang-path="
- clang "/lib")
+ ,(string-append "--with-clang-path="
+ clang "/bin/clang")
+ ,(string-append "--with-libclang-path="
+ clang "/lib")
+ ,(string-append "--with-wasi-sysroot=" wasi-sysroot "/wasm32-wasi")
- ;; Distribution
- "--with-distribution-id=org.nonguix"
- "--disable-official-branding"
+ ;; Distribution
+ "--with-distribution-id=org.nonguix"
+ "--disable-official-branding"
- ;; Features
- "--disable-tests"
- "--disable-updater"
- "--enable-pulseaudio"
- "--disable-crashreporter"
- ;; TODO: requires some work
- "--without-wasm-sandboxed-libraries"
+ ;; Features
+ "--disable-tests"
+ "--disable-updater"
+ "--enable-pulseaudio"
+ "--disable-crashreporter"
- ;; Build details
- "--disable-debug"
- "--enable-rust-simd"
- "--enable-release"
- "--enable-optimize"
- "--enable-strip"
- "--disable-elf-hack"))
- #:imported-modules ,%cargo-utils-modules
- #:modules ((ice-9 regex)
+ ;; Build details
+ "--disable-debug"
+ "--enable-rust-simd"
+ "--enable-release"
+ "--enable-optimize"
+ "--enable-strip"
+ "--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
- (add-after 'unpack 'fix-preferences
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((port (open-file "browser/app/profile/firefox.js" "a")))
- (define (write-setting key value)
- (format port "~%pref(\"~a\", ~a);~%"
- key value)
- (format #t "fix-preferences: setting value of ~a to ~a~%"
- key value))
-
- ;; We should allow Firefox sandbox to read the store directory,
- ;; because Firefox sandbox have access to /usr on FHS distros.
- (write-setting "security.sandbox.content.read_path_whitelist"
- (string-append "\"" (%store-directory) "/\""))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'fix-preferences
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((port (open-file "browser/app/profile/firefox.js" "a")))
+ (define (write-setting key value)
+ (format port "~%pref(\"~a\", ~a);~%"
+ key value)
+ (format #t "fix-preferences: setting value of ~a to ~a~%"
+ key value))
- ;; XDG settings should be managed by Guix.
- (write-setting "browser.shell.checkDefaultBrowser" "false")
- (close-port port))
- #t))
- (add-after 'fix-preferences 'fix-ffmpeg-runtime-linker
- (lambda* (#:key inputs #:allow-other-keys)
- (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
- (libavcodec (string-append ffmpeg "/lib/libavcodec.so")))
- ;; Arrange to load libavcodec.so by its absolute file name.
- (substitute* "dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp"
- (("libavcodec\\.so")
- libavcodec))
- #t)))
+ ;; We should allow Firefox sandbox to read the store directory,
+ ;; because Firefox sandbox have access to /usr on FHS distros.
+ (write-setting "security.sandbox.content.read_path_whitelist"
+ (string-append "\"" (%store-directory) "/\""))
- (add-after 'patch-source-shebangs 'patch-cargo-checksums
- (lambda _
- (use-modules (guix build cargo-utils))
- (let ((null-hash
- ;; This is the SHA256 output of an empty string.
- "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"))
- (for-each
- (lambda (file)
- (format #t "patch-cargo-checksums: patching checksums in ~a~%"
- file)
- (substitute* file
- (("(checksum = )\".*\"" all name)
- (string-append name "\"" null-hash "\""))))
- (find-files "." "Cargo\\.lock$"))
- (for-each generate-all-checksums
- '("build"
- "dom/media"
- "dom/webauthn"
- "gfx"
- "intl"
- "js"
- "media"
- "modules"
- "mozglue/static/rust"
- "netwerk"
- "remote"
- "security/manager/ssl"
- "servo"
- "storage"
- "third_party/rust"
- "toolkit"
- "xpcom/rust"
- "services"))
- #t)))
- (add-after 'patch-cargo-checksums 'remove-cargo-frozen-flag
- (lambda _
- ;; Remove --frozen flag from cargo invokation, otherwise it'll
- ;; complain that it's not able to change Cargo.lock.
- ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
- (substitute* "build/RunCbindgen.py"
- (("\"--frozen\",") ""))
- #t))
- (delete 'bootstrap)
- (replace 'configure
- (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
- (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
- "/bin/autoconf"))
- (setenv "SHELL" (which "bash"))
- (setenv "CONFIG_SHELL" (which "bash"))
- (setenv "MACH_USE_SYSTEM_PYTHON" "1")
+ ;; XDG settings should be managed by Guix.
+ (write-setting "browser.shell.checkDefaultBrowser" "false")
+ (close-port port))))
+ (add-after 'fix-preferences 'fix-ffmpeg-runtime-linker
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
+ (libavcodec (string-append ffmpeg "/lib/libavcodec.so")))
+ ;; Arrange to load libavcodec.so by its absolute file name.
+ (substitute* "dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp"
+ (("libavcodec\\.so")
+ libavcodec)))))
+ (add-after 'patch-source-shebangs 'patch-cargo-checksums
+ (lambda _
+ (use-modules (guix build cargo-utils))
+ (let ((null-hash
+ ;; This is the SHA256 output of an empty string.
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"))
+ (for-each
+ (lambda (file)
+ (format #t "patch-cargo-checksums: patching checksums in ~a~%"
+ file)
+ (substitute* file
+ (("(checksum = )\".*\"" all name)
+ (string-append name "\"" null-hash "\""))))
+ (find-files "." "Cargo\\.lock$"))
+ (for-each generate-all-checksums
+ '("build"
+ "dom/media"
+ "dom/webauthn"
+ "gfx"
+ "intl"
+ "js"
+ "media"
+ "modules"
+ "mozglue/static/rust"
+ "netwerk"
+ "remote"
+ "security/manager/ssl"
+ "servo"
+ "storage"
+ "third_party/rust"
+ "toolkit"
+ "xpcom/rust"
+ "services")))))
+ (add-after 'patch-cargo-checksums 'remove-cargo-frozen-flag
+ (lambda _
+ ;; Remove --frozen flag from cargo invokation, otherwise it'll
+ ;; complain that it's not able to change Cargo.lock.
+ ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
+ (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
+ ;; separate phase for easier modification with inherit.
+ (lambda _
+ (setenv "MOZ_BUILD_DATE" #$%firefox-esr-build-id)))
+ (replace 'configure
+ (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
+ (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
+ "/bin/autoconf"))
+ (setenv "SHELL" (which "bash"))
+ (setenv "CONFIG_SHELL" (which "bash"))
+ (setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
+ ;; This should use the host info probably (does firefox build on
+ ;; non-x86_64 though?)
+ (setenv "GUIX_PYTHONPATH"
+ (string-append (getcwd)
+ "/obj-x86_64-pc-linux-gnu/_virtualenvs/build"))
- ;; Use Clang, Clang is 2x faster than GCC
- (setenv "AR" "llvm-ar")
- (setenv "NM" "llvm-nm")
- (setenv "CC" "clang")
- (setenv "CXX" "clang++")
+ ;; Use Clang, Clang is 2x faster than GCC
+ (setenv "AR" "llvm-ar")
+ (setenv "NM" "llvm-nm")
+ (setenv "CC" "clang")
+ (setenv "CXX" "clang++")
+ (setenv "WASM_CC"
+ (string-append
+ (assoc-ref inputs "wasm32-wasi-clang-toolchain")
+ "/bin/clang"))
+ (setenv "WASM_CXX"
+ (string-append
+ (assoc-ref inputs "wasm32-wasi-clang-toolchain")
+ "/bin/clang++"))
- (setenv "MOZ_NOSPAM" "1")
- ;; Firefox will write the timestamp to output, which is harmful for
- ;; reproducibility, so change it to a fixed date.
- (setenv "MOZ_BUILD_DATE" ,%firefox-build-id)
+ (setenv "MOZ_NOSPAM" "1")
- (setenv "MOZBUILD_STATE_PATH" (getcwd))
+ (setenv "MOZBUILD_STATE_PATH" (getcwd))
- (let* ((mozconfig (string-append (getcwd) "/mozconfig"))
- (out (assoc-ref outputs "out"))
- (flags (cons (string-append "--prefix=" out)
- configure-flags)))
- (format #t "build directory: ~s~%" (getcwd))
- (format #t "configure flags: ~s~%" flags)
+ (let* ((mozconfig (string-append (getcwd) "/mozconfig"))
+ (out (assoc-ref outputs "out"))
+ (flags (cons (string-append "--prefix=" out)
+ configure-flags)))
+ (format #t "build directory: ~s~%" (getcwd))
+ (format #t "configure flags: ~s~%" flags)
- (define write-flags
- (lambda flags
- (display (string-join
- (map (cut string-append "ac_add_options " <>)
- flags)
- "\n"))
- (display "\n")))
- (with-output-to-file mozconfig
- (lambda ()
- (apply write-flags flags)
- ;; The following option unsets Telemetry Reporting. With the Addons Fiasco,
- ;; Mozilla was found to be collecting user's data, including saved passwords and
- ;; web form data, without users consent. Mozilla was also found shipping updates
- ;; to systems without the user's knowledge or permission.
- ;; As a result of this, use the following command to permanently disable
- ;; telemetry reporting in Firefox.
- (display "unset MOZ_TELEMETRY_REPORTING\n")))
- (setenv "MOZCONFIG" mozconfig))
- (invoke "./mach" "configure")))
- (replace 'build
- (lambda* (#:key (make-flags '()) (parallel-build? #t)
- #:allow-other-keys)
- (apply invoke "./mach" "build"
- ;; mach will use parallel build if possible by default
- `(,@(if parallel-build?
- '()
- '("-j1"))
- ,@make-flags))))
- (add-after 'build 'neutralise-store-references
- (lambda _
- ;; Mangle the store references to compilers & other build tools in
- ;; about:buildconfig, reducing Firefox's closure by 1 GiB on x86-64.
- (let* ((build-dir (car (scandir "." (cut string-prefix? "obj-" <>))))
- (file (string-append build-dir "/dist/bin/chrome/toolkit/content/global/buildconfig.html")))
- (substitute* file
- (((format #f "(~a/)([0-9a-df-np-sv-z]{32})"
- (regexp-quote (%store-directory)))
- _ store hash)
- (string-append store
- (string-take hash 8)
- "<!-- Guix: not a runtime dependency -->"
- (string-drop hash 8)))))
- #t))
- (replace 'install
- (lambda _ (invoke "./mach" "install")))
- (add-after 'install 'wrap-program
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lib (string-append out "/lib"))
- (ld-libs
- (map (lambda (x)
- (string-append (assoc-ref inputs x)
- "/lib"))
- '("pulseaudio" "mesa"
- "udev" ;; For U2F and WebAuthn
- ;; For hardware video acceleration via VA-API
- "libva"
- ;; For the integration of native notifications
- "libnotify")))
- (gtk-share (string-append (assoc-ref inputs "gtk+")
- "/share")))
- (wrap-program (car (find-files lib "^firefox$"))
- `("LD_LIBRARY_PATH" prefix ,ld-libs)
- `("XDG_DATA_DIRS" prefix (,gtk-share))
- `("MOZ_LEGACY_PROFILES" = ("1"))
- `("MOZ_ALLOW_DOWNGRADE" = ("1")))
- #t)))
- (add-after 'wrap-program 'install-desktop-entry
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((desktop-file "taskcluster/docker/firefox-snap/firefox.desktop")
- (out (assoc-ref outputs "out"))
- (applications (string-append out "/share/applications")))
- (substitute* desktop-file
- (("^Exec=firefox") (string-append "Exec=" out "/bin/firefox"))
- (("Icon=.*") "Icon=firefox\n")
- (("NewWindow") "new-window")
- (("NewPrivateWindow") "new-private-window"))
- (install-file desktop-file applications))
- #t))
- (add-after 'install-desktop-entry 'install-icons
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (icon-source-dir
+ (define write-flags
+ (lambda flags
+ (display (string-join
+ (map (cut string-append "ac_add_options " <>)
+ flags)
+ "\n"))
+ (display "\n")))
+ (with-output-to-file mozconfig
+ (lambda ()
+ (apply write-flags flags)
+ ;; The following option unsets Telemetry Reporting. With the Addons Fiasco,
+ ;; Mozilla was found to be collecting user's data, including saved passwords and
+ ;; web form data, without users consent. Mozilla was also found shipping updates
+ ;; to systems without the user's knowledge or permission.
+ ;; As a result of this, use the following command to permanently disable
+ ;; telemetry reporting in Firefox.
+ (display "unset MOZ_TELEMETRY_REPORTING\n")))
+ (setenv "MOZCONFIG" mozconfig))
+ (invoke "./mach" "configure")))
+ (replace 'build
+ (lambda* (#:key (make-flags '()) (parallel-build? #t)
+ #:allow-other-keys)
+ (apply invoke "./mach" "build"
+ ;; mach will use parallel build if possible by default
+ `(,@(if parallel-build?
+ '()
+ '("-j1"))
+ ,@make-flags))))
+ (add-after 'build 'neutralise-store-references
+ (lambda _
+ ;; Mangle the store references to compilers & other build tools in
+ ;; about:buildconfig, reducing Firefox's closure by 1 GiB on x86-64.
+ (let* ((build-dir (car (scandir "." (cut string-prefix? "obj-" <>))))
+ (file (string-append build-dir "/dist/bin/chrome/toolkit/content/global/buildconfig.html")))
+ (substitute* file
+ (((format #f "(~a/)([0-9a-df-np-sv-z]{32})"
+ (regexp-quote (%store-directory)))
+ _ store hash)
+ (string-append store
+ (string-take hash 8)
+ "<!-- Guix: not a runtime dependency -->"
+ (string-drop hash 8)))))))
+ (replace 'install
+ (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
+ (mesa-lib (string-append (assoc-ref inputs "mesa") "/lib"))
+ ;; For the integration of native notifications
+ (libnotify-lib (string-append (assoc-ref inputs "libnotify")
+ "/lib"))
+ ;; 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
+ (eudev-lib (string-append (assoc-ref inputs "eudev") "/lib"))
+ (gtk-share (string-append (assoc-ref inputs "gtk+")
+ "/share")))
+ (wrap-program (car (find-files lib "^firefox$"))
+ `("LD_LIBRARY_PATH" prefix (,mesa-lib ,libnotify-lib ,libva-lib
+ ,pulseaudio-lib ,eudev-lib ,@rdd-whitelist))
+ `("XDG_DATA_DIRS" prefix (,gtk-share))
+ `("MOZ_LEGACY_PROFILES" = ("1"))
+ `("MOZ_ALLOW_DOWNGRADE" = ("1"))))))
+ (add-after 'wrap-program 'install-desktop-entry
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((desktop-file "taskcluster/docker/firefox-snap/firefox.desktop")
+ (applications (string-append #$output "/share/applications")))
+ (substitute* desktop-file
+ (("^Exec=firefox") (string-append "Exec=" #$output "/bin/firefox"))
+ (("Icon=.*") "Icon=firefox\n")
+ (("NewWindow") "new-window")
+ (("NewPrivateWindow") "new-private-window")
+ (("StartupNotify=true")
+ "StartupNotify=true\nStartupWMClass=Navigator"))
+ (install-file desktop-file applications))))
+ (add-after 'install-desktop-entry 'install-icons
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((icon-source-dir
(string-append
- out "/lib/firefox/browser/chrome/icons/default")))
- (for-each
- (lambda (size)
- (let ((dest (string-append out "/share/icons/hicolor/"
- size "x" size "/apps")))
- (mkdir-p dest)
- (symlink (string-append icon-source-dir
- "/default" size ".png")
- (string-append dest "/firefox.png"))))
- '("16" "32" "48" "64" "128"))
- #t))))
+ #$output "/lib/firefox/browser/chrome/icons/default")))
+ (for-each
+ (lambda (size)
+ (let ((dest (string-append #$output "/share/icons/hicolor/"
+ size "x" size "/apps")))
+ (mkdir-p dest)
+ (symlink (string-append icon-source-dir
+ "/default" size ".png")
+ (string-append dest "/firefox.png"))))
+ '("16" "32" "48" "64" "128"))))))
- ;; Test will significantly increase build time but with little rewards.
- #:tests? #f
+ ;; Test will significantly increase build time but with little rewards.
+ #:tests? #f
- ;; WARNING: Parallel build will consume lots of memory!
- ;; If you have encountered OOM issue in build phase, try disable it.
- ;; #:parallel-build? #f
+ ;; WARNING: Parallel build will consume lots of memory!
+ ;; If you have encountered OOM issue in build phase, try disable it.
+ ;; #:parallel-build? #f
- ;; Some dynamic lib was determined at runtime, so rpath check may fail.
- #:validate-runpath? #f))
+ ;; Some dynamic lib was determined at runtime, so rpath check may fail.
+ #:validate-runpath? #f))
(inputs
- `(("bzip2" ,bzip2)
- ("cairo" ,cairo)
- ("cups" ,cups)
- ("dbus-glib" ,dbus-glib)
- ("freetype" ,freetype)
- ("ffmpeg" ,ffmpeg)
- ("gdk-pixbuf" ,gdk-pixbuf)
- ("glib" ,glib)
- ("gtk+" ,gtk+)
- ("gtk+-2" ,gtk+-2)
- ("hunspell" ,hunspell)
- ("icu4c" ,icu4c)
- ("jemalloc" ,jemalloc)
- ("libcanberra" ,libcanberra)
- ("libevent" ,libevent)
- ("libffi" ,libffi)
- ("libgnome" ,libgnome)
- ("libjpeg-turbo" ,libjpeg-turbo)
- ("libnotify" ,libnotify)
- ;; ("libpng-apng" ,libpng-apng)
- ("libva" ,libva)
- ("libvpx" ,libvpx)
- ("libxcomposite" ,libxcomposite)
- ("libxft" ,libxft)
- ("libxinerama" ,libxinerama)
- ("libxscrnsaver" ,libxscrnsaver)
- ("libxt" ,libxt)
- ("mesa" ,mesa)
- ("mit-krb5" ,mit-krb5)
- ;; ("nspr" ,nspr)
- ;; ("nss" ,nss)
- ("pango" ,pango)
- ("pixman" ,pixman)
- ("pulseaudio" ,pulseaudio)
- ("startup-notification" ,startup-notification)
- ("sqlite" ,sqlite)
- ("udev" ,eudev)
- ("unzip" ,unzip)
- ("zip" ,zip)
- ("zlib" ,zlib)))
+ (list
+ bzip2
+ cairo
+ cups
+ dbus-glib
+ freetype
+ ffmpeg
+ gdk-pixbuf
+ glib
+ gtk+
+ gtk+-2
+ hunspell
+ icu4c-73
+ jemalloc
+ libcanberra
+ libevent
+ libffi
+ libgnome
+ libjpeg-turbo
+ libnotify
+ ;; libpng-apng
+ libva
+ libvpx
+ libxcomposite
+ libxft
+ libxinerama
+ libxscrnsaver
+ libxt
+ mesa
+ mit-krb5
+ nspr-4.32
+ ;; nss
+ pango
+ pipewire
+ pixman
+ pulseaudio
+ speech-dispatcher
+ sqlite
+ startup-notification
+ eudev
+ unzip
+ zip
+ zlib))
(native-inputs
- `(("autoconf" ,autoconf-2.13)
- ("cargo" ,rust "cargo")
- ("clang" ,clang-10)
- ("llvm" ,llvm-10)
- ("m4" ,m4)
- ("nasm" ,nasm)
- ("node" ,node)
- ("perl" ,perl)
- ("pkg-config" ,pkg-config)
- ("python" ,python)
- ("rust" ,rust)
- ("rust-cbindgen" ,rust-cbindgen-0.19)
- ("which" ,which)
- ("yasm" ,yasm)))
+ (list
+ alsa-lib
+ autoconf-2.13
+ `(,rust-firefox-esr "cargo")
+ clang
+ llvm
+ wasm32-wasi-clang-toolchain
+ m4
+ nasm
+ node-lts
+ perl
+ pkg-config
+ python
+ rust-firefox-esr
+ rust-cbindgen-0.24
+ which
+ yasm))
(home-page "https://mozilla.org/firefox/")
(synopsis "Trademarkless version of Firefox")
(description
"Full-featured browser client built from Firefox source tree, without
-the official icon and the name \"firefox\".")
+the official icon and the name \"firefox\". This is the Extended Support
+Release (ESR) version.")
(license license:mpl2.0)))
- (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))
+(define-public firefox-esr/wayland
+ (package
+ (inherit firefox-esr)
+ (name "firefox-esr-wayland")
+ (native-inputs '())
+ (inputs
+ `(("bash" ,bash-minimal)
+ ("firefox-esr" ,firefox-esr)))
+ (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-esr"))
+ (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
+ (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)
+ (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))))))
+
+;; 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 "20240422125740")
+
+(define-public firefox
+ (package
+ (inherit firefox-esr)
+ (name "firefox")
+ (version "125.0.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://archive.mozilla.org/pub/firefox/releases/"
+ version "/source/firefox-" version ".source.tar.xz"))
+ (sha256
+ (base32 "16gpd6n52lshvkkha41z7xicggj64dw0qhr5gd07bcxsc4rmdl39"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments firefox-esr)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (replace 'set-build-id
+ (lambda _
+ (setenv "MOZ_BUILD_DATE" #$%firefox-build-id)))
+ (replace 'remove-cargo-frozen-flag
+ (lambda _
+ ;; Remove --frozen flag from cargo invokation, otherwise it'll
+ ;; complain that it's not able to change Cargo.lock.
+ ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
+ (substitute* "build/RunCbindgen.py"
+ (("args.append\\(\"--frozen\"\\)") "pass"))))))))
+ (native-inputs
+ (modify-inputs (package-native-inputs firefox-esr)
+ (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\".")))
- ;; 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
new file mode 100644
index 0000000..1a51d2c
--- /dev/null
+++ b/nongnu/packages/ncurses.scm
@@ -0,0 +1,229 @@
+;;; 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>
+;;; Copyright © 2016 Nikita <nikita@n0.is>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; 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-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)
+ #:use-module (guix build-system perl)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages swig)
+ #:use-module (gnu packages linux)
+ #: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")
+ (version "5.9.20141206")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/ncurses/ncurses-"
+ (version-major+minor version)
+ ".tar.gz"))
+ (sha256
+ (base32
+ "0fsn7xis81za62afan0vvm38bvgzg5wfmv1m86flqcj0nj7jjilh"))))
+ (build-system gnu-build-system)
+ (outputs '("out"
+ "doc")) ;1 MiB of man pages
+ (arguments
+ (let ((patch-makefile-phase
+ #~(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)))))
+ (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 #$(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"))))
+ (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 libwx.dll
+ (string-append "lib" lib "w"
+ ,(version-major version) ".dll"))
+
+ (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")))
+ #~())
+
+ (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"
+ ,(string-append "--with-pkg-config-libdir="
+ #$output "/lib/pkgconfig")
+
+ ;; 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.
+ ,(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") #~())
+
+ ;; 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") #~())
+ "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)
+ (list pkg-config this-package) ;for 'tic'
+ (list pkg-config)))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "TERMINFO_DIRS")
+ (files '("share/terminfo")))))
+ (synopsis "Terminal emulation (termcap, terminfo) library")
+ (description
+ "GNU Ncurses is a library which provides capabilities to write text to
+a terminal in a terminal-independent manner. It supports pads and color as
+well as multiple highlights and forms characters. It is typically used to
+implement user interfaces for command-line applications. The accompanying
+ncursesw library provides wide character support.")
+ (license x11)
+ (home-page "https://www.gnu.org/software/ncurses/")))
+
+(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))))))
diff --git a/nongnu/packages/nvidia.scm b/nongnu/packages/nvidia.scm
index a154f28..2c6495e 100644
--- a/nongnu/packages/nvidia.scm
+++ b/nongnu/packages/nvidia.scm
@@ -1,429 +1,772 @@
-;;; 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, 2021 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2020-2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.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, 2023, 2024 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)
#:use-module (guix utils)
+ #: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 perl)
- #:use-module (gnu packages python)
+ #:use-module (gnu packages m4)
+ #:use-module (gnu packages lsof)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages qt)
+ #:use-module (gnu packages tls)
+ #: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)
- #:use-module (ice-9 regex)
- #:use-module (ice-9 format)
- #:use-module (ice-9 textual-ports)
- #:use-module (ice-9 match)
- #:use-module (srfi srfi-1))
+ #:use-module (ice-9 match))
+
+(define-public %nvidia-environment-variable-regexps
+ '("^__GL_" ; NVIDIA OpenGL settings.
+ "^__GLX_VENDOR_LIBRARY_NAME$" ; For GLVND.
+ ;; NVIDIA PRIME Render Offload.
+ "^__NV_PRIME_RENDER_OFFLOAD(_PROVIDER)?$"
+ "^__VK_LAYER_NV_optimus$"
+ ;; NVIDIA NGX.
+ "^__NGX_CONF_FILE$"
+ "^__NV_SIGNED_LOAD_CHECK$"
+ "^PROTON_ENABLE_NGX_UPDATER$"
+ ;; NVIDIA VDPAU settings.
+ "^VDPAU_NVIDIA_"
+ ;; GSYNC control for Vulkan direct-to-display applications.
+ "^VKDirectGSYNC(Compatible)?Allowed$"))
+
+(define-public nvidia-version "550.67")
+
+
+;;;
+;;; NVIDIA driver checkouts
+;;;
+
+
+(define* (nvidia-source-hash version #:optional (package "nvidia-driver"))
+ (define %nvidia-source-hashes
+ '(("550.67" .
+ (("nvidia-driver" .
+ "1qnsyzplkxfcc2sj6fcw3ylfp0njvb5z1c0y4v80zzqwqw4il84r")
+ ("nvidia-settings" .
+ "18sij736liyhqysvsnqwb6r58pf0zbggxyvyc11psc4ljxg30h8m")))))
+ (let ((hashes (assoc-ref %nvidia-source-hashes version)))
+ (assoc-ref hashes package)))
+
+(define (nvidia-source-unbundle-libraries version)
+ #~(begin
+ (use-modules (guix build utils))
+ (for-each delete-file
+ (find-files "." (string-join
+ '(;; egl-gbm
+ "libnvidia-egl-gbm\\.so\\."
+ ;; egl-wayland
+ "libnvidia-egl-wayland\\.so\\."
+ ;; libglvnd
+ "libEGL\\.so\\."
+ "libGL\\.so\\."
+ "libGLESv1_CM\\.so\\."
+ "libGLESv2\\.so\\."
+ "libGLX\\.so\\."
+ "libGLdispatch\\.so\\."
+ "libOpenGL\\.so\\."
+ ;; nvidia-settings
+ "libnvidia-gtk[23]\\.so\\."
+ ;; opencl-icd-loader
+ "libOpenCL\\.so\\.")
+ "|")))))
+
+(define* (make-nvidia-source
+ version hash
+ #:optional (get-cleanup-snippet nvidia-source-unbundle-libraries))
+ "Given VERSION and HASH of an NVIDIA driver installer, return an <origin> for
+its unpacked checkout. GET-CLEANUP-SNIPPET is a procedure that accepts the
+VERSION as argument and returns a G-expression."
+ (define installer
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://us.download.nvidia.com/XFree86/Linux-x86_64/"
+ version "/NVIDIA-Linux-x86_64-" version ".run"))
+ (sha256 hash)))
+ (origin
+ (method (@@ (guix packages) computed-origin-method))
+ (file-name (string-append "nvidia-driver-" version "-checkout"))
+ (sha256 #f)
+ (snippet (get-cleanup-snippet version))
+ (uri
+ (delay
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils)
+ (ice-9 ftw))
+ (set-path-environment-variable
+ "PATH" '("bin")
+ '#+(list bash-minimal
+ coreutils
+ gawk
+ grep
+ tar
+ which
+ xz
+ zstd))
+ (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-public nvidia-source
+ (make-nvidia-source
+ nvidia-version
+ (base32 (nvidia-source-hash nvidia-version))))
+
+
+;;;
+;;; NVIDIA drivers
+;;;
+
+
+(define %nvidia-script-create-device-nodes
+ (program-file
+ "create-device-nodes.scm"
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (ice-9 regex)
+ (rnrs io ports)
+ (srfi srfi-1)
+ (guix build utils))
+
+ (define %nvidia-character-devices
+ (call-with-input-file "/proc/devices"
+ (lambda (port)
+ (filter-map
+ (lambda (line)
+ (if (string-contains line "nvidia")
+ (apply cons (reverse (string-tokenize line)))
+ #f))
+ (string-split (get-string-all port) #\newline)))))
+
+ (define %nvidia-driver-device-minors
+ (let ((device-minor-regexp (make-regexp "^Device Minor: \t (.*)")))
+ (append-map
+ (lambda (file)
+ (call-with-input-file file
+ (lambda (port)
+ (filter-map
+ (lambda (line)
+ (let ((matched (regexp-exec device-minor-regexp line)))
+ (if matched
+ (match:substring matched 1)
+ #f)))
+ (string-split (get-string-all port) #\newline)))))
+ (find-files "/proc/driver/nvidia/gpus/" "information$"))))
+
+ (define (create-device-node path name minor)
+ (let ((major
+ (or (assoc-ref %nvidia-character-devices name)
+ (assoc-ref %nvidia-character-devices "nvidia-frontend")))
+ (mknod #$(file-append coreutils "/bin/mknod")))
+ (system* mknod "-Zm0666" path "c" major minor)))
+
+ (define (main args)
+ (case (string->symbol (first args))
+ ((nvidia_modeset)
+ (create-device-node "/dev/nvidia-modeset" "nvidia-modeset" "254"))
+ ((nvidia_uvm)
+ (begin
+ (create-device-node "/dev/nvidia-uvm" "nvidia-uvm" "0")
+ (create-device-node "/dev/nvidia-uvm-tools" "nvidia-uvm" "1")))
+ ((nvidia)
+ (begin
+ (create-device-node "/dev/nvidiactl" "nvidiactl" "255")
+ (for-each
+ (lambda (minor)
+ (create-device-node
+ (string-append "/dev/nvidia" minor) "nvidia" minor))
+ %nvidia-driver-device-minors)))))
+
+ (main (cdr (command-line)))))))
+
+;; Adapted from <https://github.com/Frogging-Family/nvidia-all/blob/master/60-nvidia.rules>
+(define %nvidia-udev-rules
+ (mixed-text-file
+ "90-nvidia.rules" "\
+# Make sure device nodes are present even when the DDX is not started for the Wayland/EGLStream case
+KERNEL==\"nvidia\", RUN+=\"" %nvidia-script-create-device-nodes " nvidia\"
+KERNEL==\"nvidia_modeset\", RUN+=\"" %nvidia-script-create-device-nodes " nvidia_modeset\"
+KERNEL==\"nvidia_uvm\", RUN+=\"" %nvidia-script-create-device-nodes " nvidia_uvm\"
+
+# Enable runtime PM for NVIDIA VGA/3D controller devices
+ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x03[0-9]*\", TEST==\"power/control\", ATTR{power/control}=\"auto\"
+# Enable runtime PM for NVIDIA Audio devices
+ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x040300\", TEST==\"power/control\", ATTR{power/control}=\"auto\"
+# Enable runtime PM for NVIDIA USB xHCI Host Controller devices
+ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c0330\", TEST==\"power/control\", ATTR{power/control}=\"auto\"
+# Enable runtime PM for NVIDIA USB Type-C UCSI devices
+ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c8000\", TEST==\"power/control\", ATTR{power/control}=\"auto\"
+
+# Disable runtime PM for NVIDIA VGA/3D controller devices
+ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x03[0-9]*\", TEST==\"power/control\", ATTR{power/control}=\"on\"
+# Disable runtime PM for NVIDIA Audio devices
+ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x040300\", TEST==\"power/control\", ATTR{power/control}=\"on\"
+# Disable runtime PM for NVIDIA USB xHCI Host Controller devices
+ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c0330\", TEST==\"power/control\", ATTR{power/control}=\"on\"
+# Disable runtime PM for NVIDIA USB Type-C UCSI devices
+ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c8000\", TEST==\"power/control\", ATTR{power/control}=\"on\"
+"))
(define-public nvidia-driver
(package
(name "nvidia-driver")
- (version "465.27")
- (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 "0w9ivi4z4j4hvhkimr11mgwrj09v53dy39vfdfmamrnybflgysby"))
- (method url-fetch)
- (file-name (string-append "nvidia-driver-" version "-checkout"))))
- (build-system linux-module-build-system)
+ (version nvidia-version)
+ (source nvidia-source)
+ (build-system copy-build-system)
(arguments
- `(#:linux ,linux-lts
- #: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)))
- (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 (assoc-ref inputs "bash-minimal") "/bin/sh")))
- (invoke "make"
- "-j"
- (string-append "SYSSRC="
- (assoc-ref inputs "linux-module-builder")
- "/lib/modules/build")
- "CC=gcc")
- #t))
- (delete 'check)
- (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* ((out (assoc-ref outputs "out"))
- (libdir (string-append out "/lib"))
- (bindir (string-append out "/bin"))
- (etcdir (string-append out "/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 out "/lib/xorg/modules/drivers/"))
- (install-file ,(string-append "libglxserver_nvidia.so." version) (string-append out "/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 out "/lib/libnvidia-opencl.so.1") port)))
- (chmod file #o555))
-
- ;; Add udev rules for nvidia
- (let ((rulesdir (string-append out "/lib/udev/rules.d/"))
- (rules (string-append out "/lib/udev/rules.d/90-nvidia.rules"))
- (sh (string-append (assoc-ref inputs "bash-minimal") "/bin/sh"))
- (mknod (string-append (assoc-ref inputs "coreutils") "/bin/mknod"))
- (cut (string-append (assoc-ref inputs "coreutils") "/bin/cut"))
- (grep (string-append (assoc-ref inputs "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"))
- (out (assoc-ref outputs "out"))
- (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 " out moddir "/nvidia.ko" "\n"
- "insmod " out moddir "/nvidia-modeset.ko" "\n"
- "insmod " out moddir "/nvidia-uvm.ko" "\n"
- "insmod " out 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 "#!" (assoc-ref inputs "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)
-
- ;; ------------------------------
- ;; patchelf
- (let* ((libc (assoc-ref inputs "libc"))
- (ld.so (string-append libc ,(glibc-dynamic-linker)))
-
- (out (assoc-ref outputs "out"))
- (rpath (string-join
- (list "$ORIGIN"
- (string-append out "/lib")
- (string-append libc "/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 "gtk+") "/lib")
- (string-append (assoc-ref inputs "gtk2") "/lib")
- (string-append (assoc-ref inputs "atk") "/lib")
- (string-append (assoc-ref inputs "glib") "/lib")
- (string-append (assoc-ref inputs "cairo") "/lib")
- (string-append (assoc-ref inputs "gdk-pixbuf") "/lib")
- (string-append (assoc-ref inputs "wayland") "/lib")
- (string-append (assoc-ref inputs "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 out ".*\\.so"))
- (patch-elf (string-append bindir "/" "nvidia-smi")))
-
- ;; ------------------------------
- ;; Create short name symbolic links
- (for-each (lambda (file)
- (let* ((short (regexp-substitute
- #f
- (string-match "([^/]*\\.so).*" file)
- 1))
- (major (if (or (string=? short "libEGL.so")
- (string=? short "libEGL_nvidia.so")
- (string=? short "libGLX.so")
- (string=? short "libGLX_nvidia.so"))
- "0" "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." version)
- (string-append out "/lib/xorg/modules/extensions/" "libglxserver_nvidia.so")))
- #t)))))
- (native-inputs
- `(("patchelf" ,patchelf)
- ("perl" ,perl)
- ("python" ,python-2)
- ("which" ,which)
- ("xz" ,xz)))
+ (list #:modules '((guix build copy-build-system)
+ (guix build utils)
+ (ice-9 popen)
+ (ice-9 rdelim)
+ (ice-9 regex)
+ (srfi srfi-26))
+ #:install-plan
+ #~`((#$(match (or (%current-target-system) (%current-system))
+ ("i686-linux" "32")
+ ("x86_64-linux" ".")
+ (_ "."))
+ "lib/" #:include-regexp ("^./[^/]+\\.so"))
+ ("." "share/nvidia/" #:include-regexp ("nvidia-application-profiles"))
+ ("." "share/egl/egl_external_platform.d/" #:include-regexp ("(gbm|wayland)\\.json"))
+ ("10_nvidia.json" "share/glvnd/egl_vendor.d/")
+ ("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.icd" "etc/OpenCL/vendors/")
+ ("nvidia_icd.json" "share/vulkan/icd.d/")
+ ("nvidia_layers.json" "share/vulkan/implicit_layer.d/"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'strip)
+ (add-after 'unpack 'create-misc-files
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; EGL external platform configuraiton
+ (substitute* '("10_nvidia_wayland.json"
+ "15_nvidia_gbm.json")
+ (("libnvidia-egl-(wayland|gbm)\\.so\\.." all)
+ (search-input-file inputs (string-append "lib/" all))))
+
+ ;; EGL vendor ICD configuration
+ (substitute* "10_nvidia.json"
+ (("libEGL_nvidia\\.so\\.." all)
+ (string-append #$output "/lib/" all)))
+
+ ;; OpenCL vendor ICD configuration
+ (substitute* "nvidia.icd"
+ (("libnvidia-opencl\\.so\\.." all)
+ (string-append #$output "/lib/" all)))
+
+ ;; Vulkan ICD & layer configuraiton
+ (substitute* '("nvidia_icd.json"
+ "nvidia_layers.json")
+ (("libGLX_nvidia\\.so\\.." all)
+ (string-append #$output "/lib/" all)))
+
+ ;; Add udev rules
+ (symlink #$%nvidia-udev-rules "90-nvidia.rules")))
+ (add-after 'install 'add-architecture-to-filename
+ (lambda _
+ (for-each
+ (lambda (path)
+ (let* ((out #$output)
+ (system #$(or (%current-target-system)
+ (%current-system)))
+ (dash (string-index system #\-))
+ (arch (string-take system dash))
+
+ (dot (string-index-right path #\.))
+ (base (string-take path dot))
+ (ext (string-drop path (+ 1 dot))))
+ ;; <...>/nvidia.icd -> <...>/nvidia.x86_64.icd
+ ;; <...>/nvidia_icd.json -> <...>/nvidia_icd.x86_64.json
+ (rename-file
+ (string-append out path)
+ (string-append out base "." arch "." ext))))
+ '("/etc/OpenCL/vendors/nvidia.icd"
+ "/share/egl/egl_external_platform.d/10_nvidia_wayland.json"
+ "/share/egl/egl_external_platform.d/15_nvidia_gbm.json"
+ "/share/glvnd/egl_vendor.d/10_nvidia.json"
+ "/share/vulkan/icd.d/nvidia_icd.json"
+ "/share/vulkan/implicit_layer.d/nvidia_layers.json"))))
+ (add-after 'install 'patch-elf
+ (lambda _
+ (let* ((ld.so (string-append #$(this-package-input "glibc")
+ #$(glibc-dynamic-linker)))
+ (rpath (string-join
+ (list (string-append #$output "/lib")
+ (string-append #$openssl-1.1 "/lib")
+ (string-append #$(this-package-input "egl-wayland") "/lib")
+ (string-append (ungexp (this-package-input "gcc") "lib") "/lib")
+ (string-append #$(this-package-input "glibc") "/lib")
+ (string-append #$(this-package-input "libdrm") "/lib")
+ (string-append #$(this-package-input "libglvnd") "/lib")
+ (string-append #$(this-package-input "libx11") "/lib")
+ (string-append #$(this-package-input "libxext") "/lib")
+ (string-append #$(this-package-input "openssl") "/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)))
+ (find-files #$output)))))
+ (add-before 'patch-elf 'install-commands
+ (lambda _
+ (when (string-match
+ "x86_64-linux"
+ (or #$(%current-target-system) #$(%current-system)))
+ (for-each
+ (lambda (binary)
+ (let ((bindir (string-append #$output "/bin"))
+ (manual (string-append binary ".1.gz"))
+ (mandir (string-append #$output "/share/man/man1")))
+ (install-file binary bindir)
+ (when (file-exists? manual)
+ (install-file manual mandir))))
+ '("nvidia-cuda-mps-control"
+ "nvidia-cuda-mps-server"
+ "nvidia-smi")))))
+ (add-before 'patch-elf 'relocate-libraries
+ (lambda _
+ (let* ((version #$(package-version this-package))
+ (libdir (string-append #$output "/lib"))
+ (gbmdir (string-append libdir "/gbm"))
+ (vdpaudir (string-append libdir "/vdpau"))
+ (xorgmoddir (string-append libdir "/xorg/modules"))
+ (xorgdrvdir (string-append xorgmoddir "/drivers"))
+ (xorgextdir (string-append xorgmoddir "/extensions"))
+ (move-to-dir (lambda (file dir)
+ (install-file file dir)
+ (delete-file file))))
+ (for-each
+ (lambda (file)
+ (mkdir-p gbmdir)
+ (with-directory-excursion gbmdir
+ (symlink file "nvidia-drm_gbm.so")))
+ (find-files libdir "libnvidia-allocator\\.so\\."))
+
+ (for-each
+ (cut move-to-dir <> vdpaudir)
+ (find-files libdir "libvdpau_nvidia\\.so\\."))
+
+ (for-each
+ (cut move-to-dir <> xorgdrvdir)
+ (find-files libdir "nvidia_drv\\.so$"))
+
+ (for-each
+ (lambda (file)
+ (move-to-dir file xorgextdir)
+ (with-directory-excursion xorgextdir
+ (symlink (basename file)
+ "libglxserver_nvidia.so")))
+ (find-files libdir "libglxserver_nvidia\\.so\\.")))))
+ (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)))
+ (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\\.")))))))
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (native-inputs (list patchelf))
(inputs
- `(("atk" ,atk)
- ("bash-minimal" ,bash-minimal)
- ("cairo" ,cairo)
- ("coreutils" ,coreutils)
- ("gcc:lib" ,gcc "lib")
- ("gdk-pixbuf" ,gdk-pixbuf)
- ("glib" ,glib)
- ("grep" ,grep)
- ("gtk+" ,gtk+)
- ("gtk2" ,gtk+-2)
- ("kmod" ,kmod)
- ("libc" ,glibc)
- ("libx11" ,libx11)
- ("libxext" ,libxext)
- ("linux" ,linux-lts)
- ("pango" ,pango)
- ("wayland" ,wayland)))
+ (list egl-gbm
+ egl-wayland
+ `(,gcc "lib")
+ glibc
+ libdrm
+ libglvnd-for-nvda
+ libx11
+ libxext
+ openssl
+ openssl-1.1
+ 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)))))
+ (synopsis "Proprietary NVIDIA driver (libraries)")
+ (description
+ "This package provides libraries of the proprietary NVIDIA driver. It's
+mainly used as a dependency of other packages. For user-facing purpose, use
+@code{nvda} instead.")
+ (license
+ (license:nonfree
+ (format #f "file:///share/doc/nvidia-driver-~a/LICENSE" version)))))
(define-public nvidia-libs
+ (deprecated-package "nvidia-libs" nvidia-driver))
+
+
+;;;
+;;; NVIDIA frimwares
+;;;
+
+
+(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 this-package))))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'strip))))
+ (propagated-inputs '())
+ (inputs '())
+ (native-inputs '())
+ (synopsis "Proprietary NVIDIA driver (GSP firmwares)")
+ (description
+ "This package provides firmwares for NVIDIA's GPU System Processor.
+Firmware installation can be done with @code{nvidia-service-type}, however
+whether GSP mode is enabled by default or not depends on the specific GPU
+product.
+
+To enable GSP mode manually, add @code{\"NVreg_EnableGpuFirmware=1\"} to
+@code{kernel-arguments} field of the @code{operating-system} configuration."))))
+
+
+;;;
+;;; NVIDIA kernel modules
+;;;
+
+
+(define-public nvidia-module
(package
- (name "nvidia-libs")
- (version "465.27")
- (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 "0w9ivi4z4j4hvhkimr11mgwrj09v53dy39vfdfmamrnybflgysby"))
- (method url-fetch)
- (file-name (string-append "nvidia-driver-" version "-checkout"))))
- (build-system copy-build-system)
+ (name "nvidia-module")
+ (version nvidia-version)
+ (source nvidia-source)
+ (build-system linux-module-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)))
-
- (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")))
-
- ;; ------------------------------
- ;; Create short name symbolic links
- (for-each (lambda (file)
- (let* ((short (regexp-substitute
- #f
-
- (string-match "([^/]*\\.so).*" file)
- 1))
- (major (if (or (string=? short "libEGL.so")
- (string=? short "libEGL_nvidia.so")
- (string=? short "libGLX.so")
- (string=? short "libGLX_nvidia.so"))
- "0" "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")))))
- (_ '()))))
- (supported-systems '("i686-linux" "x86_64-linux"))
- (native-inputs
- `(("patchelf" ,patchelf)
- ("perl" ,perl)
- ("python" ,python-2)
- ("which" ,which)
- ("xz" ,xz)))
- (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 #:linux linux-lts
+ #:source-directory "kernel"
+ #:tests? #f
+ #:make-flags
+ #~(list (string-append "CC=" #$(cc-for-target)))
+ #:phases
+ #~(modify-phases %standard-phases
+ (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 '()) (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 "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 (kernel modules)")
+ (description
+ "This package provides kernel modules of the proprietary NVIDIA driver.
+Module setup can be done with @code{nvidia-service-type}, to actually use these
+modules, also add @code{modprobe.blacklist=nouveau} to @code{kernel-arguments}
+field of the @code{operating-system} configuration.
+
+If the NVIDIA card is not used for displaying, or on a Wayland environment,
+add @code{nvidia_drm.modeset=1} to @code{kernel-arguments} as well.")
+ (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 "Open source NVIDIA kernel modules")
+ (description
+ "This package provides open source NVIDIA kernel modules, however
+proprietary firmware and libraries are still necessary, and these modules
+require GPU System Processor to be present (Turing or later architectures) and
+enabled (see also the description of @code{nvidia-firmware} package).
+
+Module setup can be done with @code{nvidia-service-type} (with @code{module}
+field of @code{nvidia-configuration} set to @code{nvidia-module-open}), to
+actually use these modules, also add @code{modprobe.blacklist=nouveau} to
+@code{kernel-arguments} field of the @code{operating-system} configuration.
+
+If the NVIDIA card is not used for displaying, or on a Wayland environment,
+add @code{nvidia_drm.modeset=1} to @code{kernel-arguments} as well.")
+ (license license-gnu:gpl2))))
+
+
+;;;
+;;; ‘nvidia-settings’ packages
+;;;
+
+
+(define-public nvidia-settings
+ (package
+ (name "nvidia-settings")
+ (version nvidia-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/NVIDIA/nvidia-settings")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (modules '((guix build utils)))
+ (snippet '(delete-file-recursively "src/jansson"))
+ (sha256 (base32 (nvidia-source-hash version name)))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:tests? #f ;no test suite
+ #:make-flags
+ #~(list "NV_USE_BUNDLED_LIBJANSSON=0"
+ (string-append "PREFIX=" #$output)
+ (string-append "CC=" #$(cc-for-target)))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (add-after 'unpack 'fix-application-profile-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "src/gtk+-2.x/ctkappprofile.c"
+ (("/usr") "/run/booted-system/profile"))))
+ (add-after 'install 'install-desktop-file
+ (lambda _
+ (substitute* "doc/nvidia-settings.desktop"
+ (("^Exec=.*") "Exec=nvidia-settings\n")
+ (("__NVIDIA_SETTINGS_DESKTOP_CATEGORIES__") "Settings"))
+ (install-file "doc/nvidia-settings.desktop"
+ (string-append
+ #$output "/share/applications"))
+ (install-file "doc/nvidia-settings.png"
+ (string-append
+ #$output "/share/icons/hicolor/128x128/apps"))))
+ (add-after 'install 'wrap-program
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (wrap-program (string-append out "/bin/nvidia-settings")
+ `("LD_LIBRARY_PATH" ":" prefix
+ (,(string-append out "/lib/"))))))))))
+ (native-inputs (list m4
+ pkg-config))
+ (inputs (list bash-minimal
+ dbus
+ glu
+ gtk+
+ gtk+-2
+ jansson
+ libvdpau
+ libx11
+ libxext
+ libxrandr
+ libxv
+ libxxf86vm))
+ (synopsis "Nvidia driver control panel")
+ (description
+ "This package provides Nvidia driver control panel for monitor
+configuration, creating application profiles, gpu monitoring and more.")
+ (home-page "https://github.com/NVIDIA/nvidia-settings")
+ (license license-gnu:gpl2)))
+
+
+;;;
+;;; ‘nvda’ packages
+;;;
+
+
+(define-public libglvnd-for-nvda
+ (hidden-package
+ (package
+ (inherit libglvnd)
+ (arguments
+ (substitute-keyword-arguments (package-arguments libglvnd)
+ ((#:configure-flags flags #~'())
+ #~(cons* "-Dc_link_args=-Wl,-rpath=$ORIGIN" #$flags))
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (delete 'shrink-runpath))))))))
+
+(define-public mesa-for-nvda
+ (hidden-package
+ (package
+ (inherit mesa)
+ (propagated-inputs
+ (modify-inputs (package-propagated-inputs mesa)
+ (prepend libglvnd-for-nvda)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments mesa)
+ ((#:configure-flags flags #~'())
+ #~(cons* "-Dglvnd=true" #$flags))
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-after 'install 'fix-egl-vendor-icd
+ (lambda _
+ (substitute* (string-append
+ #$output "/share/glvnd/egl_vendor.d/50_mesa.json")
+ (("libEGL_mesa\\.so\\.." all)
+ (string-append #$output "/lib/" all)))))
+ (add-after 'set-layer-path-in-manifests 'add-architecture-to-filename
+ (lambda _
+ (for-each
+ (lambda (path)
+ (let* ((out #$output)
+ (system #$(or (%current-target-system)
+ (%current-system)))
+ (dash (string-index system #\-))
+ (arch (string-take system dash))
+
+ (dot (string-index-right path #\.))
+ (base (string-take path dot))
+ (ext (string-drop path (+ 1 dot))))
+ ;; <...>/50_mesa.json -> <...>/50_mesa.x86_64.json
+ (rename-file
+ (string-append out path)
+ (string-append out base "." arch "." ext))))
+ '("/share/glvnd/egl_vendor.d/50_mesa.json"
+ "/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json"
+ "/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json")))))))))))
;; 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")
+ (version (string-pad-right
+ (package-version nvidia-driver)
+ (string-length (package-version mesa-for-nvda))
+ #\0))
(source #f)
(build-system trivial-build-system)
(arguments
- '(#:modules ((guix build union))
- #:builder (begin
- (use-modules (guix build union)
- (srfi srfi-1)
- (ice-9 regex))
- (union-build (assoc-ref %outputs "out")
- (list (assoc-ref %build-inputs "mesa") (assoc-ref %build-inputs "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)))
- #t)))
- (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
- `(("nvidia-libs" ,nvidia-libs)
- ("mesa" ,mesa)))
+ (list #:modules '((guix build union))
+ #:builder
+ #~(begin
+ (use-modules (guix build union))
+ (union-build
+ #$output
+ '#$(list (this-package-input "libglvnd")
+ (this-package-input "mesa")
+ (this-package-input "nvidia-driver"))))))
+ (native-search-paths
+ (list
+ ;; https://github.com/NVIDIA/egl-wayland/issues/39
+ (search-path-specification
+ (variable "__EGL_EXTERNAL_PLATFORM_CONFIG_DIRS")
+ (files '("share/egl/egl_external_platform.d")))
+ ;; https://gitlab.freedesktop.org/glvnd/libglvnd/-/blob/master/src/EGL/icd_enumeration.md
+ (search-path-specification
+ (variable "__EGL_VENDOR_LIBRARY_DIRS")
+ (files '("share/glvnd/egl_vendor.d")))
+ ;; See also: ‘src/gbm/main/backend.c’ in mesa source.
+ (search-path-specification
+ (variable "GBM_BACKENDS_PATH")
+ (files '("lib/gbm")))
+ (search-path-specification
+ (variable "VDPAU_DRIVER_PATH")
+ (files '("lib/vdpau"))
+ (separator #f))
+ ;; https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderLayerInterface.md
+ (search-path-specification
+ (variable "XDG_DATA_DIRS")
+ (files '("share")))))
+ (synopsis "Nonguix's user-facing NVIDIA driver package")
+ (description
+ "This package provides a drop-in replacement for @code{mesa} and is
+intended to be installed by @code{nvidia-service-type}.
+
+To actually use the NVIDIA card, replacement must be applied for individual
+packages, this can be done either by rewriting inputs with
+@code{--with-input=mesa=nvda} or grafting with @code{--with-graft=mesa=nvda}.
+For a programmatical way, the procedure @code{replace-mesa} can be used.
+
+Additionally, if the NVIDIA card is not used for displaying, environment
+variables @code{__GLX_VENDOR_LIBRARY_NAME=nvidia} and
+@code{__NV_PRIME_RENDER_OFFLOAD=1} may be set.")
+ (native-inputs '())
+ (propagated-inputs
+ (append
+ (package-propagated-inputs mesa-for-nvda)
+ (package-propagated-inputs nvidia-driver)))
+ (inputs (list mesa-for-nvda nvidia-driver))
(outputs '("out"))))
(define mesa/fake
@@ -433,3 +776,237 @@ packaged in such a way that you can use the transformation option
(define-public replace-mesa
(package-input-rewriting `((,mesa . ,mesa/fake))))
+
+
+;;;
+;;; Other packages
+;;;
+
+
+(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)))
+
+(define-public nvidia-exec
+ (package
+ (name "nvidia-exec")
+ (version "0.1.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/pedro00dk/nvidia-exec")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "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-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)))
+
+(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-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)))
+
+(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)))
+
+(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)))
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 7a7c727..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:)
@@ -38,7 +23,7 @@
(define-public playonlinux
(package
(name "playonlinux")
- (version "4.3.4")
+ (version "4.4")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -46,7 +31,7 @@
(commit version)))
(sha256
(base32
- "0xzdi6x4ksn4jiqa0z8j4rangn0aj1y7kqykan464mp2l585y76v"))))
+ "0jw43fmc298gb7ga2aldcdyrwlhki5k6hc198pl5x987x4gxfg2h"))))
(build-system python-build-system)
(arguments
`(#:python ,python-2
@@ -100,18 +85,18 @@
(string-append out "/share/playonlinux/lang/locale")))
#t)))))
(inputs
- `(("cabextract" ,cabextract)
- ("curl" ,curl)
- ("gnupg" ,gnupg)
- ("imagemagick" ,imagemagick)
- ("jq" ,jq)
- ("libx11" ,libx11)
- ("mesa" ,mesa)
- ("netcat" ,netcat)
- ("python2-wxpython" ,python2-wxpython)
- ("wget" ,wget)
- ("wine" ,wine)
- ("xrdb" ,xrdb)))
+ (list cabextract
+ curl
+ gnupg
+ imagemagick
+ jq
+ libx11
+ mesa
+ netcat
+ python-wxpython
+ wget
+ wine
+ xrdb))
(home-page "https://www.playonlinux.com/")
(synopsis "Easy installer for Windows games")
(description "PlayOnLinux is a piece of software which allows you to easily
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..1065399
--- /dev/null
+++ b/nongnu/packages/productivity.scm
@@ -0,0 +1,108 @@
+;;; 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.39.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://anytype-release.fra1.cdn.digitaloceanspaces.com/"
+ name "_" version "_amd64.deb"))
+ (file-name (string-append "anytype-" version ".deb"))
+ (sha256
+ (base32
+ "10y037qwm6k28min2sgpshrlpirc1p0zn3b4syxrrz494x5g2ivi"))))
+ (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/dist/nativeMessagingHost"
+ "resources/app.asar.unpacked/node_modules/keytar/build/Release/keytar.node"))
+ #:install-plan
+ #~'(("opt/" "/share")
+ ("usr/share/" "/share"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after '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
new file mode 100644
index 0000000..a7ed2c3
--- /dev/null
+++ b/nongnu/packages/radio.scm
@@ -0,0 +1,111 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
+
+(define-module (nongnu packages radio)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages radio)
+ #:use-module (guix build-system cmake)
+ #:use-module (guix download)
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
+ #:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (guix utils)
+ #:use-module (ice-9 match)
+ #:use-module (nonguix build-system binary)
+ #:use-module (nonguix licenses))
+
+(define-public sdrplay
+ (package
+ (name "sdrplay")
+ (version "3.07.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://www.sdrplay.com/software/"
+ "SDRplay_RSP_API-Linux-" version ".run"))
+ (sha256
+ (base32 "1a25c7rsdkcjxr7ffvx2lwj7fxdbslg9qhr8ghaq1r53rcrqgzmf"))))
+ (build-system binary-build-system)
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (inputs
+ `(("eudev" ,eudev)
+ ("gcc:lib" ,gcc "lib")))
+ (arguments
+ (let ((arch (match (or (%current-target-system)
+ (%current-system))
+ ("i686-linux" "i686")
+ ("x86_64-linux" "x86_64")
+ (_ "UNSUPPORTED")))
+ (major (version-major version))
+ (major-minor (version-major+minor version)))
+ (list
+ #:patchelf-plan
+ #~(list
+ (list (string-append #$arch "/libsdrplay_api.so." #$major-minor)
+ '("gcc:lib"))
+ (list (string-append #$arch "/sdrplay_apiService")
+ '("eudev" "gcc:lib")))
+ #:install-plan
+ #~(list '("66-mirics.rules" "lib/udev/rules.d/66-mirics.rules")
+ '("inc" "include")
+ (list (string-append #$arch "/libsdrplay_api.so." #$major-minor)
+ (string-append "lib/libsdrplay_api.so." #$major-minor))
+ (list (string-append #$arch "/sdrplay_apiService")
+ "bin/sdrplay_apiService")
+ (list "sdrplay_license.txt"
+ (string-append "share/doc/sdrplay-" #$version
+ "/license.txt")))
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'unpack
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((source-script (assoc-ref inputs "source")))
+ (invoke "sh" source-script
+ "--noexec" "--target" "source")
+ (chdir "source"))))
+ (add-after 'install 'create-library-links
+ (lambda _
+ (let* ((lib (string-append #$output "/lib/libsdrplay_api.so"))
+ (lib-major (string-append lib "." #$major))
+ (lib-major-minor (string-append lib "." #$major-minor)))
+ (symlink lib-major-minor lib-major)
+ (symlink lib-major lib))))))))
+ (home-page "https://www.sdrplay.com")
+ (synopsis "API for SDRplay RSP devices")
+ (description
+ "This package provides the library and API service for using SDRplay RSP
+devices.
+
+To install the udev rules, you must extend @code{udev-service-type} with this
+package. E.g.: @code{(udev-rules-service 'sdrplay sdrplay)}")
+ (license (nonfree (string-append "file:///share/doc/sdrplay-"
+ version
+ "/license.txt")))))
+
+(define-public soapysdrplay3
+ (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))))
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
new file mode 100644
index 0000000..4c6a4b0
--- /dev/null
+++ b/nongnu/packages/video.scm
@@ -0,0 +1,94 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; Copyright © 2022 Jelle Licht <jlicht@fsfe.org>
+
+(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.3.15")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/intel/gmmlib")
+ (commit (string-append "intel-gmmlib-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0qmdprqarqdz8z6s1av2vmd7ma5yaswxkxzdjci57fgyylqkjlri"))))
+ (build-system cmake-build-system)
+ (arguments
+ ;; Tests are run as part of the normal build step
+ '(#:tests? #f))
+ (home-page "https://github.com/intel/gmmlib")
+ (synopsis "Intel Graphics Memory Management Library")
+ (description
+ "This package provides device specific and buffer management for the
+Intel Graphics Compute Runtime for OpenCL and the Intel Media Driver
+for VAAPI.")
+ (license license:expat)))
+
+(define-public intel-media-driver
+ (package
+ (name "intel-media-driver")
+ (version "23.4.3")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/intel/media-driver")
+ (commit (string-append "intel-media-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0rgjakygfzy6d3jz38nnjvcvqyjnwz2b4vfh1ifqfcm3bw56fmr9"))))
+ (build-system cmake-build-system)
+ (inputs (list libva gmmlib))
+ (native-inputs (list pkg-config))
+ (arguments
+ (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
+ (list (search-path-specification
+ (variable "LIBVA_DRIVERS_PATH")
+ (files '("lib/dri")))))
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (home-page "https://github.com/intel/media-driver")
+ (synopsis "Intel Media Driver for VAAPI")
+ (description
+ "This package provides a VA-API user mode driver supporting hardware
+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 84ed23c..ad3bb8a 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)
@@ -28,7 +12,7 @@
(define-public zerotier
(package
(name "zerotier")
- (version "1.6.6")
+ (version "1.12.2")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -37,16 +21,17 @@
(file-name (git-file-name name version))
(sha256
(base32
- "0pi22252c21gxmjcgwmagkrnp5y1hhqrm9jkjj9pg1nlzzrlyrnm"))))
+ "0p5rpvh137gf5y9ylip7kxfl4argv34sr4wiiygvfk670rifnk57"))))
(build-system gnu-build-system)
(arguments
- `(#:phases
+ `(#:make-flags (list "ZT_SSO_SUPPORTED=0") ; We don't need SSO/OIDC
+ #:phases
(modify-phases %standard-phases
;; There is no ./configure
(delete 'configure)
(replace 'check
- (lambda _
- (invoke "make" "selftest")
+ (lambda* (#:key make-flags #:allow-other-keys)
+ (apply invoke "make" "selftest" make-flags)
(invoke "./zerotier-selftest")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
diff --git a/nongnu/packages/wasm.scm b/nongnu/packages/wasm.scm
new file mode 100644
index 0000000..fa236d1
--- /dev/null
+++ b/nongnu/packages/wasm.scm
@@ -0,0 +1,250 @@
+;;; 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)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix utils)
+ #:use-module (guix git-download)
+ #:use-module (guix build-system cmake)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system trivial)
+ #:use-module (gnu packages bash)
+ #:use-module (gnu packages llvm)
+ #:use-module (gnu packages python))
+
+(define-public wasi-libc
+ (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))))
+
+(define-public wasm32-wasi-clang-runtime
+ (package (inherit clang-runtime-15)
+ (native-inputs
+ (list clang-15
+ wasi-libc))
+ (inputs (list llvm-15))
+ (arguments
+ (list
+ #:build-type "Release"
+ #:tests? #f
+ ;; Stripping binaries breaks wasm linking, resulting in the following
+ ;; error: "archive has no index; run ranlib to add one".
+ #:strip-binaries? #f
+ #:configure-flags
+ #~(list "-DCMAKE_C_COMPILER=clang"
+ "-DCMAKE_C_COMPILER_TARGET=wasm32-wasi"
+ (string-append
+ "-DCMAKE_SYSROOT=" #$wasi-libc "/wasm32-wasi")
+ (string-append
+ "-DCMAKE_C_FLAGS=-I " #$wasi-libc "/wasm32-wasi/include")
+
+ "-DCOMPILER_RT_OS_DIR=wasi"
+
+ "-DCOMPILER_RT_BAREMETAL_BUILD=On"
+ "-DCOMPILER_RT_DEFAULT_TARGET_ONLY=On"
+
+ ;; WASM only needs libclang_rt.builtins-wasm32.a from
+ ;; compiler-rt.
+ "../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
+;; clang with a specific clang-runtime package. It would be good to improve
+;; 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-15 wasm32-wasi-clang-runtime)))
+ (package (inherit base)
+ (name "wasm32-wasi-clang")
+ (inputs
+ (modify-inputs (package-inputs base)
+ (prepend wasi-libc)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments base)
+ ((#:configure-flags flags)
+ #~(list "-DCLANG_INCLUDE_TESTS=True"
+ ;; Use a sane default include directory.
+ (string-append "-DC_INCLUDE_DIRS="
+ #$wasi-libc
+ "/wasm32-wasi/include")))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (delete 'symlink-cfi_ignorelist))))))))
+
+(define-public wasm32-wasi-libcxx
+ (package
+ (name "wasm32-wasi-libcxx")
+ (version (package-version llvm-15))
+ (source (llvm-monorepo version))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:configure-flags
+ #~(list (string-append "-S ../source/runtimes")
+
+ "-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi"
+
+ (string-append
+ "-DCMAKE_SYSROOT=" #$wasi-libc "/wasm32-wasi")
+
+ (string-append
+ "-DCMAKE_INCLUDE_PATH=" #$wasi-libc "/wasm32-wasi/include")
+
+ (string-append
+ "-DCMAKE_STAGING_PREFIX=" #$output "/wasm32-wasi")
+
+ "-DCMAKE_C_COMPILER=clang"
+ "-DCMAKE_C_COMPILER_WORKS=ON"
+ "-DCMAKE_CXX_COMPILER=clang++"
+ "-DCMAKE_CXX_COMPILER_WORKS=ON"
+ "-DCMAKE_C_COMPILER_TARGET=wasm32-wasi"
+ "-DCMAKE_CXX_COMPILER_TARGET=wasm32-wasi"
+
+ "-DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi"
+
+ "-DLIBCXX_ENABLE_EXCEPTIONS=OFF"
+ "-DLIBCXX_ENABLE_SHARED=OFF"
+ "-DLIBCXX_ENABLE_THREADS=OFF"
+ "-DLIBCXX_ENABLE_FILESYSTEM=OFF"
+
+ "-DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi"
+
+ "-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF"
+ "-DLIBCXXABI_ENABLE_SHARED=OFF"
+ "-DLIBCXXABI_ENABLE_THREADS=OFF"
+ "-DLIBCXXABI_ENABLE_FILESYSTEM=OFF")
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'set-paths 'adjust-CPLUS_INCLUDE_PATH
+ (lambda _
+ (setenv "CPLUS_INCLUDE_PATH"
+ (string-append #$wasi-libc "/wasm32-wasi/include:"
+ (getenv "CPLUS_INCLUDE_PATH"))))))))
+ (native-inputs
+ (list lld
+ python
+ wasm32-wasi-clang))
+ (inputs
+ (list wasi-libc))
+ (home-page "https://libcxx.llvm.org")
+ (synopsis "C++ standard library for WebAssembly")
+ (description
+ "This package provides an implementation of the C++ standard library for
+use with Clang, targeting C++11, C++14 and above. This package targets
+WebAssembly with WASI.")
+ (license license:expat)))
+
+(define-public wasm32-wasi-clang-toolchain
+ (package
+ (name "wasm32-wasi-clang-toolchain")
+ (version (package-version wasm32-wasi-clang))
+ (source #f)
+ (build-system trivial-build-system)
+ (arguments
+ (list
+ #:builder
+ (with-imported-modules '((guix build union)
+ (guix build utils))
+ #~(begin
+ (use-modules (guix build union)
+ (guix build utils))
+ (union-build #$output
+ (list #$wasm32-wasi-clang-runtime
+ #$wasi-libc
+ #$wasm32-wasi-libcxx))
+ (mkdir-p (string-append #$output "/bin"))
+
+ ;; We provide clang and clang++ via a wrapped program that sets
+ ;; include paths correctly so that it does not include paths from
+ ;; the host.
+
+ ;; FIXME: Review how we can provide better support for
+ ;; cross-compiling with clang in Guix, maybe adding support for
+ ;; the CROSS_C_INCLUDE_PATH and CROSS_CPLUS_INCLUDE_PATH
+ ;; environment variables like GCC.
+
+ (for-each
+ (lambda (bin)
+ (symlink (string-append #$wasm32-wasi-clang bin)
+ (string-append #$output bin))
+ (wrap-program (string-append #$output bin)
+ #:sh (string-append #$bash-minimal "/bin/bash")
+ `("C_INCLUDE_PATH" ":" =
+ (,(string-append #$output "/wasm32-wasi/include")))
+ `("CPLUS_INCLUDE_PATH" ":" =
+ ;; Make sure inclure/c++/v1 comes first for #include_next
+ ;; to work.
+ (,(string-append #$output "/wasm32-wasi/include/c++/v1")
+ ,(string-append #$output "/wasm32-wasi/include")))))
+ '("/bin/clang" "/bin/clang++"))
+
+ (symlink (string-append #$lld "/bin/wasm-ld")
+ (string-append #$output "/bin/wasm-ld"))))))
+ (inputs
+ (list bash-minimal
+ lld
+ wasi-libc
+ wasm32-wasi-clang
+ wasm32-wasi-clang-runtime
+ wasm32-wasi-libcxx))
+ (license (cons
+ (package-license wasm32-wasi-clang)
+ (package-license wasi-libc)))
+ (home-page "https://clang.llvm.org")
+ (synopsis "Complete Clang toolchain for C/C++ development, for WebAssembly.")
+ (description "This package provides a complete Clang toolchain for C/C++
+development targeting WebAssembly with WASI. This includes Clang, as well as
+libc, libc++ and wasm-ld.")))
diff --git a/nongnu/packages/wine.scm b/nongnu/packages/wine.scm
index d128119..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 "20210206")
+ (version "20230212")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -45,7 +30,7 @@
(file-name (git-file-name name version))
(sha256
(base32
- "0x2ykd6krk0fric45yl4gcc8cdv6j206l62rc9klw0rxfv12hz5n"))))
+ "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.9")
+ (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
- "1vd64525c6qwvxhdsqp7icbf7zsfdcyj125p0hm1k1rqg3w6hf23"))))
+ "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..81a5d5f
--- /dev/null
+++ b/nongnu/services/nvidia.scm
@@ -0,0 +1,64 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
+;;; Copyright © 2022, 2024 Hilton Chain <hako@ultrarare.space>
+
+(define-module (nongnu services nvidia)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #: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 (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?
+ (driver nvidia-configuration-driver
+ (default nvda)) ; file-like
+ (firmware nvidia-configuration-firmware
+ (default nvidia-firmware)) ; file-like
+ (module nvidia-configuration-module
+ (default nvidia-module))) ; file-like
+
+(define (nvidia-shepherd-service config)
+ (let ((nvidia-driver (nvidia-configuration-driver config))
+ (nvidia-smi (file-append nvidia-driver "/bin/nvidia-smi")))
+ (list (shepherd-service
+ (documentation "Prepare system environment for NVIDIA driver.")
+ (provision '(nvidia))
+ (requirement '(udev))
+ (one-shot? #t)
+ (modules '(((guix build utils) #:select (invoke/quiet))
+ ((rnrs io ports) #:select (get-line))))
+ (start
+ #~(lambda _
+ (when (file-exists? "/proc/driver/nvidia")
+ (let ((modprobe (call-with-input-file
+ "/proc/sys/kernel/modprobe" get-line)))
+ (false-if-exception
+ (begin
+ (invoke/quiet modprobe "--" "nvidia_uvm")
+ (invoke/quiet #$nvidia-smi)))))))))))
+
+(define nvidia-service-type
+ (service-type
+ (name 'nvidia)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ nvidia-shepherd-service)
+ (service-extension profile-service-type
+ (compose list nvidia-configuration-driver))
+ (service-extension udev-service-type
+ (compose list nvidia-configuration-driver))
+ (service-extension firmware-service-type
+ (compose list nvidia-configuration-firmware))
+ (service-extension linux-loadable-module-service-type
+ (compose list nvidia-configuration-module))))
+ (default-value (nvidia-configuration))
+ (description "Prepare system environment for NVIDIA driver.")))
diff --git a/nongnu/services/vpn.scm b/nongnu/services/vpn.scm
index b76cf03..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)
@@ -64,6 +49,7 @@
(define zerotier-one-service-type
(service-type (name 'zerotier-one)
+ (description "ZeroTier One daemon.")
(extensions
(list (service-extension shepherd-root-service-type
zerotier-one-shepherd-service)))))
diff --git a/nongnu/system/install.scm b/nongnu/system/install.scm
index 275bcaa..508621e 100644
--- a/nongnu/system/install.scm
+++ b/nongnu/system/install.scm
@@ -1,32 +1,71 @@
+;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
-;;;
-;;; 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 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2024 Hilton Chain <hako@ultrarare.space>
;; Generate a bootable image (e.g. for USB sticks, etc.) with:
-;; $ guix system disk-image nongnu/system/install.scm
+;; $ guix system image --image-type=iso9660 nongnu/system/install.scm
(define-module (nongnu system install)
+ #:use-module (guix channels)
+ #:use-module (guix gexp)
+ #:use-module (gnu packages curl)
+ #:use-module (gnu packages package-management)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages vim)
+ #:use-module (gnu packages zile)
+ #:use-module (gnu services)
+ #:use-module (gnu services base)
#:use-module (gnu system)
#:use-module (gnu system install)
#:use-module (nongnu packages linux)
#:export (installation-os-nonfree))
+;; https://substitutes.nonguix.org/signing-key.pub
+(define %signing-key
+ (plain-file "nonguix.pub" "\
+(public-key
+ (ecc
+ (curve Ed25519)
+ (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)))"))
+
+(define %channels
+ (cons* (channel
+ (name 'nonguix)
+ (url "https://gitlab.com/nonguix/nonguix")
+ ;; Enable signature verification:
+ (introduction
+ (make-channel-introduction
+ "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
+ (openpgp-fingerprint
+ "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
+ %default-channels))
+
(define installation-os-nonfree
(operating-system
(inherit installation-os)
(kernel linux)
- (firmware (list linux-firmware))))
+ (firmware (list linux-firmware))
+ (packages
+ (append
+ (list curl
+ git
+ neovim
+ zile)
+ (operating-system-packages installation-os)))
+ (services
+ (modify-services (operating-system-user-services installation-os)
+ (guix-service-type
+ config => (guix-configuration
+ (inherit config)
+ (guix (guix-for-channels %channels))
+ (authorized-keys
+ (cons* %signing-key
+ %default-authorized-guix-keys))
+ (substitute-urls
+ `(,@%default-substitute-urls
+ "https://substitutes.nonguix.org"))
+ (channels %channels)))))))
installation-os-nonfree
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 6a676ae..e5bbc48 100644
--- a/nonguix/build/binary-build-system.scm
+++ b/nonguix/build/binary-build-system.scm
@@ -1,20 +1,7 @@
-;;; 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/>.
+;;; Copyright © 2022 Attila Lendvai <attila@lendvai.name>
+;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
(define-module (nonguix build binary-build-system)
#:use-module ((guix build gnu-build-system) #:prefix gnu:)
@@ -97,6 +84,19 @@ The PATCHELF-PLAN elements are lists of:
Both executables and dynamic libraries are accepted.
The inputs are optional when the file is an executable."
(define (binary-patch binary interpreter runpath)
+
+ (define* (maybe-make-rpath entries name #:optional (extra-path "/lib"))
+ (let ((entry (assoc-ref entries name)))
+ (if entry
+ (string-append entry extra-path)
+ #f)))
+
+ (define* (make-rpath name #:optional (extra-path "/lib"))
+ (or (maybe-make-rpath outputs name extra-path)
+ (maybe-make-rpath inputs name extra-path)
+ (error (format #f "`~a' not found among the inputs nor the outputs."
+ name))))
+
(unless (string-contains binary ".so")
;; Use `system*' and not `invoke' since this may raise an error if
;; library does not end with .so.
@@ -104,13 +104,11 @@ The inputs are optional when the file is an executable."
(when runpath
(let ((rpath (string-join
(map
- (lambda (input-or-output)
- (cond
- ((assoc-ref outputs input-or-output)
- (string-append (assoc-ref outputs input-or-output) "/lib"))
- ((assoc-ref inputs input-or-output)
- (string-append (assoc-ref inputs input-or-output) "/lib"))
- (else (error (format #f "`~a' not found among the inputs nor the outputs." input-or-output)))))
+ (match-lambda
+ ((name extra-path)
+ (make-rpath name extra-path))
+ (name
+ (make-rpath name)))
runpath)
":")))
(invoke "patchelf" "--set-rpath" rpath binary)))
@@ -136,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..8429742
--- /dev/null
+++ b/nonguix/build/chromium-binary-build-system.scm
@@ -0,0 +1,74 @@
+;;; 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 (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
+ (search-path-as-list '("lib") wrap-inputs))
+ (bin-directories
+ (search-path-as-list
+ '("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..4de2ac2 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.
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 e25d897..a6f62fc 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 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 © 2021, 2022 John Kehayias <john.kehayias@protonmail.com>
+;;; 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,53 +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 ((nonguix licenses) #:prefix license:)
- #:use-module (guix gexp)
- #: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 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 libbsd)
- #:use-module (gnu packages libusb)
- #:use-module (gnu packages linux)
- #:use-module (gnu packages llvm)
- #:use-module (nongnu packages nvidia)
- #:use-module (gnu packages pciutils)
#:use-module (gnu packages pulseaudio)
- #:use-module (gnu packages python)
- #: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)
@@ -97,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 '()))
@@ -110,116 +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))))))))
-
(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.
- ("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)
- ("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)
- ("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.
-
(define* (fhs-union inputs #:key (name "fhs-union") (version "0.0") (system "x86_64-linux"))
"Create a package housing the union of inputs."
(package
@@ -264,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
@@ -339,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"))
@@ -368,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)
@@ -390,19 +260,47 @@ in a sandboxed FHS environment."
(home (getenv "HOME"))
(sandbox-home (or (getenv "GUIX_SANDBOX_HOME")
(string-append home "/" #$(ngc-sandbox-home container))))
+ (wayland-display (or (getenv "WAYLAND_DISPLAY")
+ "wayland-0"))
(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$"
+ "^LIBVA_DRIVERS_PATH$" ; For VA-API drivers.
+ "^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.
+ "^TZ" ; For setting time zone.
"^XAUTHORITY$"
;; Matching all ^XDG_ vars causes issues
;; discussed in 80decf05.
+ "^XDG_CURRENT_DESKTOP$"
"^XDG_DATA_HOME$"
"^XDG_RUNTIME_DIR$"
+ "^XDG_SESSION_(CLASS|TYPE)$"
+ "^(WAYLAND_)?DISPLAY$"
+ #$@(ngc-preserved-env container) ; Environment from container.
;; The following are useful for debugging.
"^CAPSULE_DEBUG$"
"^G_MESSAGES_DEBUG$"
@@ -411,15 +309,23 @@ in a sandboxed FHS environment."
(expose `("/dev/bus/usb" ; Needed for libusb.
"/dev/dri"
"/dev/input" ; Needed for controller input.
+ "/dev/uinput" ; Needed for Steam Input.
,@(exists-> "/dev/nvidia0") ; needed for nvidia proprietary driver
,@(exists-> "/dev/nvidiactl")
,@(exists-> "/dev/nvidia-modeset")
,@(exists-> "/etc/machine-id")
+ "/etc/localtime" ; Needed for correct time zone.
+ "/etc/os-release" ; Needed for distro info.
+ "/sys/class/drm" ; Needed for hw monitoring like MangoHud.
+ "/sys/class/hwmon" ; Needed for hw monitoring like MangoHud.
"/sys/class/hidraw" ; Needed for devices like the Valve Index.
"/sys/class/input" ; Needed for controller input.
+ ,@(exists-> "/sys/class/power_supply") ; Needed for power monitoring like MangoHud.
+ ,@(exists-> "/sys/class/powercap") ; Needed for power monitoring like MangoHud.
"/sys/dev"
"/sys/devices"
- ,@(exists-> "/var/run/dbus")))
+ ,@(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:
@@ -433,16 +339,25 @@ 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-> (string-append xdg-runtime "/" wayland-display))
+ ,@(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 VA-API drivers are searched for in mesa's store path,
+ ;; so set this path to where the drivers will actually be located in
+ ;; the container.
+ (setenv "LIBVA_DRIVERS_PATH" "/lib64/dri:/lib/dri")
(format #t "\n* Launching ~a in sandbox: ~a.\n\n"
#$(package-name (ngc-wrap-package container)) sandbox-home)
(when DEBUG
@@ -459,7 +374,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)))))))
@@ -508,7 +425,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))
@@ -534,18 +452,19 @@ 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
(ngc-internal-name container)
(with-imported-modules
- `((guix build utils)
- (ice-9 getopt-long))
+ `((guix build utils))
#~(begin
(use-modules (guix build utils)
- (ice-9 getopt-long))
+ (ice-9 getopt-long)
+ (srfi srfi-1)
+ (srfi srfi-26))
(define (path->str path)
(if (list? path)
(string-join path "/")
@@ -555,9 +474,13 @@ application."
(dest (path->str (cdr pair))))
(unless (file-exists? dest)
(symlink target dest))))
- (define (icd-symlink file)
+ (define (file-symlink file dir)
+ (mkdir-p dir)
(new-symlink
- `(,file . ("/usr/share/vulkan/icd.d" ,(basename file)))))
+ `(,file . (,dir ,(basename file)))))
+ ;; Use stat to follow links from packages like MangoHud.
+ (define (get-files dir)
+ (find-files (path->str dir) #:stat stat))
(define fhs-option-spec
'((asound32 (value #f))))
(let* ((guix-env (getenv "GUIX_ENVIRONMENT"))
@@ -567,9 +490,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
@@ -577,7 +500,8 @@ application."
'("/run/current-system/profile/etc"
"/run/current-system/profile/share"
"/sbin"
- "/usr/share/vulkan/icd.d"))
+ "/usr/lib"
+ "/usr/share"))
(for-each
new-symlink
`((,ld.so.cache . "/etc/ld.so.cache")
@@ -591,23 +515,63 @@ 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") . "/usr/share/fonts")
((,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")))
+ ((,union64 "etc/fonts") . "/etc/fonts")))
+ (for-each
+ (cut file-symlink <> "/usr/share/egl/egl_external_platform.d")
+ (append-map
+ get-files
+ `((,union32 "share/egl/egl_external_platform.d")
+ (,union64 "share/egl/egl_external_platform.d"))))
+ (for-each
+ (cut file-symlink <> "/usr/share/glvnd/egl_vendor.d")
+ (append-map
+ get-files
+ `((,union32 "share/glvnd/egl_vendor.d")
+ (,union64 "share/glvnd/egl_vendor.d"))))
+ (for-each
+ (cut file-symlink <> "/usr/share/vulkan/icd.d")
+ (append-map
+ get-files
+ `((,union32 "share/vulkan/icd.d")
+ (,union64 "share/vulkan/icd.d"))))
(for-each
- icd-symlink
- `(,@(find-files (string-append union32 "/share/vulkan/icd.d")
- #:directories? #t)
- ,@(find-files (string-append union64 "/share/vulkan/icd.d")
- #:directories? #t)))
- ;; TODO: Is this the right place for this?
+ (cut file-symlink <> "/usr/share/vulkan/explicit_layer.d")
+ (append-map
+ get-files
+ `((,union64 "share/vulkan/explicit_layer.d")
+ (,union32 "share/vulkan/explicit_layer.d"))))
+ (for-each
+ (cut file-symlink <> "/usr/share/vulkan/implicit_layer.d")
+ (append-map
+ get-files
+ `((,union32 "share/vulkan/implicit_layer.d")
+ (,union64 "share/vulkan/implicit_layer.d")
+ ;; For MangoHud implicit layers.
+ (,guix-env "share/vulkan/implicit_layer.d"))))
+ ;; 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:/lib64/vdpau:/lib/vdpau")
;; Process FHS-specific command line options.
(let* ((options (getopt-long (or fhs-args '("")) fhs-option-spec))
@@ -615,9 +579,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 {
@@ -642,54 +610,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."))))
+ (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)