Compare commits

..

1 Commits

Author SHA1 Message Date
John Kehayias
0e902d14e4
nongnu: Add discord.
* nongnu/packages/messaging.scm (discord): New variable.
2022-10-14 14:51:58 -04:00
82 changed files with 3770 additions and 7086 deletions

View File

@ -1,5 +1,3 @@
;;; 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
@ -10,17 +8,11 @@
;; For use with 'bug-reference-prog-mode'.
(bug-reference-url-format . "https://gitlab.com/nonguix/nonguix/issues/%s")
(bug-reference-bug-regexp
. "\\(#\\([0-9]+\\)\\)")
(geiser-insert-actual-lambda . nil)))
. "#[0-9]+")))
(c-mode . ((c-file-style . "gnu")))
(scheme-mode
.
;; 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)
((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))

View File

@ -1,4 +1,3 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;; This is the list of OpenPGP keys currently authorized to sign commits in
;; this repository.
@ -9,9 +8,6 @@
(name "ajgrf"))
("50F3 3E2E 5B0C 3D90 0424 ABE8 9BDC F497 A4BB CC7F"
(name "ambrevar"))
(;; primary: "220F 98D9 5E86 204C 0036 DA7B 6DEC 4360 408B 4185"
"F4C2 D1DF 3FDE EA63 D1D3 0776 ACC6 6D09 CA52 8292"
(name "hako"))
("5DA3 74E1 EADB DC7C 772D 5E65 5E76 B1AD 0FC2 2F93"
(name "ison"))
(;; primary: "1BA4 08C5 8BF2 0EA7 3179 635A 865D C0A3 DED9 B5D0"
@ -21,8 +17,7 @@
(name "jonsger"))
("D319 C7A9 8F2C 3A11 D9C0 0E30 F369 0CBE 3152 EF58"
(name "pineapples"))
(;; primary: "7E9F 5BF6 1680 4367 127B 7A87 F9E6 9FB8 5A75 54F1"
"A420 7B56 C255 109F 2CB3 157E 4990 97AE 5EA8 15D9"
("A420 7B56 C255 109F 2CB3 157E 4990 97AE 5EA8 15D9"
(name "podiki"))
("1EFB 0909 1F17 D28C CBF9 B13A 53D4 57B2 D636 EE82"
(name "roptat"))))

View File

@ -1,4 +1,3 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;; -*- mode: scheme; -*-
(channel

21
NEWS
View File

@ -1,21 +0,0 @@
-*- 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.

View File

@ -94,20 +94,19 @@ your configuration.
** Installation image
For some hardware the official Guix installation image won't do
(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]] (see below for important
note if you use the 1.4.0 release or those created prior to April 2024). Or,
you can generate an installation image from a local checkout of this
repository, at a more recent commit, with the following command:
(e.g. unsupported wifi). You can generate an installation image running the
nonfree Linux kernel and nonfree firmware with the following command:
#+begin_src sh
guix system image --image-type=iso9660 /path/to/this/channel/nongnu/system/install.scm
#+end_src
Like the official Guix installation image, this will produce a read-only image
with any changes made stored in memory. Alternatively, a writable image can
be created with the following command:
with any changes made stored in memory. As indicated below, you will need to
run ~guix pull~ to download the Nonguix package descriptions, so will need
enough memory to hold the cached channel code which can be several hundred
megabytes. As an alternative, you can create a writable image with the
following command:
#+begin_src sh
guix system image --image-size=7.2GiB /path/to/this/channel/nongnu/system/install.scm
@ -124,14 +123,11 @@ Either type of image can be written to a USB thumbdrive with:
dd if=/path/to/disk-image of=/dev/sdb bs=4M status=progress oflag=sync
#+END_SRC
*** Important note for 1.4.0
The installation media for 1.4.0 or those produced manually before commit
[[https://gitlab.com/nonguix/nonguix/-/commit/80b273e86a19ceaee6d9b6650ed56e853409a799#note_2075084624][80b273e8]] (April 2024) do not automatically configure your channels
specification. You need to add Nonguix "manually" into ~/etc/guix/channels.scm~
and then run ~guix pull~ to make Guix aware of Nonguix scheme libraries. This
will require enough memory to hold the cached channel code which can be
several hundred megabytes. Below is Guile scheme code to include Nonguix in
the channel specification.
The installation media produced by the above method does not automatically
configure your channels specification. You need to add Nonguix "manually"
into ~/etc/guix/channels.scm~ and then run ~guix pull~ to make Guix aware of
Nonguix scheme libraries. Below is Guile scheme code to include Nonguix in the
channel specification.
#+BEGIN_SRC scheme
(use-modules (ice-9 pretty-print))
@ -177,19 +173,18 @@ 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 and blacklist conflicting kernel modules:
to load that module on boot, blacklist conflicting kernel modules, and while not
required, it is recommended to stay with Linux LTS releases:
#+BEGIN_SRC scheme
(use-modules (nongnu packages linux))
(operating-system
(kernel linux)
(kernel linux-lts)
;; Blacklist conflicting kernel modules.
(kernel-arguments '("modprobe.blacklist=b43,b43legacy,ssb,bcm43xx,brcm80211,brcmfmac,brcmsmac,bcma"))
(kernel-loadable-modules (list broadcom-sta))
@ -198,98 +193,6 @@ to load that module on boot and blacklist conflicting kernel modules:
...)
#+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]].
@ -329,9 +232,6 @@ sudo guix archive --authorize < signing-key.pub
sudo guix system reconfigure /etc/config.scm --substitute-urls='https://ci.guix.gnu.org https://bordeaux.guix.gnu.org https://substitutes.nonguix.org'
#+END_SRC
The [[https://cuirass.nonguix.org/][Nonguix Cuirass instance]] can be useful when investigating substitution
failures.
Check out the [[https://guix.gnu.org/manual/en/html_node/Substitutes.html][chapter on substitutes]]
in the Guix manual for more details.

View File

@ -1,121 +0,0 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
;;; This file is not part of GNU Guix but requires this naming scheme
;;; so that the %nvidia-updater is properly read when using
;;; `guix refresh -L$(pwd) nvidia-driver' in nonguix root.
(define-module (guix import nvidia)
#:use-module (web client)
#:use-module (sxml match)
#:use-module (sxml simple)
#:use-module (guix memoization)
#:use-module (guix packages)
#:use-module (guix upstream)
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-71)
#:export (%nvidia-updater))
(define nvidia-latest-url "https://www.nvidia.com/en-us/drivers/unix/")
(define (archive->guix-arch system)
(match system
("https://www.nvidia.com/object/linux-amd64-display-archive.html"
"x86_64-linux")
("https://www.nvidia.com/en-us/drivers/unix/linux-aarch64-archive/"
"aarch64-linux")
(_ #f)))
(define (archive? cand)
(or (string= cand (string-append nvidia-latest-url "linux-aarch64-archive/"))
(and (string-prefix? "https://www.nvidia.com/object/" cand)
(string-suffix? "-archive.html" cand))))
(define nvidia-versions
(memoize
(lambda _
(let* ((response content (http-get nvidia-latest-url))
(match-str (string-match "<div id=\"rightContent\".*</div>"
content))
(greedy-right-content (match:substring match-str))
(match-str (string-match "</div>" greedy-right-content))
(right-content
(string-append (match:prefix match-str) "</div>"))
;; xml->sxml is not flexible enough for html.
;; For instance, <br> tags don't have closing </br>.
;; This trick preprocesses html to extract all <a> tags in
;; a <body> wrapper, which sxml-match can handle well.
(xml (xml->sxml
(string-append
"<body><"
(string-join
(filter (cute string-prefix? "a " <>)
(string-split right-content #\<))
"</a><")
"</a></body>")
#:trim-whitespace? #t))
(link-alist
(sxml-match
xml
((*TOP*
(body
(a (@ (href ,url)) ,version) ...))
(fold acons
'()
(list (or (string= version "Archive")
(string-trim version))
...)
(list (if (archive? url)
(archive->guix-arch url)
url)
...)))))
(system #f)
(versions
(fold
(lambda (el rest)
(match el
(`(#t . ,s)
(set! system s)
rest)
(`(,version . ,address)
;; aarch64 seems to follow the same driver versions than x86_64
;; KISS: use only an alist of versions
;; go for an alist of alists insted if they diverge
(if (and (string? system) (string= system "x86_64-linux"))
(cons version rest)
rest))
(_ rest)))
'()
link-alist)))
(fold acons '() (list "main" "latest" "beta") (take versions 3))))))
(define* (latest-release package #:key (version #f))
"Return an <upstream-source> for the latest-release of PACKAGE."
(let* ((name (package-name package))
(kind (match name
("nvidia-driver" "main")
("nvidia-driver-beta" "beta")))
(version (or version (assoc-ref (nvidia-versions) kind))))
(upstream-source
(package name)
(version version)
(urls (list (string-append
"https://us.download.nvidia.com/XFree86/Linux-x86_64/"
version "/NVIDIA-Linux-x86_64-" version ".run"))))))
(define (nvidia-package? package)
"Return true if PACKAGE is Nvidia."
(member (package-name package)
(list "nvidia-driver" "nvidia-driver-beta")))
(define %nvidia-updater
(upstream-updater
(name 'nvidia)
(description "Updater for Nvidia packages")
(pred nvidia-package?)
(import latest-release)))
;; nvidia.scm ends here.

View File

@ -1,6 +1,4 @@
;;; 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
@ -9,68 +7,6 @@
(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

View File

@ -1,5 +1,17 @@
;;; 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)

View File

@ -1,66 +0,0 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2025 Maxim Cournoyer <maxim.cournoyer@gmail.com>
(define-module (nongnu packages)
#:use-module (gnu packages)
#:use-module (guix diagnostics)
#:use-module (guix i18n)
#:use-module (ice-9 match)
#:use-module (srfi srfi-34)
#:replace (%patch-path
search-patch)
#:export (nongnu-patches))
;;; Commentary:
;;;
;;; This module refines the default value of some parameters from (gnu
;;; packages) and the syntax/procedures using those. This allows
;;; 'search-paths' and friends to work without any user intervention.
;;;
;;; Code:
(define %nongnu-root-directory
;; This is like %distro-root-directory from (gnu packages), with adjusted
;; paths.
(letrec-syntax ((dirname* (syntax-rules ()
((_ file)
(dirname file))
((_ file head tail ...)
(dirname (dirname* file tail ...)))))
(try (syntax-rules ()
((_ (file things ...) rest ...)
(match (search-path %load-path file)
(#f
(try rest ...))
(absolute
(dirname* absolute things ...))))
((_)
#f))))
(try ("nongnu/packages/firmware.scm" nongnu/ packages/)
("nongnu/ci.scm" nongnu/))))
(define %patch-path
;; Define it after '%package-module-path' so that '%load-path' contains user
;; directories, allowing patches in $GUIX_PACKAGE_PATH to be found.
(make-parameter
(map (lambda (directory)
(if (string=? directory %nongnu-root-directory)
(string-append directory "/nongnu/packages/patches")
directory))
%load-path)))
;;; XXX: The following must be redefined to make use of the overridden
;;; %patch-path parameter above.
(define (search-patch file-name)
"Search the patch FILE-NAME. Raise an error if not found."
(or (search-path (%patch-path) file-name)
(raise (formatted-message (G_ "~a: patch not found")
file-name))))
;;; XXX: `search-patches' being syntax, it can't be overridden by the module
;;; system, or so it seems, so we simply rename it.
(define-syntax-rule (nongnu-patches file-name ...)
"Return the list of absolute file names corresponding to each
FILE-NAME found in %PATCH-PATH."
(list (search-patch file-name) ...))

View File

@ -1,6 +1,21 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)
@ -21,20 +36,20 @@
(define-public anydesk
(package
(name "anydesk")
(version "6.3.2-1")
(version "6.1.1")
(source (origin
(method url-fetch)
(uri (string-append "https://download.anydesk.com/linux/anydesk_"
version "_amd64.deb"))
(uri (string-append "https://download.anydesk.com/linux/anydesk-"
version "-amd64.tar.gz"))
(sha256
(base32
"13b5ab4a889vz39d36f45mhv3mlaxb305wsh3plk3dbjcrkkkirb"))))
"1ai58fsivb8al1279bayl800qavy0kfj40rjhf87g902ap3p4bhh"))))
(build-system binary-build-system)
(arguments
`(#:validate-runpath? #f
#:strip-binaries? #f ;; For some reason it breaks the program
#:patchelf-plan
`(("usr/bin/anydesk" ("atk"
`(("anydesk" ("atk"
"cairo"
"fontconfig"
"freetype"
@ -66,29 +81,17 @@
"polkit-gnome"
"pulseaudio")))
#:install-plan
`(("usr/bin/anydesk" "/bin/")
("usr/share/polkit-1/actions/com.anydesk.anydesk.policy" "/etc/polkit-1/actions/")
("usr/share/icons" "/share/icons/"))
`(("anydesk" "/bin/")
("polkit-1/com.anydesk.anydesk.policy" "/etc/polkit-1/actions/")
("icons/" "/share/icons/"))
#:phases
(modify-phases %standard-phases
(replace 'binary-unpack
(lambda* (#: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")
(invoke "ar" "x" binary-file)
(invoke "tar" "xvf" "data.tar.gz")
(invoke "rm" "-rfv" "control.tar.gz"
"data.tar.gz"
binary-file
"debian-binary")))))
(replace 'unpack
(lambda* (#:key inputs #:allow-other-keys)
(invoke "tar" "-xvzf" (assoc-ref inputs "source") "--strip-components" "1")))
(add-after 'wrap-program 'install-desktop-entry
(lambda* (#:key outputs #:allow-other-keys)
(let* ((desktop-file "usr/share/applications/anydesk.desktop")
(let* ((desktop-file "anydesk.desktop")
(out (assoc-ref outputs "out"))
(applications (string-append out "/share/applications")))
(substitute* desktop-file

View File

@ -1,43 +0,0 @@
;;; 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"))))

View File

@ -1,5 +1,17 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2021-2022 Petr Hodina <phodina@protonmail.com>
;;;
;;; This program is free software: you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <https://www.gnu.org/licenses/>.
(define-module (nongnu packages cad)
#:use-module (guix packages)
@ -146,7 +158,7 @@
openlibm
pulseaudio
qtbase-5
qtserialport-5
qtserialport
qtmultimedia-5
zlib))
(synopsis "Layout, editing, and control software for your laser cutter")

View File

@ -1,153 +0,0 @@
;;; 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
gtk
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" "131.0.6778.108" "0b8a3dmn7n4kyjzyirxcy6xihnasmp3rcy2ly4zh7vp7r5l6lkqd"))
(define-public google-chrome-beta
(make-google-chrome "beta" "132.0.6834.32" "0ncjyg3vxsjspb0i1nsflcry9sfsffnqiwa2y7cgh46xamdq6f2c"))
(define-public google-chrome-unstable
(make-google-chrome "unstable" "133.0.6847.2" "1z15maqs1g8lhi7dm9hn4r272nl0g967a11igmw2sj14zl3n9j6g"))

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Pierre Neidhardt <mail@ambrevar.xyz>
;;;
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (nongnu packages chromium)
#:use-module ((guix licenses) #:prefix license:)
@ -26,15 +41,15 @@
#:use-module (srfi srfi-1))
(define-public chromium-embedded-framework
(let ((git-revision "5053a95")
(chromium-version "117.0.5938.150")
(let ((git-revision "d0bbcbb")
(chromium-version "103.0.5060.114")
(arch (match (or (%current-target-system) (%current-system))
("aarch64-linux" "linuxarm64")
("armhf-linux" "linuxarm")
(_ "linux64"))))
(package
(name "chromium-embedded-framework")
(version "117.2.4")
(version "103.0.9")
(source (origin
(method url-fetch)
(uri (string-append
@ -45,7 +60,7 @@
"_" arch "_minimal.tar.bz2"))
(sha256
(base32
"0vzzwq1k6bv9d209yg3samvfnfwj7s58y9r3p3pd98wxa9iyzf4j"))))
"143x0jmasl4z16bkxlrbz874chd9x9xpc5qylb9h7j80gfcrzlsi"))))
(build-system binary-build-system)
(arguments
`(#:patchelf-plan

View File

@ -1,8 +1,22 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2020 Jelle Licht <jlicht@fsfe.org>
;;; Copyright © 2020 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2023 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 clojure)
#:use-module (gnu packages compression)
@ -12,7 +26,6 @@
#: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)
@ -22,14 +35,14 @@
(define leiningen-jar
(package
(name "leiningen-jar")
(version "2.10.0")
(version "2.9.10")
(source (origin
(method url-fetch)
(uri "https://codeberg.org/attachments/43cebda5-a7c2-405b-b641-5143a00051b5")
(uri "https://codeberg.org/attachments/895a0a0d-f20d-4580-a277-e06b5eec3b6b")
(file-name "leiningen-standalone.jar")
(sha256
(base32
"0d5vmpyp9ddxpj1s5c60fv2f5iimz1chbgfhchlaqxa0sfx9jwnj"))))
"1ja9q8lav83h5qhayjgc39f6yyvk1n5f6gfwznn561xm007m6a52"))))
(build-system trivial-build-system)
(arguments
`(#:modules ((guix build utils))
@ -51,7 +64,7 @@ lets you focus on your code.")
(package
(inherit leiningen-jar)
(name "leiningen")
(version "2.10.0")
(version "2.9.10")
(source (origin
(method git-fetch)
(uri (git-reference
@ -60,7 +73,7 @@ lets you focus on your code.")
(file-name (git-file-name name version))
(sha256
(base32
"0xvniav6iy1yrbamvbg8i3dq8issiczv3rbig2yc3nm08d2q0rig"))))
"1hl62ykq7sckfpgg5l3wpzq5smh6s572xnadr988vpl97l2x1g4y"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f
@ -87,7 +100,7 @@ lets you focus on your code.")
(define-public clj-kondo
(package
(name "clj-kondo")
(version "2025.01.16")
(version "2022.06.22")
(source (origin
(method url-fetch/zipbomb)
(uri (string-append
@ -95,87 +108,26 @@ lets you focus on your code.")
version "/clj-kondo-" version "-linux-amd64.zip"))
(sha256
(base32
"0w9a2lz9xr5446bav2fp70jfinlm9zrl0iv9s0h0b6jczqx2f977"))))
"057h48kf14pdnnyvgmbqkga1bspbr4ag22q2279s14c2c9bcinzz"))))
(build-system binary-build-system)
(arguments
(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))))))
`(#: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))))))
(native-inputs
(list unzip))
`(("unzip" ,unzip)))
(inputs
(list `(,gcc "lib")
zlib))
`(("gcc:lib" ,gcc "lib")
("zlib" ,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)))

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)
@ -10,14 +25,14 @@
(define-public unrar
(package
(name "unrar")
(version "7.0.9")
(version "6.0.2")
(source (origin
(method url-fetch)
(uri (string-append "https://www.rarlab.com/rar/unrarsrc-"
version ".tar.gz"))
(sha256
(base32
"09l336li4q7yrpjq22q6da2vrynpqbyb4a9fdxa02k65wkwi6p2h"))))
"1lzdsfb4d00silyk04lkvaklmxaiyqksyxx4h1krg77q6f1iigw1"))))
(build-system gnu-build-system)
(arguments
'(#:tests? #f ; No tests.

View File

@ -1,7 +1,22 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2021 Isaac Young <isyoung@pm.me>
;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;;
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (nongnu packages coq)
#:use-module (ice-9 match)
@ -15,7 +30,7 @@
(define-public compcert
(package
(name "compcert")
(version "3.14")
(version "3.11")
(source (origin
(method git-fetch)
(uri (git-reference
@ -24,7 +39,7 @@
(file-name (git-file-name name version))
(sha256
(base32
"030fsg0qr9aasmwk0ahp78sw8rbjmf6pl1w9ws5ghs61kyk4qwj1"))))
"183b1fn7vhb9ykxax11x0bb2q6z5jnd874nzlxqnnm89j3ysr134"))))
(build-system gnu-build-system)
(arguments
`(#:phases

View File

@ -1,45 +0,0 @@
;;; 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")))))

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)
@ -67,25 +82,25 @@ various IDEs and plugins.")
(license license:expat)))
(define-public dotnet
(let ((dotnet-sdk-version "8.0.8"))
(let ((dotnet-sdk-version "6.0.9"))
(package
(name "dotnet")
(version "8.0.401")
(version "6.0.401")
(source
(origin
(method url-fetch/tarbomb)
(uri
(string-append "https://download.visualstudio.microsoft.com/"
"download/pr/db901b0a-3144-4d07-b8ab-6e7a43e7a791/"
"4d9d1b39b879ad969c6c0ceb6d052381/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 "1ygr563apl2776yjabn0plsvx5fcmb5wb0fnldrqwb9b5n8d6cb2"))))
(base32
"05yr64ffcaf48ripxzcv9nwlzp7r83cy9hz17dm5c0317lhksqch"))))
(build-system binary-build-system)
(arguments
`(#:patchelf-plan
;; TODO: Make this a more compact procedure.
`(("dotnet" ("gcc:lib" "zlib"))
`(("dotnet"
("gcc:lib" "zlib"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version
"/libSystem.Net.Security.Native.so")
@ -94,18 +109,6 @@ various IDEs and plugins.")
dotnet-sdk-version
"/libSystem.Security.Cryptography.Native.OpenSsl.so")
("openssl"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version
"/libSystem.Native.so")
("gcc:lib"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version
"/libSystem.Globalization.Native.so")
("gcc:lib"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version
"/libSystem.Net.Security.Native.so")
("gcc:lib"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version
"/libSystem.IO.Compression.Native.so")
@ -120,12 +123,12 @@ various IDEs and plugins.")
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version "/libclrjit.so")
("gcc:lib"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version "/libclrgc.so")
("gcc:lib"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version "/libcoreclr.so")
("gcc:lib" "icu4c"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version "/libdbgshim.so")
("gcc:lib"))
(,,(string-append "shared/Microsoft.NETCore.App/"
dotnet-sdk-version "/libhostpolicy.so")
("gcc:lib"))

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 B. Wilson <x@wilsonb.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (nongnu packages dyalog)
#:use-module (gnu packages autotools)
@ -83,7 +98,7 @@
((guix elf) #:select (elf-segments parse-elf PT_INTERP))
((ice-9 binary-ports) #:select (get-bytevector-n))
((srfi srfi-1) #:select (last))
,@%default-gnu-imported-modules)
,@%gnu-build-system-modules)
#:tests? #f
#:phases
(modify-phases %standard-phases

View File

@ -1,96 +0,0 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2023, 2024 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.92.1.24225")
(source
(let ((arch (match (or (%current-target-system) (%current-system))
("aarch64-linux" "arm64")
("armhf-linux" "armhf")
(_ "x64")))
(hash (match (or (%current-target-system) (%current-system))
("aarch64-linux"
"0m5x9v577h8n16ypzb1y2066alc59v5bw7jiqp2xr7g20s9kb0vy")
("armhf-linux"
"047gz12gx8pa5aglykd0785l6i9ivsn4kkgfhi5l0y4jh8hjys8c")
(_
"1w1rhbbk177yz85csck3sax51qnvgaip9w238dmzb4a50ikfnp23"))))
(origin
(method url-fetch)
(uri
(string-append
"https://github.com/VSCodium/vscodium/releases/download/" version
"/VSCodium-linux-" arch "-" version ".tar.gz"))
(sha256
(base32 hash)))))
(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" (("out" "/opt/vscodium"))))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(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 --ozone-platform-hint=auto")
#: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.")))))))))
(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 Microsofts editor VSCode.")
(license license:expat)))

View File

@ -1,106 +0,0 @@
;;; 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")
;; We need a default case
(_ "unsupported"))
".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"))))

View File

@ -1,8 +1,23 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
;;; Copyright © 2022 Fredrik Salomonsson <plattfot@posteo.net>
;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;;
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (nongnu packages emacs)
#:use-module ((guix licenses) #:prefix license:)

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)

View File

@ -1,73 +0,0 @@
;;; 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"))))

View File

@ -1,24 +1,25 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2022-2023 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; Copyright © 2022 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>
;;; This program is free software: you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <https://www.gnu.org/licenses/>.
(define-module (nongnu packages 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))
#:use-module (guix utils))
;; fwupd with LVFS nonfree repositories enabled
(define-public fwupd-nonfree
@ -40,270 +41,3 @@
(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"))))

View File

@ -1,14 +1,26 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Korytov Pavel <thexcloud@gmail.com>
;;; Copyright © 2021 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; Copyright © 2023 Krzysztof Baranowski <pharcosyle@gmail.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/>.
(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)
@ -78,16 +90,13 @@ font from the pack of Microsoft core fonts for the web."))
#:font-name "Comic Sans MS"
#:hash "0ki0rljjc1pxkbsxg515fwx15yc95bdyaksa3pjd89nyxzzg6vcw"))
(define-public font-microsoft-courier-new
(define-public font-microsoft-couirer-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"
@ -165,163 +174,3 @@ 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 "20240527221252"
#:file "SF-Pro"
#:version "20.0d8e1"
#:hash "153k3q8h5mpd358b1lsa8ha32qxv7vc2q661k20j4nnf3ndjkv9j"
#: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 "20240527221317"
#:file "SF-Compact"
#:version "20.0d8e1"
#:hash "01j7k95rnmg667hyhj88fxqrgsah2mnk2ws7fmclif92mqcgwirj"
#: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 "20240527221346"
#:file "SF-Mono"
#:version "20.0d8e1"
#:hash "0cxj1wk6nbz1ysi0cg1w79b7ja48n00dypxkrsc3mvrn1vmdb4dm"
#: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 "20240527221359"
#:file "SF-Arabic"
#:version "20.0d8e1"
#:hash "0sm7w5i19n3jdj6d04344nxizqacg264rladjiwhxhwa3ksfbxsn"
#: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 "20240527221356"
#:file "NY"
#:version "17.0d5e1"
#:hash "06d8pnfp4z5nb82mh7g7pnz5m4njph3zy17ww1m8x0m34hn50zdn"
#: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 "20240701100406"
#:file "SF-Symbols-6"
#:version "6"
#:hash "1hyghp03zpsiks2p6kmghnmg28kkjj3qqk2hgwva855kly6r4hv8"
#: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"))))

View File

@ -1,366 +0,0 @@
;;; 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.15.2")
(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
"1bzdb9nqmr9w092c22n57ldykm00n98d78rhqzypf430lrl0kzcj"))))
(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" (("out" "/lib/Heroic"))))
#: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 "Exec" line to just be "heroic" in
;; order for this desktop file to be useful to launch heroic in
;; the container (heroic package) as well.
(add-after 'patch-dot-desktop-files 'fix-desktop-file
(lambda _
(substitute*
(string-append #$output "/share/applications/heroic.desktop")
(("Exec=.*/heroic") "Exec=heroic"))))
(delete 'patch-dot-desktop-files)
(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")))))))
(home-page "https://heroicgameslauncher.com")
(synopsis "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)"))))
(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)")))))
(delete 'patch-dot-desktop-files)
;; Steamdeps installs missing packages, which doesn't work with Guix.
(add-after 'install '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.
("font-google-noto" ,font-google-noto) ; Not required but to match following fonts.
;; These next three fonts are to cover emoji and Chinese/Japanese/Korean
;; and related scripts.
("font-google-noto-emoji" ,font-google-noto-emoji)
("font-google-noto-sans-cjk" ,font-google-noto-sans-cjk)
("font-google-noto-serif-cjk" ,font-google-noto-serif-cjk)
("freetype" ,freetype) ; Required for steam login.
("gawk" ,gawk)
("gdk-pixbuf" ,gdk-pixbuf) ; Required for steam tray icon.
;; Required for steam startup; use newer version for better compatibility
;; with some games like Dwarf Fortress.
("gcc:lib" ,gcc-14 "lib")
("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)))

View File

@ -1,20 +1,31 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2022 Attila Lendvai <attila@lendvai.name>
;;; Copyright © 2024 Timotej Lazar <timotej.lazar@araneo.si>
;;;
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (nongnu packages game-development)
#:use-module (ice-9 match)
#: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)
@ -163,95 +174,128 @@ development should opt for GLSL rather than Cg.")
"https://raw.githubusercontent.com/ValveSoftware/source-sdk-2013/master/LICENSE"))))
(define-public eduke32
(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 3DDuke3D 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.
;; 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 3DDuke3D 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
(list license:gpl2
(license:nonfree "file://package/common/buildlic.txt")))))
(home-page "https://eduke32.com/")
(license (license:nonfree
"https://eduke32.com/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
(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)))
((#: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))))))
(synopsis "Game engine for the first-person shooter Ion Fury")
(description
"This is the @code{eduke32} engine built with support for the Ion Fury
(string-append
"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}."))))

View File

@ -1,7 +1,18 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2021-2022 Timotej Lazar <timotej.lazar@araneo.si>
;;; Copyright © 2023 Eidvilas Markevičius <markeviciuseidvilas@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 packages gog)
#:use-module (gnu packages boost)
@ -22,7 +33,7 @@
(define-public lgogdownloader
(package
(name "lgogdownloader")
(version "3.15")
(version "3.9")
(source
(origin
(method git-fetch)
@ -31,7 +42,7 @@
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0bjjn2wam4f2lzmk0hkdxxc7k0wk3f0lyszl0birsr9h3jjpjqw7"))))
(base32 "1hbwgwdm1vn7lkz366q9q8f44sk1pvhgjffndwx49lh3md66xps2"))))
(build-system qt-build-system)
(arguments
`(#:configure-flags '("-DUSE_QT_GUI=ON")
@ -39,11 +50,15 @@
(inputs
(list boost
curl
htmlcxx
jsoncpp
qtwebengine
liboauth
qtbase-5
qtdeclarative-5
qtwebchannel-5
qtwebengine-5
rhash
tinyxml2
tidy-html
zlib))
(native-inputs
(list help2man

View File

@ -1,47 +0,0 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2024 Romain Garbage <romain.garbage@inria.fr>
(define-module (nongnu packages hugo)
#:use-module (nonguix build-system binary)
#:use-module (guix download)
#:use-module ((guix licenses)
#:prefix license:)
#:use-module (guix packages)
#:use-module (guix utils))
(define-public hugo
(package
(name "hugo")
(version "0.140.2")
(source
(origin
(method url-fetch)
(uri (string-append
"https://github.com/gohugoio/hugo/releases/download/v" version
"/" name "_" version "_linux-" (cond ((target-aarch64?)
"arm64")
((target-arm32?)
"arm")
((target-x86-64?)
"amd64")) ".tar.gz"))
(sha256
(base32 (cond ((target-aarch64?)
"1dv2k9j3i3294bl94jhwi645pf5r2143hizxd3xpc3fz8w8cfyy8")
((target-arm32?)
"0f3mirqn3x2lrj7gzjyqklj081y7jfyxww2zkccg9f6jq0vcfcxd")
((target-x86-64?)
"0hs4b3nrr1qajrh7f64ibwjrfipqllvifp526kf2gfxnhpkr67l8"))))))
(build-system binary-build-system)
(arguments
(list
#:install-plan ''(("hugo" "/bin/hugo"))))
(supported-systems (list "aarch64-linux"
"armhf-linux"
"x86_64-linux"))
(home-page "https://gohugo.io/")
(synopsis "Static site generator written in Go")
(description
"Hugo is a static site generator written in Go, optimized for speed and
designed for flexibility. With its advanced templating system and fast asset
pipelines, Hugo renders a complete site in seconds, often less.")
(license license:asl2.0)))

View File

@ -1,217 +0,0 @@
;;; 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.32.5")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/derailed/k9s/releases/download/v"
version "/k9s_Linux_amd64.tar.gz"))
(sha256
(base32
"18yf4vr4pgdl5ssijmpf45amdasjrd3mbgnsp1cjnadszvsiphrk"))))
(build-system copy-build-system)
(arguments
(list
#:substitutable? #f
#:install-plan
#~'(("k9s" "bin/"))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(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* (#:key source #:allow-other-keys)
(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.31.0")
(source (origin
(method url-fetch)
(uri (string-append
"https://dl.k8s.io/release/v" version "/bin/linux/amd64/kubectl"))
(sha256
(base32
"0dr40ckdj65ka6ndp8knyprh1k0nx6vg8yyg7p6c1lc49b3as9vw"))))
(build-system copy-build-system)
(arguments
(list
#:substitutable? #f
#:install-plan
#~'(("kubectl" "bin/"))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(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.34.0")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/kubernetes/kompose/releases/download/v"
version "/kompose-linux-amd64"))
(sha256
(base32
"0wg1ks3flb5rbpazich7v052s3zm8fwja044r67sky3bxxihx3f5"))))
(build-system copy-build-system)
(arguments
(list
#:substitutable? #f
#:install-plan
#~'(("kompose" "bin/"))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(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.15.4")
(source (origin
(method url-fetch)
(uri (string-append
"https://get.helm.sh/helm-v" version "-linux-amd64.tar.gz"))
(sha256
(base32
"1afgf08z6hgy07kjk8fj7xkr8ma4qk2f1r33901nzz87zkn0yh0i"))))
(build-system copy-build-system)
(arguments
(list
#:substitutable? #f
#:install-plan
#~'(("linux-amd64/helm" "bin/"))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(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.24.0")
(source (origin
(method url-fetch)
(uri (string-append "https://kind.sigs.k8s.io/dl/v" version "/kind-linux-amd64"))
(sha256
(base32
"03b0idcb11knqyx2ryakvlkqk1cdyavkar6izjihsqlxlfjsv6mq"))))
(build-system copy-build-system)
(arguments
(list
#:substitutable? #f
#:install-plan
#~'(("kind" "bin/"))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(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.
Its a lightweight, portable, and configurable solution useful in
continuous integration (CI) workflows.")
(license license:asl2.0)))

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,31 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2023, 2024 André A. Gomes <andremegafone@gmail.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/>.
(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:
@ -45,7 +53,7 @@
"/acl" version "express-" arch2 ".tbz2")))
(sha256
(base32
"1zxajn238aibsv0qknm5kiqjiplb4ggynjsxar390rwznh57qc46"))))
"0ir1irpq5hhcmy0yp5p2jpnq5if1gr1fgxybqyvppx1j1jdfkcsp"))))
(build-system binary-build-system)
(inputs (list bash-minimal zlib openssl))
(arguments
@ -67,16 +75,6 @@
"--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"))
@ -121,45 +119,3 @@ 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))

View File

@ -1,26 +1,40 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021, 2022 PantherX OS Team <team@pantherx.org>
;;; Copyright © 2022, 2023, 2024, 2025 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2022 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>
;;; Copyright © 2025 Ashish SHUKLA <ashish.is@lostca.se>
;;;
;;; 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 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 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 qt)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
@ -30,14 +44,137 @@
#: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 discord
(package
(name "discord")
(version "0.0.20")
(source
(origin
(method url-fetch)
(uri
(string-append
"https://dl.discordapp.net/apps/linux/" version "/" name "-" version ".deb"))
(sha256
(base32 "036pg6xi6jwn7qadfbdq88w55mwyszy83sq4xnfbhm1xw5gmn16n"))))
(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
#~'(("lib/discord/Discord"
("alsa-lib" "at-spi2-atk" "at-spi2-core" "atk" "cairo" "cups"
"dbus" "expat" "fontconfig-minimal" "gcc" "gdk-pixbuf" "glib"
"gtk+" "libdrm" "libnotify" "libx11" "libxcb"
"libxcomposite" "libxcursor" "libxdamage" "libxext" "libxfixes"
"libxi" "libxkbcommon" "libxkbfile" "libxrandr" "libxshmfence"
"libxrender" "libxkbcommon" "libxkbfile" "libxrandr" "libxtst"
"libxtst" "mesa" "nspr" "pango" "pulseaudio" "zlib")))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda _
(invoke "ar" "x" #$source)
(invoke "tar" "xvf" "data.tar.gz")
(copy-recursively "usr/" ".")
;; Use the more standard lib directory for everything.
(mkdir-p "lib")
(rename-file "share/discord" "lib/discord")
;; Remove unneeded files.
(delete-file-recursively "bin")
(delete-file "control.tar.gz")
(delete-file "data.tar.gz")
(delete-file "debian-binary")))
(add-after 'unpack 'fix-desktop-file
(lambda _
;; Fix the .desktop file binary location.
(rename-file "lib/discord/discord.desktop" "share/applications/discord.desktop")
(substitute* '("share/applications/discord.desktop")
(("/usr/share/")
(string-append #$output "/lib/")))
;; And move the icon, replacing the (broken) symlink.
(rename-file "lib/discord/discord.png" "share/pixmaps/discord.png")))
(add-after 'install 'symlink-binary-file-and-cleanup
(lambda _
(delete-file (string-append #$output "/environment-variables"))
(mkdir-p (string-append #$output "/bin"))
(symlink (string-append #$output "/lib/discord/Discord")
(string-append #$output "/bin/discord"))))
(add-after 'install 'wrap-where-patchelf-does-not-work
(lambda _
(wrap-program (string-append #$output "/lib/discord/Discord")
`("FONTCONFIG_PATH" ":" prefix
(,(string-join
(list
(string-append #$(this-package-input "fontconfig-minimal") "/etc/fonts")
#$output)
":")))
`("LD_LIBRARY_PATH" ":" prefix
(,(string-join
(list
(string-append #$(this-package-input "nss") "/lib/nss")
(string-append #$(this-package-input "eudev") "/lib")
(string-append #$(this-package-input "gcc") "/lib")
(string-append #$(this-package-input "libnotify") "/lib")
(string-append #$(this-package-input "libxkbfile") "/lib")
(string-append #$(this-package-input "mesa") "/lib")
(string-append #$(this-package-input "pulseaudio") "/lib")
(string-append #$(this-package-input "sqlcipher") "/lib")
(string-append #$(this-package-input "zlib") "/lib")
(string-append #$output "/lib/discord")
#$output)
":")))))))))
(native-inputs (list tar))
(inputs
(list alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
dbus
eudev
expat
fontconfig
`(,gcc "lib")
glib
gtk+
libdrm
libnotify
librsvg
libx11
libxcb
libxcomposite
libxcursor
libxdamage
libxext
libxfixes
libxi
libxkbcommon
libxkbfile
libxrandr
libxrender
libxshmfence
libxtst
mesa
nspr
nss
pango
pulseaudio
sqlcipher
zlib))
(home-page "https://discord.com/")
(synopsis "All-in-one voice, video, and text chat for gamers")
(description "Discord is a cross-platform text, voice, and video chat platform aimed at
gamers.")
(license (license:nonfree "https://discord.com/terms"))))
(define-public element-desktop
(package
(name "element-desktop")
(version "1.11.89")
(version "1.11.8")
(source
(origin
(method url-fetch)
@ -46,31 +183,105 @@
"https://packages.riot.im/debian/pool/main/e/" name "/" name "_" version
"_amd64.deb"))
(sha256
(base32 "0riavl8qq59s45xxdk0s1n6i1wymsx1zfdz5dp3ccr8xpzw77abq"))))
(base32 "0vaicxjhmd6pvsp6vsjcplmd7rzvfcibs4pa3ylb190p1gnmnj4k"))))
(supported-systems '("x86_64-linux"))
(build-system chromium-binary-build-system)
(build-system binary-build-system)
(arguments
(list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files
#:wrapper-plan
#~'(("lib/Element/element-desktop" (("out" "/lib/Element"))))
#:patchelf-plan
#~'(("lib/Element/element-desktop"
("alsa-lib" "at-spi2-atk" "at-spi2-core" "atk" "cairo" "cups"
"dbus" "expat" "fontconfig-minimal" "gcc" "gdk-pixbuf" "glib"
"gtk+" "libdrm" "libnotify" "libsecret" "libx11" "libxcb"
"libxcomposite" "libxcursor" "libxdamage" "libxext" "libxfixes"
"libxi" "libxkbcommon" "libxkbfile" "libxrandr" "libxrender"
"libxtst" "mesa" "nspr" "pango" "zlib")))
#:phases
#~(modify-phases %standard-phases
(add-after 'binary-unpack 'setup-cwd
(replace 'unpack
(lambda _
(invoke "ar" "x" #$source)
(invoke "tar" "xvf" "data.tar.xz")
(copy-recursively "usr/" ".")
;; Use the more standard lib directory for everything.
(rename-file "opt/" "lib")
;; Remove unneeded files.
(delete-file-recursively "usr")
(delete-file "control.tar.gz")
(delete-file "data.tar.xz")
(delete-file "debian-binary")
;; Fix the .desktop file binary location.
(substitute* '("share/applications/element-desktop.desktop")
(("/opt/Element/")
(string-append #$output "/bin/")))))
(add-after 'install 'symlink-binary-file
(string-append #$output "/lib/Element/")))))
(add-after 'install 'symlink-binary-file-and-cleanup
(lambda _
(delete-file (string-append #$output "/environment-variables"))
(mkdir-p (string-append #$output "/bin"))
(symlink (string-append #$output "/lib/Element/element-desktop")
(string-append #$output "/bin/element-desktop")))))))
(string-append #$output "/bin/element-desktop"))))
(add-after 'install 'wrap-where-patchelf-does-not-work
(lambda _
(wrap-program (string-append #$output "/lib/Element/element-desktop")
`("FONTCONFIG_PATH" ":" prefix
(,(string-join
(list
(string-append #$(this-package-input "fontconfig-minimal") "/etc/fonts")
#$output)
":")))
`("LD_LIBRARY_PATH" ":" prefix
(,(string-join
(list
(string-append #$(this-package-input "nss") "/lib/nss")
(string-append #$(this-package-input "eudev") "/lib")
(string-append #$(this-package-input "gcc") "/lib")
(string-append #$(this-package-input "mesa") "/lib")
(string-append #$(this-package-input "libxkbfile") "/lib")
(string-append #$(this-package-input "zlib") "/lib")
(string-append #$(this-package-input "libsecret") "/lib")
(string-append #$(this-package-input "sqlcipher") "/lib")
(string-append #$(this-package-input "libnotify") "/lib")
(string-append #$output "/lib/Element")
#$output)
":")))))))))
(native-inputs (list tar))
(inputs
(list alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
dbus
eudev
expat
fontconfig
`(,gcc "lib")
glib
gtk+
libdrm
libnotify
librsvg
libsecret
libx11
libxcb
libxcomposite
libxcursor
libxdamage
libxext
libxfixes
libxi
libxkbcommon
libxkbfile
libxrandr
libxrender
libxtst
mesa
nspr
nss
pango
sqlcipher
zlib))
(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
@ -83,40 +294,109 @@ its core.")
(define-public signal-desktop
(package
(name "signal-desktop")
(version "7.41.0")
(version "5.61.0")
(source
(origin
(method url-fetch)
(uri
(string-append
"https://updates.signal.org/desktop/apt/pool/s/" name "/" name "_" version
"https://updates.signal.org/desktop/apt/pool/main/s/" name "/" name "_" version
"_amd64.deb"))
(sha256
(base32 "1ainlhhzf427f0jqdh83m8519ywihnxyiw505n4msgyhpwgwj5n0"))))
(base32 "0y2kwifj1szll79jscpmhdh8dvlrsqp0n82wh1zkiz55zfxcwhyl"))))
(supported-systems '("x86_64-linux"))
(build-system chromium-binary-build-system)
(build-system binary-build-system)
(arguments
(list #:validate-runpath? #f ; TODO: fails on wrapped binary and included other files
#:wrapper-plan
#~'(("lib/Signal/signal-desktop" (("out" "/lib/Signal"))))
#:patchelf-plan
#~'(("lib/Signal/signal-desktop"
("alsa-lib" "at-spi2-atk" "at-spi2-core" "atk" "cairo" "cups"
"dbus" "expat" "fontconfig-minimal" "gcc" "gdk-pixbuf" "glib"
"gtk+" "libdrm" "libsecret" "libx11" "libxcb" "libxcomposite"
"libxcursor" "libxdamage" "libxext" "libxfixes" "libxi"
"libxkbcommon" "libxkbfile" "libxrandr" "libxshmfence" "libxtst"
"mesa" "nspr" "pango" "pulseaudio" "zlib")))
#:phases
#~(modify-phases %standard-phases
(add-after 'binary-unpack 'setup-cwd
(replace 'unpack
(lambda _
(invoke "ar" "x" #$source)
(invoke "tar" "xvf" "data.tar.xz")
(copy-recursively "usr/" ".")
;; Use the more standard lib directory for everything.
(rename-file "opt/" "lib")
;; Remove unneeded files.
(delete-file-recursively "usr")
(delete-file "control.tar.gz")
(delete-file "data.tar.xz")
(delete-file "debian-binary")
(delete-file "environment-variables")
;; Fix the .desktop file binary location.
(substitute* '("share/applications/signal-desktop.desktop")
(("/opt/Signal/")
(string-append #$output "/bin/")))))
(add-after 'install 'symlink-binary-file
(string-append #$output "/lib/Signal/")))))
(add-after 'install 'symlink-binary-file-and-cleanup
(lambda _
(delete-file (string-append #$output "/environment-variables"))
(mkdir-p (string-append #$output "/bin"))
(symlink (string-append #$output "/lib/Signal/signal-desktop")
(string-append #$output "/bin/signal-desktop")))))))
(string-append #$output "/bin/signal-desktop"))))
(add-after 'install 'wrap-where-patchelf-does-not-work
(lambda _
(wrap-program (string-append #$output "/lib/Signal/signal-desktop")
`("FONTCONFIG_PATH" ":" prefix
(,(string-join
(list
(string-append #$(this-package-input "fontconfig-minimal") "/etc/fonts")
#$output)
":")))
`("LD_LIBRARY_PATH" ":" prefix
(,(string-join
(list
(string-append #$(this-package-input "nss") "/lib/nss")
(string-append #$(this-package-input "eudev") "/lib")
(string-append #$(this-package-input "gcc") "/lib")
(string-append #$(this-package-input "mesa") "/lib")
(string-append #$(this-package-input "libxkbfile") "/lib")
(string-append #$(this-package-input "pulseaudio") "/lib")
(string-append #$(this-package-input "zlib") "/lib")
(string-append #$(this-package-input "libsecret") "/lib")
(string-append #$output "/lib/Signal")
#$output)
":")))))))))
(native-inputs (list tar))
(inputs (list alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
dbus
eudev
expat
fontconfig
`(,gcc "lib")
glib
gtk+
libdrm
librsvg
libsecret
libx11
libxcb
libxcomposite
libxdamage
libxext
libxfixes
libxkbcommon
libxkbfile
libxrandr
libxshmfence
mesa
nspr
nss
pango
pulseaudio
zlib))
(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
@ -129,21 +409,19 @@ or iOS.")
(define-public zoom
(package
(name "zoom")
(version "5.17.5.2543")
(version "5.12.2.4816")
(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"))))
(base32 "0vxlvxp0jzpc5xsh9wlxc74466i5ipg3fwpi0kv03rl8ib8y1n7p"))))
(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"
@ -183,14 +461,12 @@ or iOS.")
("lib/zoom/zoom"
,libs)
("lib/zoom/zopen"
,libs)
("lib/zoom/aomhost"
,libs)))
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(invoke "tar" "xvf" source)
(lambda _
(invoke "tar" "xvf" #$source)
;; Use the more standard lib directory for everything.
(mkdir-p "lib")
(rename-file "zoom/" "lib/zoom")))
@ -212,54 +488,6 @@ or iOS.")
"libxrender"
"zlib")))))
(wrap-program (string-append #$output "/lib/zoom/zoom")
'("QML2_IMPORT_PATH" = ())
'("QT_PLUGIN_PATH" = ())
'("QT_SCREEN_SCALE_FACTORS" = ())
`("FONTCONFIG_PATH" ":" prefix
(,(string-join
(list
(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
@ -282,23 +510,15 @@ or iOS.")
"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
@ -314,8 +534,6 @@ or iOS.")
(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")
@ -374,16 +592,13 @@ or iOS.")
libxrender
libxshmfence
mesa
mit-krb5
nspr
nss
pango
pulseaudio
xcb-util
qtmultimedia
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
zlib))
(home-page "https://zoom.us/")
(synopsis "Video conference client")

View File

@ -1,7 +1,7 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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, 2021 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
@ -14,17 +14,29 @@
;;; 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-2025 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; Copyright © 2020-2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
;;; Copyright © 2021 pineapples <guixuser6392@protonmail.com>
;;; Copyright © 2021, 2024 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021, 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021, 2022 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2023 Tomas Volf <wolf@wolfsden.cz>
;;;
;;; 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 mozilla)
#:use-module (srfi srfi-26)
#:use-module (guix build-system gnu)
#:use-module (guix build-system cargo)
#:use-module (guix build-system trivial)
@ -48,7 +60,6 @@
#: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)
@ -56,6 +67,7 @@
#: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)
@ -67,46 +79,240 @@
#: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))
;;; Define the versions of rust needed to build firefox, trying to match
;;; upstream. See table at [0], `Uses' column for the specific version.
;;; Using `rust' will likely lead to a newer version then listed in the table,
;;; but since in Guix only the latest packaged Rust is officially supported,
;;; it is a tradeoff worth making.
;;; 0: https://firefox-source-docs.mozilla.org/writing-rust-code/update-policy.html
;; The `rust' package is too old.
(define-public rust-firefox-esr rust-1.77)
(define-public rust-firefox rust-1.77)
;; Copied from guix/gnu/packages/rust.scm
(define* (rust-uri version #:key (dist "static"))
(string-append "https://" dist ".rust-lang.org/dist/"
"rustc-" version "-src.tar.gz"))
;; 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 "20250203132125")
(define* (rust-bootstrapped-package base-rust version checksum)
"Bootstrap rust VERSION with source checksum CHECKSUM using BASE-RUST."
(package
(inherit base-rust)
(version version)
(source
(origin
(inherit (package-source base-rust))
(uri (rust-uri version))
(sha256 (base32 checksum))))
(native-inputs
(alist-replace "cargo-bootstrap" (list base-rust "cargo")
(alist-replace "rustc-bootstrap" (list base-rust)
(package-native-inputs base-rust))))))
(define rust-firefox-1.58
(rust-bootstrapped-package
rust "1.58.1" "1iq7kj16qfpkx8gvw50d8rf7glbm6s0pj2y1qkrz7mi56vfsyfd8"))
(define rust-firefox-1.59
(rust-bootstrapped-package
rust-firefox-1.58 "1.59.0" "1yc5bwcbmbwyvpfq7zvra78l0r8y3lbv60kbr62fzz2vx2pfxj57"))
(define rust-firefox-1.60
(rust-bootstrapped-package
rust-firefox-1.59 "1.60.0" "1drqr0a26x1rb2w3kj0i6abhgbs3jx5qqkrcwbwdlx7n3inq5ji0"))
(define rust-firefox-1.61
(let ((base-rust (rust-bootstrapped-package
rust-firefox-1.60 "1.61.0"
"1vfs05hkf9ilk19b2vahqn8l6k17pl9nc1ky9kgspaascx8l62xd")))
(package
(inherit base-rust)
(arguments
(substitute-keyword-arguments (package-arguments base-rust)
((#:phases phases)
`(modify-phases ,phases
(add-after 'unpack 'disable-tests-with-sigint
;; These tests rely on killing a process with SIGINT which
;; fails in the build container.
(lambda _
(substitute* "library/std/src/sys/unix/process/process_common/tests.rs"
(("fn test_process_group_posix_spawn")
"#[ignore]\nfn test_process_group_posix_spawn")
(("fn test_process_group_no_posix_spawn")
"#[ignore]\nfn test_process_group_no_posix_spawn")))))))))))
;; 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-firefox-1.60)
(define-public rust-firefox rust-firefox-1.61) ; 1.63 is also listed, but 1.61 is the minimum needed
;; rust-cbindgen-0.23/0.24 dependencies
(define-public rust-unicode-ident-1
(package
(name "rust-unicode-ident")
(version "1.0.3")
(source (origin
(method url-fetch)
(uri (crate-uri "unicode-ident" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1bqswc96ws8l6k7xx56dg521a3l5imi3mhlcz7rsi6a92mxb7xf4"))))
(build-system cargo-build-system)
(arguments
`(#:skip-build? #t))
(home-page "https://github.com/dtolnay/unicode-ident")
(synopsis
"Better optimized implementation of the older unicode-xid crate")
(description
"Determine whether characters have the XID_Start or XID_Continue properties
according to Unicode Standard Annex #31")
(license (list license:unicode license:expat))))
(define-public rust-textwrap-0.15
(package
(inherit rust-textwrap-0.12)
(name "rust-textwrap")
(version "0.15.0")
(source (origin
(method url-fetch)
(uri (crate-uri "textwrap" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1yw513k61lfiwgqrfvsjw1a5wpvm0azhpjr2kr0jhnq9c56is55i"))))
(arguments
`(#:skip-build? #t
#:cargo-inputs (("rust-hyphenation" ,rust-hyphenation-0.8)
("rust-smawk" ,rust-smawk-0.3)
("rust-terminal-size" ,rust-terminal-size-0.1)
("rust-unicode-linebreak" ,rust-unicode-linebreak-0.1)
("rust-unicode-width" ,rust-unicode-width-0.1))))))
(define-public rust-clap-lex-0.2
(package
(name "rust-clap-lex")
(version "0.2.4")
(source (origin
(method url-fetch)
(uri (crate-uri "clap_lex" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1ib1a9v55ybnaws11l63az0jgz5xiy24jkdgsmyl7grcm3sz4l18"))))
(build-system cargo-build-system)
(arguments
`(#:skip-build? #t
#:cargo-inputs (("rust-os-str-bytes" ,rust-os-str-bytes-6))))
(home-page "https://github.com/clap-rs/clap/tree/master/clap_lex")
(synopsis "Minimal, flexible command line parser")
(description "Minimal, flexible command line parser")
(license (list license:expat license:asl2.0))))
(define-public rust-clap-derive-3.2.15
(package
(inherit rust-clap-derive-3)
(name "rust-clap-derive")
(version "3.2.15")
(source (origin
(method url-fetch)
(uri (crate-uri "clap_derive" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1d2c4vs345fwihkd8cc7m6acbiydcwramkd5mnp36p0a7g6jm9cv"))))
(arguments
`(#:skip-build? #t
#:cargo-inputs (("rust-heck" ,rust-heck-0.4)
("rust-proc-macro-error" ,rust-proc-macro-error-1)
("rust-proc-macro2" ,rust-proc-macro2-1)
("rust-quote" ,rust-quote-1)
("rust-syn" ,rust-syn-1))))))
(define-public rust-clap-3.2.16
(package
(inherit rust-clap-3)
(name "rust-clap")
(version "3.2.16")
(source (origin
(method url-fetch)
(uri (crate-uri "clap" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1af06z8z7m3327yz1xvzxfjanclgpvvy3lssb745rig7adkbpnx3"))))
(arguments
`(#:skip-build? #t
#:cargo-inputs (("rust-atty" ,rust-atty-0.2)
("rust-backtrace" ,rust-backtrace-0.3)
("rust-bitflags" ,rust-bitflags-1)
("rust-clap-derive" ,rust-clap-derive-3.2.15)
("rust-clap-lex" ,rust-clap-lex-0.2)
("rust-indexmap" ,rust-indexmap-1)
("rust-once-cell" ,rust-once-cell-1)
("rust-regex" ,rust-regex-1)
("rust-strsim" ,rust-strsim-0.10)
("rust-termcolor" ,rust-termcolor-1)
("rust-terminal-size" ,rust-terminal-size-0.1)
("rust-textwrap" ,rust-textwrap-0.15)
("rust-unicase" ,rust-unicase-2)
("rust-yaml-rust" ,rust-yaml-rust-0.4))))))
(define-public rust-cbindgen-0.24
(package
(inherit rust-cbindgen-0.19)
(name "rust-cbindgen")
(version "0.24.3")
(source (origin
(method url-fetch)
(uri (crate-uri "cbindgen" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"1yqxqsz2d0cppd8zwihk2139g5gy38wqgl9snj6rnk8gyvnqsdd6"))))
(arguments
`(#:cargo-inputs (("rust-clap" ,rust-clap-3.2.16)
("rust-heck" ,rust-heck-0.4)
("rust-indexmap" ,rust-indexmap-1)
("rust-log" ,rust-log-0.4)
("rust-proc-macro2" ,rust-proc-macro2-1)
("rust-quote" ,rust-quote-1)
("rust-serde" ,rust-serde-1)
("rust-serde-json" ,rust-serde-json-1)
("rust-syn" ,rust-syn-1)
("rust-tempfile" ,rust-tempfile-3)
("rust-toml" ,rust-toml-0.5))
#:cargo-development-inputs (("rust-serial-test" ,rust-serial-test-0.5))))))
;; Bug with firefox build (v101-102) with cbindgen-0.24, see
;; https://bugzilla.mozilla.org/show_bug.cgi?id=1773259#c5 for possible patch
;; (untested)
(define-public rust-cbindgen-0.23
(package
(inherit rust-cbindgen-0.24)
(name "rust-cbindgen")
(version "0.23.0")
(source (origin
(method url-fetch)
(uri (crate-uri "cbindgen" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
"006rn3fn4njayjxr2vd24g1awssr9i3894nbmfzkybx07j728vav"))))))
;; Update this id with every firefox update to it's release date.
;; It's used for cache validation and therefor can lead to strange bugs.
(define %firefox-esr-build-id "20220920000000")
(define-public firefox-esr
(package
(name "firefox-esr")
(version "128.7.0esr")
(version "102.3.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 "1xwl6z8ax3dw5hjb5lwpl5641rmlizmfqs3xg74cnczsvm7bz9z0"))
(patches
(map (lambda (patch)
(search-path
(map (cut string-append <> "/nongnu/packages/patches")
%load-path)
patch))
'("firefox-esr-compare-paths.patch"
"firefox-esr-use-system-wide-dir.patch")))))
(base32 "0nmm861p4zakdvi9lj0ac8dkf9v17250rzcmrx1f6r7rvjv273ih"))))
(build-system gnu-build-system)
(arguments
(list
@ -138,11 +344,6 @@
"--with-distribution-id=org.nonguix"
"--disable-official-branding"
;; Do not require addons in the global app or system directories to
;; be signed by Mozilla.
"--allow-addon-sideload"
"--with-unsigned-addon-scopes=app,system"
;; Features
"--disable-tests"
"--disable-updater"
@ -158,15 +359,9 @@
"--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)
,@%default-gnu-imported-modules)
,@%gnu-build-system-modules)
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-preferences
@ -185,11 +380,6 @@
;; XDG settings should be managed by Guix.
(write-setting "browser.shell.checkDefaultBrowser" "false")
;; It defaults to Google Location Services, but misses a necessary
;; API key.
(write-setting "geo.provider.network.url"
"\"https://api.beacondb.net/v1/geolocate\"")
(close-port port))))
(add-after 'fix-preferences 'fix-ffmpeg-runtime-linker
(lambda* (#:key inputs #:allow-other-keys)
@ -238,24 +428,8 @@
;; 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"))))
(("\"--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
@ -291,9 +465,6 @@
(setenv "MOZ_NOSPAM" "1")
;; WM_CLASS (default is "$MOZ_APP_NAME-$MOZ_UPDATE_CHANNEL").
(setenv "MOZ_APP_REMOTINGNAME" "Firefox")
(setenv "MOZBUILD_STATE_PATH" (getcwd))
(let* ((mozconfig (string-append (getcwd) "/mozconfig"))
@ -349,19 +520,6 @@
(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
@ -372,33 +530,15 @@
;; 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 sharing on Wayland
(pipewire-lib (string-append (assoc-ref inputs "pipewire")
"/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
,pipewire-lib))
,pulseaudio-lib ,eudev-lib))
`("XDG_DATA_DIRS" prefix (,gtk-share))
`("MOZ_LEGACY_PROFILES" = ("1"))
`("MOZ_ALLOW_DOWNGRADE" = ("1"))))))
@ -412,7 +552,7 @@
(("NewWindow") "new-window")
(("NewPrivateWindow") "new-private-window")
(("StartupNotify=true")
"StartupNotify=true\nStartupWMClass=Firefox"))
"StartupNotify=true\nStartupWMClass=Navigator"))
(install-file desktop-file applications))))
(add-after 'install-desktop-entry 'install-icons
(lambda* (#:key outputs #:allow-other-keys)
@ -451,7 +591,7 @@
gtk+
gtk+-2
hunspell
icu4c-73
icu4c-71
jemalloc
libcanberra
libevent
@ -475,9 +615,8 @@
pipewire
pixman
pulseaudio
speech-dispatcher
sqlite
startup-notification
sqlite
eudev
unzip
zip
@ -487,24 +626,19 @@
alsa-lib
autoconf-2.13
`(,rust-firefox-esr "cargo")
clang-18
llvm
clang-12
llvm-12
wasm32-wasi-clang-toolchain
m4
nasm
node-lts
node
perl
pkg-config
python
rust-firefox-esr
rust-cbindgen-0.26
rust-cbindgen-0.23
which
yasm))
(native-search-paths
(list (search-path-specification
(variable "ICECAT_SYSTEM_DIR")
(separator #f) ;single entry
(files '("lib/icecat")))))
(home-page "https://mozilla.org/firefox/")
(synopsis "Trademarkless version of Firefox")
(description
@ -549,31 +683,22 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n"
((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 "20250203132324")
;; 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 "20221004000000")
(define-public firefox
(package
(inherit firefox-esr)
(name "firefox")
(version "135.0")
(version "105.0.2")
(source
(origin
(method url-fetch)
(uri (string-append "https://archive.mozilla.org/pub/firefox/releases/"
version "/source/firefox-" version ".source.tar.xz"))
(patches
(map (lambda (patch)
(search-path
(map (cut string-append <> "/nongnu/packages/patches")
%load-path)
patch))
'("firefox-restore-desktop-files.patch"
"firefox-esr-compare-paths.patch"
"firefox-use-system-wide-dir.patch")))
(sha256
(base32 "0q5r2q6q56kyzl5pknrir9bzlhmzbvv9hi5gi4852izgcali4zl2"))))
(base32 "098y75mrick22x8ry41pm33ih06hry28kqszi0i82sg6v5fdc7pv"))))
(arguments
(substitute-keyword-arguments (package-arguments firefox-esr)
((#:phases phases)
@ -581,18 +706,48 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n"
(replace 'set-build-id
(lambda _
(setenv "MOZ_BUILD_DATE" #$%firefox-build-id)))))))
(inputs
(modify-inputs (package-inputs firefox-esr)
(replace "icu4c" icu4c-75)))
(native-inputs
(modify-inputs (package-native-inputs firefox-esr)
(replace "rust" rust-firefox)
(replace "rust:cargo" `(,rust-firefox "cargo"))))
(replace "rust:cargo" `(,rust-firefox "cargo"))
(replace "node" node-lts)
(replace "rust-cbindgen" rust-cbindgen-0.24)))
(description
"Full-featured browser client built from Firefox source tree, without
the official icon and the name \"firefox\".")))
;; 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))
(define-public firefox/wayland
(package
(inherit firefox)
(name "firefox-wayland")
(native-inputs '())
(inputs
`(("bash" ,bash-minimal)
("firefox" ,firefox)))
(build-system trivial-build-system)
(arguments
'(#:modules ((guix build utils))
#:builder
(begin
(use-modules (guix build utils))
(let* ((bash (assoc-ref %build-inputs "bash"))
(firefox (assoc-ref %build-inputs "firefox"))
(out (assoc-ref %outputs "out"))
(exe (string-append out "/bin/firefox")))
(mkdir-p (dirname exe))
(call-with-output-file exe
(lambda (port)
(format port "#!~a
MOZ_ENABLE_WAYLAND=1 exec ~a $@\n"
(string-append bash "/bin/bash")
(string-append firefox "/bin/firefox"))))
(chmod exe #o555)
;; Provide the manual and .desktop file.
(copy-recursively (string-append firefox "/share")
(string-append out "/share"))
(substitute* (string-append
out "/share/applications/firefox.desktop")
((firefox) out))
#t))))))

View File

@ -1,107 +0,0 @@
;;; 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")
;; We need a default case
(_ "unsupported"))
".tar.xz"))
(sha256
(base32
(match (%current-system)
("x86_64-linux" "1hd7fbk0px45fxhqa7nqcnij8ls2fhpjp60v840vy2zqs9fkcr52")
("i686-linux" "11vk32mxyda9xl08pp2ivd1vsahnw6w7d08in4syz6iannfwp19b")
("aarch64-linux" "0zpkaiwwxn8yh3s1d22qswshbgaxx5d8iy17hb3w256zgb722yjw")
("armhf-linux" "18174b1lgsk73gxhala471ppzbrpa1cs953b5par998yqgh74znk")
;; We need a valid base32 default case
(_ "0000000000000000000000000000000000000000000000000000"))))))
(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"))))

View File

@ -1,4 +1,4 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2016 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015, 2017 Leo Famulari <leo@famulari.name>
@ -8,13 +8,26 @@
;;; 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>
;;; Copyright © 2022 B. Wilson <x@wilsonb.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(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)
@ -27,17 +40,6 @@
#: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")
@ -55,157 +57,172 @@
"doc")) ;1 MiB of man pages
(arguments
(let ((patch-makefile-phase
#~(lambda _
(for-each patch-makefile-SHELL
(find-files "." "Makefile.in"))))
'(lambda _
(for-each patch-makefile-SHELL
(find-files "." "Makefile.in"))))
(configure-phase
;; The 'configure' script does not understand '--docdir', so we must
;; override that and use '--mandir' instead.
#~(lambda* (#:key build target outputs configure-flags
#:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
(doc (assoc-ref outputs "doc")))
(apply invoke "./configure"
(string-append "SHELL=" (which "sh"))
(string-append "--build=" build)
(string-append "--prefix=" out)
(string-append "--mandir=" doc "/share/man")
(if target
(cons (string-append "--host=" target)
configure-flags)
configure-flags)))))
'(lambda* (#:key build target outputs configure-flags
#:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
(doc (assoc-ref outputs "doc")))
(apply invoke "./configure"
(string-append "SHELL=" (which "sh"))
(string-append "--build=" build)
(string-append "--prefix=" out)
(string-append "--mandir=" doc "/share/man")
(if target
(cons (string-append "--host=" target)
configure-flags)
configure-flags)))))
(apply-rollup-patch-phase
;; Ncurses distributes "stable" patchsets to be applied on top
;; of the release tarball. These are only available as shell
;; scripts(!) so we decompress and apply them in a phase.
;; See <https://invisible-mirror.net/archives/ncurses/6.1/README>.
#~(lambda* (#:key inputs native-inputs #:allow-other-keys)
(let ((rollup-patch #$(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"))))
'(lambda* (#:key inputs native-inputs #:allow-other-keys)
(let ((rollup-patch (assoc-ref (or native-inputs inputs)
"rollup-patch")))
(when rollup-patch
(copy-file rollup-patch
(string-append (getcwd) "/rollup-patch.sh.bz2"))
(invoke "bzip2" "-d" "rollup-patch.sh.bz2")
(invoke "sh" "rollup-patch.sh")))))
(remove-shebang-phase
#~(lambda _
;; To avoid retaining a reference to the bootstrap Bash via the
;; shebang of the 'ncursesw6-config' script, simply remove that
;; shebang: it'll work just as well without it. Likewise, do not
;; retain a reference to the "doc" output.
(substitute* "misc/ncurses-config.in"
(("#!@SHELL@")
"# No shebang here, use /bin/sh!\n")
(("@SHELL@ \\$0")
"$0")
(("mandir=.*$")
"mandir=share/man"))))
'(lambda _
;; To avoid retaining a reference to the bootstrap Bash via the
;; shebang of the 'ncursesw6-config' script, simply remove that
;; shebang: it'll work just as well without it. Likewise, do not
;; retain a reference to the "doc" output.
(substitute* "misc/ncurses-config.in"
(("#!@SHELL@")
"# No shebang here, use /bin/sh!\n")
(("@SHELL@ \\$0")
"$0")
(("mandir=.*$")
"mandir=share/man"))))
(post-install-phase
#~(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
;; When building a wide-character (Unicode) build, create backward
;; compatibility links from the the "normal" libraries to the
;; wide-character ones (e.g. libncurses.so to libncursesw.so).
#$@(if (target-mingw?)
`( ;; TODO: create .la files to link to the .dll?
(with-directory-excursion (string-append out "/bin")
(for-each
(lambda (lib)
(define lib.dll
(string-append "lib" lib ".dll"))
(define libwx.dll
(string-append "lib" lib "w"
,(version-major version) ".dll"))
`(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
;; When building a wide-character (Unicode) build, create backward
;; compatibility links from the the "normal" libraries to the
;; wide-character ones (e.g. libncurses.so to libncursesw.so).
,@(if (target-mingw?)
'( ;; TODO: create .la files to link to the .dll?
(with-directory-excursion (string-append out "/bin")
(for-each
(lambda (lib)
(define lib.dll
(string-append "lib" lib ".dll"))
(define libw6.dll
(string-append "lib" lib "w6.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"))
(when (file-exists? libw6.dll)
(format #t "creating symlinks for `lib~a'~%" lib)
(symlink libw6.dll lib.dll)))
'("curses" "ncurses" "form" "panel" "menu"))))
'())
(with-directory-excursion (string-append out "/lib")
(for-each (lambda (lib)
(define libw.a
(string-append "lib" lib "w.a"))
(define lib.a
(string-append "lib" lib ".a"))
#$@(if (not (target-mingw?))
#~((define libw.so.x
(string-append "lib" lib "w.so."
#$(version-major version)))
(define lib.so.x
(string-append "lib" lib ".so."
#$(version-major version)))
(define lib.so
(string-append "lib" lib ".so"))
(define packagew.pc
(string-append lib "w.pc"))
(define package.pc
(string-append lib ".pc")))
#~())
,@(if (not (target-mingw?))
`((define libw.so.x
(string-append "lib" lib "w.so."
,(version-major version)))
(define lib.so.x
(string-append "lib" lib ".so."
,(version-major version)))
(define lib.so
(string-append "lib" lib ".so"))
(define packagew.pc
(string-append lib "w.pc"))
(define package.pc
(string-append lib ".pc")))
'())
(when (file-exists? libw.a)
(format #t "creating symlinks for `lib~a'~%" lib)
(symlink libw.a lib.a)
#$@(if (not (target-mingw?))
'((symlink libw.so.x lib.so.x)
(false-if-exception (delete-file lib.so))
(call-with-output-file lib.so
(lambda (p)
(format p "INPUT (-l~aw)~%" lib)))
(with-directory-excursion "pkgconfig"
(format #t "creating symlink for `~a'~%"
package.pc)
(when (file-exists? packagew.pc)
(symlink packagew.pc package.pc))))
#~())))
'("curses" "ncurses" "form" "panel" "menu")))))))
(list #:configure-flags
#~`("--with-shared" "--without-debug" "--enable-widec"
(when (file-exists? libw.a)
(format #t "creating symlinks for `lib~a'~%" lib)
(symlink libw.a lib.a)
,@(if (not (target-mingw?))
'((symlink libw.so.x lib.so.x)
(false-if-exception (delete-file lib.so))
(call-with-output-file lib.so
(lambda (p)
(format p "INPUT (-l~aw)~%" lib)))
(with-directory-excursion "pkgconfig"
(format #t "creating symlink for `~a'~%"
package.pc)
(when (file-exists? packagew.pc)
(symlink packagew.pc package.pc))))
'())))
'("curses" "ncurses" "form" "panel" "menu")))))))
`(#:configure-flags
,(cons*
'quasiquote
`(("--with-shared" "--without-debug" "--enable-widec"
"--enable-pc-files" "--with-versioned-syms=yes"
,(string-append "--with-pkg-config-libdir="
#$output "/lib/pkgconfig")
"--enable-pc-files" "--with-versioned-syms=yes"
,(list 'unquote '(string-append "--with-pkg-config-libdir="
(assoc-ref %outputs "out")
"/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
;; By default headers land in an `ncursesw' subdir, which is not
;; what users expect.
,(list 'unquote '(string-append "--includedir=" (assoc-ref %outputs "out")
"/include"))
"--enable-overwrite" ;really honor --includedir
;; Make sure programs like 'tic', 'reset', and 'clear' have a
;; correct RUNPATH.
,(string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
;; Make sure programs like 'tic', 'reset', and 'clear' have a
;; correct RUNPATH.
,(list 'unquote '(string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out")
"/lib"))
;; Starting from ncurses 6.1, "make install" runs "install -s"
;; by default, which doesn't work for cross-compiled binaries
;; because it invokes 'strip' instead of 'TRIPLET-strip'. Work
;; around this.
#$@(if (%current-target-system) #~("--disable-stripping") #~())
;; Starting from ncurses 6.1, "make install" runs "install -s"
;; by default, which doesn't work for cross-compiled binaries
;; because it invokes 'strip' instead of 'TRIPLET-strip'. Work
;; around this.
,@(if (%current-target-system) '("--disable-stripping") '())
;; Do not assume a default search path in ld, even if it is only to
;; filter it out in ncurses-config. Mainly because otherwise it ends
;; up using the libdir from binutils, which makes little sense and
;; causes an unnecessary runtime dependency.
"cf_cv_ld_searchpath=/no-ld-searchpath"
;; Do not assume a default search path in ld, even if it is only to
;; filter it out in ncurses-config. Mainly because otherwise it ends
;; up using the libdir from binutils, which makes little sense and
;; causes an unnecessary runtime dependency.
"cf_cv_ld_searchpath=/no-ld-searchpath"
;; MinGW: Use term-driver created for the MinGW port.
#$@(if (target-mingw?) #~("--enable-term-driver") #~())
"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)))))
;; MinGW: Use term-driver created for the MinGW port.
,@(if (target-mingw?) '("--enable-term-driver") '()))))
#:tests? #f ; no "check" target
#:phases (modify-phases %standard-phases
(add-after 'unpack 'apply-rollup-patch
,apply-rollup-patch-phase)
(replace 'configure ,configure-phase)
(add-after 'install 'post-install
,post-install-phase)
(add-before 'configure 'patch-makefile-SHELL
,patch-makefile-phase)
(add-before 'patch-source-shebangs 'remove-unneeded-shebang
,remove-shebang-phase)))))
(native-inputs
(if (%current-target-system)
(list pkg-config this-package) ;for 'tic'
(list pkg-config)))
`(,@(if (%current-target-system)
`(("self" ,this-package)) ;for `tic'
'())
("rollup-patch"
,(origin
(method url-fetch)
(uri (match (string-split (version-major+minor+point version) #\.)
((major minor point)
(string-append "https://invisible-mirror.net/archives"
"/ncurses/" major "." minor "/ncurses-"
major "." minor "-" point "-patch.sh.bz2"))))
(sha256
(base32
"16ny892yhimy6r4mmsgw3rcl0i15570ifn9c54g1ndyrk7kpmlgs"))))
("pkg-config" ,pkg-config)))
(native-search-paths
(list (search-path-specification
(variable "TERMINFO_DIRS")
@ -220,10 +237,13 @@ ncursesw library provides wide character support.")
(license x11)
(home-page "https://www.gnu.org/software/ncurses/")))
;; Needed by u-boot 2022.04+
;; Consider merging into ncurses for next core-updates cycle.
(define-public ncurses/tinfo-5
(package/inherit ncurses-5
(name "ncurses-with-tinfo")
(arguments
(substitute-keyword-arguments (package-arguments ncurses-5)
((#:configure-flags cf)
#~(cons "--with-termlib=tinfo" #$cf))))))
`(cons "--with-termlib=tinfo"
,cf))))))

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,161 @@
--- 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,

View File

@ -0,0 +1,16 @@
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));

View File

@ -0,0 +1,11 @@
--- 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`

View File

@ -0,0 +1,13 @@
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);

View File

@ -0,0 +1,52 @@
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

View File

@ -0,0 +1,68 @@
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);

View File

@ -0,0 +1,47 @@
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;

View File

@ -0,0 +1,109 @@
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;

View File

@ -0,0 +1,64 @@
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

View File

@ -0,0 +1,32 @@
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

View File

@ -0,0 +1,211 @@
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

View File

@ -0,0 +1,87 @@
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)

View File

@ -0,0 +1,12 @@
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) {

View File

@ -0,0 +1,27 @@
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

View File

@ -0,0 +1,22 @@
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

View File

@ -1,23 +0,0 @@
See comment in gnu/build/icecat-extension.scm.
diff --git a/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs b/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
index 0b885f6..0bbfbee 100644
--- a/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
+++ b/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
@@ -3607,6 +3607,7 @@ export const XPIDatabaseReconcile = {
if (
newAddon ||
oldAddon.updateDate != xpiState.mtime ||
+ oldAddon.path != xpiState.path ||
(aUpdateCompatibility && this.isAppBundledLocation(installLocation))
) {
newAddon = this.updateMetadata(
@@ -3615,8 +3616,6 @@ export const XPIDatabaseReconcile = {
xpiState,
newAddon
);
- } else if (oldAddon.path != xpiState.path) {
- newAddon = this.updatePath(installLocation, oldAddon, xpiState);
} else if (aUpdateCompatibility || aSchemaChange) {
newAddon = this.updateCompatibility(
installLocation,

View File

@ -1,38 +0,0 @@
Replace "/usr/lib/mozilla" (the system-wide directory for extensions and
native manifests) with "$ICECAT_SYSTEM_DIR".
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
index d3af49b495..4beef0aa7e 100644
--- a/toolkit/xre/nsXREDirProvider.cpp
+++ b/toolkit/xre/nsXREDirProvider.cpp
@@ -296,24 +296,12 @@ nsresult nsXREDirProvider::GetBackgroundTasksProfilesRootDir(
static nsresult GetSystemParentDirectory(nsIFile** aFile) {
nsresult rv;
nsCOMPtr<nsIFile> localDir;
-# if defined(XP_MACOSX)
- rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType,
- getter_AddRefs(localDir));
- if (NS_SUCCEEDED(rv)) {
- rv = localDir->AppendNative("Mozilla"_ns);
- }
-# else
- constexpr auto dirname =
-# ifdef HAVE_USR_LIB64_DIR
- "/usr/lib64/mozilla"_ns
-# elif defined(__OpenBSD__) || defined(__FreeBSD__)
- "/usr/local/lib/mozilla"_ns
-# else
- "/usr/lib/mozilla"_ns
-# endif
- ;
- rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir));
-# endif
+
+ const char* systemParentDir = getenv("ICECAT_SYSTEM_DIR");
+ if (!systemParentDir || !*systemParentDir) return NS_ERROR_FAILURE;
+
+ rv = NS_NewNativeLocalFile(nsDependentCString(systemParentDir), false,
+ getter_AddRefs(localDir));
if (NS_SUCCEEDED(rv)) {
localDir.forget(aFile);

View File

@ -1,917 +0,0 @@
From: John Kehayias
Date: Fri, 18 Oct 2024 20:33:02 -0400
Subject: [PATCH] Revert "Bug 1907512 - Remove duplicated desktop files
r=stransky"
This reverts commit 7ac2001cd0d4e1f44f104d9b17a427a009935e20 which removed the desktop files in favor of generating them. See upstream discussion at <https://bugzilla.mozilla.org/show_bug.cgi?id=1901703>.
---
.../search-provider-files/firefox.desktop | 274 +++++++++++++
.../org.mozilla.firefox.desktop | 386 ++++++++++++++++++
.../docker/firefox-snap/firefox.desktop | 219 ++++++++++
3 files changed, 879 insertions(+)
create mode 100644 browser/components/shell/search-provider-files/firefox.desktop
create mode 100644 taskcluster/docker/firefox-flatpak/org.mozilla.firefox.desktop
create mode 100644 taskcluster/docker/firefox-snap/firefox.desktop
diff --git a/browser/components/shell/search-provider-files/firefox.desktop b/browser/components/shell/search-provider-files/firefox.desktop
new file mode 100644
index 000000000000..575290acddc3
--- /dev/null
+++ b/browser/components/shell/search-provider-files/firefox.desktop
@@ -0,0 +1,274 @@
+[Desktop Entry]
+Version=1.0
+Name=Firefox
+GenericName=Web Browser
+GenericName[ca]=Navegador web
+GenericName[cs]=Webový prohlížeč
+GenericName[es]=Navegador web
+GenericName[fa]=مرورگر اینترنتی
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web
+GenericName[hu]=Webböngésző
+GenericName[it]=Browser Web
+GenericName[ja]=ウェブ・ブラウザ
+GenericName[ko]=웹 브라우저
+GenericName[nb]=Nettleser
+GenericName[nl]=Webbrowser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pl]=Przeglądarka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[sk]=Internetový prehliadač
+GenericName[sv]=Webbläsare
+Comment=Browse the Web
+Comment[ca]=Navegueu per el web
+Comment[cs]=Prohlížení stránek World Wide Webu
+Comment[de]=Im Internet surfen
+Comment[es]=Navegue por la web
+Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
+Comment[fi]=Selaa Internetin WWW-sivuja
+Comment[fr]=Navigue sur Internet
+Comment[hu]=A világháló böngészése
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧します
+Comment[ko]=웹을 돌아 다닙니다
+Comment[nb]=Surf på nettet
+Comment[nl]=Verken het internet
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pl]=Przeglądanie stron WWW
+Comment[pt]=Navegue na Internet
+Comment[pt_BR]=Navegue na Internet
+Comment[sk]=Prehliadanie internetu
+Comment[sv]=Surfa på webben
+Exec=firefox %u
+Icon=firefox
+Terminal=false
+Type=Application
+MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
+StartupNotify=true
+Categories=Network;WebBrowser;
+Keywords=web;browser;internet;
+Actions=new-window;new-private-window;
+DBusActivatable=true
+
+X-Desktop-File-Install-Version=0.24
+
+[Desktop Action new-window]
+Name=Open a New Window
+Name[ach]=Dirica manyen
+Name[af]=Nuwe venster
+Name[an]=Nueva finestra
+Name[ar]=نافذة جديدة
+Name[as]=নতুন উইন্ডো
+Name[ast]=Ventana nueva
+Name[az]=Yeni Pəncərə
+Name[be]=Новае акно
+Name[bg]=Нов прозорец
+Name[bn_BD]=নতুন উইন্ডো (N)
+Name[bn_IN]=নতুন উইন্ডো
+Name[br]=Prenestr nevez
+Name[brx]=गोदान उइन्ड'(N)
+Name[bs]=Novi prozor
+Name[ca]=Finestra nova
+Name[cak]=K'ak'a' tzuwäch
+Name[cs]=Nové okno
+Name[cy]=Ffenestr Newydd
+Name[da]=Nyt vindue
+Name[de]=Neues Fenster
+Name[dsb]=Nowe wokno
+Name[el]=Νέο παράθυρο
+Name[en_GB]=New Window
+Name[en_US]=New Window
+Name[en_ZA]=New Window
+Name[eo]=Nova fenestro
+Name[es_AR]=Nueva ventana
+Name[es_CL]=Nueva ventana
+Name[es_ES]=Nueva ventana
+Name[es_MX]=Nueva ventana
+Name[et]=Uus aken
+Name[eu]=Leiho berria
+Name[fa]=پنجره جدید‌
+Name[ff]=Henorde Hesere
+Name[fi]=Uusi ikkuna
+Name[fr]=Nouvelle fenêtre
+Name[fy_NL]=Nij finster
+Name[ga_IE]=Fuinneog Nua
+Name[gd]=Uinneag ùr
+Name[gl]=Nova xanela
+Name[gn]=Ovetã pyahu
+Name[gu_IN]=નવી વિન્ડો
+Name[he]=חלון חדש
+Name[hi_IN]=नया विंडो
+Name[hr]=Novi prozor
+Name[hsb]=Nowe wokno
+Name[hu]=Új ablak
+Name[hy_AM]=Նոր Պատուհան
+Name[id]=Jendela Baru
+Name[is]=Nýr gluggi
+Name[it]=Nuova finestra
+Name[ja]=新しいウィンドウ
+Name[ja_JP-mac]=新規ウインドウ
+Name[ka]=ახალი ფანჯარა
+Name[kk]=Жаңа терезе
+Name[km]=បង្អួច​​​ថ្មី
+Name[kn]=ಹೊಸ ಕಿಟಕಿ
+Name[ko]=새 창
+Name[kok]=नवें जनेल
+Name[ks]=نئئ وِنڈو
+Name[lij]=Neuvo barcon
+Name[lo]=ຫນ້າຕ່າງໃຫມ່
+Name[lt]=Naujas langas
+Name[ltg]=Jauns lūgs
+Name[lv]=Jauns logs
+Name[mai]=नव विंडो
+Name[mk]=Нов прозорец
+Name[ml]=പുതിയ ജാലകം
+Name[mr]=नवीन पटल
+Name[ms]=Tetingkap Baru
+Name[my]=ဝင်းဒိုးအသစ်
+Name[nb_NO]=Nytt vindu
+Name[ne_NP]=नयाँ सञ्झ्याल
+Name[nl]=Nieuw venster
+Name[nn_NO]=Nytt vindauge
+Name[or]=ନୂତନ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
+Name[pl]=Nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Nova janela
+Name[rm]=Nova fanestra
+Name[ro]=Fereastră nouă
+Name[ru]=Новое окно
+Name[sat]=नावा विंडो (N)
+Name[si]=නව කවුළුවක්
+Name[sk]=Nové okno
+Name[sl]=Novo okno
+Name[son]=Zanfun taaga
+Name[sq]=Dritare e Re
+Name[sr]=Нови прозор
+Name[sv_SE]=Nytt fönster
+Name[ta]=புதிய சாளரம்
+Name[te]=కొత్త విండో
+Name[th]=หน้าต่างใหม่
+Name[tr]=Yeni pencere
+Name[tsz]=Eraatarakua jimpani
+Name[uk]=Нове вікно
+Name[ur]=نیا دریچہ
+Name[uz]=Yangi oyna
+Name[vi]=Cửa sổ mới
+Name[wo]=Palanteer bu bees
+Name[xh]=Ifestile entsha
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開新視窗
+
+
+Exec=firefox --new-window %u
+
+[Desktop Action new-private-window]
+Name=Open a New Private Window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra privada
+Name[ar]=نافذة خاصة جديدة
+Name[as]=নতুন ব্যক্তিগত উইন্ডো
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni Məxfi Pəncərə
+Name[be]=Новае акно адасаблення
+Name[bg]=Нов прозорец за поверително сърфиране
+Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
+Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[brx]=गोदान प्राइभेट उइन्ड'
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cak]=K'ak'a' ichinan tzuwäch
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr Breifat Newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
+Name[en_GB]=New Private Window
+Name[en_US]=New Private Window
+Name[en_ZA]=New Private Window
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[fa]=پنجره ناشناس جدید
+Name[ff]=Henorde Suturo Hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog Nua Phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gn]=Ovetã ñemi pyahu
+Name[gu_IN]=નવી ખાનગી વિન્ડો
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नयी निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Սկսել Գաղտնի դիտարկում
+Name[id]=Jendela Mode Pribadi Baru
+Name[is]=Nýr huliðsgluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=新しいプライベートウィンドウ
+Name[ja_JP-mac]=新規プライベートウインドウ
+Name[ka]=ახალი პირადი ფანჯარა
+Name[kk]=Жаңа жекелік терезе
+Name[km]=បង្អួច​ឯកជន​ថ្មី
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사생활 보호 모드
+Name[kok]=नवो खाजगी विंडो
+Name[ks]=نْو پرایوٹ وینڈو&amp;
+Name[lij]=Neuvo barcon privou
+Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
+Name[lt]=Naujas privataus naršymo langas
+Name[ltg]=Jauns privatais lūgs
+Name[lv]=Jauns privātais logs
+Name[mai]=नया निज विंडो (W)
+Name[mk]=Нов приватен прозорец
+Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
+Name[mr]=नवीन वैयक्तिक पटल
+Name[ms]=Tetingkap Persendirian Baharu
+Name[my]=New Private Window
+Name[nb_NO]=Nytt privat vindu
+Name[ne_NP]=नयाँ निजी सञ्झ्याल
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
+Name[pl]=Nowe okno prywatne
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră privată nouă
+Name[ru]=Новое приватное окно
+Name[sat]=नावा निजेराक् विंडो (W )
+Name[si]=නව පුද්ගලික කවුළුව (W)
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e Re Private
+Name[sr]=Нови приватан прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=புதிய தனிப்பட்ட சாளரம்
+Name[te]=కొత్త ఆంతరంగిక విండో
+Name[th]=หน้าต่างส่วนตัวใหม่
+Name[tr]=Yeni gizli pencere
+Name[tsz]=Juchiiti eraatarakua jimpani
+Name[uk]=Приватне вікно
+Name[ur]=نیا نجی دریچہ
+Name[uz]=Yangi maxfiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[wo]=Panlanteeru biir bu bees
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建隐私浏览窗口
+Name[zh_TW]=新增隱私視窗
+Exec=firefox --private-window %u
diff --git a/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.desktop b/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.desktop
new file mode 100644
index 000000000000..21c3e7aec0f4
--- /dev/null
+++ b/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.desktop
@@ -0,0 +1,386 @@
+[Desktop Entry]
+Version=1.0
+Name=Firefox Web Browser
+Name[ar]=متصفح الويب فَيَرفُكْس
+Name[ast]=Restolador web Firefox
+Name[bn]=ফায়ারফক্স ওয়েব ব্রাউজার
+Name[ca]=Navegador web Firefox
+Name[cs]=Firefox Webový prohlížeč
+Name[da]=Firefox - internetbrowser
+Name[el]=Περιηγητής Firefox
+Name[es]=Navegador web Firefox
+Name[et]=Firefoxi veebibrauser
+Name[fa]=مرورگر اینترنتی Firefox
+Name[fi]=Firefox-selain
+Name[fr]=Navigateur Web Firefox
+Name[gl]=Navegador web Firefox
+Name[he]=דפדפן האינטרנט Firefox
+Name[hr]=Firefox web preglednik
+Name[hu]=Firefox webböngésző
+Name[it]=Firefox Browser Web
+Name[ja]=Firefox ウェブ・ブラウザ
+Name[ko]=Firefox 웹 브라우저
+Name[ku]=Geroka torê Firefox
+Name[lt]=Firefox interneto naršyklė
+Name[nb]=Firefox Nettleser
+Name[nl]=Firefox webbrowser
+Name[nn]=Firefox Nettlesar
+Name[no]=Firefox Nettleser
+Name[pl]=Przeglądarka WWW Firefox
+Name[pt]=Firefox Navegador Web
+Name[pt_BR]=Navegador Web Firefox
+Name[ro]=Firefox Navigator Internet
+Name[ru]=Веб-браузер Firefox
+Name[sk]=Firefox - internetový prehliadač
+Name[sl]=Firefox spletni brskalnik
+Name[sv]=Firefox webbläsare
+Name[tr]=Firefox Web Tarayıcısı
+Name[ug]=Firefox توركۆرگۈ
+Name[uk]=Веб-браузер Firefox
+Name[vi]=Trình duyệt web Firefox
+Name[zh_CN]=Firefox 网络浏览器
+Name[zh_TW]=Firefox 網路瀏覽器
+Comment=Browse the World Wide Web
+Comment[ar]=تصفح الشبكة العنكبوتية العالمية
+Comment[ast]=Restola pela Rede
+Comment[bn]=ইন্টারনেট ব্রাউজ করুন
+Comment[ca]=Navegueu per la web
+Comment[cs]=Prohlížení stránek World Wide Webu
+Comment[da]=Surf på internettet
+Comment[de]=Im Internet surfen
+Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web)
+Comment[es]=Navegue por la web
+Comment[et]=Lehitse veebi
+Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
+Comment[fi]=Selaa Internetin WWW-sivuja
+Comment[fr]=Naviguer sur le Web
+Comment[gl]=Navegar pola rede
+Comment[he]=גלישה ברחבי האינטרנט
+Comment[hr]=Pretražite web
+Comment[hu]=A világháló böngészése
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧します
+Comment[ko]=웹을 돌아 다닙니다
+Comment[ku]=Li torê bigere
+Comment[lt]=Naršykite internete
+Comment[nb]=Surf på nettet
+Comment[nl]=Verken het internet
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pl]=Przeglądanie stron WWW
+Comment[pt]=Navegue na Internet
+Comment[pt_BR]=Navegue na Internet
+Comment[ro]=Navigați pe Internet
+Comment[ru]=Доступ в Интернет
+Comment[sk]=Prehliadanie internetu
+Comment[sl]=Brskajte po spletu
+Comment[sv]=Surfa på webben
+Comment[tr]=İnternet'te Gezinin
+Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
+Comment[uk]=Перегляд сторінок Інтернету
+Comment[vi]=Để duyệt các trang web
+Comment[zh_CN]=浏览互联网
+Comment[zh_TW]=瀏覽網際網路
+GenericName=Web Browser
+GenericName[ar]=متصفح ويب
+GenericName[ast]=Restolador Web
+GenericName[bn]=ওয়েব ব্রাউজার
+GenericName[ca]=Navegador web
+GenericName[cs]=Webový prohlížeč
+GenericName[da]=Webbrowser
+GenericName[el]=Περιηγητής διαδικτύου
+GenericName[es]=Navegador web
+GenericName[et]=Veebibrauser
+GenericName[fa]=مرورگر اینترنتی
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web
+GenericName[gl]=Navegador Web
+GenericName[he]=דפדפן אינטרנט
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[it]=Browser web
+GenericName[ja]=ウェブ・ブラウザ
+GenericName[ko]=웹 브라우저
+GenericName[ku]=Geroka torê
+GenericName[lt]=Interneto naršyklė
+GenericName[nb]=Nettleser
+GenericName[nl]=Webbrowser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pl]=Przeglądarka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
+GenericName[sk]=Internetový prehliadač
+GenericName[sl]=Spletni brskalnik
+GenericName[sv]=Webbläsare
+GenericName[tr]=Web Tarayıcı
+GenericName[ug]=توركۆرگۈ
+GenericName[uk]=Веб-браузер
+GenericName[vi]=Trình duyệt Web
+GenericName[zh_CN]=网络浏览器
+GenericName[zh_TW]=網路瀏覽器
+Keywords=Internet;WWW;Browser;Web;Explorer
+Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب
+Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador
+Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer
+Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer
+Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet
+Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen
+Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ
+Keywords[es]=Explorador;Internet;WWW
+Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa
+Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur
+Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה;
+Keywords[hr]=Internet;WWW;preglednik;Web
+Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer
+Keywords[it]=Internet;WWW;Browser;Web;Navigatore
+Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk
+Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ
+Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside
+Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online
+Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис
+Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer
+Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet
+Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara
+Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд
+Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web
+Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站;
+Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐
+Exec=firefox %u
+Icon=org.mozilla.firefox
+Terminal=false
+Type=Application
+MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
+StartupNotify=true
+Categories=Network;WebBrowser;
+Actions=new-window;new-private-window;profile-manager-window;
+StartupWMClass=firefox
+
+
+[Desktop Action new-window]
+Name=Open a New Window
+Name[ach]=Dirica manyen
+Name[af]=Nuwe venster
+Name[an]=Nueva finestra
+Name[ar]=نافذة جديدة
+Name[as]=নতুন উইন্ডো
+Name[ast]=Ventana nueva
+Name[az]=Yeni Pəncərə
+Name[be]=Новае акно
+Name[bg]=Нов прозорец
+Name[bn_BD]=নতুন উইন্ডো (N)
+Name[bn_IN]=নতুন উইন্ডো
+Name[br]=Prenestr nevez
+Name[brx]=गोदान उइन्ड'(N)
+Name[bs]=Novi prozor
+Name[ca]=Finestra nova
+Name[cak]=K'ak'a' tzuwäch
+Name[cs]=Nové okno
+Name[cy]=Ffenestr Newydd
+Name[da]=Nyt vindue
+Name[de]=Neues Fenster
+Name[dsb]=Nowe wokno
+Name[el]=Νέο παράθυρο
+Name[en_GB]=New Window
+Name[en_US]=New Window
+Name[en_ZA]=New Window
+Name[eo]=Nova fenestro
+Name[es_AR]=Nueva ventana
+Name[es_CL]=Nueva ventana
+Name[es_ES]=Nueva ventana
+Name[es_MX]=Nueva ventana
+Name[et]=Uus aken
+Name[eu]=Leiho berria
+Name[fa]=پنجره جدید‌
+Name[ff]=Henorde Hesere
+Name[fi]=Uusi ikkuna
+Name[fr]=Nouvelle fenêtre
+Name[fy_NL]=Nij finster
+Name[ga_IE]=Fuinneog Nua
+Name[gd]=Uinneag ùr
+Name[gl]=Nova xanela
+Name[gn]=Ovetã pyahu
+Name[gu_IN]=નવી વિન્ડો
+Name[he]=חלון חדש
+Name[hi_IN]=नया विंडो
+Name[hr]=Novi prozor
+Name[hsb]=Nowe wokno
+Name[hu]=Új ablak
+Name[hy_AM]=Նոր Պատուհան
+Name[id]=Jendela Baru
+Name[is]=Nýr gluggi
+Name[it]=Nuova finestra
+Name[ja]=新しいウィンドウ
+Name[ja_JP]=新規ウインドウ
+Name[ka]=ახალი ფანჯარა
+Name[kk]=Жаңа терезе
+Name[km]=បង្អួច​​​ថ្មី
+Name[kn]=ಹೊಸ ಕಿಟಕಿ
+Name[ko]=새 창
+Name[kok]=नवें जनेल
+Name[ks]=نئئ وِنڈو
+Name[lij]=Neuvo barcon
+Name[lo]=ຫນ້າຕ່າງໃຫມ່
+Name[lt]=Naujas langas
+Name[ltg]=Jauns lūgs
+Name[lv]=Jauns logs
+Name[mai]=नव विंडो
+Name[mk]=Нов прозорец
+Name[ml]=പുതിയ ജാലകം
+Name[mr]=नवीन पटल
+Name[ms]=Tetingkap Baru
+Name[my]=ဝင်းဒိုးအသစ်
+Name[nb_NO]=Nytt vindu
+Name[ne_NP]=नयाँ सञ्झ्याल
+Name[nl]=Nieuw venster
+Name[nn_NO]=Nytt vindauge
+Name[or]=ନୂତନ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
+Name[pl]=Nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Nova janela
+Name[rm]=Nova fanestra
+Name[ro]=Fereastră nouă
+Name[ru]=Новое окно
+Name[sat]=नावा विंडो (N)
+Name[si]=නව කවුළුවක්
+Name[sk]=Nové okno
+Name[sl]=Novo okno
+Name[son]=Zanfun taaga
+Name[sq]=Dritare e Re
+Name[sr]=Нови прозор
+Name[sv_SE]=Nytt fönster
+Name[ta]=புதிய சாளரம்
+Name[te]=కొత్త విండో
+Name[th]=หน้าต่างใหม่
+Name[tr]=Yeni pencere
+Name[tsz]=Eraatarakua jimpani
+Name[uk]=Нове вікно
+Name[ur]=نیا دریچہ
+Name[uz]=Yangi oyna
+Name[vi]=Cửa sổ mới
+Name[wo]=Palanteer bu bees
+Name[xh]=Ifestile entsha
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開新視窗
+Exec=firefox --new-window %u
+
+[Desktop Action new-private-window]
+Name=Open a New Private Window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra privada
+Name[ar]=نافذة خاصة جديدة
+Name[as]=নতুন ব্যক্তিগত উইন্ডো
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni Məxfi Pəncərə
+Name[be]=Новае акно адасаблення
+Name[bg]=Нов прозорец за поверително сърфиране
+Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
+Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[brx]=गोदान प्राइभेट उइन्ड'
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cak]=K'ak'a' ichinan tzuwäch
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr Breifat Newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
+Name[en_GB]=New Private Window
+Name[en_US]=New Private Window
+Name[en_ZA]=New Private Window
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[fa]=پنجره ناشناس جدید
+Name[ff]=Henorde Suturo Hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog Nua Phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gn]=Ovetã ñemi pyahu
+Name[gu_IN]=નવી ખાનગી વિન્ડો
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नयी निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Սկսել Գաղտնի դիտարկում
+Name[id]=Jendela Mode Pribadi Baru
+Name[is]=Nýr huliðsgluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=新しいプライベートウィンドウ
+Name[ja_JP]=新規プライベートウインドウ
+Name[ka]=ახალი პირადი ფანჯარა
+Name[kk]=Жаңа жекелік терезе
+Name[km]=បង្អួច​ឯកជន​ថ្មី
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사생활 보호 모드
+Name[kok]=नवो खाजगी विंडो
+Name[ks]=نْو پرایوٹ وینڈو&amp;
+Name[lij]=Neuvo barcon privou
+Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
+Name[lt]=Naujas privataus naršymo langas
+Name[ltg]=Jauns privatais lūgs
+Name[lv]=Jauns privātais logs
+Name[mai]=नया निज विंडो (W)
+Name[mk]=Нов приватен прозорец
+Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
+Name[mr]=नवीन वैयक्तिक पटल
+Name[ms]=Tetingkap Persendirian Baharu
+Name[my]=New Private Window
+Name[nb_NO]=Nytt privat vindu
+Name[ne_NP]=नयाँ निजी सञ्झ्याल
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
+Name[pl]=Nowe okno prywatne
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră privată nouă
+Name[ru]=Новое приватное окно
+Name[sat]=नावा निजेराक् विंडो (W )
+Name[si]=නව පුද්ගලික කවුළුව (W)
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e Re Private
+Name[sr]=Нови приватан прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=புதிய தனிப்பட்ட சாளரம்
+Name[te]=కొత్త ఆంతరంగిక విండో
+Name[th]=หน้าต่างส่วนตัวใหม่
+Name[tr]=Yeni gizli pencere
+Name[tsz]=Juchiiti eraatarakua jimpani
+Name[uk]=Приватне вікно
+Name[ur]=نیا نجی دریچہ
+Name[uz]=Yangi maxfiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[wo]=Panlanteeru biir bu bees
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建隐私浏览窗口
+Name[zh_TW]=新增隱私視窗
+Exec=firefox --private-window %u
+
+[Desktop Action profile-manager-window]
+Name=Open the Profile Manager
+Name[cs]=Správa profilů
+Name[de]=Profilverwaltung öffnen
+Name[es]=Abrir el Gestor de Perfiles
+Name[fr]=Ouvrir le gestionnaire de profils
+Exec=firefox --ProfileManager
diff --git a/taskcluster/docker/firefox-snap/firefox.desktop b/taskcluster/docker/firefox-snap/firefox.desktop
new file mode 100644
index 000000000000..73e36e8d83de
--- /dev/null
+++ b/taskcluster/docker/firefox-snap/firefox.desktop
@@ -0,0 +1,219 @@
+[Desktop Entry]
+Version=1.0
+Name=Firefox Web Browser
+Name[ar]=متصفح الويب فَيَرفُكْس
+Name[ast]=Restolador web Firefox
+Name[bn]=ফায়ারফক্স ওয়েব ব্রাউজার
+Name[ca]=Navegador web Firefox
+Name[cs]=Firefox Webový prohlížeč
+Name[da]=Firefox - internetbrowser
+Name[el]=Περιηγητής Firefox
+Name[es]=Navegador web Firefox
+Name[et]=Firefoxi veebibrauser
+Name[fa]=مرورگر اینترنتی Firefox
+Name[fi]=Firefox-selain
+Name[fr]=Navigateur Web Firefox
+Name[gl]=Navegador web Firefox
+Name[he]=דפדפן האינטרנט Firefox
+Name[hr]=Firefox web preglednik
+Name[hu]=Firefox webböngésző
+Name[it]=Firefox Browser Web
+Name[ja]=Firefox ウェブ・ブラウザ
+Name[ko]=Firefox 웹 브라우저
+Name[ku]=Geroka torê Firefox
+Name[lt]=Firefox interneto naršyklė
+Name[nb]=Firefox Nettleser
+Name[nl]=Firefox webbrowser
+Name[nn]=Firefox Nettlesar
+Name[no]=Firefox Nettleser
+Name[pl]=Przeglądarka WWW Firefox
+Name[pt]=Firefox Navegador Web
+Name[pt_BR]=Navegador Web Firefox
+Name[ro]=Firefox Navigator Internet
+Name[ru]=Веб-браузер Firefox
+Name[sk]=Firefox - internetový prehliadač
+Name[sl]=Firefox spletni brskalnik
+Name[sv]=Firefox webbläsare
+Name[tr]=Firefox Web Tarayıcısı
+Name[ug]=Firefox توركۆرگۈ
+Name[uk]=Веб-браузер Firefox
+Name[vi]=Trình duyệt web Firefox
+Name[zh_CN]=Firefox 网络浏览器
+Name[zh_TW]=Firefox 網路瀏覽器
+Comment=Browse the World Wide Web
+Comment[ar]=تصفح الشبكة العنكبوتية العالمية
+Comment[ast]=Restola pela Rede
+Comment[bn]=ইন্টারনেট ব্রাউজ করুন
+Comment[ca]=Navegueu per la web
+Comment[cs]=Prohlížení stránek World Wide Webu
+Comment[da]=Surf på internettet
+Comment[de]=Im Internet surfen
+Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web)
+Comment[es]=Navegue por la web
+Comment[et]=Lehitse veebi
+Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
+Comment[fi]=Selaa Internetin WWW-sivuja
+Comment[fr]=Naviguer sur le Web
+Comment[gl]=Navegar pola rede
+Comment[he]=גלישה ברחבי האינטרנט
+Comment[hr]=Pretražite web
+Comment[hu]=A világháló böngészése
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧します
+Comment[ko]=웹을 돌아 다닙니다
+Comment[ku]=Li torê bigere
+Comment[lt]=Naršykite internete
+Comment[nb]=Surf på nettet
+Comment[nl]=Verken het internet
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pl]=Przeglądanie stron WWW
+Comment[pt]=Navegue na Internet
+Comment[pt_BR]=Navegue na Internet
+Comment[ro]=Navigați pe Internet
+Comment[ru]=Доступ в Интернет
+Comment[sk]=Prehliadanie internetu
+Comment[sl]=Brskajte po spletu
+Comment[sv]=Surfa på webben
+Comment[tr]=İnternet'te Gezinin
+Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
+Comment[uk]=Перегляд сторінок Інтернету
+Comment[vi]=Để duyệt các trang web
+Comment[zh_CN]=浏览互联网
+Comment[zh_TW]=瀏覽網際網路
+GenericName=Web Browser
+GenericName[ar]=متصفح ويب
+GenericName[ast]=Restolador Web
+GenericName[bn]=ওয়েব ব্রাউজার
+GenericName[ca]=Navegador web
+GenericName[cs]=Webový prohlížeč
+GenericName[da]=Webbrowser
+GenericName[el]=Περιηγητής διαδικτύου
+GenericName[es]=Navegador web
+GenericName[et]=Veebibrauser
+GenericName[fa]=مرورگر اینترنتی
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web
+GenericName[gl]=Navegador Web
+GenericName[he]=דפדפן אינטרנט
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[it]=Browser web
+GenericName[ja]=ウェブ・ブラウザ
+GenericName[ko]=웹 브라우저
+GenericName[ku]=Geroka torê
+GenericName[lt]=Interneto naršyklė
+GenericName[nb]=Nettleser
+GenericName[nl]=Webbrowser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pl]=Przeglądarka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
+GenericName[sk]=Internetový prehliadač
+GenericName[sl]=Spletni brskalnik
+GenericName[sv]=Webbläsare
+GenericName[tr]=Web Tarayıcı
+GenericName[ug]=توركۆرگۈ
+GenericName[uk]=Веб-браузер
+GenericName[vi]=Trình duyệt Web
+GenericName[zh_CN]=网络浏览器
+GenericName[zh_TW]=網路瀏覽器
+Keywords=Internet;WWW;Browser;Web;Explorer
+Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب
+Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador
+Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer
+Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer
+Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet
+Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen
+Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ
+Keywords[es]=Explorador;Internet;WWW
+Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa
+Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur
+Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה;
+Keywords[hr]=Internet;WWW;preglednik;Web
+Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer
+Keywords[it]=Internet;WWW;Browser;Web;Navigatore
+Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk
+Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ
+Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside
+Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online
+Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис
+Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer
+Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet
+Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara
+Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд
+Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web
+Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站;
+Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐
+Exec=firefox %u
+Terminal=false
+X-MultipleArgs=false
+Type=Application
+Icon=/browser/chrome/icons/default/default128.png
+Categories=GNOME;GTK;Network;WebBrowser;
+MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;
+StartupNotify=true
+Actions=NewWindow;NewPrivateWindow;
+
+[Desktop Action NewWindow]
+Name=Open a New Window
+Name[ar]=افتح نافذة جديدة
+Name[ast]=Abrir una ventana nueva
+Name[bn]=Abrir una ventana nueva
+Name[ca]=Obre una finestra nova
+Name[cs]=Otevřít nové okno
+Name[da]=Åbn et nyt vindue
+Name[de]=Ein neues Fenster öffnen
+Name[el]=Άνοιγμα νέου παραθύρου
+Name[es]=Abrir una ventana nueva
+Name[fi]=Avaa uusi ikkuna
+Name[fr]=Ouvrir une nouvelle fenêtre
+Name[gl]=Abrir unha nova xanela
+Name[he]=פתיחת חלון חדש
+Name[hr]=Otvori novi prozor
+Name[hu]=Új ablak nyitása
+Name[it]=Apri una nuova finestra
+Name[ja]=新しいウィンドウを開く
+Name[ko]=새 창 열기
+Name[ku]=Paceyeke nû veke
+Name[lt]=Atverti naują langą
+Name[nb]=Åpne et nytt vindu
+Name[nl]=Nieuw venster openen
+Name[pt]=Abrir nova janela
+Name[pt_BR]=Abrir nova janela
+Name[ro]=Deschide o fereastră nouă
+Name[ru]=Новое окно
+Name[sk]=Otvoriť nové okno
+Name[sl]=Odpri novo okno
+Name[sv]=Öppna ett nytt fönster
+Name[tr]=Yeni pencere aç
+Name[ug]=يېڭى كۆزنەك ئېچىش
+Name[uk]=Відкрити нове вікно
+Name[vi]=Mở cửa sổ mới
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開啟新視窗
+Exec=firefox -new-window
+
+[Desktop Action NewPrivateWindow]
+Name=Open a New Private Window
+Name[ar]=افتح نافذة جديدة للتصفح الخاص
+Name[ca]=Obre una finestra nova en mode d'incògnit
+Name[de]=Ein neues privates Fenster öffnen
+Name[es]=Abrir una ventana privada nueva
+Name[fi]=Avaa uusi yksityinen ikkuna
+Name[fr]=Ouvrir une nouvelle fenêtre de navigation privée
+Name[he]=פתיחת חלון גלישה פרטית חדש
+Name[hu]=Új privát ablak nyitása
+Name[it]=Apri una nuova finestra anonima
+Name[nb]=Åpne et nytt privat vindu
+Name[ru]=Новое приватное окно
+Name[sl]=Odpri novo okno zasebnega brskanja
+Name[tr]=Yeni bir pencere aç
+Name[uk]=Відкрити нове вікно у потайливому режимі
+Name[zh_TW]=開啟新隱私瀏覽視窗
+Exec=firefox -private-window
--
2.39.5 (Apple Git-154)

View File

@ -1,37 +0,0 @@
Replace "/usr/lib/mozilla" (the system-wide directory for extensions and
native manifests) with "$ICECAT_SYSTEM_DIR".
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
index e3be04e70c..a3501c4f44 100644
--- a/toolkit/xre/nsXREDirProvider.cpp
+++ b/toolkit/xre/nsXREDirProvider.cpp
@@ -280,24 +280,11 @@ nsresult nsXREDirProvider::GetBackgroundTasksProfilesRootDir(
static nsresult GetSystemParentDirectory(nsIFile** aFile) {
nsresult rv;
nsCOMPtr<nsIFile> localDir;
-# if defined(XP_MACOSX)
- rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType,
- getter_AddRefs(localDir));
- if (NS_SUCCEEDED(rv)) {
- rv = localDir->AppendNative("Mozilla"_ns);
- }
-# else
- constexpr auto dirname =
-# ifdef HAVE_USR_LIB64_DIR
- "/usr/lib64/mozilla"_ns
-# elif defined(__OpenBSD__) || defined(__FreeBSD__)
- "/usr/local/lib/mozilla"_ns
-# else
- "/usr/lib/mozilla"_ns
-# endif
- ;
- rv = NS_NewNativeLocalFile(dirname, getter_AddRefs(localDir));
-# endif
+ const char* systemParentDir = getenv("ICECAT_SYSTEM_DIR");
+ if (!systemParentDir || !*systemParentDir) return NS_ERROR_FAILURE;
+
+ rv = NS_NewNativeLocalFile(nsDependentCString(systemParentDir),
+ getter_AddRefs(localDir));
if (NS_SUCCEEDED(rv)) {
localDir.forget(aFile);

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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:)

View File

@ -1,12 +1,26 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
;;; Copyright © 2021 Kahka F
;;; Copyright © 2021, 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; 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 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)
@ -15,147 +29,149 @@
(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"))
;; 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")))
(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")))
(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"))))))
(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")))
#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/"))
(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)))))))))))
(substitute* (string-append out "/etc/hp/hplip.conf")
(("/usr") out))
#t)))))))))

View File

@ -1,236 +0,0 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2024 Karl Hallsby <karl@hallsby.com
(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 glib)
#: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:)
#:use-module ((guix licenses) #:prefix free-license:))
(define-public anytype
(package
(name "anytype")
(version "0.44.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
"0djyvz6y4pk277xa2mc4w6w029i3f7zd2d1pniyrpayhnna6f670"))))
(build-system chromium-binary-build-system)
(arguments
(list
;; almost 300MB
#:substitutable? #f
#:validate-runpath? #f ; TODO: fails on wrapped binary and included other files
#:wrapper-plan
#~(map (lambda (file)
(string-append "opt/Anytype/" file))
'("anytype"
"chrome-sandbox"
"chrome_crashpad_handler"
"libEGL.so"
"libffmpeg.so"
"libGLESv2.so"
"libvk_swiftshader.so"
"libvulkan.so.1"
"resources/app.asar.unpacked/node_modules/keytar/build/Release/keytar.node"
"resources/app.asar.unpacked/node_modules/keytar/build/Release/obj.target/keytar.node"))
#:install-plan
#~'(("opt/" "/share")
("usr/share/" "/share"))
#:phases
#~(modify-phases %standard-phases
(add-after 'binary-unpack 'disable-auto-updates
(lambda _
(delete-file "opt/Anytype/resources/app-update.yml")))
;; We don't need regedit, a node library to interact with Windows
;; hosts.
(add-after 'binary-unpack 'strip-regedit
(lambda _
(delete-file-recursively
(string-append "opt/Anytype/resources/app.asar.unpacked/"
"node_modules/regedit"))))
(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"))))
(define-public zotero
(package
(name "zotero")
(version "6.0.35")
(source
(origin
;; Can switch to git-fetch from Github too!
(method url-fetch)
(uri
(string-append "https://download.zotero.org/client/release/"
version "/Zotero-" version "_linux-x86_64.tar.bz2"))
(sha256
(base32
"17f9an43jwnqpcslbvnhg7hrzkvs2whzwg4ysdgy2gl4m6cln18w"))
(snippet
#~(begin
(use-modules (guix build utils))
;; Disable Zotero's automatic update feature.
(substitute* "defaults/preferences/prefs.js"
(("pref\\(\"app.update.enabled\", true\\)")
"pref(\"app.update.enabled\", false)")
(("pref\\(\"app.update.auto\", true\\)")
"pref(\"app.update.auto\", false)"))))))
(build-system chromium-binary-build-system)
(arguments
(list
;; ~70 MiB
#:substitutable? #f
#:validate-runpath? #t
#:wrapper-plan
#~'("zotero-bin")
#:phases
#~(modify-phases %standard-phases
(add-before 'install-wrapper 'install-entrypoint
(lambda _
(let* ((bin (string-append #$output "/bin")))
(mkdir-p bin)
(symlink (string-append #$output "/zotero")
(string-append bin "/zotero")))))
(add-after 'install 'create-desktop-file
(lambda _
(make-desktop-entry-file
(string-append #$output "/share/applications/zotero.desktop")
#:name "Zotero"
#:type "Application"
#:generic-name "Reference Management"
#:exec (string-append #$output "/bin/zotero -url %U")
#:icon "zotero"
#:keywords '("zotero")
#:categories '("Office" "Database")
#:terminal #f
#:startup-notify #t
#:startup-w-m-class "zotero"
;; MIME-type list taken from Zotero's shipped .desktop file
#:mime-type '("x-scheme-handler/zotero" "text/plain"
"application/x-research-info-systems"
"text/x-research-info-systems"
"text/ris"
"application/x-endnote-refer"
"application/x-inst-for-Scientific-info"
"application/mods+xml"
"application/rdf+xml"
"application/x-bibtex"
"text/x-bibtex"
"application/marc"
"application/vnd.citationstyles.style+xml")
#:comment
'(("en" "Collect, organize, cite, and share your research sources")
(#f "Collect, organize, cite, and share your research sources")))))
(add-after 'install 'install-icons
(lambda _
(let ((icon-sizes (list 16 32 48 256)))
(for-each
(lambda (size)
(mkdir-p (string-append #$output "/share/icons/hicolor/"
size "x" size "/apps"))
(copy-file
(string-append "chrome/icons/default/default" size ".png")
(string-append #$output "/share/icons/hicolor/"
size "x" size "/apps/zotero.png")))
(map number->string icon-sizes))))))))
;; The zotero script that we wrap (which produces .zotero-real), has
;; this open file limit step done for us. If that script ever goes
;; away, then we can just uncomment this one.
;; (add-after 'install-wrapper 'raise-open-file-limit
;; (lambda _
;; (let ((file (string-append #$output "/bin/zotero")))
;; (with-output-to-file file
;; (lambda _
;; (display
;; (string-append
;; "#!/bin/sh\n"
;; ;; Raise the open files limit because Mozilla file
;; ;; functions leave files open for a tiny bit longer than
;; ;; necessary, so an installation with many translators and
;; ;; styles can exceed the default 1024 file limit. ulimit
;; ;; is a shell built-in, so we cannot use Guix's
;; ;; program-file function.
;; "ulimit -n 4096\n"
;; #$output "/bin/zotero-bin" " -app " #$output "/application.ini" " \"$@\""))))
;; (chmod file #o755))))
(inputs (list dbus-glib libxt))
(synopsis "Collect, organize, cite, and share your research sources")
;; If we build from source, then we may be able to support more
;; architectures. But Zotero is a Firefox/Electron app that uses a lot of
;; JavaScript, which may be problematic when packaging using Guix.
(supported-systems '("x86_64-linux"))
(description "Zotero is a research reference and bibliography tool.
Zotero helps you organize your research any way you want. You can sort items
into collections and tag them with keywords. Zotero instantly creates
references and bibliographies for any text editor, and directly inside Word,
LibreOffice, and Google Docs for over 10,000 citation styles.")
(home-page "https://www.zotero.org")
(license free-license:agpl3)))

View File

@ -1,5 +1,17 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
;;;
;;; This program is free software: you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <https://www.gnu.org/licenses/>.
(define-module (nongnu packages radio)
#:use-module (gnu packages gcc)
@ -85,27 +97,25 @@ package. E.g.: @code{(udev-rules-service 'sdrplay sdrplay)}")
"/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
(package
(name "soapysdrplay3")
(version "0.4.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/pothosware/SoapySDRPlay3")
(commit (string-append "soapy-sdrplay3-" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0kp5gz03c29kxclaqijpyqknaijlbldrhy04mn98vnli9g1h1isq"))))
(build-system cmake-build-system)
(inputs
(list sdrplay soapysdr))
(arguments
`(#:tests? #f)) ; No test suite
(home-page "https://github.com/pothosware/SoapySDRPlay3/wiki")
(synopsis "SoapySDR SDRplay module")
(description "This package provides SDRplay devices support to the
SoapySDR library.")
(license expat))))
(license expat)))

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)

View File

@ -1,23 +1,34 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020 pkill-9
;;; Copyright © 2020, 2021 ison <ison@airmail.cc>
;;; Copyright © 2021 pineapples
;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
;;; Copyright © 2021 Kozo <kozodev@runbox.com>
;;; Copyright © 2021, 2022 John Kehayias <john.kehayias@protonmail.com>
;;; 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>
;;;
;;; 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/>.
;;; 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 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 sandbox shell aids in debugging missing container elements. For
;;; example a missing symlink may be created manually before launching the
;;; package to verify that the fix works before filing a bug report.
;;; example a missing symlink may be created manually before launching Steam
;;; 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
@ -32,58 +43,62 @@
;;; (script run in-container which performs additional setup before
;;; launching the desired application)
;;; References:
;;; -> Wrapped package {inside container}.
;;; -> Wrapped package {inside container} (in this case Steam).
;;; 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 (nonguix multiarch-container)
#:use-module (gnu packages)
#:use-module (gnu packages base)
#:use-module (guix build-system trivial)
(define-module (nongnu packages steam-client)
#:use-module ((guix licenses) #:prefix license:)
#:use-module ((nonguix licenses) #:prefix license:)
#:use-module (guix gexp)
#:use-module (guix records)
#:use-module (guix git-download)
#:use-module (guix utils)
#: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))
#:use-module (guix records)
#:use-module (guix download)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python)
#:use-module (guix build-system trivial)
#:use-module (guix transformations)
#:use-module (gnu packages)
#:use-module (gnu packages audio)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages certs)
#:use-module (gnu packages compression)
#:use-module (gnu packages elf)
#:use-module (gnu packages file)
#:use-module (gnu packages fonts)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnome)
#:use-module (gnu packages graphics)
#:use-module (gnu packages libbsd)
#:use-module (gnu packages libusb)
#:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
#:use-module (gnu packages logging)
#:use-module (nongnu packages nvidia)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages pulseaudio)
#:use-module (gnu packages python)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages toolkits)
#:use-module (gnu packages video)
#:use-module (nonguix utils))
(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)
@ -91,8 +106,6 @@
(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 '()))
@ -106,10 +119,137 @@
(description ngc-description (default #f))
(license ngc-license (default #f)))
(define steam-client
(package
(name "steam-client")
(version "1.0.0.75")
(source
(origin
(method url-fetch)
(uri (string-append "http://repo.steampowered.com/steam/archive/precise/steam_"
version ".tar.gz"))
(sha256
(base32
"19rn29slsxv7b5fisr1jzn79bskzifbj5hmxqn2436ivwfjna9g5"))
(file-name (string-append name "-" version ".tar.gz"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; There are no tests.
#:validate-runpath? #f ; Looks for bin/steam which doesn't exist.
#:make-flags
(list "PREFIX=" (string-append "DESTDIR=" (assoc-ref %outputs "out")))
#:phases
(modify-phases %standard-phases
(delete 'configure)
;; Patch Makefile so it creates links to the store rather than /lib.
(add-after 'unpack 'patch-makefile
(lambda _
(substitute* "Makefile"
(("-fns ")
"-fns $(DESTDIR)"))))
(delete 'patch-dot-desktop-files)
(add-after 'unpack 'patch-startscript
(lambda _
(substitute* "bin_steam.sh"
(("/usr") (assoc-ref %outputs "out")))))
(add-after 'patch-dot-desktop-files 'patch-desktop-file
(lambda _
(let ((path (string-append (assoc-ref %outputs "out")
"/share/applications/")))
(substitute* (string-append path "steam.desktop")
(("Exec=.*/steam") "Exec=steam"))
(copy-file (string-append path "steam.desktop")
(string-append path "steam-asound32.desktop"))
(substitute* (string-append path "steam-asound32.desktop")
(("Exec=steam %U") "Exec=steam %U -- --asound32")
(("Name=Steam") "Name=Steam (32-bit ALSA)")))))
;; Steamdeps installs missing packages, which doesn't work with Guix.
(add-after 'install-binaries 'post-install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref %outputs "out")))
(delete-file (string-append out "/lib/steam/bin_steamdeps.py"))
(delete-file (string-append out "/bin/steamdeps"))))))))
(home-page "https://store.steampowered.com")
(synopsis "Digital distribution platform for managing and playing games")
(description "Steam is a digital software distribution platform created by Valve.")
(license (license:nonfree "file:///share/doc/steam/steam_subscriber_agreement.txt"))))
(define glibc-for-fhs
(package
(inherit glibc)
(name "glibc-for-fhs")
(source (origin (inherit (package-source glibc))
;; Remove Guix's patch to read ld.so.cache from /gnu/store
;; directories, re-enabling the default /etc/ld.so.cache
;; behavior.
(patches (delete (car (search-patches "glibc-dl-cache.patch"))
(origin-patches (package-source glibc))))))))
;; After guix commit to add a replacement for expat (security fixes),
;; https://git.savannah.gnu.org/cgit/guix.git/commit/?id=2045852b096131a714409aa0cc4fe17938f60b15
;; a profile collision happens with the propagated expat (now grafted) from
;; fontconfig. See upstream report https://issues.guix.gnu.org/53406
;; So we define a fontconfig variation that explicitly does the expat replacement
;; which works around this bug for now, at the cost of building fontconfig.
;; TODO: remove once upstream bug is fixed
(define fontconfig-fixed
(package
(inherit fontconfig)
(propagated-inputs
(modify-inputs (package-propagated-inputs fontconfig)
(replace "expat" (@@ (gnu packages xml) expat/fixed))))))
(define fhs-min-libs
`(("glibc" ,(@@ (gnu packages base) glibc-for-fhs))
`(("glibc" ,glibc-for-fhs)
("glibc-locales" ,glibc-locales)))
(define steam-client-libs
`(("bash" ,bash) ; Required for steam startup.
("coreutils" ,coreutils)
("diffutils" ,diffutils)
("dbus-glib" ,dbus-glib) ; Required for steam browser.
("elfutils" ,elfutils) ; Required for capturing library dependencies in pv.
("eudev" ,eudev) ; Required for steamwebhelper/heavy runtime.
;; TODO: set back to ,fontconfig once https://issues.guix.gnu.org/53406 is fixed
("fontconfig" ,fontconfig-fixed) ; Required for steam client.
("file" ,file) ; Used for steam installation.
("find" ,findutils) ; Required at least for some logging.
("freetype" ,freetype) ; Required for steam login.
("gawk" ,gawk)
("gcc:lib" ,gcc "lib") ; Required for steam startup.
("grep" ,grep)
("libbsd" ,libbsd)
("libcap" ,libcap) ; Required for SteamVR, but needs pkexec too.
("libusb" ,libusb) ; Required for SteamVR.
("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-11) ; Required for mesa.
("mesa" ,mesa) ; Required for steam startup.
("nss-certs" ,nss-certs) ; Required for steam login.
("pciutils" ,pciutils) ; Tries to run lspci at steam startup.
("procps" ,procps)
("sed" ,sed)
("tar" ,tar)
("usbutils" ,usbutils) ; Required for SteamVR.
("util-linux" ,util-linux) ; Required for steam login.
("wayland" ,wayland) ; Required for mesa vulkan (e.g. libvulkan_radeon).
("xdg-utils" ,xdg-utils)
("xz" ,xz)
("zenity" ,zenity))) ; Required for progress dialogs.
(define steam-gameruntime-libs
`(("alsa-lib" ,alsa-lib) ; Required for audio in most games.
("alsa-plugins:pulseaudio" ,alsa-plugins "pulseaudio") ; Required for audio in most games.
("font-dejavu" ,font-dejavu)
("font-liberation" ,font-liberation)
("imgui" ,imgui-1.86) ; Required for MangoHud.
("mangohud" ,mangohud)
("openal" ,openal) ; Prevents corrupt audio in Crypt of the Necrodancer.
("pulseaudio" ,pulseaudio) ; Prevents corrupt audio in Sven Coop.
("python" ,python) ; Required for KillingFloor2 and Wreckfest.
("spdlog" ,spdlog))) ; Required for MangoHud.
(define* (fhs-union inputs #:key (name "fhs-union") (version "0.0") (system "x86_64-linux"))
"Create a package housing the union of inputs."
(package
@ -154,25 +294,45 @@
in the Guix store"
(computed-file
"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))))
(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))
(define (nonguix-container->package container)
"Return a package with wrapper script to launch the supplied container object
@ -209,7 +369,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-binary-name container)))
(wrapper-dest (string-append out "/bin/" ,(ngc-name container)))
(link-files ',(ngc-link-files container)))
(mkdir-p (string-append out "/sbin"))
(mkdir-p (string-append out "/etc"))
@ -238,7 +398,8 @@ 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)
@ -259,47 +420,20 @@ 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.
"^VDPAU_DRIVER_PATH$" ; For VDPAU drivers.
"^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$"
@ -314,7 +448,6 @@ in a sandboxed FHS environment."
,@(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.
@ -323,8 +456,7 @@ in a sandboxed FHS environment."
,@(exists-> "/sys/class/powercap") ; Needed for power monitoring like MangoHud.
"/sys/dev"
"/sys/devices"
,@(exists-> "/var/run/dbus")
#$@(ngc-exposed container)))
,@(exists-> "/var/run/dbus")))
;; /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:
@ -338,34 +470,29 @@ in a sandboxed FHS environment."
,@(exists-> (string-append home "/.config/pulse"))
,@(exists-> (string-append xdg-runtime "/pulse"))
,@(exists-> (string-append xdg-runtime "/bus"))
,@(exists-> (string-append xdg-runtime "/" wayland-display))
,@(exists-> (getenv "XAUTHORITY"))
#$@(ngc-shared container)))
,@(exists-> (getenv "XAUTHORITY"))))
(DEBUG (equal? (getenv "DEBUG") "1"))
;; Make sure this environment variable is not set to the
;; emptry string or else guix shell will fail to start.
(extra-shares-env (getenv "GUIX_SANDBOX_EXTRA_SHARES"))
(extra-shares (if (and extra-shares-env (not (string= extra-shares-env "")))
(string-split extra-shares-env #\:)
#f))
(args (cdr (command-line)))
(command (if DEBUG '()
`("--" ,run ,@args))))
;; Set this so Steam's pressure-vessel container does not need to
;; generate locales, improving startup time. This needs to be set to
;; the "usual" path, probably so they are included in the
;; pressure-vessel container.
(setenv "GUIX_LOCPATH" "/usr/lib/locale")
;; By default 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")
;; 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")
;; By default VDPAU drivers are searched for in libvdpau's store
;; path, so set this path to where the drivers will actually be
;; located in the container.
(setenv "VDPAU_DRIVER_PATH" "/lib64/vdpau")
(format #t "\n* Launching ~a in sandbox: ~a.\n\n"
#$(package-name (ngc-wrap-package container)) sandbox-home)
(when DEBUG
(format #t "* DEBUG set to 1: Starting shell. Launch application manually with: ~a.\n\n"
#$(ngc-internal-name container)))
(mkdir-p sandbox-home)
(invoke #$(file-append pulseaudio "/bin/pulseaudio")
"--start"
"--exit-idle-time=60")
(apply invoke
`("guix" "shell"
"--container" "--no-cwd" "--network"
@ -373,9 +500,7 @@ in a sandboxed FHS environment."
,@(map add-path expose)
,@(map (lambda (item)
(add-path item #:writable? #t))
(if extra-shares
(append share extra-shares)
share))
share)
"-m" ,manifest-file
,@command)))))))
@ -424,8 +549,7 @@ 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))
@ -451,8 +575,8 @@ application."
;; contains are directly to /gnu/store/. Instead, it could be generated with
;; a generic ld.so.conf and result in paths more typical in an FHS distro,
;; like /lib within the container. This may be useful for future compatibility.
(let* ((ld.so.conf (ngc-ld.so.conf container))
(ld.so.cache (ngc-ld.so.cache container))
(let* ((ld.so.conf steam-ld.so.conf)
(ld.so.cache steam-ld.so.cache)
(pkg (ngc-wrap-package container))
(run (ngc-run container)))
(program-file
@ -461,9 +585,7 @@ application."
`((guix build utils))
#~(begin
(use-modules (guix build utils)
(ice-9 getopt-long)
(srfi srfi-1)
(srfi srfi-26))
(ice-9 getopt-long))
(define (path->str path)
(if (list? path)
(string-join path "/")
@ -473,13 +595,9 @@ application."
(dest (path->str (cdr pair))))
(unless (file-exists? dest)
(symlink target dest))))
(define (file-symlink file dir)
(mkdir-p dir)
(define (icd-symlink file)
(new-symlink
`(,file . (,dir ,(basename file)))))
;; Use stat to follow links from packages like MangoHud.
(define (get-files dir)
(find-files (path->str dir) #:stat stat))
`(,file . ("/usr/share/vulkan/icd.d" ,(basename file)))))
(define fhs-option-spec
'((asound32 (value #f))))
(let* ((guix-env (getenv "GUIX_ENVIRONMENT"))
@ -489,9 +607,9 @@ application."
(ld.so.cache #$(file-append ld.so.cache))
(all-args (cdr (command-line)))
(fhs-args (member "--" all-args))
(package-args (if fhs-args
(reverse (cdr (member "--" (reverse all-args))))
all-args)))
(steam-args (if fhs-args
(reverse (cdr (member "--" (reverse all-args))))
all-args)))
(delete-file "/bin/sh")
(rmdir "/bin")
(for-each
@ -499,8 +617,8 @@ application."
'("/run/current-system/profile/etc"
"/run/current-system/profile/share"
"/sbin"
"/usr/lib"
"/usr/share"))
"/usr/share/vulkan/icd.d"
"/usr/share/vulkan/implicit_layer.d")) ; Implicit layers like MangoHud
(for-each
new-symlink
`((,ld.so.cache . "/etc/ld.so.cache")
@ -514,65 +632,30 @@ 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 "etc/fonts") . "/etc/fonts")
((,union64 "share/vulkan/explicit_layer.d") .
"/usr/share/vulkan/explicit_layer.d")
;; The MangoHud layer has the same file name for 64- and 32-bit,
;; so create links with different names.
((,union64 "share/vulkan/implicit_layer.d/MangoHud.json") .
"/usr/share/vulkan/implicit_layer.d/MangoHud.json")
((,union32 "share/vulkan/implicit_layer.d/MangoHud.json") .
"/usr/share/vulkan/implicit_layer.d/MangoHud.x86.json")))
(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
(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.
icd-symlink
;; Use stat to follow links from packages like MangoHud.
`(,@(find-files (string-append union32 "/share/vulkan/icd.d")
#:directories? #t #:stat stat)
,@(find-files (string-append union64 "/share/vulkan/icd.d")
#:directories? #t #:stat stat)))
;; TODO: Is this the right place for this?
;; 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"
(string-append "/lib64:/lib:/lib64/nss:/lib/nss:"
"/lib64/vdpau:/lib/vdpau"))
;; Process FHS-specific command line options.
(let* ((options (getopt-long (or fhs-args '("")) fhs-option-spec))
@ -580,13 +663,9 @@ 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 (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")))
(display "\n\n/etc/asound.conf configured for 64-bit.\nLaunch steam with \"steam -- --asound32\" to use 32-bit instead.\n\n\n"))
(with-output-to-file "/etc/asound.conf"
(lambda _ (format (current-output-port) "# Generated by nonguix's internal script
(lambda _ (format (current-output-port) "# Generated by steam-client
# Use PulseAudio by default
pcm_type.pulse {
@ -611,4 +690,78 @@ ctl.!default {
fallback \"sysdefault\"
}\n\n" asound-lib asound-lib))))
(apply system* `(#$(file-append pkg run) ,@package-args))))))))
(apply system* `(#$(file-append pkg run) ,@steam-args))))))))
(define-public steam
(nonguix-container->package
(nonguix-container
(name "steam")
(wrap-package steam-client)
(run "/bin/steam")
(union64
(fhs-union `(,@steam-client-libs
,@steam-gameruntime-libs
,@fhs-min-libs)
#:name "fhs-union-64"))
(union32
(fhs-union `(,@steam-client-libs
,@steam-gameruntime-libs
,@fhs-min-libs)
#:name "fhs-union-32"
#:system "i686-linux"))
(link-files '("share/applications/steam.desktop"
"share/applications/steam-asound32.desktop"))
(description "Steam is a digital software distribution platform created by
Valve. This package provides a script for launching Steam in a Guix container
which will use the directory @file{$HOME/.local/share/guix-sandbox-home} where
all games will be installed."))))
(define-public steam-nvidia
(nonguix-container->package
(nonguix-container
(name "steam-nvidia")
(wrap-package steam-client)
(run "/bin/steam")
(union64
(replace-mesa
(fhs-union `(,@steam-client-libs
,@steam-gameruntime-libs
,@fhs-min-libs)
#:name "fhs-union-64")))
(union32
(replace-mesa
(fhs-union `(,@steam-client-libs
,@steam-gameruntime-libs
,@fhs-min-libs)
#:name "fhs-union-32"
#:system "i686-linux")))
(link-files '("share/applications/steam.desktop"
"share/applications/steam-asound32.desktop"))
(description "Steam is a digital software distribution platform created by
Valve. This package provides a script for launching Steam in a Guix container
which will use the directory @file{$HOME/.local/share/guix-sandbox-home} where
all games will be installed."))))
(define-public protonup-ng
(package
(name "protonup-ng")
(version "0.2.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/cloudishBenne/protonup-ng")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "0yd2mhhqxzarqxk85zf42s931jzc94f1cssn1hblsqghr79laa45"))))
(build-system python-build-system)
(arguments
(list #:tests? #f)) ; there are no tests
(inputs
(list python-configparser python-requests))
(home-page "https://github.com/cloudishBenne/protonup-ng")
(synopsis "Manage Proton-GE Installations")
(description "ProtonUp-ng is a CLI program and API to automate the installation
and update of GloriousEggroll's Proton-GE.")
(license license:gpl3)))

View File

@ -1,58 +0,0 @@
;;; 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"))))

View File

@ -1,54 +1,34 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Jelle Licht <jlicht@fsfe.org>
;;; Copyright © 2024 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2024 Murilo <murilo@disroot.org>
;;;
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (nongnu packages video)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages video)
#:use-module (guix build utils)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (nongnu packages chromium)
#:use-module (nongnu packages nvidia))
(define-public ffmpeg-nvenc
(package/inherit ffmpeg
(name "ffmpeg-nvenc")
(inputs
(modify-inputs
(package-inputs ffmpeg)
(prepend nv-codec-headers)))
(arguments
(substitute-keyword-arguments (package-arguments ffmpeg)
((#:configure-flags flags)
;; Currently only interested in NVENC.
;; Might be better to make a ffmpeg-nonfree with all nonfree codecs
;; in the future.
#~(cons* "--enable-cuvid"
"--enable-ffnvcodec"
"--enable-encoder=hevc_nvenc"
"--enable-encoder=h264_nvenc"
#$flags))))
(description
(string-append
(package-description ffmpeg)
" This build of FFmpeg includes the nonfree NVIDIA encoder for
@code{h264_nvenc} and @code{hevc_nvenc} hardware encoding on NVIDIA GPUs."))))
(define-public replace-ffmpeg-nvenc
(package-input-rewriting
`((,ffmpeg . ,ffmpeg-nvenc))))
#:use-module ((guix licenses) #:prefix license:))
(define-public gmmlib
(package
(name "gmmlib")
(version "22.3.19")
(version "22.1.3")
(source (origin
(method git-fetch)
(uri (git-reference
@ -57,7 +37,7 @@
(file-name (git-file-name name version))
(sha256
(base32
"0p3wp6xcvpb4jzw4fsf6554qy91iblmq9y50ph3iy29m19q6nznb"))))
"10gk8bi8xa2bgiqmjbphb9acvbmvgwv9kg0z75cfxazlsx5k7jb1"))))
(build-system cmake-build-system)
(arguments
;; Tests are run as part of the normal build step
@ -73,7 +53,7 @@ for VAAPI.")
(define-public intel-media-driver
(package
(name "intel-media-driver")
(version "24.1.5")
(version "22.2.2")
(source (origin
(method git-fetch)
(uri (git-reference
@ -82,16 +62,16 @@ for VAAPI.")
(file-name (git-file-name name version))
(sha256
(base32
"1jm4imld48scj0j499wq5zbdjv4gg7hg2sawljqnjvy09dmp09bs"))))
"1wvx3kvsdq7n5khl0pf7hf1ks4lwqnyjdq8sbjhd7irs3v3prj4j"))))
(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"))))
'(#:tests? #f ;Tests are run as part of the normal build step
#:configure-flags
(list "-DENABLE_NONFREE_KERNELS=OFF"
(string-append "-DLIBVA_DRIVERS_PATH="
(assoc-ref %outputs "out") "/lib/dri"))))
;; 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
@ -106,129 +86,3 @@ for VAAPI.")
accelerated decoding, encoding, and video post processing for the GEN based
graphics hardware.")
(license (list license:expat license:bsd-3))))
(define-public intel-media-driver/nonfree
(package
(inherit intel-media-driver)
(name "intel-media-driver-nonfree")
(arguments
(substitute-keyword-arguments (package-arguments intel-media-driver)
((#:configure-flags flags #~'())
#~(cons "-DENABLE_NONFREE_KERNELS=ON"
(delete "-DENABLE_NONFREE_KERNELS=OFF" #$flags)))))
(synopsis
(string-append
(package-synopsis intel-media-driver)
" with nonfree kernels"))
(description
(string-append
(package-description intel-media-driver)
" This build of intel-media-driver includes nonfree blobs to fully enable the
video decode capabilities of supported Intel GPUs."))))
(define-public nv-codec-headers
(package
(name "nv-codec-headers")
(version "12.1.14.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://git.videolan.org/git/ffmpeg/nv-codec-headers.git")
(commit (string-append "n" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0sp4giwbhai9blgd2k7sb571xwmz2yx17w32vy0nyj86ccb2x5jq"))))
(arguments
(list
#:tests? #f ; No tests.
#:make-flags #~(list (string-append "PREFIX=" #$output))
#:phases #~(modify-phases %standard-phases
(delete 'configure)
(add-after 'unpack 'fix-paths
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "include/ffnvcodec/dynlink_loader.h"
(("lib.*\\.so\\.." lib)
(search-input-file
inputs (string-append "lib/" lib)))))))))
(build-system gnu-build-system)
(inputs (list nvidia-driver))
(home-page "https://git.videolan.org/?p=ffmpeg/nv-codec-headers.git")
(synopsis
"FFmpeg version of headers required to interface with NVIDIA's codec APIs")
(description
"This package provides the necessary headers for interfacing with NVIDIA's
codec APIs.")
(license license:expat)))
(define-public obs-with-cef
(package
(inherit obs)
(name "obs-with-cef")
(inputs
(append (package-inputs obs)
`(("chromium-embedded-framework" ,chromium-embedded-framework))))
(arguments
(substitute-keyword-arguments (package-arguments obs)
((#:configure-flags flags)
#~(append #$flags
'("-DBUILD_BROWSER=ON"
"-DCEF_ROOT_DIR=../source/cef")))
((#:phases phases)
#~(modify-phases #$phases
(add-before 'configure 'add-cef
(lambda* (#:key inputs #:allow-other-keys)
(let ((chromium-embedded-framework
#$(this-package-input "chromium-embedded-framework")))
(mkdir-p "cef/Release")
(mkdir-p "cef/Resources")
(for-each (lambda (file)
(symlink file (string-append "cef/Release/"
(basename file)))
(symlink file (string-append "cef/Resources/"
(basename file))))
(filter
(lambda (file)
(not (string= (basename (dirname file))
"locales")))
(find-files
(string-append chromium-embedded-framework
"/share/cef"))))
(symlink (string-append chromium-embedded-framework
"/lib/libcef.so")
"cef/Release/libcef.so")
(mkdir-p "cef/libcef_dll_wrapper")
(symlink (string-append chromium-embedded-framework
"/lib/libcef_dll_wrapper.a")
"cef/libcef_dll_wrapper/libcef_dll_wrapper.a")
(symlink (string-append chromium-embedded-framework
"/include")
"cef/include"))))
(add-after 'install 'symlink-obs-browser
;; Required for lib/obs-plugins/obs-browser.so file.
(lambda* (#:key outputs #:allow-other-keys)
(symlink
(string-append #$output
"/lib/libobs-frontend-api.so.0")
(string-append #$output
"/lib/obs-plugins/libobs-frontend-api.so.0"))
(symlink
(string-append #$output
"/lib/libobs.so.0")
(string-append #$output
"/lib/obs-plugins/libobs.so.0"))))))))
(description
(string-append
(package-description obs)
" This build of OBS includes embeded Chromium-based browser to enable
Browser source."))))
(define-public obs-nvenc
(let ((obs-ffmpeg-nvenc (replace-ffmpeg-nvenc obs)))
(package/inherit obs-ffmpeg-nvenc
(name "obs-nvenc")
(description
(string-append
(package-description obs)
" This build of OBS includes the nonfree NVIDIA encoder for FFmpeg
@code{h264_nvenc} and @code{hevc_nvenc} hardware encoding on NVIDIA GPUs.")))))

View File

@ -1,5 +1,21 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)
@ -12,7 +28,7 @@
(define-public zerotier
(package
(name "zerotier")
(version "1.12.2")
(version "1.8.4")
(source (origin
(method git-fetch)
(uri (git-reference
@ -21,17 +37,16 @@
(file-name (git-file-name name version))
(sha256
(base32
"0p5rpvh137gf5y9ylip7kxfl4argv34sr4wiiygvfk670rifnk57"))))
"101b1k9f3cpbgj0l87ya1cbqs9dv0qiayjap4m29fxyjra8hbkb8"))))
(build-system gnu-build-system)
(arguments
`(#:make-flags (list "ZT_SSO_SUPPORTED=0") ; We don't need SSO/OIDC
#:phases
`(#:phases
(modify-phases %standard-phases
;; There is no ./configure
(delete 'configure)
(replace 'check
(lambda* (#:key make-flags #:allow-other-keys)
(apply invoke "make" "selftest" make-flags)
(lambda _
(invoke "make" "selftest")
(invoke "./zerotier-selftest")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2022-2023 Pierre Langlois <pierre.langlois@gmx.com>
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
;;;
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (nongnu packages wasm)
#:use-module (guix base32)
@ -16,62 +31,60 @@
#: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
(let ((commit "ad5133410f66b93a2381db5b542aad5e0964db96")
(revision "1"))
(package
(name "wasi-libc")
(version (git-version "0.1-alpha" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/WebAssembly/wasi-libc")
(commit commit)
(recursive? #t)))
(file-name (git-file-name name version))
(sha256
(base32
"146jamq2q24vxjfpcwlqj84wzc80cbpbg0ns2wimyvzbanah48j6"))))
(build-system gnu-build-system)
(native-inputs (list clang-13))
(arguments
(list #:tests? #f ;No test suite
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'set-sysroot-include
(lambda _
(setenv "C_INCLUDE_PATH"
(string-append (getcwd) "/sysroot/include"))))
(add-before 'install 'set-install-dir
(lambda _
(setenv "INSTALL_DIR"
(string-append #$output "/wasm32-wasi")))))))
(home-page "https://wasi.dev")
(synopsis "WASI libc implementation for WebAssembly")
(description
"WASI Libc is a libc for WebAssembly programs built on top of WASI
system calls. It provides a wide array of POSIX-compatible C APIs, including
support for standard I/O, file I/O, filesystem manipulation, memory
management, time, string, environment variables, program startup, and many
other APIs.")
(license (list
;; For wasi-libc, with LLVM exceptions
license:asl2.0
;; For malloc.c.
license:cc0
;; For cloudlibc.
license:bsd-2
;; For wasi-libc and musl-libc.
license:expat))))
(license (list
;; For wasi-libc, with LLVM exceptions
license:asl2.0
;; For malloc.c.
license:cc0
;; For cloudlibc.
license:bsd-2
;; For wasi-libc and musl-libc.
license:expat)))))
(define-public wasm32-wasi-clang-runtime
(package (inherit clang-runtime-15)
(package (inherit clang-runtime-13)
(native-inputs
(list clang-15
(list clang-13
wasi-libc))
(inputs (list llvm-15))
(inputs (list llvm-13))
(arguments
(list
#:build-type "Release"
@ -94,7 +107,9 @@ other APIs.")
;; WASM only needs libclang_rt.builtins-wasm32.a from
;; compiler-rt.
"../source/compiler-rt/lib/builtins")))))
(string-append "../compiler-rt-"
#$(package-version clang-runtime-13)
".src/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
@ -102,10 +117,12 @@ other APIs.")
;; upstream Guix's support for cross-compiling with clang.
(define clang-from-llvm (@@ (gnu packages llvm) clang-from-llvm))
(define llvm-monorepo (@@ (gnu packages llvm) llvm-monorepo))
(define-public wasm32-wasi-clang
(let ((base (clang-from-llvm llvm-15 wasm32-wasi-clang-runtime)))
(let ((base (clang-from-llvm llvm-13 wasm32-wasi-clang-runtime
(bytevector->nix-base32-string
(content-hash-value
(origin-hash (package-source clang-13)))))))
(package (inherit base)
(name "wasm32-wasi-clang")
(inputs
@ -126,8 +143,17 @@ other APIs.")
(define-public wasm32-wasi-libcxx
(package
(name "wasm32-wasi-libcxx")
(version (package-version llvm-15))
(source (llvm-monorepo version))
(version "13.0.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/llvm/llvm-project")
(commit (string-append "llvmorg-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0cjl0vssi4y2g4nfr710fb6cdhxmn5r0vis15sf088zsc5zydfhw"))))
(build-system cmake-build-system)
(arguments
(list

View File

@ -1,5 +1,20 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)
@ -9,7 +24,6 @@
#:use-module (guix build-system trivial)
#:use-module (guix build-system copy)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
@ -22,7 +36,7 @@
(define-public winetricks
(package
(name "winetricks")
(version "20230212")
(version "20220411")
(source (origin
(method git-fetch)
(uri (git-reference
@ -31,47 +45,48 @@
(file-name (git-file-name name version))
(sha256
(base32
"15glm6ws0zihcks93l39mli8wf5b5vkijb0vaid9cqra6x0zppd5"))))
"09bv6wsm3y9p6jhlcmnjlnczdyr996b2mvxg4fbvlqa3fv9gac8n"))))
(build-system gnu-build-system)
(inputs
(list cabextract
p7zip
perl
;; unrar ; TODO: Include unrar? It is referenced in the source.
unzip
wget
zenity))
`(("cabextract" ,cabextract)
("p7zip" ,p7zip)
("perl" ,perl)
;; ("unrar" ,unrar) ; TODO: Include unrar? It is referenced in the source.
("unzip" ,unzip)
("wget" ,wget)
("zenity" ,zenity)))
(arguments
(list
#:tests? #f
;; TODO: Checks need bashate, shellcheck (in Guix), and checkbashisms.
#:make-flags #~(list (string-append "DESTDIR=" #$output)
"PREFIX=")
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(add-after 'install 'wrap-program
;; The script relies on WINETRICKS_GUI being exactly "zenity", so
;; we can't patch the path directly. Probably same for other dependencies.
(lambda _
(let* ((winetricks (string-append #$output "/bin/winetricks"))
(paths (map
(lambda (p) (string-append p "/bin"))
(list #$(this-package-input "cabextract")
#$(this-package-input "p7zip")
#$(this-package-input "perl")
#$(this-package-input "unzip")
#$(this-package-input "wget")
#$(this-package-input "zenity")))))
(wrap-program winetricks
`("PATH" prefix ,paths)))))
(add-after 'install 'patch-perl-path
(lambda _
(let* ((perl (string-append #$(this-package-input "perl")
"/bin/perl"))
(winetricks (string-append #$output "/bin/winetricks")))
(substitute* winetricks
(("#!/usr/bin/env perl") (string-append "#!" perl)))))))))
`(#:tests? #f
;; TODO: Checks need bashate, shellcheck (in Guix), and checkbashisms.
#:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out"))
"PREFIX=")
#:phases
(modify-phases %standard-phases
(delete 'configure)
(add-after 'install 'wrap-program
;; The script relies on WINETRICKS_GUI being exactly "zenity", so
;; we can't patch the path directly. Probably same for other dependencies.
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((zenity-bin (string-append (assoc-ref inputs "zenity") "/bin/"))
(perl-bin (string-append (assoc-ref inputs "perl") "/bin/"))
(winetricks (string-append (assoc-ref outputs "out")
"/bin/winetricks")))
(wrap-program winetricks
`("PATH" prefix (,@(map (lambda (in)
(string-append (assoc-ref inputs in) "/bin/"))
'("cabextract"
"p7zip"
"perl"
"unzip"
"wget"
"zenity"))))))))
(add-after 'install 'patch-perl-path
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((perl (string-append (assoc-ref inputs "perl") "/bin/perl"))
(winetricks (string-append (assoc-ref outputs "out")
"/bin/winetricks")))
(substitute* winetricks
(("#!/usr/bin/env perl") (string-append "#!" perl)))))))))
(home-page "https://github.com/Winetricks/winetricks")
(synopsis "Easy way to work around problems in Wine")
(description "Winetricks is an easy way to work around problems in Wine.
@ -142,7 +157,7 @@ Use @command{setup_dxvk} to install the required libraries to a Wine prefix.")
(define-public dxvk-next
(package
(name "dxvk")
(version "2.0")
(version "1.10.1")
(home-page "https://github.com/doitsujin/dxvk/")
(source (origin
(method url-fetch)
@ -151,7 +166,7 @@ Use @command{setup_dxvk} to install the required libraries to a Wine prefix.")
version "/dxvk-" version ".tar.gz") )
(sha256
(base32
"0xr4lq4zdmqwxh5x19am2y4lvy6q6s6bl1nfr4ixfgy2l2sghliq"))))
"1ah7nci49ipaj7z7zac4dqbrxq1ic3zyky42kkid8wqarf198d6w"))))
(build-system copy-build-system)
(arguments
`(#:install-plan
@ -196,19 +211,3 @@ 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"))))))

View File

@ -1,64 +0,0 @@
;;; 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.")))

View File

@ -1,16 +1,28 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020 Alexey Abramov <levenson@mmer.org>
;;; Copyright © 2025 James Kalyan <mjkalyan@proton.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/>.
(define-module (nongnu services vpn)
#:use-module (guix deprecation)
#:use-module (guix gexp)
#:use-module (gnu packages)
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (nongnu packages vpn)
#:export (zerotier-service-type
zerotier-one-service))
#:export (zerotier-one-service))
(define %zerotier-action-join
(shepherd-action
@ -50,18 +62,12 @@
(list (string-append #$zerotier "/sbin/zerotier-one"))))
(stop #~(make-kill-destructor))))))
(define zerotier-service-type
(service-type (name 'zerotier)
(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)))
(default-value '())))
zerotier-one-shepherd-service)))))
(define-deprecated/alias
zerotier-one-service-type
zerotier-service-type)
(define-deprecated (zerotier-one-service #:key (config '()))
zerotier-service-type
(define* (zerotier-one-service #:key (config (list)))
(service zerotier-one-service-type config))

View File

@ -1,47 +1,33 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; Copyright © 2024 Hilton Chain <hako@ultrarare.space>
;;;
;;; This program is free software: you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;; Generate a bootable image (e.g. for USB sticks, etc.) with:
;; $ guix system image --image-type=iso9660 nongnu/system/install.scm
;; $ guix system disk-image 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)
@ -53,19 +39,6 @@
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)))))))
(operating-system-packages installation-os)))))
installation-os-nonfree

View File

@ -1,5 +1,17 @@
;;; 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)
@ -67,9 +79,7 @@ MICROCODE-PACKAGES, in the format expected by the kernel."
"/initrd.cpio"))
(define (combined-initrd . 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."
"Return a combined initrd, the result of concatenating INITRDS."
(define builder
(with-imported-modules (source-module-closure
'((guix build utils)
@ -77,28 +87,13 @@ single file."
#:select? import-nonguix-module?)
#~(begin
(use-modules (guix build utils)
(nonguix build utils)
(srfi srfi-1))
(nonguix build utils))
;; Use .img suffix since the result is no longer easily inspected by
;; standard tools like cpio and gzip.
;;
;; 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")))
(let ((initrd (string-append #$output "/initrd.img")))
(mkdir-p #$output)
(concatenate-files '#$initrds initrd)
(concatenate-files references new-references)))))
(concatenate-files '#$initrds initrd)))))
(file-append (computed-file "combined-initrd" builder)
"/initrd.img"))

View File

@ -1,6 +1,21 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; 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)
@ -41,11 +56,7 @@
;; Do not use `@' to avoid introducing circular dependencies.
(let ((module (resolve-interface '(gnu packages elf))))
;; Use the older 0.16 version due to an upstream bug which can segfault
;; some binaries. See <https://github.com/NixOS/patchelf/issues/482>.
;; TODO: Set back to patchelf when the package has been updated (or
;; patched) to fix this issue.
(module-ref module 'patchelf-0.16)))
(module-ref module 'patchelf)))
(define (default-glibc)
"Return the default glibc package."

View File

@ -1,220 +0,0 @@
;;; 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)
;; Either an entry in WRAPPER-PLAN is just a string which can be
;; used directly, or it is a list where the second element is a
;; list of additional inputs for patchelf-plan.
(if (list? file)
(cons (car file) (list (append patchelf-inputs (cadr 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 (alist-delete "source" 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. WRAPPER-PLAN is a list of strings for
files which patchelf will add the INPUTS (which implicitly includes the base
packages needed for chromium-based binaries) to RPATH and wrap with needed
environment variables. Optionally, an entry can be a list with the first
entry the file to be patched and the second a list of additional inputs for
patchelf, like PATCHELF-PLAN in binary-build-system. PATCHELF-PLAN itself is
ignored if WRAPPER-PLAN is not '()."
(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

View File

@ -1,15 +1,27 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2022 Attila Lendvai <attila@lendvai.name>
;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2024 Ashish SHUKLA <ashish.is@lostca.se>
;;;
;;; 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 binary-build-system)
#:use-module ((guix build gnu-build-system) #:prefix gnu:)
#:use-module (nonguix build utils)
#:use-module (guix build utils)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:export (%standard-phases
binary-build))
@ -116,10 +128,6 @@ The inputs are optional when the file is an executable."
(invoke "patchelf" "--set-rpath" rpath binary)))
#t)
(display "Using patchelf version: ")
(force-output)
(invoke "patchelf" "--version")
(when (and patchelf-plan
(not (null? patchelf-plan)))
(let ((interpreter (car (find-files (assoc-ref inputs "libc") "ld-linux.*\\.so")))
@ -140,42 +148,10 @@ 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)
(let ((data-file (find file-exists?
(list "data.tar.xz" "data.tar.gz"
"data.tar.bz2"))))
(invoke "tar" "xvf" data-file)
(invoke "rm" "-rfv" "control.tar.gz"
data-file
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 `binary-unpack',
;; `configure', `build', `check' and `install' phases.
;; Everything is as with the GNU Build System except for the `configure'
;; , `build', `check' and `install' phases.
(modify-phases gnu:%standard-phases
(add-after 'unpack 'binary-unpack binary-unpack)
(delete 'bootstrap)
(delete 'configure)
(delete 'build)

View File

@ -1,79 +0,0 @@
;;; 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))
":")))
;; Give a hint to Electron-based apps to detect if Wayland or X11 should
;; be used.
;; NOTE: The env-var version of this CLI arg was added in Electron >=28
`("ELECTRON_OZONE_PLATFORM_HINT" ":" =
("auto"))))
(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

View File

@ -1,18 +1,30 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2020 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.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 (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
build-paths-from-inputs))
concatenate-files))
(define (64-bit? file)
"Return true if ELF file is in 64-bit format, false otherwise.

View File

@ -1,5 +1,17 @@
;;; 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)

View File

@ -1,5 +1,17 @@
;;; 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)

View File

@ -1,5 +1,17 @@
;;; 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)

View File

@ -1,17 +1,28 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2020 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 (nonguix utils)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-43)
#:use-module (ice-9 match)
#:use-module (ice-9 textual-ports)
#:use-module (ice-9 popen)
#:use-module (guix utils)
#:use-module (guix packages)
#:use-module (gnu services)
#:export (with-transformation))
#:use-module (guix packages))
(define-public (to32 package64)
"Build package for i686-linux.
@ -25,45 +36,3 @@ Only x86_64-linux and i686-linux are supported.
(arguments `(#:system "i686-linux"
,@(package-arguments package64)))))
(_ package64)))
;; For concerns and direction of improvement, see this thread:
;; https://lists.gnu.org/archive/html/guix-devel/2024-06/msg00275.html
(define* (with-transformation proc obj #:optional (pred package?))
"Recursing into child elements, apply PROC to every element of OBJ that
matches PRED."
(match obj
((? pred)
(proc obj))
((? procedure?)
(lambda args
(apply values
(map (cut with-transformation proc <> pred)
(call-with-values
(lambda ()
(apply obj args))
list)))))
((a . b)
(cons (with-transformation proc a pred)
(with-transformation proc b pred)))
((_ ...)
(map (cut with-transformation proc <> pred)
obj))
(#(_ ...)
(vector-map (lambda (vec elt)
(with-transformation proc elt pred))
obj))
;; `<service-type>' and `<origin>' record types are expected to not be
;; modified. Altering them causes very difficult to debug run-time errors.
((or (? service-type?)
(? origin?))
obj)
((? record?)
(let* ((record-type (record-type-descriptor obj))
(record-fields (record-type-fields record-type)))
(apply (record-constructor record-type)
(map (lambda (field)
(let* ((accessor (record-accessor record-type field))
(obj (accessor obj)))
(with-transformation proc obj pred)))
record-fields))))
(_ obj)))