1
0
forked from tribes/guix

Compare commits

..

3 Commits

Author SHA1 Message Date
Ian Eure d780c4c1cc gnu: mpd-service-type: Add to the `audio' group.
Also, add `audio' to %mpd-user’s supplementary groups.  Without membership in
the `audio' group, MPD can’t access the sound hardware.

Fixes guix/guix#4136.

* gnu/services/audio.scm (%mpd-user): Add `audio' supplementary group.

Change-Id: I86c9990d516301c85eeee125bc9d0f44c73612c6
2025-11-08 23:40:45 -08:00
Ian Eure 701a498b42 gnu: mpd-service-type: Export users and groups.
* gnu/services/audio.scm (%mpd-user, %mpd-group): Export.

Change-Id: If5b5e5967c826d98fa17a574598f1d34559c57d5
2025-11-08 16:26:15 -08:00
Ian Eure 2be1e10e36 gnu: mpd-service-type: Remove `group' from configuration.
Use of the `group' option in the MPD configuration behaves oddly: when it’s
present, the MPD process runs without the supplementary groups the user is in.
Leaving it unspecified does the right thing, the process gets both the primary
and supplementary groups.  So, don’t serialize that option at all.

* gnu/services/audio.scm (%mpd-user): Use %mpd-group.
(mpd-configuration): Remove `group' field.
(mpd-configuration-group): Unexport.
(mpd-group-sanitizer): Delete variable.
(mpd-accounts): Create group if it’s `%mpd-group'.
(mpd-serialize-user-group): Remove.

Change-Id: I0c20c817ba7fd892c96497208ca5338088f74252
2025-11-08 16:26:14 -08:00
1082 changed files with 181245 additions and 589156 deletions
+3 -21
View File
@@ -98,27 +98,9 @@
((indent-tabs-mode . nil)
;; Emacs 28 changed the behavior of 'lisp-fill-paragraph', which causes the
;; first line of package descriptions to extrude past 'fill-column', and
;; somehow that is deemed more correct upstream (see:
;; https://issues.guix.gnu.org/56197).
(eval . (progn
(require 'lisp-mode)
(defun emacs27-lisp-fill-paragraph (&optional justify)
(interactive "P")
(or (fill-comment-paragraph justify)
(let ((paragraph-start
(concat paragraph-start
"\\|\\s-*\\([(;\"]\\|\\s-:\\|`(\\|#'(\\)"))
(paragraph-separate
(concat paragraph-separate "\\|\\s-*\".*[,\\.]$"))
(fill-column (if (and (integerp emacs-lisp-docstring-fill-column)
(derived-mode-p 'emacs-lisp-mode))
emacs-lisp-docstring-fill-column
fill-column)))
(fill-paragraph justify))
;; Never return nil.
t))
(setq-local fill-paragraph-function #'emacs27-lisp-fill-paragraph)))
;; first line of package descriptions to extrude past 'fill-column'. The
;; following variable reverts its behavior to the previous one.
(lisp-fill-paragraphs-as-doc-string nil)
;; This notably allows '(' in Paredit to not insert a space when the
;; preceding symbol is one of these.
-1
View File
@@ -68,7 +68,6 @@
/doc/stamp-vti
/doc/version.texi
/doc/version-*.texi
/etc/apparmor.d/tunables/guix
/etc/committer.scm
/etc/gnu-store.mount
/etc/guix-daemon.cil
+1 -8
View File
@@ -23,8 +23,6 @@
(name "cbaines"))
("3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5"
(name "civodul"))
("CCB8 1842 F9D7 058E CD67 377A BF5C DF4D F6BF 6682"
(name "csantosb"))
("510A 8628 E2A7 7678 8F8C 709C 4BC0 2592 5FF8 F4D3"
(name "cwebber"))
(;; primary: "295A F991 6F46 F8A1 34B0 29DA 8086 3842 F0FE D83B"
@@ -36,8 +34,6 @@
(name "efraim"))
("5DBE 23D3 9053 6526 7F8C C76A FDB9 52BD 3F73 56D6"
(name "ekaitz"))
("50E1 7BE0 D210 C883 D675 3150 4A3D 07EF D05C 4045"
(name "fishinthecalculator"))
(;; primary: "D1BD 1EB7 B655 AECE 0BA7 8F94 4940 7E7E 89CA 9B07"
"0807 AC76 DFE8 4303 6D5F 5879 F51D 4A16 DCEE 6FA7"
(name "futurile"))
@@ -49,7 +45,7 @@
(;; primary: "220F 98D9 5E86 204C 0036 DA7B 6DEC 4360 408B 4185"
"F4C2 D1DF 3FDE EA63 D1D3 0776 ACC6 6D09 CA52 8292"
(name "hako"))
("3D58 BE78 5C1B E400 E214 0755 43F4 B499 3A1F 9D20"
("B943 509D 633E 80DD 27FC 4EED 634A 8DFF D3F6 31DF"
(name "htgoebel"))
( ;; primary: "FECD 9EBA FAAD 1831 7E05 DAC0 E55F 4198 D2A7 0CD7"
"6980 A9B9 5202 AA11 EB1D 8922 8499 AC88 F1A7 1CF2"
@@ -102,9 +98,6 @@
;; <https://lists.gnu.org/archive/html/guix-devel/2020-01/msg00499.html>.
"1EFB 0909 1F17 D28C CBF9 B13A 53D4 57B2 D636 EE82"
(name "roptat"))
(;; primary: "3AC5 5D0E 1DA7 AF44 3868 11EE 213D C372 0E7A 023C"
"6B51 071A 0FB1 52AD ED93 6360 0322 7982 69E4 71C3"
(name "Rutherther"))
("EAD1 89E4 799B 5E5E B20A 2A19 CDBC 0BD9 5943 A706"
(name "SameExpert"))
(;; primary: "D6B0 C593 DA8C 5EDC A44C 7A58 C336 91F7 1188 B004"
-2
View File
@@ -30,7 +30,6 @@ Eric Bavier <bavier@posteo.net> <bavier@member.fsf.org>
Eric Dvorsak <eric@dvorsak.fr> <yenda1@gmail.com>
Evgeny Pisemsky <mail@pisemsky.site> <evgeny@pisemsky.com>
George Clemmer <myglc2@gmail.com>
Giacomo Leidi <therewasa@fishinthecalculator.me> <goodoldpaul@autistici.org>
ison <ison@airmail.cc> <ison111@protonmail.com>
Ivan Vilata i Balaguer <ivan@selidor.net>
Jakob L. Kreuze <zerodaysfordays@sdf.org> <zerodaysfordays@sdf.lonestar.org>
@@ -59,7 +58,6 @@ Mathieu Othacehe <mathieu.othacehe@parrot.com>
Mathieu Othacehe <othacehe@gnu.org>
Matthew James Kraai <kraai@ftbfs.org>
Maxim Cournoyer <maxim@guixotic.coop> <maxim.cournoyer@gmail.com>
Nguyễn Gia Phong <cnx@loang.net> <mcsinyx@disroot.org>
Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com>
nikita <nikita@n0.is>
nikita <nikita@n0.is> ng0 <ng0@n0.is>
+5 -110
View File
@@ -10,32 +10,11 @@ gnu/packages/machine-learning\.scm @guix/ai
gnu/packages/audio\.scm @guix/audio
gnu/packages/fluidplug\.scm @guix/audio
gnu/packages/music\.scm @guix/audio
gnu/packages/xiph\.scm @guix/audio
gnu/packages/elixir(-.+|)\.scm$ @guix/beam
guix/build/mix-build-system\.scm @guix/beam
guix/build-system/mix\.scm @guix/beam
gnu/packages/erlang(-.+|)\.scm$ @guix/beam
guix/build/rebar-build-system\.scm @guix/beam
guix/build-system/rebar\.scm @guix/beam
guix/import/hexpm\.scm @guix/beam
guix/scripts/import/hexpm\.scm @guix/beam
gnu/packages/bioinformatics\.scm @guix/bioinformatics
gnu/packages/bootstrap\.scm @guix/bootstrap
gnu/packages/commencement\.scm @guix/bootstrap
gnu/packages/mes\.scm @guix/bootstrap
gnu/packages/assembly\.scm @guix/build-tools
gnu/packages/autogen\.scm @guix/build-tools
gnu/packages/autotools\.scm @guix/build-tools
gnu/packages/bison\.scm @guix/build-tools
gnu/packages/m4\.scm @guix/build-tools
gnu/packages/oyacc\.scm @guix/build-tools
gnu/packages/re2c\.scm @guix/build-tools
gnu/build-system/cmake\.scm @guix/cpp
gnu/build/cmake-build-system\.scm @guix/cpp
gnu/packages/c\.scm @guix/cpp
@@ -44,7 +23,6 @@ gnu/packages/cpp\.scm @guix/cpp
gnu/packages/ninja\.scm @guix/cpp
gnu/packages/valgrind\.scm @guix/cpp
etc/teams\.scm @guix/core
guix/avahi\.scm @guix/core
guix/base16\.scm @guix/core
guix/base32\.scm @guix/core
@@ -105,7 +83,6 @@ guix/quirks\.scm @guix/core
guix/read-print\.scm @guix/core
guix/records\.scm @guix/core
guix/remote\.scm @guix/core
guix/remote-procedures\.scm @guix/core
guix/repl\.scm @guix/core
guix/search-paths\.scm @guix/core
guix/self\.scm @guix/core
@@ -141,17 +118,6 @@ guix/build/gnu-build-system\.scm @guix/core-packages
guix/build/utils\.scm @guix/core-packages
guix/build-system/gnu\.scm @guix/core-packages
gnu/packages/(.*-|)crypto\.scm$ @guix/crypto
gnu/packages/cryptsetup\.scm @guix/crypto
gnu/packages/cybersecurity\.scm @guix/crypto
gnu/packages/gnupg\.scm @guix/crypto
gnu/packages/nettle\.scm @guix/crypto
gnu/packages/password-utils\.scm @guix/crypto
gnu/packages/security-token\.scm @guix/crypto
gnu/packages/ssh\.scm @guix/crypto
gnu/packages/tls\.scm @guix/crypto
gnu/packages/vpn\.scm @guix/crypto
gnu/packages/debian\.scm @guix/debian
\.texi$ @guix/documentation
@@ -161,7 +127,6 @@ gnu/system/examples/lightweight-desktop\.tmpl @guix/documentation
gnu/system/examples/desktop\.tmpl @guix/documentation
gnu/packages/electronics\.scm @guix/electronics
gnu/packages/hdl\.scm @guix/electronics
gnu/packages/libftdi\.scm @guix/electronics
gnu/packages/engineering\.scm @guix/electronics
gnu/packages/flashing-tools\.scm @guix/electronics
@@ -186,8 +151,6 @@ gnu/packages/game-development\.scm @guix/games
gnu/packages/luanti\.scm @guix/games
gnu/packages/esolangs\.scm @guix/games
gnu/packages/motti\.scm @guix/games
gnu/services/games\.scm @guix/games
gnu/tests/games\.scm @guix/games
guix/build/luanti-build-system\.scm @guix/games
etc/teams/gnome @guix/gnome
@@ -195,7 +158,6 @@ gnu/packages/glib\.scm @guix/gnome
gnu/packages/gstreamer\.scm @guix/gnome
gnu/packages/gtk\.scm @guix/gnome
gnu/packages/gnome\.scm @guix/gnome
gnu/packages/gnome-circle\.scm @guix/gnome
gnu/packages/gnome-xyz\.scm @guix/gnome
gnu/packages/webkit\.scm @guix/gnome
gnu/services/desktop\.scm @guix/gnome
@@ -212,18 +174,6 @@ guix/import/go\.scm @guix/go
guix/scripts/import/go\.scm @guix/go
tests/import/go\.scm @guix/go
gnu/packages/guile\.scm @guix/guile
gnu/packages/guile-wm\.scm @guix/guile
gnu/packages/guile-xyz\.scm @guix/guile
guix/build-system/guile\.scm @guix/guile
guix/build/guile-build-system\.scm @guix/guile
gnu/packages/hare\.scm @guix/hare
gnu/packages/hare-apps\.scm @guix/hare
gnu/packages/hare-xyz\.scm @guix/hare
guix/build-system/hare\.scm @guix/hare
guix/build/hare-build-system\.scm @guix/hare
gnu/packages/dhall\.scm @guix/haskell
gnu/packages/haskell(-.+|)\.scm$ @guix/haskell
gnu/packages/purescript\.scm @guix/haskell
@@ -241,11 +191,7 @@ tests/home-services\.scm @guix/home
gnu/packages/mpi\.scm @guix/hpc
gnu/packages/oneapi\.scm @guix/hpc
gnu/packages/opencl\.scm @guix/hpc
gnu/packages/parallel\.scm @guix/hpc
gnu/packages/rocm\.scm @guix/hpc
gnu/packages/rocm-tools\.scm @guix/hpc
gnu/packages/rocm-libs\.scm @guix/hpc
gnu/packages/sycl\.scm @guix/hpc
gnu/packages/tbb\.scm @guix/hpc
gnu/packages/vulkan\.scm @guix/hpc
@@ -258,17 +204,13 @@ gnu/packages/hurd\.scm @guix/hurd
gnu/installer(\.scm$|/) @guix/installer
gnu/packages/clojure\.scm @guix/java
gnu/packages/java(-.+|)\.scm$ @guix/java
gnu/packages/maven(-.+|)\.scm$ @guix/java
guix/build/ant-build-system\.scm @guix/java
guix/build/clojure-build-system\.scm @guix/java
guix/build/clojure-utils\.scm @guix/java
guix/build/java-utils\.scm @guix/java
guix/build/maven-build-system\.scm @guix/java
guix/build/maven/ @guix/java
guix/build-system/ant\.scm @guix/java
guix/build-system/clojure\.scm @guix/java
guix/build-system/maven\.scm @guix/java
gnu/packages/node-xyz\.scm @guix/javascript
@@ -301,13 +243,8 @@ gnu/packages/fcitx5\.scm @guix/localization
gnu/packages/fonts\.scm @guix/localization
gnu/packages/ibus\.scm @guix/localization
gnu/packages/lua\.scm @guix/lua
gnu/packages/luanti\.scm @guix/lua
gnu/packages/lxqt\.scm @guix/lxqt
gnu/packages/mate\.scm @guix/mate
gnu/build/icecat-extension\.scm @guix/mozilla
gnu/packages/browser-extensions\.scm @guix/mozilla
@@ -325,39 +262,18 @@ guix/import/opam\.scm @guix/ocaml
guix/scripts/import/opam\.scm @guix/ocaml
tests/import/opam\.scm @guix/ocaml
gnu/packages/perl(-.+|)\.scm$ @guix/perl
guix/build/perl-build-system\.scm @guix/perl
guix/build/rakudo-build-system\.scm @guix/perl
guix/build-system/perl\.scm @guix/perl
guix/build-system/rakudo\.scm @guix/perl
guix/import/cpan\.scm @guix/perl
guix/scripts/import/cpan\.scm @guix/perl
gnu/packages/django\.scm @guix/python
gnu/packages/jupyter\.scm @guix/python
gnu/packages/python(-.+|)\.scm$ @guix/python
gnu/packages/sphinx\.scm @guix/python
gnu/packages/tryton\.scm @guix/python
guix/build-system/pyproject\.scm @guix/python
guix/build-system/python\.scm @guix/python
guix/build/pyproject-build-system\.scm @guix/python
guix/build-system/pyproject\.scm @guix/python
guix/build/python-build-system\.scm @guix/python
guix/build/toml\.scm @guix/python
guix/build-system/python\.scm @guix/python
guix/import/pypi\.scm @guix/python
guix/scripts/import/pypi\.scm @guix/python
tests/import/pypi\.scm @guix/python
tests/toml\.scm @guix/python
gnu/ci\.scm @guix/qa-packages
gnu/packages/benchmark\.scm @guix/qa-packages
gnu/packages/check\.scm @guix/qa-packages
gnu/packages/ci\.scm @guix/qa-packages
gnu/packages/code\.scm @guix/qa-packages
gnu/packages/debug\.scm @guix/qa-packages
gnu/packages/dezyne\.scm @guix/qa-packages
gnu/packages/libunwind\.scm @guix/qa-packages
gnu/services/ci\.scm @guix/qa-packages
gnu/tests/ci\.scm @guix/qa-packages
gnu/packages/qt\.scm @guix/qt
guix/build-system/qt\.scm @guix/qt
@@ -376,12 +292,11 @@ gnu/packages/chez\.scm @guix/racket
gnu/packages/racket\.scm @guix/racket
NEWS @guix/release
etc/manifests/release-minimal\.scm @guix/release
etc/manifests/release-desktop\.scm @guix/release
etc/manifests/release\.scm @guix/release
gnu/packages/diffoscope\.scm @guix/reproduciblebuilds
gnu/packages/(ruby)(-.+|)\.scm$ @guix/ruby
gnu/packages/ruby\.scm @guix/ruby
guix/build/ruby-build-system\.scm @guix/ruby
guix/build-system/ruby\.scm @guix/ruby
guix/import/gem\.scm @guix/ruby
@@ -407,7 +322,6 @@ gnu/packages/graph\.scm @guix/science
gnu/packages/lean\.scm @guix/science
gnu/packages/maths\.scm @guix/science
gnu/packages/medical\.scm @guix/science
gnu/packages/physics\.scm @guix/science
gnu/packages/sagemath\.scm @guix/science
gnu/packages/statistics\.scm @guix/science
@@ -420,7 +334,7 @@ gnu/packages/antivirus\.scm @guix/sysadmin
gnu/packages/apparmor\.scm @guix/sysadmin
gnu/packages/authentication\.scm @guix/sysadmin
gnu/packages/cluster\.scm @guix/sysadmin
gnu/packages/configuration-management\.scm @guix/sysadmin
gnu/packages/configuration-management @guix/sysadmin
gnu/packages/databases\.scm @guix/sysadmin
gnu/packages/distributed\.scm @guix/sysadmin
gnu/packages/dns\.scm @guix/sysadmin
@@ -440,25 +354,6 @@ gnu/packages/task-runners\.scm @guix/sysadmin
gnu/packages/terraform\.scm @guix/sysadmin
gnu/packages/virtualization\.scm @guix/sysadmin
gnu/packages/vnc\.scm @guix/sysadmin
gnu/services/admin\.scm @guix/sysadmin
gnu/services/authentication\.scm @guix/sysadmin
gnu/services/databases\.scm @guix/sysadmin
gnu/services/dns\.scm @guix/sysadmin
gnu/services/high-availability\.scm @guix/sysadmin
gnu/services/kerberos\.scm @guix/sysadmin
gnu/services/monitoring\.scm @guix/sysadmin
gnu/services/nfs\.scm @guix/sysadmin
gnu/services/samba\.scm @guix/sysadmin
gnu/services/virtualization\.scm @guix/sysadmin
gnu/services/vnc\.scm @guix/sysadmin
gnu/tests/databases\.scm @guix/sysadmin
gnu/tests/dns\.scm @guix/sysadmin
gnu/tests/high-availability\.scm @guix/sysadmin
gnu/tests/monitoring\.scm @guix/sysadmin
gnu/tests/nfs\.scm @guix/sysadmin
gnu/tests/samba\.scm @guix/sysadmin
gnu/tests/virtualization\.scm @guix/sysadmin
gnu/tests/vnc\.scm @guix/sysadmin
gnu/build/jami-service\.scm @guix/telephony
gnu/packages/jami\.scm @guix/telephony
+90 -91
View File
@@ -14,7 +14,7 @@
# Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
# Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
# Copyright © 2019, 2023 Efraim Flashner <efraim@flashner.co.il>
# Copyright © 2020, 2021, 2023, 2025, 2026 Maxim Cournoyer <maxim@guixotic.coop>
# Copyright © 2020, 2021, 2023, 2025 Maxim Cournoyer <maxim@guixotic.coop>
# Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
# Copyright © 2021 Andrew Tropin <andrew@trop.in>
# Copyright © 2023 Clément Lassieur <clement@lassieur.org>
@@ -116,7 +116,6 @@ MODULES = \
guix/narinfo.scm \
guix/derivations.scm \
guix/grafts.scm \
guix/remote-procedures.scm \
guix/repl.scm \
guix/rpm.scm \
guix/transformations.scm \
@@ -268,6 +267,7 @@ MODULES = \
guix/build/kconfig.scm \
guix/build/linux-module-build-system.scm \
guix/build/store-copy.scm \
guix/build/json.scm \
guix/build/pack.scm \
guix/build/utils.scm \
guix/build/union.scm \
@@ -296,7 +296,6 @@ MODULES = \
guix/build/toml.scm \
guix/search-paths.scm \
guix/packages.scm \
guix/import/apache.scm \
guix/import/cabal.scm \
guix/import/composer.scm \
guix/import/cpan.scm \
@@ -377,7 +376,6 @@ MODULES = \
guix/scripts/import/luanti.scm \
guix/scripts/import/minetest.scm \
guix/scripts/import/npm-binary.scm \
guix/scripts/import/nuget.scm \
guix/scripts/import/opam.scm \
guix/scripts/import/pypi.scm \
guix/scripts/import/stackage.scm \
@@ -454,12 +452,15 @@ AUX_FILES = \
gnu/packages/aux-files/findclass.php \
gnu/packages/aux-files/guix.vim \
gnu/packages/aux-files/guix-nvim.vim \
gnu/packages/aux-files/linux-libre/6.19-arm64.conf \
gnu/packages/aux-files/linux-libre/6.19-i686.conf \
gnu/packages/aux-files/linux-libre/6.19-x86_64.conf \
gnu/packages/aux-files/linux-libre/6.18-arm64.conf \
gnu/packages/aux-files/linux-libre/6.18-i686.conf \
gnu/packages/aux-files/linux-libre/6.18-x86_64.conf \
gnu/packages/aux-files/linux-libre/6.17-arm64.conf \
gnu/packages/aux-files/linux-libre/6.17-i686.conf \
gnu/packages/aux-files/linux-libre/6.17-riscv.conf \
gnu/packages/aux-files/linux-libre/6.17-x86_64.conf \
gnu/packages/aux-files/linux-libre/6.16-arm.conf \
gnu/packages/aux-files/linux-libre/6.16-arm64.conf \
gnu/packages/aux-files/linux-libre/6.16-riscv.conf \
gnu/packages/aux-files/linux-libre/6.16-x86_64.conf \
gnu/packages/aux-files/linux-libre/6.16-i686.conf \
gnu/packages/aux-files/linux-libre/6.12-arm.conf \
gnu/packages/aux-files/linux-libre/6.12-arm64.conf \
gnu/packages/aux-files/linux-libre/6.12-i686.conf \
@@ -481,6 +482,10 @@ AUX_FILES = \
gnu/packages/aux-files/linux-libre/5.10-arm64.conf \
gnu/packages/aux-files/linux-libre/5.10-i686.conf \
gnu/packages/aux-files/linux-libre/5.10-x86_64.conf \
gnu/packages/aux-files/linux-libre/5.4-arm.conf \
gnu/packages/aux-files/linux-libre/5.4-arm64.conf \
gnu/packages/aux-files/linux-libre/5.4-i686.conf \
gnu/packages/aux-files/linux-libre/5.4-x86_64.conf \
gnu/packages/aux-files/ovmf/51-edk2-ovmf-2m-raw-x64-nosb.json \
gnu/packages/aux-files/pack-audit.c \
gnu/packages/aux-files/python/sanity-check.py \
@@ -492,6 +497,7 @@ AUX_FILES = \
# Templates, examples.
EXAMPLES = \
gnu/system/examples/asus-c201.tmpl \
gnu/system/examples/bare-bones.tmpl \
gnu/system/examples/bare-hurd.tmpl \
gnu/system/examples/bare-hurd64.tmpl \
@@ -504,8 +510,7 @@ EXAMPLES = \
gnu/system/examples/plasma.tmpl \
gnu/system/examples/raspberry-pi-64.tmpl \
gnu/system/examples/raspberry-pi-64-nfs-root.tmpl \
gnu/system/examples/vm-image.tmpl \
gnu/system/examples/vm-image-efi.tmpl
gnu/system/examples/vm-image.tmpl
GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go)
@@ -577,7 +582,6 @@ SCM_TESTS = \
tests/import/hexpm.scm \
tests/import/luanti.scm \
tests/import/npm-binary.scm \
tests/import/nuget.scm \
tests/import/opam.scm \
tests/import/print.scm \
tests/import/pypi.scm \
@@ -747,14 +751,6 @@ dist_fishcompletion_DATA = etc/completion/fish/guix.fish
# SELinux policy
nodist_selinux_policy_DATA = etc/guix-daemon.cil
# AppArmor profiles.
dist_apparmor_profile_DATA = \
etc/apparmor.d/guix \
etc/apparmor.d/guix-daemon
nodist_apparmor_profile_tunables_DATA = \
etc/apparmor.d/tunables/guix
EXTRA_DIST += \
.dir-locals.el \
.guix-authorizations \
@@ -772,12 +768,9 @@ EXTRA_DIST += \
build-aux/compile-as-derivation.scm \
build-aux/config.rpath \
build-aux/convert-xref.scm \
build-aux/cuirass/evaluate.scm \
build-aux/extract-syscall-ranges.sh \
build-aux/generate-authors.scm \
build-aux/gitlog-to-changelog \
build-aux/git-version-gen \
build-aux/keep-only-translated.scm \
build-aux/mdate-from-git.scm \
build-aux/test-driver.scm \
build-aux/update-NEWS.scm \
@@ -791,9 +784,7 @@ EXTRA_DIST += \
etc/manifests/disarchive.scm \
etc/manifests/hurd.scm \
etc/manifests/kernels.scm \
etc/manifests/release-minimal.scm \
etc/manifests/release-desktop.scm \
etc/manifests/release-user-packages.scm \
etc/manifests/release.scm \
etc/manifests/source.scm \
etc/manifests/system-tests.scm \
etc/manifests/time-travel.scm \
@@ -1146,18 +1137,12 @@ system_flags = $(foreach system,$(1),-s $(system))
# 5. Build the installation and VM images. The images will run 'guix'
# corresponding to 'vX.Y.Z' + 1 commit, and they will install 'vX.Y.Z'.
#
# This is split into two targets, because a commit is made that has to be
# pushed to Guix.
# First, 'prepare-release' should be run, doing steps 1 and 2.
# Then, the resulting commit should be pushed so that it's available
# to be downloaded for the system images.
# Afterwards, the 'release' target takes care of the rest. This 'release'
# target takes care of everything and copies the resulting files to
# $(releasedir).
# This 'release' target takes care of everything and copies the resulting
# files to $(releasedir).
#
# XXX: Depend on 'dist' rather than 'distcheck' to work around the Gettext
# issue described at <https://savannah.gnu.org/bugs/index.php?51027>.
prepare-release: dist-with-updated-version all
release: dist-with-updated-version all
@if ! git diff-index --quiet HEAD; then \
echo "There are uncommitted changes; stopping." >&2 ; \
exit 1 ; \
@@ -1175,26 +1160,48 @@ prepare-release: dist-with-updated-version all
$(top_builddir)/pre-inst-env guix build guix \
$(call system_flags,$(SUPPORTED_SYSTEMS)) \
-v1 --no-grafts --fallback
@echo
@echo "First step done! Source tarball is ready in $(releasedir)"
@echo "Now push the resulting commit and run `make release`."
@echo
# Make sure you've ran prepare-release prior to running release and pushed
# the commit to Guix. It might be pushed to any branch, such as version-X.Y.Z.
release: all
# Build the artifacts for current commit.
# Use time-machine for provenance.
$(MKDIR_P) "$(releasedir)"
@echo "Building guix inferior for current commit."
COMMIT="$$(git rev-parse HEAD)" && \
GUIX="$$(guix time-machine -q --commit=$$COMMIT)/bin/guix" && \
echo "Building artifacts for current commit: $$COMMIT." && \
ARTIFACTS="$$($$GUIX build --no-grafts \
-f ./etc/teams/release/artifacts.scm)" && \
echo "Artifacts built! Copying to $(releasedir)" && \
cp -f "$$ARTIFACTS"/* "$(releasedir)"
# Generate the binary release tarballs.
rm -f $(BINARY_TARBALLS)
$(MAKE) $(BINARY_TARBALLS)
for system in $(SUPPORTED_SYSTEMS) ; do \
mv "guix-binary.$$system.tar.xz" \
"$(releasedir)/guix-binary-$(PACKAGE_VERSION).$$system.tar.xz" ; \
done
# Build 'current-guix' to speed things up for the next step.
$(top_builddir)/pre-inst-env guix build \
-e '((@ (gnu packages package-management) current-guix))' \
$(call system_flags,$(GUIX_SYSTEM_INSTALLER_SYSTEMS)) \
-v1 --no-grafts --fallback
# Generate the ISO installation images.
for system in $(GUIX_SYSTEM_INSTALLER_SYSTEMS) ; do \
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//'`" ; \
image=`$(top_builddir)/pre-inst-env \
guix system image -t iso9660 \
--label="GUIX_$${system}_$(VERSION)" \
--system=$$system --fallback \
gnu/system/install.scm` ; \
if [ ! -f "$$image" ] ; then \
echo "failed to produce Guix installation image for $$system" >&2 ; \
exit 1 ; \
fi ; \
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.tmp" ; \
mv "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.tmp" \
"$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso" ; \
done
# Generate the VM images.
for system in $(GUIX_SYSTEM_VM_SYSTEMS) ; do \
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//'`" ; \
image=`$(top_builddir)/pre-inst-env \
guix system image -t qcow2 $(GUIX_SYSTEM_VM_IMAGE_FLAGS) \
--save-provenance \
--system=$$system --fallback \
gnu/system/examples/vm-image.tmpl` ; \
if [ ! -f "$$image" ] ; then \
echo "failed to produce Guix VM image for $$system" >&2 ; \
exit 1 ; \
fi ; \
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_VM_IMAGE_BASE).$$system.qcow2"; \
done
@echo
@echo "Congratulations! All the release files are now in $(releasedir)."
@echo
@@ -1233,10 +1240,9 @@ assert-no-store-file-names:
# Make sure installer substitutes are available. Check only the primary
# server so that '--display-missing' doesn't print two lists.
assert-binaries-available: $(GOBJECTS)
$(AM_V_at)$(top_builddir)/pre-inst-env \
guix weather -m "$(top_srcdir)/etc/manifests/release-minimal.scm" \
-m "$(top_srcdir)/etc/manifests/release-desktop.scm" \
--substitute-urls="https://ci.guix.gnu.org" \
$(AM_V_at)$(top_builddir)/pre-inst-env \
guix weather -m "$(top_srcdir)/etc/manifests/release.scm" \
--substitute-urls="https://ci.guix.gnu.org" \
--display-missing
# Make sure the final inputs don't refer to bootstrap tools.
@@ -1262,49 +1268,42 @@ cuirass-jobs: $(GOBJECTS)
.PHONY: clean-go make-go as-derivation
.PHONY: update-guix-package update-NEWS cuirass-jobs release
if in_git_p
# Git auto-configuration.
.git/hooks/:
$(AM_V_at)if test -d .git; then \
mkdir "$@"; \
fi
# Note: the following git commands may fail and produce empty variables,
# e.g. when working on a work tree in a container.
GIT_HOOKS_DIR := $(shell git rev-parse --git-path hooks 2>/dev/null)
GIT_CONFIG_FILE := $(shell git rev-parse --git-path config 2>/dev/null)
$(GIT_HOOKS_DIR):
if [ -n "$(GIT_HOOKS_DIR)" ]; then mkdir -p "$@"; fi
.git/hooks/%: etc/git/% | .git/hooks/
$(AM_V_at)if test -d .git; then \
cp "$<" "$@"; \
fi
$(GIT_HOOKS_DIR)/%: etc/git/% | $(GIT_HOOKS_DIR)/
if [ -n "$(GIT_HOOKS_DIR)" ]; then cp "$<" "$@"; fi
$(GIT_CONFIG_FILE): etc/git/gitconfig
if [ -n "$(GIT_CONFIG_FILE)" ]; then \
git config --fixed-value --replace-all include.path \
../etc/git/gitconfig ../etc/git/gitconfig; \
.git/config: etc/git/gitconfig
$(AM_V_at)if command -v git >/dev/null && test -d .git; then \
git config --fixed-value --replace-all include.path \
../etc/git/gitconfig ../etc/git/gitconfig; \
fi
COMMIT_MSG_MAGIC = VGhpcyBpcyB0aGUgY29tbWl0LW1zZyBob29rIG9mIEd1aXg=
$(GIT_HOOKS_DIR)/commit-msg: etc/git/commit-msg | $(GIT_HOOKS_DIR)
if [ -n "$(GIT_HOOKS_DIR)" ]; then \
if test -f $@ && ! grep -qF $(COMMIT_MSG_MAGIC) $@; then \
mkdir -p $@.d && mv $@ $@.d && \
echo user commit-msg hook moved to $@.d/commit-msg; \
fi && \
cp etc/git/commit-msg $@; \
.git/hooks/commit-msg: etc/git/commit-msg | .git/hooks/
$(AM_V_at)if test -d .git; then \
if test -f $@ && ! grep -qF $(COMMIT_MSG_MAGIC) $@; then \
mkdir -p $@.d && mv $@ $@.d && \
@ echo user commit-msg hook moved to $@.d/commit-msg; \
fi; \
cp etc/git/commit-msg $@; \
fi
# Convenience targets.
GIT_HOOKS_SOURCE_FILES := $(shell find etc/git -type f -executable)
.PHONY: git-config git-hooks invalidate-hooks
git-hooks: $(addprefix $(GIT_HOOKS_DIR)/,$(notdir $(GIT_HOOKS_SOURCE_FILES)))
git-config: $(GIT_CONFIG_FILE) git-hooks
# The etc/git/ config files are not distributed and have no use when building
# from a tarball. Do not add dependencies on these to *_DATA when building
# from a tarball, as that breaks the build.
if in_git_p
nodist_noinst_DATA = \
$(GIT_HOOKS_DIR)/pre-push \
$(GIT_HOOKS_DIR)/post-merge \
$(GIT_CONFIG_FILE) \
$(GIT_HOOKS_DIR)/commit-msg
.git/hooks/pre-push \
.git/hooks/post-merge \
.git/config \
.git/hooks/commit-msg
endif
# Downloading up-to-date PO files.
+5 -75
View File
@@ -6,7 +6,6 @@ Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
Copyright © 2021, 2022, 2024 Maxim Cournoyer <maxim@guixotic.coop>
Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
Copyright © 2026 Noé Lopez <noelopez@free.fr>
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
@@ -17,77 +16,8 @@ Please send Guix bug reports to bug-guix@gnu.org.
* Changes in 1.5.0 (since 1.4.0)
** Package management
*** New rpm format for the guix pack command
*** New appimage format for the guix pack command
*** New --max-layers and --file options for the guix pack command
*** New --roll-back and --expression options for the guix deploy command
*** New --with-version package transformation option
*** New --with-configure-flag package transformation option
*** New --nesting option to use Guix within guix shell containers
*** New --emulate-fhs option for guix shell containers
*** New --dependents and --development options for guix build
*** New --interactive and --list-types flags for guix repl
*** The root file-system of guix shell containers is now read-only
*** New --writable-root option for the guix shell command
*** Improved style rules for guix style
*** New guix locate command
*** guix refresh now honours the --key-server option
*** guix git authenticate now remembers introduction commit and signer
*** guix git authenticate now installs pre-push and post-merge git hooks
*** System reconfiguration now supports kexec for fast reboot
*** Hetzner Cloud is now supported by the guix deploy command
*** The Guix Daemon can now be run without root privileges
*** guix refresh can now target partial version
*** New guix import composer command
*** New guix import binary-npm command
*** New guix import nuget command
*** New graphml backend for guix graph
*** New cyclonedx-json backend for guix graph
*** AppArmor profiles are now available for guix and guix-daemon
** Distribution
*** nss-certs is now included in %base-packages
*** udev-service-type now supports hardware configuration files
*** gdm-service-type now uses Wayland by default
*** KDE Plasma 6.5 is now available with the new plasma-desktop-service-type
*** GNOME was updated to version 44 with a more modular desktop service
*** Declarative offloading with new build-machines field of operating-system
*** containerd-service-type is no longer included with the Docker service
*** privileged-programs replaces setuid-programs in operating-system
*** The postgresql field of postgresql-configuration is now mandatory
*** The Rottlog service was replaced by new log-rotation-service-type
*** The default system log has been changed to Shepherds system-log service
*** New recommended %base-home-services variable for Guix Home
*** UDisks now mounts removable devices in /run/media/$USER instead of /media
*** Syncthing service received incompatible changes
*** node-build-system received incompatible changes
*** New services for /etc/profile.d and /etc/bashrc.d
*** New build system for clasp-cl
*** New Rust packaging model
*** C.utf8 locale is now supported by glibc
*** Fully bootstrapped mono and zig are now available
*** 64bit Hurd (x86_64-gnu) now has experimental support
*** 12525 new packages
*** 8911 package updates
Noteworthy updates:
bash 5.2.37, binutils 2.44, clojure 1.12.0, cups 2.4.14, emacs 30.2,
gcc-toolchain 15.2.0, gdb 16.3, ghc 9.2.8, gimp 3.0.4, glibc 2.41,
gnome 46.10, gnupg 2.4.7, go 1.25.3, guile 3.0.9, icecat 140.6.0-gnu1,
icedtea 3.19.0, inkscape 1.3.2, julia 1.8.5, libreoffice 25.2.5.2,
linux-libre 6.17.12, lxde 0.99.3, mate 1.28.2, ocaml 5.3.0, octave 10.3.0,
openjdk 25, perl 5.36.0, python 3.11.14, racket 8.18, rust 1.85.1, r 4.5.2,
sbcl 2.5.8, shepherd 1.0.9, xfce 4.20.0, xorg-server 21.1.21
** Programming interfaces
*** (gnu system setuid) has been renamed to (gnu system privilege)
*** Moved to a new Rust packaging model and repackaged all Rust applications
*** Rust library packages have been moved to the guix-rust-past-crates channel
*** Most Python packages now use the pyproject-build-system
** Noteworthy bug fixes
*** Daemon vulnerability allowing store corruption has been fixed
*** Daemon vulnerability allowing takeover of build users has been fixed
*** Daemon privilege escalation vulnerabilities fixed
*** Daemon CVEs have been fixed
CVE-2024-27297, CVE-2024-52867, CVE-2025-46415, CVE-2025-46416, CVE-2025-59378
* Changes in 1.4.0 (since 1.3.0)
** Package management
*** New guix home command, for home environment management
@@ -1996,7 +1926,7 @@ zynaddsubfx@3.0.3, zziplib@0.13.69
*** guix pack now honors package transformation options
*** guix package --search no longer shows superseded packages
(<https://bugs.gnu.org/30566>)
*** guix offload test reports errors more nicely
*** guix offload test reports errors more nicely
(<https://bugs.gnu.org/28057>)
*** postgresql service is started through pg_ctl
(<https://bugs.gnu.org/29992>)
@@ -5734,7 +5664,7 @@ Monad” in the manual.
*** X session is executed from a login shell (<http://bugs.gnu.org/19119>)
*** grub.cfg is now a garbage-collector root (<http://bugs.gnu.org/19160>)
*** Substituter progress report properly formatted
*** Substituter progress report properly formatted
(<http://bugs.gnu.org/19313>)
*** Document permissions for /gnu/store (<http://bugs.gnu.org/19316>)
*** Make sure config.go is newer than config.scm
@@ -5990,18 +5920,18 @@ This could cause problems with ancient Linux kernel.
*** download: Use the 'SERVER NAME' TLS extension when possible
(<http://bugs.gnu.org/18526>)
*** libdaemon: Add alternate source URLs (<http://bugs.gnu.org/18639>)
*** icu4c: Reinstate RUNPATH on shared libraries
*** icu4c: Reinstate RUNPATH on shared libraries
(<http://bugs.gnu.org/18695>)
*** nss-mdns: Add alternate source URLs (<http://bugs.gnu.org/18704>)
*** download: Add "Accept: */*" to the HTTP headers
(<http://bugs.gnu.org/18768>)
*** guix-register: Do not attempt to create NIX_STORE_DIR
*** guix-register: Do not attempt to create NIX_STORE_DIR
(<http://bugs.gnu.org/18689>)
*** Allow Linux-libre to find our 'modprobe' command
(<http://bugs.gnu.org/18525>)
*** man-pages: Build sequentially (<http://bugs.gnu.org/18701>)
*** Fix intermittent test failures involving GC (<http://bugs.gnu.org/18935>)
*** guix import: pypi: Gracefully handle non-existent packages
*** guix import: pypi: Gracefully handle non-existent packages
(<http://bugs.gnu.org/18831>)
*** Make sure the shared library has the '.so' extension
(<http://bugs.gnu.org/18521>)
+1 -1
View File
@@ -324,7 +324,7 @@ files."
(message (format #f "You found a bug: the program '~a'
failed to compute the derivation for Guix (version: ~s; system: ~s;
host version: ~s; pull-version: ~s).
Please report the COMPLETE output above to <~a>.~%"
Please report the COMPLETE output above by email to <~a>.~%"
(derivation->output-path build)
version system %guix-version pull-version
%guix-bug-report-address))))))))))))
@@ -50,7 +50,7 @@
directory))
((_ . directory) directory))
(derivation->output-paths drv)))))
(%final-inputs system)))
%final-inputs))
(define (assert-valid-substitute substitute)
"Make sure SUBSTITUTE does not refer to any bootstrap inputs, and bail out
+2 -2
View File
@@ -3,7 +3,7 @@ exec guile --no-auto-compile -e main -s "$0" "$@"
!#
;;;; test-driver.scm - Guile test driver for Automake testsuite harness
(define script-version "2026-01-23.07") ;UTC
(define script-version "2023-12-08.14") ;UTC
;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2021 Maxim Cournoyer <maxim@guixotic.coop>
@@ -151,7 +151,7 @@ cases based on their names."
(and show-duration? time-elapsed-seconds)))
(unless (and errors-only? (not (test-failed? runner)))
(format #t "test-name: ~A~%" (test-runner-test-name runner))
(format #t "test-name: ~A~%" (result 'test-name))
(format #t "location: ~A~%"
(string-append (result 'source-file) ":"
(number->string (result 'source-line))))
+3 -3
View File
@@ -128,13 +128,13 @@ COMMIT. PROC receives the temporary directory file name as an argument."
(define %guix-git-repo-push-url-regexp
"(git.guix.gnu.org|codeberg.org/guix|git@codeberg.org:guix)/guix(.git)? \\(push\\)")
(define (with-input-pipe-to-string prog . args)
(let* ((input-pipe (apply open-pipe* OPEN_READ prog args))
(define-syntax-rule (with-input-pipe-to-string prog arg ...)
(let* ((input-pipe (open-pipe* OPEN_READ prog arg ...))
(output (get-string-all input-pipe))
(exit-val (status:exit-val (close-pipe input-pipe))))
(unless (zero? exit-val)
(error (format #f "Command ~s exited with non-zero exit status: ~s"
(string-join (cons prog args)) exit-val)))
(string-join (list prog arg ...)) exit-val)))
(string-trim-both output)))
(define (find-origin-remote)
+2 -19
View File
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
#
# GNU Guix --- Functional package management for GNU
# Copyright © 2012-2021, 2022-2023, 2025 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2012-2021, 2022-2023 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013, 2016 Mark H Weaver <mhw@netris.org>
# Copyright © 2014-2016 Alex Kost <alezost@gmail.com>
# Copyright © 2014-2016 David Thompson <davet@gnu.org>
@@ -81,15 +81,6 @@ AC_ARG_WITH([selinux-policy-dir],
[selinux_policydir='${datadir}/selinux/'])
AC_SUBST([selinux_policydir])
AC_ARG_WITH([apparmor-profile-dir],
AS_HELP_STRING([--with-apparmor-profile-dir=DIR],
[name of the AppArmor profile directory]),
[apparmor_profiledir="$withval"],
[apparmor_profiledir='${sysconfdir}/apparmor.d'])
AC_SUBST([apparmor_profiledir])
apparmor_profile_tunablesdir='${apparmor_profiledir}/tunables'
AC_SUBST([apparmor_profile_tunablesdir])
dnl Better be verbose.
AC_MSG_CHECKING([for the store directory])
AC_MSG_RESULT([$storedir])
@@ -130,8 +121,7 @@ if test "x$GUILD" = "x"; then
fi
dnl (guix ui), notably, requires 'default-optimization-level' added in 3.0.3.
dnl (guix serialization) requires 'bytevector-slice' added in 3.0.9.
PKG_CHECK_MODULES([GUILE], [guile-3.0 >= 3.0.9])
PKG_CHECK_MODULES([GUILE], [guile-3.0 >= 3.0.3])
dnl Get CFLAGS and LDFLAGS for libguile.
GUILE_FLAGS
@@ -199,12 +189,6 @@ if test "x$have_guile_lzlib" != "xyes"; then
AC_MSG_ERROR([Guile-lzlib is missing; please install it.])
fi
dnl Check for Guile-semver.
GUILE_MODULE_AVAILABLE([have_guile_semver], [(semver)])
if test "x$have_guile_semver" != "xyes"; then
AC_MSG_ERROR([Guile-semver is missing; please install it.])
fi
dnl Check for Guile-Avahi.
GUILE_MODULE_AVAILABLE([have_guile_avahi], [(avahi)])
AM_CONDITIONAL([HAVE_GUILE_AVAHI],
@@ -324,7 +308,6 @@ AC_CONFIG_FILES([Makefile
po/guix/Makefile.in
po/packages/Makefile.in
etc/guix-daemon.cil
etc/apparmor.d/tunables/guix
guix/config.scm])
AC_CONFIG_FILES([etc/committer.scm], [chmod +x etc/committer.scm])
+5 -7
View File
@@ -72,7 +72,7 @@
(define %cookbook-languages
;; Available translations for the 'guix-cookbook' text domain.
'("de" "en" "es" "fr" "it" "ko" "pt_BR" "ru" "sk" "sv" "ta" "zh_CN"))
'("de" "en" "es" "fr" "it" "ko" "pt_BR" "ru" "sk" "sv" "zh_CN"))
(define %languages
;; Available translations for the document being built.
@@ -82,7 +82,7 @@
(define %latest-guix-version
;; Latest released version.
"1.5.0")
"1.4.0")
(define (texinfo-manual-images source)
"Return a directory containing all the images used by the user manual, taken
@@ -777,8 +777,7 @@ in SOURCE."
(define version-links
(list (menu-item #$latest-version
(string-append
"/manual/" #$latest-version
"/" language
"/manual/" language
(if split-node? "/html_node" "")))
(menu-item "development"
(string-append
@@ -943,8 +942,7 @@ makeinfo OPTIONS."
(let* ((texi (language->texi-file-name language))
(opts `("--html"
"-c" ,(string-append "TOP_NODE_UP_URL=/manual/"
#$%latest-guix-version
"/" language)
language)
#$@options
,texi)))
(format #t "building HTML manual for language '~a'...~%"
@@ -1302,7 +1300,7 @@ must be the Guix top-level source directory, from which PO files are taken."
language))
".html")))
"HTML, entirely on one page"))
,@(if (member language '("ko" "ru" "ta"))
,@(if (member language '("ko" "ru"))
'()
`((li (a (@ (href ,(string-append
#$manual
+321 -102
View File
@@ -66,7 +66,7 @@ GNU Guix depends on the following packages:
@itemize
@item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x,
version 3.0.9 or later;
version 3.0.3 or later;
@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
0.1.0 or later;
@item
@@ -134,15 +134,10 @@ C++11 standard.
@section Building from Git
If you want to hack Guix itself, it is recommended to use the latest
version from the Git repository@footnote{
Guix uses @code{master} as the default branch name. A proposal in 2025 to
change the default branch name to @code{main} did not reach consensus.
See @uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/003-rename-default-branch.md,
Guix Consensus Document 003}.}:
version from the Git repository:
@example
git clone https://git.guix.gnu.org/guix.git
cd guix
@end example
@cindex authentication, of a Guix checkout
@@ -182,7 +177,6 @@ guix shell -D guix -CPW
or even, from within a Git worktree for Guix:
@example
echo $(pwd) >> ~/.config/guix/shell-authorized-directories
guix shell -CPW
@end example
@@ -190,10 +184,6 @@ If @option{-C} (short for @option{--container}) is not supported on your
system, try @command{--pure} instead of @option{-CPW}.
@xref{Invoking guix shell}, for more information on that command.
Most of the test suite runs without an internet connection. The @option{-N}
(short for @option{--network}) can be added to the @code{guix shell} command
to run the tests that require internet access.
If you are unable to use Guix when building Guix from a checkout, the
following are the required packages in addition to those mentioned in the
installation instructions (@pxref{Requirements}).
@@ -207,11 +197,11 @@ installation instructions (@pxref{Requirements}).
@item @url{https://www.gnu.org/software/help2man/, GNU Help2man (optional)}.
@end itemize
On Guix, other development tools, like @code{strace}, can be included by
giving them as extra arguments to @command{guix shell}:
On Guix, extra dependencies can be added by instead running @command{guix
shell}:
@example
guix shell -D guix -CPW strace
guix shell -D guix help2man git strace --pure
@end example
From there you can generate the build system infrastructure
@@ -1514,30 +1504,37 @@ satisfied.
@subsection Python Modules
@cindex python
The standard way to generate a package definition is to use
@code{guix import pypi <name>}, where @var{name} is the name of the
Python package on @url{https://pypi.org, PyPI}, see @pxref{Invoking guix
import}. Please check with @code{guix lint <package-name>} that the
generated package is valid.
We currently package Python 2 and Python 3, under the Scheme variable names
@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
To avoid confusion and naming clashes with other programming languages, it
seems desirable that the name of a package for a Python module contains
the word @code{python}.
To avoid confusion and naming clashes with other programming languages,
Python module packages should be prefixed with @code{python-}.
Some modules are compatible with only one version of Python, others with
both. If the package Foo is compiled with Python 3, we name it
@code{python-foo}. If it is compiled with Python 2, we name it
@code{python2-foo}. Python 2 packages are being removed from the
distribution; please do no not submit any new Python 2 packages.
If a project already contains the word @code{python}, please do not
repeat it; for instance, the module python-dateutil is packaged under
the name @code{python-dateutil}. If the project name starts with
@code{py}, it is kept and prefixed as described above (e.g.@:
@code{python-pytz}).
If a project already contains the word @code{python}, we drop this;
for instance, the module python-dateutil is packaged under the names
@code{python-dateutil} and @code{python2-dateutil}. If the project name
starts with @code{py} (e.g.@: @code{pytz}), we keep it and prefix it as
described above.
@quotation Note
The standard build system for Python packages is Guix's implementation
of the @url{https://peps.python.org/pep-0517/, formal Python standard}
for specifying build requirements: @var{pyproject-build-system}.
The @var{python-build-system} which corresponds to the way Python
packages were built before PEP517, using the informally specified
@file{setup.py} file, is now deprecated. @var{pyproject-build-system}
will eventually be deprecated and renamed into
@var{python-build-system} after its removal.
Currently there are two different build systems for Python packages in Guix:
@var{python-build-system} and @var{pyproject-build-system}. For the
longest time, Python packages were built from an informally specified
@file{setup.py} file. That worked amazingly well, considering Python's
success, but was difficult to build tooling around. As a result, a host
of alternative build systems emerged and the community eventually settled on a
@url{https://peps.python.org/pep-0517/, formal standard} for specifying build
requirements. @var{pyproject-build-system} is Guix's implementation of this
standard. It is considered ``experimental'' in that it does not yet support
all the various PEP-517 @emph{build backends}, but you are encouraged to try
it for new Python packages and report any problems. It will eventually be
deprecated and merged into @var{python-build-system}.
@end quotation
@subsubsection Specifying Dependencies
@@ -1549,20 +1546,21 @@ package source tree, with varying degrees of accuracy: in the
@file{requirements.txt}, or in @file{tox.ini} (the latter mostly for
test dependencies).
When editing a recipe for a Python package, the goal is to map these
dependencies to the appropriate type of ``input'' (@pxref{package
Your mission, when writing a recipe for a Python package, is to map
these dependencies to the appropriate type of ``input'' (@pxref{package
Reference, inputs}). Although the @code{pypi} importer normally does a
good job (@pxref{Invoking guix import}), please verify the following
check list to determine which dependency goes where.
good job (@pxref{Invoking guix import}), you may want to check the
following check list to determine which dependency goes where.
@itemize
@item
Python is packaged @emph{without} @code{setuptools} and @code{pip}
installed per default.
We currently package Python with @code{setuptools} and @code{pip}
installed per default. This is about to change, and users are encouraged
to use @code{python-toolchain} if they want a build environment for Python.
@command{guix lint} will warn if @code{pip} or other unneeded
native-inputs are added.
@command{guix lint} will warn if @code{setuptools} or @code{pip} are
added as native-inputs because they are generally not necessary.
@item
Python dependencies required at run time go into
@@ -1577,9 +1575,9 @@ Python packages required only at build time---e.g., those listed under
for testing---e.g., those in @code{tests_require} or @file{tox.ini}---go into
@code{native-inputs}. The rationale is that (1) they do not need to be
propagated because they are not needed at run time, and (2) in a
cross-compilation context, it's the target ``native'' input.
cross-compilation context, it's the ``native'' input that we'd want.
Examples are the @code{pytest}, @code{mock}, and @code{stestr} test
Examples are the @code{pytest}, @code{mock}, and @code{nose} test
frameworks. Of course if any of these packages is also required at
run-time, it needs to go to @code{propagated-inputs}.
@@ -1940,60 +1938,35 @@ keyword parameters for procedures that take more than four parameters.
@node Submitting Patches
@section Submitting Patches
@cindex pull requests
@cindex patch submission
Development is done using the Git distributed version control system.
Thus, access to the repository is not strictly necessary. We welcome
contributions as @dfn{pull requests} (PR) at
@url{https://codeberg.org/guix/guix/pulls/}@footnote{Before January 1st,
2026, changes would be submitted by email to
@email{guix-patches@@gnu.org} and could be
@uref{https://issues.guix.gnu.org, browsed online}. In accordance with
@uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/002-codeberg.md,
Guix Consensus Document 002}, this method is no longer supported.}.
There are two ways to create a pull request:
contributions in one of the following forms:
@itemize
@item
By creating a personal ``fork'' of @uref{https://codeberg.org/guix/guix,
the repository}, creating a branch with your changes, and
@uref{https://docs.codeberg.org/collaborating/pull-requests-and-git-flow/,
submitting a pull request for that branch}.
@cindex pull request, for contributions
As a @dfn{pull request} (PR) at
@url{https://codeberg.org/guix/guix/pulls/}. This is now the preferred
form.
@item
@cindex AGit workflow, for pull requests
By following the @uref{https://forgejo.org/docs/next/user/agit-support/,
@dfn{AGit workflow}}, which is somewhat more convenient and consumes
less disk space at Codeberg since it removes the need to create a
``fork''.
Until December 31st, 2025@footnote{This date is the result of a decision
made collectively in
@uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/002-codeberg.md,
Guix Consensus Document 002} in May 2025.}, you may also send patches as
produced by @code{git format-patch} to the @email{guix-patches@@gnu.org}
mailing list (@pxref{Submitting patches to a project,,, git, Git User
Manual}).
Assuming your local checkout is on the branch containing the changes you
would like to submit for inclusion in the @code{master} branch, run:
@example
git push origin HEAD:refs/for/master \
-o topic=@var{topic} \
-o title=@var{title} -o description=@var{description}
@end example
@var{topic} must be an identifier without whitespace, similar to a
branch name; @var{title} and @var{description} are arbitrary text that
can be omitted, in which case the message of the last commit on the
branch fills that role.
To send an update to an AGit pull request of yours, run:
@example
git push origin HEAD:refs/for/master \
-o topic=@var{topic} -o force-push=yes
@end example
Codeberg automatically figures out which pull request @var{topic}
corresponds to and updates the associated branch.
This mailing list is backed by a Debbugs instance, which allows us to
keep track of submissions (@pxref{Tracking Bugs and Changes}).
Each message sent to that mailing list gets a new tracking number
assigned; people can then follow up on the submission by sending email
to @code{@var{ISSUE_NUMBER}@@debbugs.gnu.org}, where @var{ISSUE_NUMBER}
is the tracking number (@pxref{Sending a Patch Series}).
@end itemize
Contributors are encouraged to take a moment to set some Git
Either way, contributors are encouraged to take a moment to set some Git
repository options (@pxref{Configuring Git}) first, which can improve
the readability of patches. Seasoned Guix developers may also want to
look at the section on commit access (@pxref{Commit Access}).
@@ -2160,13 +2133,36 @@ guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master --disable-auth
@end enumerate
When posting a patch to the mailing list, use @samp{[PATCH] @dots{}} as
a subject, if your patch is to be applied on a branch other than
@code{master}, say @code{core-updates}, specify it in the subject like
@samp{[PATCH core-updates] @dots{}}.
You may use your email client, the @command{git send-email} command
(@pxref{Sending a Patch Series}) or the @command{mumi send-email}
command (@pxref{Debbugs User Interfaces}). We prefer to get patches in
plain text messages, either inline or as MIME attachments. You are
advised to pay attention if your email client changes anything like line
breaks or indentation which could potentially break the patches.
Expect some delay when you submit your very first patch to
@email{guix-patches@@gnu.org}. You have to wait until you get an
acknowledgement with the assigned tracking number. Future acknowledgements
should not be delayed.
When a bug is resolved, please close the thread by sending an email to
@email{@var{ISSUE_NUMBER}-done@@debbugs.gnu.org}.
@menu
* Configuring Git::
* Sending a Patch Series::
@end menu
@node Configuring Git
@subsection Configuring Git
@cindex git configuration
@cindex @code{git format-patch}
@cindex @code{git send-email}
If you have not done so already, you may wish to set a name and email
that will be associated with your commits (@pxref{telling git your name,
@@ -2186,6 +2182,166 @@ changes was already submitted for review. If you have a
@file{commit-msg} hook of your own you would like to use with Guix, you
can place it under the @file{.git/hooks/commit-msg.d/} directory.
@node Sending a Patch Series
@subsection Sending a Patch Series
@cindex patch series
@cindex @code{git send-email}
@cindex @code{git format-patch}
@quotation Warning
This section is about contributing code by sending patches by email.
This option is supported until December 31st, 2025, but we recommend
getting familiar with the @dfn{pull request} workflow, which will become
the norm after that date. @xref{Submitting Patches}, for more info.
@end quotation
@unnumberedsubsubsec Single Patches
@anchor{Single Patches}
The @command{git send-email} command is the best way to send both single
patches and patch series (@pxref{Multiple Patches}) to the Guix mailing
list. Sending patches as email attachments may make them difficult to
review in some mail clients, and @command{git diff} does not store commit
metadata.
@quotation Note
The @command{git send-email} command is provided by the @code{send-email}
output of the @code{git} package, i.e. @code{git:send-email}.
@end quotation
The following command will create a patch email from the latest commit,
open it in your @var{EDITOR} or @var{VISUAL} for editing, and send it to
the Guix mailing list to be reviewed and merged. Assuming you have
already configured Git according to @xref{Configuring Git}, you can
simply use:
@example
$ git send-email --annotate -1
@end example
@quotation Tip
To add a prefix to the subject of your patch, you may use the
@option{--subject-prefix} option. The Guix project uses this to
specify that the patch is intended for a branch or repository
other than the @code{master} branch of
@url{https://codeberg.org/guix/guix.git}.
@example
git send-email --annotate --subject-prefix='PATCH core-updates' -1
@end example
@end quotation
The patch email contains a three-dash separator line after the commit
message. You may ``annotate'' the patch with explanatory text by adding
it under this line. If you do not wish to annotate the email, you may
drop the @option{--annotate} option.
If you need to send a revised patch, don't resend it like this or send
a ``fix'' patch to be applied on top of the last one; instead, use
@command{git commit --amend} or @url{https://git-rebase.io,
@command{git rebase}} to modify the commit, and use the
@email{@var{ISSUE_NUMBER}@@debbugs.gnu.org} address and the @option{-v}
flag with @command{git send-email}.
@example
$ git commit --amend
$ git send-email --annotate -v@var{REVISION} \
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org -1
@end example
@quotation Note
Due to an apparent bug in @command{git send-email},
@option{-v @var{REVISION}} (with the space) will not work; you
@emph{must} use @option{-v@var{REVISION}}.
@end quotation
You can find out @var{ISSUE_NUMBER} either by searching on the mumi
interface at @url{https://issues.guix.gnu.org} for the name of your patch or
reading the acknowledgement email sent automatically by Debbugs in
reply to incoming bugs and patches, which contains the bug number.
@unnumberedsubsubsec Notifying Teams
@anchor{Notifying Teams}
@cindex teams
If your git checkout has been correctly configured (@pxref{Configuring
Git}), the @command{git send-email} command will automatically notify
the appropriate team members, based on the scope of your changes. This
relies on the @file{etc/teams.scm} script, which can also be invoked
manually if you do not use the preferred @command{git send-email}
command to submit patches. To list the available actions of the script,
you can invoke it via the @command{etc/teams.scm help} command. For
more information regarding teams, @pxref{Teams}.
@quotation Note
On foreign distros, you might have to use @command{./pre-inst-env git
send-email} for @file{etc/teams.scm} to work.
@end quotation
@unnumberedsubsubsec Multiple Patches
@anchor{Multiple Patches}
@cindex cover letter
While @command{git send-email} alone will suffice for a single
patch, an unfortunate flaw in Debbugs means you need to be more
careful when sending multiple patches: if you send them all to the
@email{guix-patches@@gnu.org} address, a new issue will be created
for each patch!
When sending a series of patches, it's best to send a Git ``cover
letter'' first, to give reviewers an overview of the patch series.
We can create a directory called @file{outgoing} containing both
our patch series and a cover letter called @file{0000-cover-letter.patch}
with @command{git format-patch}.
@example
$ git format-patch -@var{NUMBER_COMMITS} -o outgoing \
--cover-letter
@end example
@quotation Note
@code{git format-patch} accepts a wide range of
@uref{https://git-scm.com/docs/gitrevisions, revision range} specifiers.
For example, if you are working in a branch, you could select all commits
in your branch starting at @code{master}.
@example
$ git format-patch master..@var{MY_BRANCH} -o outgoing \
--cover-letter
@end example
@end quotation
We can now send @emph{just} the cover letter to the
@email{guix-patches@@gnu.org} address, which will create an issue
that we can send the rest of the patches to.
@example
$ git send-email outgoing/0000-cover-letter.patch --annotate
$ rm outgoing/0000-cover-letter.patch # we don't want to resend it!
@end example
Ensure you edit the email to add an appropriate subject line and
blurb before sending it. Note the automatically generated shortlog
and diffstat below the blurb.
Once the Debbugs mailer has replied to your cover letter email, you
can send the actual patches to the newly-created issue address.
@example
$ git send-email outgoing/*.patch --to=@var{ISSUE_NUMBER}@@debbugs.gnu.org
$ rm -rf outgoing # we don't need these anymore
@end example
Thankfully, this @command{git format-patch} dance is not necessary
to send an amended patch series, since an issue already exists for
the patchset.
@example
$ git send-email -@var{NUMBER_COMMITS} -v@var{REVISION} \
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org
@end example
If need be, you may use @option{--cover-letter --annotate} to send
another cover letter, e.g. for explaining what's changed since the last
revision, and why these changes are necessary.
@node Tracking Bugs and Changes
@section Tracking Bugs and Changes
@@ -2196,26 +2352,31 @@ patch submissions and topic branches.
* The Issue Tracker:: The official bug and patch tracker.
* Managing Patches and Branches:: How changes to Guix are managed.
* Debbugs User Interfaces:: Ways to interact with Debbugs.
* Debbugs Usertags:: Tag reports with custom labels.
* Cuirass Build Notifications:: Be alerted of any breakage via RSS feeds.
@end menu
@node The Issue Tracker
@subsection The Issue Tracker
@cindex email workflow, deprecated
@cindex issue tracker, for the email workflow
@cindex bug reports, tracking
@cindex patch submissions, tracking
@cindex issue tracking
@cindex Debbugs, issue tracking system
Bug reports (@dfn{issues}) and patch submissions (@dfn{pull requests})
are currently tracked at the @uref{https://codeberg.org/guix/guix,
project's home at Codeberg}.
Before January 1st, 2026, bug reports and patches were tracked using the
Debbugs instance at @uref{https://bugs.gnu.org}, which can also be
browsed at @uref{https://issues.guix.gnu.org}. This has been
discontinued and Codeberg is now the sole option to report new bugs and
propose new changes@footnote{Check out
Before May 25th, 2025, bug reports and patches were exclusively tracked
using the Debbugs instance at @uref{https://bugs.gnu.org}; it may still
be used for these purposes until December 31st, 2025, after which
Codeberg will become the sole option to report new bugs and propose new
changes@footnote{Check out
@uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/002-codeberg.md,
Guix Consensus Document 002} for details on this decision.}.
Guix Consensus Document 002} for details on this decision.}. With
Debbugs, bug reports are sent by email to @email{bug-guix@@gnu.org} and
patches are sent to @email{guix-patches@@gnu.org} (@pxref{Submitting
Patches}).
@node Managing Patches and Branches
@subsection Managing Patches and Branches
@@ -2327,10 +2488,11 @@ only then should the merge requests be created, as documented earlier.
@quotation Warning
This section is about bug reports and patches sent by email to
@uref{https://issues.guix.gnu.org, Debbugs}, which is discontinued.
Since January 1st, 2026, bug reports and patches are submitted as issues
and pull requests on @uref{https://codeberg.org/guix/guix, Codeberg}.
@xref{Submitting Patches}, for more info.
@uref{https://issues.guix.gnu.org, Debbugs}. This option is supported
until December 31st, 2025, after which
@uref{https://codeberg.org/guix/guix, Codeberg} will be the only
interface for submitting bug reports and changes. @xref{Submitting
Patches}, for more info.
@end quotation
@subsubsection Web interface
@@ -2519,6 +2681,63 @@ used.
@xref{Top,,, debbugs-ug, Debbugs User Guide}, for more information on
this nifty tool!
@node Debbugs Usertags
@subsection Debbugs Usertags
@cindex usertags, for debbugs
@cindex Debbugs usertags
Debbugs provides a feature called @dfn{usertags} that allows any user to
tag any bug with an arbitrary label. Bugs can be searched by usertag,
so this is a handy way to organize bugs@footnote{The list of usertags is
public information, and anyone can modify any user's list of usertags,
so keep that in mind if you choose to use this feature.}. If you use
Emacs Debbugs, the entry-point to consult existing usertags is the
@samp{C-u M-x debbugs-gnu-usertags} procedure. To set a usertag, press
@samp{C} while consulting a bug within the *Guix-Patches* buffer opened
with @samp{C-u M-x debbugs-gnu-bugs} buffer, then select @code{usertag}
and follow the instructions.
For example, to view all the bug reports (or patches, in the case of
@code{guix-patches}) tagged with the usertag @code{powerpc64le-linux}
for the user @code{guix}, open a URL like the following in a web
browser:
@url{https://debbugs.gnu.org/cgi-bin/pkgreport.cgi?tag=powerpc64le-linux;users=guix}.
For more information on how to use usertags, please refer to the
documentation for Debbugs or the documentation for whatever tool you use
to interact with Debbugs.
In Guix, we are experimenting with usertags to keep track of
architecture-specific issues, as well as reviewed ones. To facilitate
collaboration, all our usertags are associated with the single user
@code{guix}. The following usertags currently exist for that user:
@table @code
@item powerpc64le-linux
The purpose of this usertag is to make it easy to find the issues that
matter most for the @code{powerpc64le-linux} system type. Please assign
this usertag to bugs or patches that affect @code{powerpc64le-linux} but
not other system types. In addition, you may use it to identify issues
that for some reason are particularly important for the
@code{powerpc64le-linux} system type, even if the issue affects other
system types, too.
@item reproducibility
For issues related to reproducibility. For example, it would be
appropriate to assign this usertag to a bug report for a package that
fails to build reproducibly.
@item reviewed-looks-good
You have reviewed the series and it looks good to you (LGTM).
@end table
If you're a committer and you want to add a usertag, just start using it
with the @code{guix} user. If the usertag proves useful to you,
consider updating this section of the manual so that others will know
what your usertag means.
@node Cuirass Build Notifications
@subsection Cuirass Build Notifications
@@ -3020,7 +3239,7 @@ to that commit message.
If you are not a committer, you can help others find a @emph{series} you
have reviewed more easily by adding a @code{reviewed-looks-good} usertag
for the @code{guix} user.
for the @code{guix} user (@pxref{Debbugs Usertags}).
@node Updating the Guix Package
@section Updating the Guix Package
+27 -51
View File
@@ -22,7 +22,7 @@ Copyright @copyright{} 2020 André Batista@*
Copyright @copyright{} 2020 Christine Lemmer-Webber@*
Copyright @copyright{} 2021 Joshua Branson@*
Copyright @copyright{} 2022, 2023 Maxim Cournoyer@*
Copyright @copyright{} 2023--2026 Ludovic Courtès@*
Copyright @copyright{} 2023-2025 Ludovic Courtès@*
Copyright @copyright{} 2023 Thomas Ieong@*
Copyright @copyright{} 2024 Florian Pelz@*
Copyright @copyright{} 2025 45mg@*
@@ -77,9 +77,8 @@ Italian (@pxref{Top,,, guix-cookbook.it, Ricettario di GNU Guix}),
Brazilian Portuguese (@pxref{Top,,, guix-cookbook.pt_BR,
Livro de receitas do GNU Guix}), Russian (@pxref{Top,,, guix-cookbook.ru,
GNU Guix Рецепты}), Slovak (@pxref{Top,,, guix-cookbook.sk,
Receptár GNU Guix}), Swedish (@pxref{Top,,, guix-cookbook.sv,
Kokbok för GNU Guix}), and Tamil (@pxref{Top,,, guix-cookbook.ta,
GNU Guix கையேடு}). If you would like to translate
Receptár GNU Guix}), and Swedish (@pxref{Top,,, guix-cookbook.sv,
Kokbok för GNU Guix}). If you would like to translate
this document in your native language, consider joining
@uref{https://translate.codeberg.org/projects/guix/documentation-cookbook,
Weblate} (@pxref{Translating Guix,,, guix, GNU Guix Reference
@@ -293,7 +292,7 @@ Examples of valid expressions:
@result{} 17
(display (string-append "Hello " "Guix" "\n"))
@print{} Hello Guix
@print{} Hello Guix!
@result{} #<unspecified>
@end lisp
@@ -505,6 +504,10 @@ selection of documents to learn more about Scheme:
@uref{https://spritely.institute/static/papers/scheme-primer.html, @i{A
Scheme Primer}}, by Christine Lemmer-Webber and the Spritely Institute.
@item
@uref{http://www.troubleshooters.com/codecorn/scheme_guile/hello.htm,
@i{Scheme at a Glance}}, by Steve Litt.
@item
@c There used to be a copy at mitpress.mit.edu but it vanished.
@uref{https://sarabander.github.io/sicp/,
@@ -1734,8 +1737,8 @@ At this stage, the package @code{cargo-audit} is buildable.
@item
Finally we'll unbundle the vendored dependencies. The lockfile importer
inserts @code{TODO REVIEW:} comments for libraries with high probability
of bundled dependencies. @code{cargo-build-system} also performs
inserts @code{TODO:} comments for libraries with high probability of
bundled dependencies. @code{cargo-build-system} also performs
additional check for binary files in its
@code{check-for-pregenerated-files} phase, which usually indicates
bundling:
@@ -1909,11 +1912,11 @@ Don't forget to modify all workspace members in @code{(gnu packages
rust-crates)}:
@lisp
(define rust-pipewire-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
(define rust-pipewire-sys-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
(define rust-pipewire-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
(define rust-pipewire-sys-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
@dots{}
(define rust-libspa-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
(define rust-libspa-sys-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
(define rust-libspa-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
(define rust-libspa-sys-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
@end lisp
@node Using Rust Libraries in Other Build Systems
@@ -5958,15 +5961,6 @@ installation instructions (@pxref{Binary Installation,,, guix, GNU Guix
Reference Manual}). Thanks to the installation script, this should be
quick. Once installation is complete, we need to make some adjustments.
@quotation Note
Starting from Guix version 1.5.0, @command{guix-daemon} runs without
root privileges by default; previously installed systems can also be
migrated to this ``rootless'' mode (@pxref{Build Environment Setup,,,
guix, GNU Guix Reference Manual}). Learn more about this change in a
@uref{https://hpc.guix.info/blog/2025/03/build-daemon-drops-its-privileges/,
2025 blog post}.
@end quotation
Since we want @code{guix-daemon} to be reachable not just from the head
node but also from the compute nodes, we need to arrange so that it
listens for connections over TCP/IP. To do that, we'll edit the systemd
@@ -5981,12 +5975,13 @@ something like this:
@ifnothtml
@example
ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon \
--build-users-group=guixbuild \
--listen=/var/guix/daemon-socket/socket --listen=0.0.0.0
@end example
@end ifnothtml
@ifhtml
@example
ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --listen=/var/guix/daemon-socket/socket --listen=0.0.0.0
ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild --listen=/var/guix/daemon-socket/socket --listen=0.0.0.0
@end example
@end ifhtml
@@ -6022,51 +6017,32 @@ The @file{/gnu/store} directory can be exported read-only since only
package}; thus, to allow users to install packages with @code{guix
package}, this must be read-write.
@quotation Note
Although it is rarely used, Guix allows for the creation of profiles in
non-default locations. For instance, @code{guix package -p
~/dev/python-dev -i python} installs Python in a profile reachable from
the @code{~/dev/python-dev} symlink instead of the default
@file{~/.guix-profile}.
To make sure that
Users can create as many profiles as they like in addition to the
default profile, @file{~/.guix-profile}. For instance, @code{guix
package -p ~/dev/python-dev -i python} installs Python in a profile
reachable from the @code{~/dev/python-dev} symlink. To make sure that
this profile is protected from garbage collection---i.e., that Python
will not be removed from @file{/gnu/store} while this profile exists---,
@emph{home directories should be mounted on the head node} as well so
that @code{guix-daemon} knows about these non-standard profiles and
avoids collecting software they refer to.
@c The following paragraph refers to Guix commit
@c d12c4452a49b355369636de1dfc766b5bad6437b, which changed
@c 'time-machine' and 'shell' to store GC roots under /var/guix.
Doing so is optional though: profiles created by default by
@command{guix package}, @command{guix pull}, and @command{guix shell}
are all stored under @file{/var/guix} and thus protected from garbage
collection.
@end quotation
It may be a good idea to periodically remove unused bits from
@file{/gnu/store} by running @command{guix gc} (@pxref{Invoking guix
gc,,, guix, GNU Guix Reference Manual}). This can be done by adding a
systemd timer based on the one shipped with Guix:
crontab entry on the head node:
@example
cp \
/var/guix/profiles/per-user/root/current-guix/lib/systemd/system/guix-gc.* \
/etc/systemd/system
root@@master# crontab -e
@end example
Make sure to edit @file{guix-gc.service} and @file{guix-gc.timer} under
@file{/etc/systemd/system} to adjust the parameters to your need: timer
frequency, amount of free space, and whether to delete user's old
generations. We recommend executing @command{guix gc -F50G} every
night, which will ensure that at least 50@tie{}GiB are available,
without deleting user generations. Once you're satisfied, you can start
the timer:
@noindent
... with something like this:
@example
systemctl daemon-reload
systemctl start guix-gc.timer
# Every day at 5AM, run the garbage collector to make sure
# at least 10 GB are free on /gnu/store.
0 5 * * 1 /usr/local/bin/guix gc -F10G
@end example
We're done with the head node! Let's look at compute nodes now.
+283 -1829
View File
File diff suppressed because it is too large Load Diff
+2 -55
View File
@@ -2,58 +2,7 @@
# Modified by Ludovic Courtès <ludo@gnu.org> for the GNU Guix manual.
# Further modified by Tomas Volf <~@wolfsden.cz>.
htmlxrefversion=2026-02-23.07; # UTC
# Override URLs of manuals provided by the Documentation Center.
DOCUMENTATION_CENTER = https://doc.guix.gnu.org
bash mono ${DOCUMENTATION_CENTER}/bash/latest/en/bash.html
bash node ${DOCUMENTATION_CENTER}/bash/latest/en/html_node
binutils mono ${DOCUMENTATION_CENTER}/binutils/latest/en/binutils.html
binutils node ${DOCUMENTATION_CENTER}/binutils/latest/en/html_node
cuirass mono ${DOCUMENTATION_CENTER}/cuirass/latest/en/cuirass.html
cuirass node ${DOCUMENTATION_CENTER}/cuirass/latest/en/html_node
emacs-guix mono ${DOCUMENTATION_CENTER}/emacs-guix/latest/en/emacs-guix.html
emacs-guix node ${DOCUMENTATION_CENTER}/emacs-guix/latest/en/html_node
fibers mono ${DOCUMENTATION_CENTER}/fibers/latest/en/fibers.html
fibers node ${DOCUMENTATION_CENTER}/fibers/latest/en/html_node
gash mono ${DOCUMENTATION_CENTER}/gash/latest/en/gash.html
gash node ${DOCUMENTATION_CENTER}/gash/latest/en/html_node
gcrypt mono ${DOCUMENTATION_CENTER}/gcrypt/latest/en/gcrypt.html
gcrypt node ${DOCUMENTATION_CENTER}/gcrypt/latest/en/html_node
gdb mono ${DOCUMENTATION_CENTER}/gdb/latest/en/gdb.html
gdb node ${DOCUMENTATION_CENTER}/gdb/latest/en/html_node
geiser mono ${DOCUMENTATION_CENTER}/geiser/latest/en/geiser.html
geiser node ${DOCUMENTATION_CENTER}/geiser/latest/en/html_node
grub mono ${DOCUMENTATION_CENTER}/grub/latest/en/grub.html
grub node ${DOCUMENTATION_CENTER}/grub/latest/en/html_node
guile-avahi mono ${DOCUMENTATION_CENTER}/guile-avahi/latest/en/guile-avahi.html
guile-avahi node ${DOCUMENTATION_CENTER}/guile-avahi/latest/en/html_node
guile-gcrypt mono ${DOCUMENTATION_CENTER}/guile-gcrypt/latest/en/guile-gcrypt.html
guile-gcrypt node ${DOCUMENTATION_CENTER}/guile-gcrypt/latest/en/html_node
guile-gnutls mono ${DOCUMENTATION_CENTER}/guile-gnutls/latest/en/guile-gnutls.html
guile-gnutls node ${DOCUMENTATION_CENTER}/guile-gnutls/latest/en/html_node
guile-library mono ${DOCUMENTATION_CENTER}/guile-library/latest/en/guile-library.html
guile-library node ${DOCUMENTATION_CENTER}/guile-library/latest/en/html_node
guile mono ${DOCUMENTATION_CENTER}/guile/latest/en/guile.html
guile-netlink mono ${DOCUMENTATION_CENTER}/guile-netlink/latest/en/guile-netlink.html
guile-netlink node ${DOCUMENTATION_CENTER}/guile-netlink/latest/en/html_node
guile node ${DOCUMENTATION_CENTER}/guile/latest/en/html_node
guile-ssh mono ${DOCUMENTATION_CENTER}/guile-ssh/latest/en/guile-ssh.html
guile-ssh node ${DOCUMENTATION_CENTER}/guile-ssh/latest/en/html_node
inetutils mono ${DOCUMENTATION_CENTER}/inetutils/latest/en/inetutils.html
inetutils node ${DOCUMENTATION_CENTER}/inetutils/latest/en/html_node
libc mono ${DOCUMENTATION_CENTER}/libc/latest/en/libc.html
libc node ${DOCUMENTATION_CENTER}/libc/latest/en/html_node
mes mono ${DOCUMENTATION_CENTER}/mes/latest/en/mes.html
mes node ${DOCUMENTATION_CENTER}/mes/latest/en/html_node
r5rs mono ${DOCUMENTATION_CENTER}/r5rs/latest/en/r5rs.html
r5rs node ${DOCUMENTATION_CENTER}/r5rs/latest/en/html_node
recutils mono ${DOCUMENTATION_CENTER}/recutils/latest/en/recutils.html
recutils node ${DOCUMENTATION_CENTER}/recutils/latest/en/html_node
shepherd mono ${DOCUMENTATION_CENTER}/shepherd/latest/en/shepherd.html
shepherd node ${DOCUMENTATION_CENTER}/shepherd/latest/en/html_node
htmlxrefversion=2025-08-31.16; # UTC
# Copyright 2010-2020, 2022 Free Software Foundation, Inc.
#
@@ -467,7 +416,7 @@ guile-rpc mono ${GS}/guile-rpc/manual/guile-rpc.html
guile-rpc node ${GS}/guile-rpc/manual/html_node/
GUIX_ROOT = https://guix.gnu.org
GUIX = ${GUIX_ROOT}/manual/devel
GUIX = ${GUIX_ROOT}/manual
guix.de mono ${GUIX}/de/guix.de.html
guix.de node ${GUIX}/de/html_node/
guix.es mono ${GUIX}/es/guix.es.html
@@ -504,8 +453,6 @@ GUIX_COOKBOOK = ${GUIX_ROOT}/cookbook
guix-cookbook.sk node ${GUIX_COOKBOOK}/sk/html_node/
guix-cookbook.sv mono ${GUIX_COOKBOOK}/sv/guix-cookbook.sv.html
guix-cookbook.sv node ${GUIX_COOKBOOK}/sv/html_node/
guix-cookbook.ta mono ${GUIX_COOKBOOK}/ta/guix-cookbook.ta.html
guix-cookbook.ta node ${GUIX_COOKBOOK}/ta/html_node/
guix-cookbook mono ${GUIX_COOKBOOK}/en/guix-cookbook.html
guix-cookbook node ${GUIX_COOKBOOK}/en/html_node/
guix-cookbook.zh_CN mono ${GUIX_COOKBOOK}/zh-cn/guix-cookbook.zh_CN.html
+1 -2
View File
@@ -26,7 +26,7 @@
# If adding a language, update the following variables, and info_TEXINFOS.
MANUAL_LANGUAGES = de es fr it pt_BR ru zh_CN
COOKBOOK_LANGUAGES = de es fr it ko pt_BR ru sk sv ta zh_CN
COOKBOOK_LANGUAGES = de es fr it ko pt_BR ru sk sv zh_CN
# Arg1: A list of languages codes.
# Arg2: The file name stem.
@@ -52,7 +52,6 @@ info_TEXINFOS = %D%/guix.texi \
%D%/guix-cookbook.ru.texi \
%D%/guix-cookbook.sk.texi \
%D%/guix-cookbook.sv.texi \
%D%/guix-cookbook.ta.texi \
%D%/guix-cookbook.zh_CN.texi
%C%_guix_TEXINFOS = \
-12
View File
@@ -1,12 +0,0 @@
abi <abi/4.0>,
include <tunables/global>
include <tunables/guix>
# Theres no point in confining the guix executable, since it can run
# any user code and so everything is expected. We just need to
# explicitly enable userns for systems with the
# kernel.apparmor_restrict_unprivileged_userns sysctl.
profile guix @{guix_storedir}/{*-guix-command,*-guix-*/bin/guix} flags=(unconfined) {
userns,
}
-88
View File
@@ -1,88 +0,0 @@
abi <abi/4.0>,
include <tunables/global>
include <tunables/guix>
profile guix-daemon @{guix_storedir}/*-{guix-daemon,guix}-*/bin/guix-daemon flags=(enforce,attach_disconnected.path=/disconnected) {
include <abstractions/base>
userns,
signal,
capability sys_admin,
capability net_admin,
capability sys_chroot,
capability setgid,
capability chown,
network dgram,
umount,
mount,
pivot_root,
# Paths inside build chroot
/real-root/ w,
/ w,
@{guix_localstatedir}/guix/** rwk,
/var/log/guix/** w,
owner @{PROC}/@{pid}/{fd/,environ} r,
owner @{PROC}/@{pid}/oom_score_adj w,
owner @{PROC}/@{pid}/uid_map rw,
owner @{PROC}/@{pid}/gid_map rw,
owner @{PROC}/@{pid}/setgroups w,
@{guix_storedir}/ r,
@{guix_storedir}/** rwlmk,
@{guix_storedir}/*/bin/guile cx -> guix-builder,
@{guix_storedir}/*-guix-command cx -> guix-helper,
@{guix_storedir}/*-guix-*/bin/guix cx -> guix-helper,
@{etc_rw}/nsswitch.conf r,
@{etc_rw}/passwd r,
@{etc_rw}/group r,
owner /tmp/** rwl,
owner /var/tmp/** rwl,
/usr/bin/newgidmap Ux,
# Site-specific additions and overrides. See local/README for details.
include if exists <local/guix-daemon>
profile guix-builder flags=(enforce,attach_disconnected.path=/disconnected) {
include <abstractions/base>
signal (receive),
@{guix_storedir}/** rwlmkux,
owner /tmp/** rwux,
@{PROC}/@{pid}/fd/ r,
/disconnected/** rw,
}
# This is for any time guix is called by the daemon as a helper:
# - guix download
# - guix discover
# - guix gc --list-busy
# - probably more?
profile guix-helper flags=(enforce,attach_disconnected.path=/disconnected) {
include <abstractions/base>
include <abstractions/nameservice>
signal (receive),
ptrace (read) peer=guix-daemon,
/disconnected/run/dbus/system_bus_socket rw,
dbus (send, receive),
@{guix_localstatedir}/guix/discover/ rw,
@{guix_localstatedir}/guix/discover/* rw,
@{guix_localstatedir}/guix/substitute/ rw,
@{guix_localstatedir}/guix/substitute/** rwk,
@{guix_sysconfdir}/guix/** r,
@{guix_storedir}/** rwlmix,
@{PROC}/ r,
owner @{PROC}/@{pid}/{fd/,environ} r,
}
}
-5
View File
@@ -1,5 +0,0 @@
@{guix_storedir} = @storedir@
@{guix_sysconfdir} = @guix_sysconfdir@
@{guix_localstatedir} = @guix_localstatedir@
include if exists <tunables/guix.d>
+16 -17
View File
@@ -303,23 +303,22 @@ corresponding to the top-level definition containing the staged changes."
(or (equal? old-values new-values)
(let ((removed (lset-difference equal? old-values new-values))
(added (lset-difference equal? new-values old-values)))
(unless (and (null? added) (null? removed))
(format port
"[~a]: ~a~%" field
(break-string
;; A dependency can be a list of (pkg output).
(match (list (map object->string removed)
(map object->string added))
((() added)
(format #f "Add ~a."
(listify added)))
((removed ())
(format #f "Remove ~a."
(listify removed)))
((removed added)
(format #f "Remove ~a; add ~a."
(listify removed)
(listify added)))))))))))
(format port
"[~a]: ~a~%" field
(break-string
;; A dependency can be a list of (pkg output).
(match (list (map object->string removed)
(map object->string added))
((() added)
(format #f "Add ~a."
(listify added)))
((removed ())
(format #f "Remove ~a."
(listify removed)))
((removed added)
(format #f "Remove ~a; add ~a."
(listify removed)
(listify added))))))))))
'(inputs propagated-inputs native-inputs)))
(define* (add-commit-message file-name variable-name
+1 -37
View File
@@ -175,10 +175,6 @@
(file (execute
execute_no_trans read write open entrypoint map
getattr link unlink)))
;; Needed to execute the 'newgidmap' helper.
(allow guix_daemon_t
bin_t
(file (execute execute_no_trans map)))
;; Remounting /gnu/store read-write.
(allow guix_daemon_t
@@ -189,9 +185,6 @@
(allow guix_daemon_t
root_t
(dir (mounton)))
(allow init_t
guix_daemon.guix_store_content_t
(dir (mounton)))
(allow guix_daemon_t
fs_t
(filesystem (getattr)))
@@ -326,7 +319,7 @@
map
getattr setattr
unlink
open read write append)))
open read write)))
(allow guix_daemon_t
guix_daemon_conf_t
(lnk_file (create getattr rename unlink read)))
@@ -368,14 +361,6 @@
self
(netlink_route_socket (bind create getattr nlmsg_read read write getopt)))
;; Allow use of user namespaces
(allow guix_daemon_t
self
(cap_userns (setgid sys_admin net_admin sys_chroot)))
(allow guix_daemon_t
self
(user_namespace (create)))
;; Socket operations
(allow guix_daemon_t
guix_daemon_socket_t
@@ -455,27 +440,6 @@
vnc_port_t
(tcp_socket (name_bind)))
;; 'guix gc' needs to go through /proc entries for all processes that are
;; running. Strictly speaking, it means guix-daemon needs access to all
;; process types in the SELinux policy. In practice, only processes from
;; programs in the /gnu/store are relevant for finding roots for garbage
;; collection. Since Guix currently doesn't install any SELinux policy for
;; its packages, we can assume that all the processes it needs to access run
;; as unconfined_t.
;;
;; FIXME: This doesn't stop 'guix gc' from generating a lot of unnecessary
;; AVC denied audit messages. Perhaps guix-daemon could test whether it has
;; access to the proc entry before trying to access it?
(allow guix_daemon_t
unconfined_t
(dir (search)))
(allow guix_daemon_t
unconfined_t
(file (read)))
(allow guix_daemon_t
unconfined_t
(lnk_file (read)))
;; I guess sometimes it needs random numbers
(allow guix_daemon_t
random_device_t
-6
View File
@@ -14,12 +14,6 @@ ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daem
--substitute-urls='@GUIX_SUBSTITUTE_URLS@'
Environment='GUIX_STATE_DIRECTORY=@localstatedir@/guix' 'GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
# Stop the gnu-store.mount so that the daemon can capture the store as
# read-write in its private mount namespace.
# See <https://codeberg.org/guix/guix/issues/4744>.
ExecStartPre=-+systemctl stop gnu-store.mount
ExecStartPost=-+systemctl start gnu-store.mount --no-block
# Run under a dedicated unprivileged user account.
User=guix-daemon
+17 -105
View File
@@ -17,7 +17,6 @@
# Copyright © 2024 Tomas Volf <~@wolfsden.cz>
# Copyright © 2024 Richard Sent <richard@freakingpenguin.com>
# Copyright © 2025 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
# Copyright © 2025 Noé Lopez <noelopez@free.fr>
#
# This file is part of GNU Guix.
#
@@ -106,12 +105,10 @@ DEBUG=0
GNU_URL="https://ftpmirror.gnu.org/gnu/guix/"
# The following associative array holds set of GPG keys used to sign the
# releases, keyed by their corresponding Codeberg user name.
# releases, keyed by their corresponding Savannah user ID.
declare -A GPG_SIGNING_KEYS
GPG_SIGNING_KEYS["civodul"]=3CE464558A84FDC69DB40CFB090B11993D9AEBB5 # ludo
GPG_SIGNING_KEYS["apteryx"]=27D586A4F8900854329FF09F1260E46482E63562 # maxim
GPG_SIGNING_KEYS["efraim"]=A28BF40C3E551372662D14F741AAE7DCCA3D8351 # efraim
PUBLIC_KEYSERVERS="keys.openpgp.org pgpkeys.eu keyserver.ubuntu.com"
GPG_SIGNING_KEYS[15145]=3CE464558A84FDC69DB40CFB090B11993D9AEBB5 # ludo
GPG_SIGNING_KEYS[127547]=27D586A4F8900854329FF09F1260E46482E63562 # maxim
# ------------------------------------------------------------------------------
#+UTILITIES
@@ -206,7 +203,6 @@ chk_gpg_keyring()
for user_id in "${!GPG_SIGNING_KEYS[@]}"; do
gpg_key_id=${GPG_SIGNING_KEYS[$user_id]}
codeberg_username=$user_id
# Without --dry-run this command will create a ~/.gnupg owned by root on
# systems where gpg has never been used, causing errors and confusion.
if gpg --dry-run --list-keys "$gpg_key_id" >/dev/null 2>&1; then
@@ -215,39 +211,20 @@ chk_gpg_keyring()
if prompt_yes_no "${INF}The following OpenPGP public key is \
required to verify the Guix binary signature: $gpg_key_id.
Would you like me to fetch it for you?"; then
if wget "https://codeberg.org/$codeberg_username.gpg" \
--tries=1 --timeout=30 --no-verbose -O- | gpg --import -; then
continue
fi
key_obtained=false
# Try to fetch keys from an available keyserver
for key_server in $PUBLIC_KEYSERVERS; do
if gpg --keyserver $key_server --recv-key $gpg_key_id; then
key_obtained=true
break
fi
done
if $key_obtained; then
# Use a reasonable time-out here so users don't report silent
# freezes when Savannah goes out to lunch, as has happened.
if wget "https://sv.gnu.org/people/viewgpg.php?user_id=$user_id" \
--timeout=30 --no-verbose -O- | gpg --import -; then
continue
fi
fi
# If we reach this point, the key is (still) missing. Report further
# missing keys, if any, but then abort the installation.
_err "Missing OpenPGP public key ($gpg_key_id).
Fetch it with codeberg username:
Fetch it with this command:
wget \"https://codeberg.org/$codeberg_username.gpg\" -O - | \
sudo -i gpg --import -
If this fails, try to fetch it via a keyserver:
for key_server in $PUBLIC_KEYSERVERS; do
if sudo -i gpg --keyserver $key_server --recv-key $gpg_key_id; then
break
fi
done"
wget \"https://sv.gnu.org/people/viewgpg.php?user_id=$user_id\" -O - | \
sudo -i gpg --import -"
exit_flag=yes
done
if [ "$exit_flag" = yes ]; then
@@ -778,7 +755,7 @@ sys_create_init_profile()
cat <<"EOF" > /etc/profile.d/zzz-guix.sh
# Explicitly initialize XDG base directory variables to ease compatibility
# with Guix System: see <https://issues.guix.gnu.org/56050#3>.
export XCURSOR_PATH="${XCURSOR_PATH:-$HOME/.local/share/icons:$HOME/.icons:/usr/local/share/icons:/usr/share/icons}"
export XCURSOR_PATH="${XCURSOR_PATH:-/usr/local/share/icons:/usr/share/icons}"
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
export XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
@@ -794,16 +771,16 @@ export PATH="$GUIX_PROFILE/bin${PATH:+:}$PATH"
# info and man readers. When INFOPATH is unset, add a trailing colon so Emacs
# searches 'Info-default-directory-list'. When MANPATH is unset, add a
# trailing colon so the system default search path is used.
export INFOPATH="$GUIX_PROFILE/share/info:${INFOPATH:-}"
export MANPATH="$GUIX_PROFILE/share/man:${MANPATH:-}"
export INFOPATH="$GUIX_PROFILE/share/info:$INFOPATH"
export MANPATH="$GUIX_PROFILE/share/man:$MANPATH"
# Expose the latest Guix modules to Guile so guix shell and repls spawned by
# e.g. Geiser work out of the box.
export GUILE_LOAD_PATH="$GUIX_PROFILE/share/guile/site/3.0${GUILE_LOAD_PATH:+:$GUILE_LOAD_PATH}"
export GUILE_LOAD_COMPILED_PATH="$GUIX_PROFILE/lib/guile/3.0/site-ccache${GUILE_LOAD_COMPILED_PATH:+:$GUILE_LOAD_COMPILED_PATH}"
export GUILE_LOAD_PATH="$GUIX_PROFILE/share/guile/site/3.0${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH"
export GUILE_LOAD_COMPILED_PATH="$GUIX_PROFILE/lib/guile/3.0/site-ccache${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
# User's default profile, if it exists
GUIX_PROFILE="$HOME/.guix-profile"
if [ -f "$GUIX_PROFILE/etc/profile" ]; then
if [ -L "$GUIX_PROFILE" ]; then
. "$GUIX_PROFILE/etc/profile"
# see info '(guix) Application Setup'
@@ -821,11 +798,6 @@ if [ -f "$GUIX_PROFILE/etc/profile" ]; then
*$GUIX_PROFILE/share/man*) ;;
*) export MANPATH="$GUIX_PROFILE/share/man:$MANPATH"
esac
case $XDG_DATA_DIRS in
*$GUIX_PROFILE/share*) ;;
*) export XDG_DATA_DIRS="$GUIX_PROFILE/share:$XDG_DATA_DIRS"
esac
fi
# NOTE: Guix Home handles its own profile initialization in ~/.profile. See
@@ -920,64 +892,6 @@ sys_maybe_setup_selinux()
restorecon -R /gnu /var/guix
}
sys_maybe_setup_apparmor()
{
if ! [ -f /sys/module/apparmor/parameters/enabled ]
then
return
fi
if ! command -v apparmor_parser &> /dev/null
then
return
fi
prompt_yes_no "Install AppArmor profile that might be required to run guix-daemon?" \
|| return 0
local var_guix=/var/guix/profiles/per-user/root/current-guix
local apparmor_sources="${var_guix}/etc/apparmor.d/"
if ! [ -d "$apparmor_sources" ]
then
_err "This version of Guix doesnt contain AppArmor profiles."
return
fi
cp -f -t /etc/apparmor.d/tunables "$apparmor_sources/tunables/guix"
cp -f -t /etc/apparmor.d "$apparmor_sources/guix-daemon"
cp -f -t /etc/apparmor.d "$apparmor_sources/guix"
apparmor_parser --warn=all -r /etc/apparmor.d/guix-daemon
apparmor_parser --warn=all -r /etc/apparmor.d/guix
_msg_pass "apparmor profiles installed and loaded"
}
sys_delete_apparmor_profiles()
{
# Not a big deal if the apparmor_parser commands fail as they only apply
# for the current boot, we still want to go on and remove the files.
if [ -f "/etc/apparmor.d/guix" ]
then
_msg_info "removing /etc/apparmor.d/guix"
apparmor_parser -R /etc/apparmor.d/guix || true
rm -f "/etc/apparmor.d/guix"
fi
if [ -f "/etc/apparmor.d/guix-daemon" ]
then
_msg_info "removing /etc/apparmor.d/guix-daemon"
apparmor_parser -R /etc/apparmor.d/guix-daemon || true
rm -f "/etc/apparmor.d/guix-daemon"
fi
if [ -f "/etc/apparmor.d/tunables/guix" ]
then
_msg_info "removing /etc/apparmor.d/tunables/guix"
rm -f "/etc/apparmor.d/tunables/guix"
fi
}
sys_delete_init_profile()
{
_msg_info "removing /etc/profile.d/zzz-guix.sh"
@@ -1055,6 +969,7 @@ main_install()
chk_init_sys
add_init_sys_require
chk_require "${REQUIRE[@]}"
chk_gpg_keyring
chk_sys_arch
chk_sys_nscd
chk_existing
@@ -1065,7 +980,6 @@ main_install()
tmp_path="$(mktemp -t -d guix.XXXXXX)"
if [ -z "${GUIX_BINARY_FILE_NAME}" ]; then
chk_gpg_keyring
guix_get_bin_list "${GNU_URL}"
guix_get_bin "${GNU_URL}" "${BIN_VER}" "$tmp_path"
GUIX_BINARY_FILE_NAME=${BIN_VER}.tar.xz
@@ -1080,7 +994,6 @@ main_install()
sys_create_store "${GUIX_BINARY_FILE_NAME}" "${tmp_path}"
sys_create_build_user
sys_maybe_setup_selinux
sys_maybe_setup_apparmor
sys_enable_guix_daemon
sys_authorize_build_farms
sys_create_init_profile
@@ -1114,7 +1027,6 @@ main_uninstall()
sys_delete_guix_daemon
# stop people from accessing their profiles.
sys_delete_user_profiles
sys_delete_apparmor_profiles
# kill guix off all the guts of guix
sys_delete_store
# clean up the system
+5 -9
View File
@@ -71,21 +71,18 @@ TARGET."
"connman" "network-manager" "wpa-supplicant" "isc-dhcp" "cups"
"linux-libre" "grub-hybrid")))
(define (%system-gui-packages target)
(define %system-gui-packages
;; Key packages proposed by the Guix System installer.
(append (map specification->package
'(;; build system `python' does not support cross builds
;"gnome" "xfce" "mate" "openbox"
;"gnome" "xfce" "mate" "openbox"
"awesome"
"i3-wm" "i3status" "dmenu" "st"
"ratpoison" "xterm"
;; build system `emacs' does not support cross builds
;"emacs-exwm" "emacs-desktop-environment"
;"emacs-exwm" "emacs-desktop-environment"
"emacs"))
;; NOTE: %default-xorg-modules depends on system.
(parameterize
((%current-target-system target))
%default-xorg-modules)))
%default-xorg-modules))
(define %packages-to-cross-build
;; Packages that must be cross-buildable from x86_64-linux.
@@ -154,8 +151,7 @@ TARGET."
;; With a graphical environment:
(if (or (target-x86-32? target)
(target-aarch64? target))
;; %system-gui-packages depends on the system.
(%system-gui-packages target)
%system-gui-packages
'()))))
(fold delete (map platform-system->target (systems))
'(;; Disable cross-compilation to self:
+3 -1
View File
@@ -45,7 +45,9 @@
(_ #f)))
(define guix-dependencies
(filter-map input->package (package-direct-inputs guix)))
(filter-map input->package
(fold alist-delete (package-direct-inputs guix)
'("glibc-utf8-locales" "graphviz" "po4a"))))
(define (package-without-tests p)
(package/inherit p
-167
View File
@@ -1,167 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;;
;;; 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/>.
;;; This file returns a manifest containing packages which are needed by the
;;; installer.
(use-modules (guix packages)
(gnu packages)
((gnu services xorg) #:select (%default-xorg-modules))
(guix profiles)
(guix utils)
(srfi srfi-1))
(define %desktop-packages
(append
%default-xorg-modules
(map specification->package
(list
;; etc-service
"net-base"
"tzdata"
;; boot-file-system-utilities-service
"e2fsprogs"
;; plasma-deskto-sservice-type
"plasma"
;; gnome-desktop-service
"gnome"
;; xfce-desktop-service
"xfce"
;; mate-desktop-service
"mate"
;; set-xorg-configuration-service
"font-alias"
"font-misc-misc"
"font-adobe75dpi"
"xorg-server"
;; screen-locker-service
"slock"
"xlockmore"
;; mtp-service
"libmtp"
;; sane-service
"sane"
"sane-backends"
;; mount-setuid-helpers-service
"nfs-utils"
"ntfs-3g"
;; guix-artwork-service
"guix-backgrounds"
"guix-icons"
;; vte-integration-service
"vte"
;; network-manager-applet-service
"network-manager-applet"
;; modem-manager-service
"modem-manager"
;; usb-modeswitch-service
"usb-modeswitch"
"usb-modeswitch-data"
;; avahi-service
"avahi"
;; udisks-service
"udisks"
;; cups-pk-helper-service
"cups-pk-helper"
;; colord-service
"colord"
;; geoclue-service
"geoclue"
;; polkit-service
"polkit"
;; elogind-service
"elogind"
;; dbus-service
;; ntp-service
"ntp"
;; alsa-service
"alsa-plugins"
;; mingetty-service
"mingetty"
;; etc-bashrc-d-service
"bash-completion"
;; udev-service
"eudev"
"lvm2"
"alsa-utils"
"crda"
;; sysctl-service
"procps"
;; special-files-service
"coreutils"
"grub-pc"
"less"
"mg"
"nano"
"nvi"
"man-db"
"info-reader"
"kbd"
"guile-readline"
"guile-colorized"
"pciutils"
"usbutils"
"util-linux-with-udev"
"kmod"
"isc-dhcp"
"iproute2"
"wget"
"nss-certs"
"iw"
"wireless-tools"
"psmisc"
"which"
"guile"
"findutils"
"grep"
"sed"
"diffutils"
"patch"
"gawk"
"tar"
"gzip"
"bzip2"
"lzip"
"xz"
"zstd"
;; packages
"sway"
"foot"
"wmenu"
"icewm"
"openbox"
"awesome"
"i3-wm"
"i3status"
"dmenu"
"st"
"ratpoison"
"xterm"
"emacs"
"emacs-exwm"
"emacs-desktop-environment"))))
(define %desktop-manifest
(manifest
;; Some of %SYSTEM-PACKAGES are currently unsupported on some
;; systems--e.g., GNOME on 32-bit, due to Rust. Filter them out.
(filter-map (lambda (package)
(and (supported-package? package (%current-system))
(package->manifest-entry package)))
(append %desktop-packages))))
%desktop-manifest
-164
View File
@@ -1,164 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Noé Lopez <noelopez@free.fr>
;;;
;;; 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/>.
;;; This manifest is a list of packages that user care about (collected via an
;;; online form). It corresponds to the “Important packages” of GCD 005.
(specifications->manifest
(list
"0ad"
"agda"
"alacritty"
"ardour"
"autoconf"
"automake"
"blender"
"borg"
"btrfs-progs"
"certbot"
"chez-scheme"
"clang-toolchain"
"cryptsetup"
"dillo"
"direnv"
"docker-cli"
"dovecot"
"emacs"
"emacs-exwm"
"emacs-pgtk"
"evince"
"fcitx5"
"file"
"fish"
"foot"
"fzf"
"gajim"
"gallery-dl"
"gcc-toolchain"
"getmail6"
"gettext"
"ghc-xmonad-contrib"
"gimp"
"git"
"gmp"
"gnome"
"gnupg"
"godot"
"gpaste"
"guile"
"guile-json"
"hatch"
"help2man"
"helvum"
"hexchat"
"hyprland"
"icecat"
"imagemagick"
"imapfilter"
"jami"
"k3b"
"kakoune"
"keepassxc"
"krita"
"ksoloti-patcher"
"libreoffice"
"librewolf"
"libsecret"
"libtool"
"libvirt"
"llama-cpp"
"mariadb"
"luanti"
"mpc"
"mpfr"
"mplayer"
"mpv"
"mullvadbrowser"
"neovim"
"nginx"
"niri"
"nix"
"node"
"notmuch"
"obs"
"offlineimap3"
"opencv"
"openmpi"
"opensmtpd"
"openssh"
"openttd"
"pandoc"
"password-store"
"pavucontrol"
"php"
"picard"
"pipewire"
"pkg-config"
"plasma"
"plasma-desktop"
"po4a"
"podman"
"postgresql"
"python"
"python-lxml"
"python-pycryptodome"
"qemu"
"ranger"
"retroarch"
;;"rocm"
"rofi"
"rspamd"
"rsync"
"screen"
"slurm"
"sqlite"
"sqlitebrowser"
"strace"
"strawberry"
"syncthing"
"taisei"
"telegram-desktop"
"texlive-babel"
"texlive-babel-english"
"texlive-babel-french"
"texlive-babel-german"
"texlive-collection-latex"
"texlive-collection-latexrecommended"
"texlive-collection-xetex"
"texlive-pdfjam"
"tmux"
"tuba"
"ungoogled-chromium"
"unison"
"unzip"
"uv"
"viewnior"
"virt-manager"
"waybar"
"wine"
"wine64"
"wireguard-tools"
"xmobar"
"xmonad"
"xournal"
"xournalpp"
"xpdf"
"yt-dlp"
"zig"
"zip"
"zsh"))
@@ -23,9 +23,7 @@
;;; installer.
(use-modules (guix packages)
(gnu packages)
((gnu system) #:select (%base-packages %base-firmware))
(guix profiles)
((gnu services xorg) #:select (%default-xorg-modules))
(guix utils)
(srfi srfi-1))
@@ -46,14 +44,16 @@ TARGET."
(define %system-packages
;; Key packages proposed by the Guix System installer.
(append (map specification->package
'("guix" "shepherd" "guile-static-initrd"
"openssh" "tor" "ntp" "gpm" "mingetty"
'("guix" "shepherd"
"gnome" "xfce" "mate"
"icewm" "openbox" "awesome"
"i3-wm" "i3status" "dmenu" "st"
"ratpoison" "xterm"
"emacs" "emacs-exwm" "emacs-desktop-environment"
"openssh" "tor" "ntp" "gpm"
"connman" "network-manager" "wpa-supplicant" "isc-dhcp" "cups"
"linux-libre" "grub-hybrid"
;; privileged programs
"shadow" "sudo" "fuse" "inetutils" "util-linux"))
%base-firmware
%base-packages))
"linux-libre" "grub-hybrid"))
%default-xorg-modules))
(define %bootloader-packages
;; The bootloaders offered by the Guix System installer.
+2 -141
View File
@@ -5,7 +5,7 @@
;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
;; Copyright © 2019, 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
;; Copyright © 2019, 2020, 2021, 2023 Julien Lepiller <julien@lepiller.eu>
;; Copyright © 20192026 Florian Pelz <pelzflorian@pelzflorian.de>
;; Copyright © 20192025 Florian Pelz <pelzflorian@pelzflorian.de>
;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -27,7 +27,7 @@
;; Copyright © 2024 Zheng Junjie <873216071@qq.com>
;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
;; Copyright © 2024 Sebastian Dümcke <code@sam-d.com>
;; Copyright © 2025-2026 Anderson Torres <anderson.torres.8519@gmail.com>
;; Copyright © 2025 Anderson Torres <anderson.torres.8519@gmail.com>
;; Copyright © 2025 Roman Scherer <roman@burningswell.com>
;; Copyright © 2025 Jelle Licht <jlicht@fsfe.org>
;; Copyright © 2025 Rivulet Cedar <rivulet_cedar@yeah.net>
@@ -42,145 +42,6 @@
(channel-news
(version 0)
(entry (commit "d659fe8666c4bc38fcbdbe7b7a35101f2d7cc41b")
(title
(en "Potential security vulnerability in glibc")
(de "Mögliche Sicherheitslücke in glibc")
(pt "Potencial vulnerabilidade de segurança em glibc"))
(body
(en "Guix adds the environment variable @code{GUIX_LOCPATH} to glibc,
however it was not added to potentially unsafe variables to be unset in
privileged environments. A CVE number is pending for this issue. This has
been fixed with a graft to glibc and users should update all profiles,
reconfigure their system, and reboot.")
(de "Guix fügt die Umgebungsvariable @code{GUIX_LOCPATH} zu glibc
hinzu, aber sie wurde nicht zu den möglicherweise unsicheren Variablen
hinzugefügt, die in privilegierten Umgebungen zurückgesetzt werden. Eine
CVE-Nummer hierfür wird noch zugewiesen. Um den Fehler zu beheben, stellen
wir eine Veredelung für glibc bereit; Nutzerinnen und Nutzer sollten all ihre
Profile aktualisieren, ihr System rekonfigurieren und neustarten.")
(pt "Guix adiciona a variável de ambiente @code{GUIX_LOCPATH} à
glibc, todavia ela não foi adicionada às variáveis potencialmente inseguras
a serem desabilitadas em ambientes privilegiados. Este incidente está
pendente de um identificador CVE. Isto foi resolvido com um enxerto à glibc,
e os usuários devem atualizar todos os seus perfis, reconfigurando seu
sistema e reiniciando-o.")))
(entry (commit "6d4cb99a15da7f4fd55f956c55f4f4aacfcc7742")
(title
(en "@code{%desktop-services} now includes GDM on AArch64")
(de "@code{%desktop-services} enthält jetzt GDM auf AArch64")
(pt "@code{%desktop-services} agora inclui GDM no AArch64"))
(body
(en "On Guix System in an operating system configuration, your value for the
@code{services} field is based on @code{%desktop-services} for desktop
machines.
The @code{%desktop-services} contains a login manager that is
architecture-dependent. Previously, GDM has been used on x86_64 and SDDM on
other architectures.
Now, GDM is used on all 64-bit architectures. This affects only AArch64 in
the end, as other 64-bit architectures aren't mature enough to use
%desktop-services, yet.
In case you're on AArch64 and you've changed the login manager, you will have
to adapt your config to remove @code{gdm-service-type} instead of
@code{sddm-service-type}.")
(de "Auf Guix System liegen in einer Betriebssystemkonfiguration Ihrem
Wert des @code{services}-Feldes auf Desktop-Maschinen die
@code{%desktop-services} zugrunde.
Zu den @code{%desktop-services} gehört eine Anmeldeverwaltung, die sich je nach
Architektur unterscheidet. Bisher wurde GDM auf x86_64 benutzt und SDDM auf
anderen Architekturen.
Ab jetzt wird GDM auf allen 64-Bit-Architekturen benutzt. Das betrifft
letztlich nur AArch64, weil andere 64-Bit-Architecturen bisher noch nicht weit
genug fortgeschritten sind, um die %desktop-services zu benutzen.
Falls Sie auf AArch64 sind und die Anmeldeverwaltung geändert haben, müssen Sie
Ihre Konfiguration ändern und dort @code{gdm-service-type} entfernen statt
@code{sddm-service-type}.")
(pt "Em uma configuração de sistema operacional do Guix System, seu
valor para o campo @code{services} é baseado em @code{%desktop-services} para
máquinas desktop.
@code{%desktop-services} contém um gerenciador de login dependente de
arquitetura. Anteriormente, GDM fora usado em x86_64 e SDDM nas demais.
Agora, GDM é usado em todas as arquiteturas de 64 bits. Esta mudança afeta
apenas a AArch64 no frigir dos ovos, dado que as demais arquiteturas de 64
bits não são maduras o bastante para usar @code{%desktop-services}, por
enquanto.
No caso de você estar em um AArch64 e ter modificado o gerenciador de login,
você terá que adaptar sua configuração para remover @code{gdm-service-type} em
vez de @code{sddm-service-type}.")))
(entry (commit "d3b79beaa806452dceaffb8b211b69dc4c346aba")
(title
(en "Linux-libre 5.4 no longer supported")
(de "Linux-libre 5.4 nicht mehr unterstützt")
(pt "Linux-libre 5.4 não é mais suportado"))
(body
(en "The linux-libre 5.4 kernel series is no longer supported
upstream and will be removed from GNU Guix soon:
https://www.kernel.org/category/releases.html
This kernel series was first added to Guix in 2019 by Mark Weaver, at version
5.4.5. After ~297 updates delivered to Guix users, we have deployed the final
update, 5.4.302.
The next kernel series removals are scheduled for December 2026, when the Linux
long-term support team is planning to stop supporting four different kernel
series: 6.12, 6.6, 5.15, and 5.10.")
(de "Die Versionsreihe 5.4 des Linux-libre-Kernels wird von dessen
Anbieter nicht mehr unterstützt und wird bald aus GNU Guix entfernt werden:
https://www.kernel.org/category/releases.html
Diese Kernel-Reihe wurde ursprünglich 2019 zu Guix hinzugefügt von Mark Weaver
mit Version 5.4.5. Nach ~297 Aktualisierungen, die Guix seinen Nutzern
bereitgestellt hat, haben wir nun die letzte Aktualisierung
ausgeliefert, 5.4.302.
Der weitere Plan von Linux Team für Langzeitunterstützung sieht vor, als
Nächstes die Unterstützung für vier verschiedene Kernel-Reihen im Dezember 2026
zu beenden: 6.12, 6.6, 5.15 und 5.10.")
(pt "A série 5.4 do kernel linux-libre não é mais suportada pelo
fornecedor e será removida do GNU Guix em breve:
https://www.kernel.org/category/releases.html
Esta série de kernels foi adicionada inicialmente ao Guix em 2019 por Mark
Weaver, na versão 5.4.5. Após ~297 atualizações entregues aos usuários do
Guix, implantamos a atualização final, 5.4.302.
As próximas remoções de séries do kernel estão agendadas para dezembro de
2026, quando o time de suporte de longo prazo planeja interromper o suporte a
quatro séries diferentes do kernel: 6.12, 6.6, 5.15 e 5.10.")))
(entry (commit "14bb0192fde79909999c3880b6b66aa22499eb11")
(title
(en "Linux-libre 6.16 removed from Guix")
(de "Linux-libre 6.16 wurde aus Guix entfernt")
(pt "Linux-libre 6.16 removido do Guix")
(zh "Linux-libre 6.16 已从 Guix 中移除"))
(body
(en "The linux-libre 6.16 kernel series has been removed from Guix, as
it is no longer supported upstream. The 6.17 kernel series is now the
default.")
(de "Die Versionsreihe 6.16 des Linux-libre-Kernels wurde aus GNU Guix
entfernt, weil sie von dessen Anbieter nicht mehr unterstützt wird.
Kernel-Versionsreihe 6.17 ist jetzt vorgegeben.")
(pt "A série 6.16 do kernel linux-libre foi removida do Guix, dado
que não é mais suportada pelo fornecedor. A série 6.17 é o padrão atual")
(zh "由于上游不再支持GNU Guix 已移除 6.16 系列的 linux-libre 内核6.17
内核系列现已成为默认版本")))
(entry (commit "8daae75de3670594dfcb63b6ae6f1603ca6f7971")
(title
(en "Fundraising to sustain and strengthen Guix")
+54 -297
View File
@@ -14,8 +14,7 @@ exec $pre_inst_env_maybe guix repl -- "$0" "$@"
;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
;;; Copyright © 2025 Jelle Licht <jlicht@fsfe.org>
;;; Copyright © 2025 Cayetano Santos <csantosb@inventati.org>
;;; Copyright © 2025-2026 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2025 jgart <jgart@dismail.de>
;;; Copyright © 2025 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -92,7 +91,7 @@ exec $pre_inst_env_maybe guix repl -- "$0" "$@"
(email person-email)
(account person-codeberg-account))
(define (person name email account)
(define* (person name #:optional email account)
(make-person name email account))
(define* (team id #:key name description (members '())
@@ -285,25 +284,14 @@ PARAMETERS."
;; API documentation at <https://codeberg.org/api/swagger>.
(define-forgejo-request (organization-teams/paginated organization page)
"Return the list of teams of ORGANIZATION, for the given PAGE (1-indexed)."
(define-forgejo-request (organization-teams organization)
"Return the list of teams of ORGANIZATION."
(GET "orgs" organization "teams"
& `(("page" . ,(number->string page))))
& '(("limit" . "100"))) ;get up to 100 teams
=> 200
(lambda (port)
(map json->forgejo-team (vector->list (json->scm port)))))
(define (organization-teams token organization)
"Return the list of teams of ORGANIZATION."
(let loop ((index 1)
(pages '()))
(match (organization-teams/paginated token organization index)
(()
(concatenate (reverse pages)))
(lst
(loop (+ 1 index)
(cons lst pages))))))
(define-forgejo-request (create-team organization team)
"Create TEAM, a Forgejo team, under ORGANIZATION."
(POST "orgs" organization "teams")
@@ -474,49 +462,15 @@ already exists. Lookup team IDs among CURRENT-TEAMS."
#:description "Audio related packages."
#:scope (list "gnu/packages/audio.scm"
"gnu/packages/fluidplug.scm"
"gnu/packages/music.scm"
"gnu/packages/xiph.scm")))
(define-team beam
(team 'beam
#:name "Erlang/Elixir/BEAM team"
#:description "The virtual machine at the core of the Erlang Open
Telecom Platform (OTP), Erlang and Elxir languages and packages, development
of Rebar and Mix build systems and Hex.pm importer."
#:scope (list (make-regexp* "^gnu/packages/elixir(-.+|)\\.scm$")
"guix/build/mix-build-system.scm"
"guix/build-system/mix.scm"
(make-regexp* "^gnu/packages/erlang(-.+|)\\.scm$")
"guix/build/rebar-build-system.scm"
"guix/build-system/rebar.scm"
"guix/import/hexpm.scm"
"guix/scripts/import/hexpm.scm")))
(define-team bioinformatics
(team 'bioinformatics
#:name "Bioinformatics team"
#:scope (list "gnu/packages/bioinformatics.scm")))
(define-team bootstrap
(team 'bootstrap
#:name "Bootstrap"
#:description "Full-source bootstrap: stage0, Mes, Gash, etc."
#:scope (list "gnu/packages/bootstrap.scm"
"gnu/packages/commencement.scm"
#:scope (list "gnu/packages/commencement.scm"
"gnu/packages/mes.scm")))
(define-team build-tools
(team 'build-tools
#:name "Build tools team"
#:description "Build tools and parser generators."
#:scope (list "gnu/packages/assembly.scm"
"gnu/packages/autogen.scm"
"gnu/packages/autotools.scm"
"gnu/packages/bison.scm"
"gnu/packages/m4.scm"
"gnu/packages/oyacc.scm"
"gnu/packages/re2c.scm")))
(define-team c++
(team 'c++
#:name "C/C++ team"
@@ -534,8 +488,7 @@ of Rebar and Mix build systems and Hex.pm importer."
(team 'core
#:name "Core / Tools / Internals"
#:scope
(list "etc/teams.scm"
"guix/avahi.scm"
(list "guix/avahi.scm"
"guix/base16.scm"
"guix/base32.scm"
"guix/base64.scm"
@@ -595,7 +548,6 @@ of Rebar and Mix build systems and Hex.pm importer."
"guix/read-print.scm"
"guix/records.scm"
"guix/remote.scm"
"guix/remote-procedures.scm"
"guix/repl.scm"
"guix/search-paths.scm"
"guix/self.scm"
@@ -657,7 +609,6 @@ of Rebar and Mix build systems and Hex.pm importer."
#:name "Electronics team"
#:description "Electronics and hardware related packages."
#:scope (list "gnu/packages/electronics.scm"
"gnu/packages/hdl.scm"
"gnu/packages/libftdi.scm"
"gnu/packages/engineering.scm"
"gnu/packages/flashing-tools.scm")))
@@ -694,8 +645,6 @@ ecosystem."
"gnu/packages/luanti.scm"
"gnu/packages/esolangs.scm" ; granted, rather niche
"gnu/packages/motti.scm"
"gnu/services/games.scm"
"gnu/tests/games.scm"
"guix/build/luanti-build-system.scm")))
(define-team gnome
@@ -709,7 +658,6 @@ GLib/GIO, GTK, GStreamer and Webkit."
"gnu/packages/gstreamer.scm"
"gnu/packages/gtk.scm"
"gnu/packages/gnome.scm"
"gnu/packages/gnome-circle.scm"
"gnu/packages/gnome-xyz.scm"
"gnu/packages/webkit.scm"
"gnu/services/desktop.scm"
@@ -729,26 +677,6 @@ GLib/GIO, GTK, GStreamer and Webkit."
"guix/scripts/import/go.scm"
"tests/import/go.scm")))
(define-team guile
(team 'guile
#:name "Guile team"
#:description
"Team for the Guile platform, libraries, and build system."
#:scope (list "gnu/packages/guile.scm"
"gnu/packages/guile-wm.scm"
"gnu/packages/guile-xyz.scm"
"guix/build-system/guile.scm"
"guix/build/guile-build-system.scm")))
(define-team hare
(team 'hare
#:name "Hare"
#:scope (list "gnu/packages/hare.scm"
"gnu/packages/hare-apps.scm"
"gnu/packages/hare-xyz.scm"
"guix/build-system/hare.scm"
"guix/build/hare-build-system.scm")))
(define-team haskell
(team 'haskell
#:name "Haskell team"
@@ -781,11 +709,7 @@ the haskell-build-system."
#:description "High-performance computing (HPC) related packages."
#:scope (list "gnu/packages/mpi.scm"
"gnu/packages/oneapi.scm"
"gnu/packages/opencl.scm"
"gnu/packages/parallel.scm"
"gnu/packages/rocm.scm"
"gnu/packages/rocm-tools.scm"
"gnu/packages/rocm-libs.scm"
"gnu/packages/sycl.scm"
"gnu/packages/tbb.scm"
"gnu/packages/vulkan.scm")))
@@ -812,20 +736,16 @@ the haskell-build-system."
"The JDK and JRE, the Maven build system, Java packages, the ant-build-system,
and the maven-build-system."
#:scope
(list "gnu/packages/clojure.scm"
;; Match java.scm and java-*.scm.
(list ;; Match java.scm and java-*.scm.
(make-regexp* "^gnu/packages/java(-.+|)\\.scm$")
;; Match maven.scm and maven-*.scm
(make-regexp* "^gnu/packages/maven(-.+|)\\.scm$")
"guix/build/ant-build-system.scm"
"guix/build/clojure-build-system.scm"
"guix/build/clojure-utils.scm"
"guix/build/java-utils.scm"
"guix/build/maven-build-system.scm"
;; The maven directory
(make-regexp* "^guix/build/maven/")
"guix/build-system/ant.scm"
"guix/build-system/clojure.scm"
"guix/build-system/maven.scm")))
(define-team javascript
@@ -887,26 +807,12 @@ asdf-build-system."
"gnu/packages/fonts.scm"
"gnu/packages/ibus.scm")))
(define-team lua
(team 'lua
#:name "Lua team"
#:description
"Lua, Fennel, and related packages."
#:scope (list "gnu/packages/lua.scm"
"gnu/packages/luanti.scm")))
(define-team lxqt
(team 'lxqt
#:name "LXQt team"
#:description "LXQt desktop environment."
#:scope (list "gnu/packages/lxqt.scm")))
(define-team mate
(team 'mate
#:name "MATE team"
#:description "MATE desktop environment"
#:scope (list "gnu/packages/mate.scm")))
(define-team mentors
(team 'mentors
#:name "Mentors"
@@ -942,21 +848,6 @@ importer, and the ocaml-build-system."
"guix/scripts/import/opam.scm"
"tests/import/opam.scm")))
(define-team perl
(team 'perl
#:name "Perl and Raku team"
#:description
"Perl & Raku packages, the \"cpan\" importer, and the
perl-build-system as well as the rakudo-build-system."
#:scope
(list (make-regexp* "^gnu/packages/perl(-.+|)\\.scm$")
"guix/build/perl-build-system.scm"
"guix/build/rakudo-build-system.scm"
"guix/build-system/perl.scm"
"guix/build-system/rakudo.scm"
"guix/import/cpan.scm"
"guix/scripts/import/cpan.scm")))
(define-team python
(team 'python
#:name "Python team"
@@ -968,32 +859,13 @@ perl-build-system as well as the rakudo-build-system."
(make-regexp* "^gnu/packages/python(-.+|)\\.scm$")
"gnu/packages/sphinx.scm"
"gnu/packages/tryton.scm"
"guix/build-system/pyproject.scm"
"guix/build-system/python.scm"
"guix/build/pyproject-build-system.scm"
"guix/build-system/pyproject.scm"
"guix/build/python-build-system.scm"
"guix/build/toml.scm" ;temporary, until other build system will use it
"guix/build-system/python.scm"
"guix/import/pypi.scm"
"guix/scripts/import/pypi.scm"
"tests/import/pypi.scm"
"tests/toml.scm")))
(define-team qa-packages
(team 'qa-packages
#:name "Team for quality assurance packages"
#:description
"Quality assurance software (CI/CD, testing, analysis;
no direct relation to Guix's QA)."
#:scope (list "gnu/ci.scm"
"gnu/packages/benchmark.scm"
"gnu/packages/check.scm"
"gnu/packages/ci.scm"
"gnu/packages/code.scm"
"gnu/packages/debug.scm"
"gnu/packages/dezyne.scm"
"gnu/packages/libunwind.scm"
"gnu/services/ci.scm"
"gnu/tests/ci.scm")))
"tests/import/pypi.scm")))
(define-team qt
(team 'qt
@@ -1037,8 +909,7 @@ importer."
"The current release team. Members are expected to change with each
release."
#:scope (list "NEWS"
"etc/manifests/release-minimal.scm"
"etc/manifests/release-desktop.scm")))
"etc/manifests/release.scm")))
(define-team reproduciblebuilds
(team 'reproduciblebuilds
@@ -1050,7 +921,7 @@ release."
(define-team ruby
(team 'ruby
#:name "Ruby team"
#:scope (list (make-regexp* "^gnu/packages/(ruby)(-.+|)\\.scm$")
#:scope (list "gnu/packages/ruby.scm"
"guix/build/ruby-build-system.scm"
"guix/build-system/ruby.scm"
"guix/import/gem.scm"
@@ -1070,22 +941,6 @@ release."
"guix/scripts/import/crate.scm"
"tests/import/crate.scm")))
(define-team crypto
(team 'crypto
#:name "Crypto team"
#:description
"Secrets, passwords, cryptography and security related packages."
#:scope (list (make-regexp* "^gnu/packages/(.*-|)crypto\\.scm$")
"gnu/packages/cryptsetup.scm"
"gnu/packages/cybersecurity.scm"
"gnu/packages/gnupg.scm"
"gnu/packages/nettle.scm"
"gnu/packages/password-utils.scm"
"gnu/packages/security-token.scm"
"gnu/packages/ssh.scm"
"gnu/packages/tls.scm"
"gnu/packages/vpn.scm")))
(define-team science
(team 'science
#:name "Science team"
@@ -1100,7 +955,6 @@ packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
"gnu/packages/lean.scm"
"gnu/packages/maths.scm"
"gnu/packages/medical.scm"
"gnu/packages/physics.scm"
"gnu/packages/sagemath.scm"
"gnu/packages/statistics.scm")))
@@ -1123,7 +977,7 @@ packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
"gnu/packages/apparmor.scm"
"gnu/packages/authentication.scm"
"gnu/packages/cluster.scm"
"gnu/packages/configuration-management.scm"
"gnu/packages/configuration-management"
"gnu/packages/databases.scm"
"gnu/packages/distributed.scm"
"gnu/packages/dns.scm"
@@ -1142,26 +996,7 @@ packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
"gnu/packages/task-runners.scm"
"gnu/packages/terraform.scm"
"gnu/packages/virtualization.scm"
"gnu/packages/vnc.scm"
"gnu/services/admin.scm"
"gnu/services/authentication.scm"
"gnu/services/databases.scm"
"gnu/services/dns.scm"
"gnu/services/high-availability.scm"
"gnu/services/kerberos.scm"
"gnu/services/monitoring.scm"
"gnu/services/nfs.scm"
"gnu/services/samba.scm"
"gnu/services/virtualization.scm"
"gnu/services/vnc.scm"
"gnu/tests/databases.scm"
"gnu/tests/dns.scm"
"gnu/tests/high-availability.scm"
"gnu/tests/monitoring.scm"
"gnu/tests/nfs.scm"
"gnu/tests/samba.scm"
"gnu/tests/virtualization.scm"
"gnu/tests/vnc.scm")))
"gnu/packages/vnc.scm")))
(define-team telephony
(team 'telephony
@@ -1218,6 +1053,11 @@ the \"texlive\" importer."
"bavier")
science)
(define-member (person "Lars-Dominik Braun"
"lars@6xq.net"
"ldb")
python haskell)
(define-member (person "Jonathan Brielmaier"
"jonathan.brielmaier@web.de"
"jonsger")
@@ -1227,12 +1067,12 @@ the \"texlive\" importer."
"ludo@gnu.org"
"civodul")
core core-packages hpc installer
guile)
mentors)
(define-member (person "Andreas Enge"
"andreas@enge.fr"
"enge")
bootstrap c++ core-packages crypto lxqt science tex)
bootstrap core-packages lxqt science tex)
(define-member (person "Tanguy Le Carrour"
"tanguy@bioneland.org"
@@ -1262,7 +1102,7 @@ the \"texlive\" importer."
(define-member (person "jgart"
"jgart@dismail.de"
"jgart")
hare lisp mentors)
lisp mentors)
(define-member (person "Guillaume Le Vaillant"
"glv@posteo.net"
@@ -1292,12 +1132,12 @@ the \"texlive\" importer."
(define-member (person "Liliana Marie Prikler"
"liliana.prikler@gmail.com"
"lilyp")
emacs games gnome qa-packages)
emacs games gnome)
(define-member (person "Ricardo Wurmus"
"rekado@elephly.net"
"rekado")
bioinformatics r sugar)
r sugar)
(define-member (person "Christopher Baines"
"guix@cbaines.net"
@@ -1309,11 +1149,6 @@ the \"texlive\" importer."
"abcdw")
home emacs)
(define-member (person "Trevor Richards"
"trev@trevdev.ca"
"trevdev")
emacs lisp)
(define-member (person "pukkamustard"
"pukkamustard@posteo.net"
"pukkamustard")
@@ -1324,6 +1159,10 @@ the \"texlive\" importer."
"jpoiret")
installer)
(define-member (person "("
"paren@disroot.org")
)
(define-member (person "Simon Tournier"
"zimon.toutoune@gmail.com"
"zimoun")
@@ -1337,7 +1176,7 @@ the \"texlive\" importer."
(define-member (person "Vagrant Cascadian"
"vagrant@debian.org"
"vagrantc")
debian embedded kernel)
debian embedded)
(define-member (person "Vagrant Cascadian" ;XXX: duplicate
"vagrant@reproducible-builds.org"
@@ -1352,12 +1191,12 @@ the \"texlive\" importer."
(define-member (person "Katherine Cox-Buday"
"cox.katherine.e+guix@gmail.com"
"katco")
emacs lisp)
emacs go lisp)
(define-member (person "Munyoki Kilyungi"
"me@bonfacemunyoki.com"
"BonfaceKilz")
python guile)
python lisp)
(define-member (person "Gabriel Wicki"
"gabriel@erlikon.ch"
@@ -1384,20 +1223,23 @@ the \"texlive\" importer."
"Hellseher")
go julia python science sysadmin)
(define-member (person "Arthur Rodrigues"
"arthurhdrodrigues@proton.me"
"arthurhdrodrigues")
go)
(define-member (person "Vivien Kraus"
"vivien@planete-kraus.eu")
gnome)
(define-member (person "Mark H Weaver"
"mhw@netris.org"
"mhw")
mozilla)
(define-member (person "Adam Faiz"
"adam.faiz@disroot.org")
games)
(define-member (person "Laurent Gatto"
"lgatto@protonmail.ch"
"laurent.gatto@gmail.com"
"lgatto")
r bioinformatics)
r)
(define-member (person "Nicolas Goaziou"
"guix@nicolasgoaziou.fr"
@@ -1412,7 +1254,7 @@ the \"texlive\" importer."
(define-member (person "Janneke Nieuwenhuizen"
"janneke@gnu.org"
"janneke")
bootstrap build-tools core-packages home hurd installer qa-packages)
bootstrap core-packages home hurd installer)
(define-member (person "Ian Eure"
"ian@retrospec.tv"
@@ -1422,7 +1264,7 @@ the \"texlive\" importer."
(define-member (person "Zheng Junjie"
"z572@z572.online"
"Z572")
core-packages)
core-packages qt kde)
(define-member (person "Sughosha"
"sughosha@disroot.org"
@@ -1437,7 +1279,7 @@ the \"texlive\" importer."
(define-member (person "Cayetano Santos"
"csantosb@inventati.org"
"csantosb")
ai emacs electronics hpc crypto reproduciblebuilds)
ai emacs electronics hpc)
(define-member (person "Greg Hogan"
"code@greghogan.com"
@@ -1446,7 +1288,8 @@ the \"texlive\" importer."
(define-member (person "Hilton Chain"
"hako@ultrarare.space"
"hako"))
"hako")
emacs home localization mozilla rust zig)
(define-member (person "Noé Lopez"
"noelopez@free.fr"
@@ -1458,6 +1301,10 @@ the \"texlive\" importer."
"Ashvith")
games go javascript sysadmin xfce)
(define-member (person "Trevor Richards"
"trev@trevdev.ca")
lisp emacs)
(define-member (person "Konrad Hinsen"
"guix@khinsen.fastmail.net"
"khinsen")
@@ -1479,9 +1326,9 @@ the \"texlive\" importer."
hurd)
(define-member (person "Giacomo Leidi"
"therewasa@fishinthecalculator.me"
"goodoldpaul@autistici.org"
"fishinthecalculator")
audio beam)
audio)
(define-member (person "Saku Laesvuori"
"saku@laesvuori.fi"
@@ -1491,12 +1338,7 @@ the \"texlive\" importer."
(define-member (person "Rodion Goritskov"
"rodion@goritskov.com"
"rodion-goritskov")
games java kde kernel release)
(define-member (person "Jason Conroy"
"jconroy@tscripta.net"
"conroj")
ocaml)
release)
(define-member (person "Rutherther"
"rutherther@ditigal.xyz"
@@ -1511,98 +1353,13 @@ the \"texlive\" importer."
(define-member (person "Danny Milosavljevic"
"dannym@friendly-machines.com"
"daym")
bootstrap hpc python rust science)
bootstrap hpc rust science)
(define-member (person "Andy Tai"
"atai@atai.org"
"atai")
ai)
(define-member (person "Pierre-Henry Fröhring"
"contact@phfrohring.com"
"phfrohring")
beam)
(define-member (person "Igorj Gorjaĉev"
"igor@goryachev.org"
"delitrem")
beam)
(define-member (person "Nguyễn Gia Phong"
"cnx@loang.net"
"cnx")
build-tools python qa-packages sysadmin)
(define-member (person "Lilah Tascheter"
"lilah@lunabee.space"
"tinystar")
hare)
(define-member (person "FuncProgLinux"
"softwarelibre@urutau-ltd.org"
"FuncProgLinux")
mate)
(define-member (person "Reza Housseini"
"reza@housseini.me"
"rhou")
python science c++)
(define-member (person "Yunqi Shao"
"me@yqshao.se"
"yqshao")
sysadmin)
(define-member (person "Collin Doering"
"collin@rekahsoft.ca"
"rekahsoft")
embedded electronics haskell sysadmin)
(define-member (person "Mathieu Lirzin"
"mthl@gnu.org"
"mthl")
java)
(define-member (person "Hugo Buddelmeijer"
"hugo@buddelmeijer.nl"
"hugobuddel")
python)
(define-member (person "Yan Abu Arab"
"yanabuarab@gmail.com"
"tux1c")
python sysadmin)
(define-member (person "Wilko Meyer"
"w@wmeyer.eu"
"theesm")
kernel perl)
(define-member (person "Untrusem"
"mysticmoksh@riseup.net"
"untrusem")
mozilla)
(define-member (person "David Thompson"
"dthompson2@worcester.edu"
"flockofbirbs")
guile)
(define-member (person "Sergio Pastor Pérez"
"sergio.pastorperez@gmail.com"
"pastor")
guile hpc kde)
(define-member (person "Carlo Zancanaro"
"carlo@zancanaro.id.au"
"czan")
lua ruby)
(define-member (person "Folât Pjêrsômêj"
"folaht@protonmail.com"
"folaht")
documentation)
(define (find-team name)
(or (hash-ref %teams (string->symbol name))
-60
View File
@@ -1,60 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using the mix-build-system.
;;; It is used to assist continuous integration of the beam-team branch.
;;;
;;;
;;; You can use it to build all covered packages with:
;;;
;;; ./pre-inst-env guix build -m etc/teams/beam/elixir-manifest.scm
;;;
;;; or to update them with:
;;;
;;; ./pre-inst-env guix refresh -u -m etc/teams/beam/elixir-manifest.scm
(use-modules (guix packages)
(guix profiles)
(guix gexp)
(guix build-system)
(ice-9 match)
(srfi srfi-1)
(srfi srfi-26))
(define* (has-mix-build-system? build-system #:key modules #:allow-other-keys)
(or (eq? (build-system-name build-system) 'mix)
(any
(match-lambda
(('guix 'build 'mix-build-system) #t)
('((guix build mix-build-system) . _) #t)
(_ #f))
(cond
((gexp? modules) (gexp->approximate-sexp modules))
((pair? modules) modules)
(else '())))))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (apply has-mix-build-system?
(package-build-system package)
(package-arguments package))
(cons package lst)
lst))
(list))))
-60
View File
@@ -1,60 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using the rebar-build-system.
;;; It is used to assist continuous integration of the beam-team branch.
;;;
;;;
;;; You can use it to build all covered packages with:
;;;
;;; ./pre-inst-env guix build -m etc/teams/beam/erlang-manifest.scm
;;;
;;; or to update them with:
;;;
;;; ./pre-inst-env guix refresh -u -m etc/teams/beam/erlang-manifest.scm
(use-modules (guix packages)
(guix profiles)
(guix gexp)
(guix build-system)
(ice-9 match)
(srfi srfi-1)
(srfi srfi-26))
(define* (has-rebar-build-system? build-system #:key modules #:allow-other-keys)
(or (eq? (build-system-name build-system) 'rebar)
(any
(match-lambda
(('guix 'build 'rebar-build-system) #t)
('((guix build rebar-build-system) . _) #t)
(_ #f))
(cond
((gexp? modules) (gexp->approximate-sexp modules))
((pair? modules) modules)
(else '())))))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (apply has-rebar-build-system?
(package-build-system package)
(package-arguments package))
(cons package lst)
lst))
(list))))
+4 -7
View File
@@ -52,8 +52,7 @@
tools/versions-stable")))
(define (fetch-releng-content)
"Return a string corresponding to the content of the %GNOME-RELENG-VERSIONS-URI
file."
"Return an input port to the %GNOME-RELENG-VERSIONS-URI file."
(call-with-port (http-fetch/cached (%gnome-releng-versions-uri))
get-string-all))
@@ -73,13 +72,11 @@ C < ':'
NL < '\n'")
(define %names
'(("adwaita-fonts" . "font-adwaita")
("pygobject" . "python-pygobject")
("pyatspi" . "python-pyatspi")))
'(("adwaita-fonts" . "font-adwaita")))
(define (parse-releng data)
"Return the complete parse tree for DATA, a string representing the content of
a GNOME releng file."
"Return DATA, a string representing the content of a GNOME releng file, and
return the complete parse tree."
(let ((tree (peg:tree (match-pattern releng data))))
(match tree
(#f (raise-exception (make-releng-parser-error)))
-34
View File
@@ -1,34 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2026 jgart <jgart@dismail.de>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using the go-build-system.
;;; It is used to assist continuous integration of the go-team branch.
(use-modules (guix packages)
(guix profiles)
(guix build-system))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (or (eq? 'go (build-system-name (package-build-system package)))
(string=? "go" (package-name package)))
(cons package lst)
lst))
'())))
-34
View File
@@ -1,34 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 jgart <jgart@dismail.de>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using the hare-build-system.
;;; It is used to assist continuous integration of the hare-team branch.
(use-modules (guix packages)
(guix profiles)
(guix build-system))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (or (eq? 'hare (build-system-name (package-build-system package)))
(string=? "hare" (package-name package)))
(cons package lst)
lst))
'())))
-40
View File
@@ -1,40 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 jgart <jgart@dismail.de>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using any one of the
;;; asdf build systems. It is used to assist continuous integration of
;;; the lisp-team branch.
(use-modules (guix packages)
(guix profiles)
(guix build-system))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (or (eq? 'asdf/sbcl (build-system-name (package-build-system package)))
(eq? 'asdf/ecl (build-system-name (package-build-system package)))
(eq? 'asdf/clasp (build-system-name (package-build-system package)))
(string=? "clasp-cl" (package-name package))
(string=? "ecl" (package-name package))
(string=? "sbcl" (package-name package)))
(cons package lst)
lst))
'())))
-34
View File
@@ -1,34 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 FuncProgLinux <softwarelibre@urutau-ltd.org>
;;;
;;; 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/>.
(use-modules (guix packages)
(guix profiles)
(gnu packages mate)
(ice-9 match)
(srfi srfi-1))
(define (propagated-inputs package)
(map
(match-lambda
((_ (? package? pkg)) pkg)
((_ (? package? pkg) output) (list pkg output)))
(package-propagated-inputs package)))
(packages->manifest
(append-map propagated-inputs
(list mate)))
-36
View File
@@ -1,36 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2026 jgart <jgart@dismail.de>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using the perl-build-system.
;;; It is used to assist continuous integration of the perl-team branch.
(use-modules (guix packages)
(guix profiles)
(guix build-system))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (or (eq? 'perl (build-system-name (package-build-system package)))
(eq? 'rakudo (build-system-name (package-build-system package)))
(string=? "perl" (package-name package))
(string=? "rakudo" (package-name package)))
(cons package lst)
lst))
'())))
-35
View File
@@ -1,35 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 jgart <jgart@dismail.de>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using the python-build-system.
;;; It is used to assist continuous integration of the python-team branch.
(use-modules (guix packages)
(guix profiles)
(guix build-system))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (or (eq? 'python (build-system-name (package-build-system package)))
(eq? 'pyproject (build-system-name (package-build-system package)))
(string=? "python" (package-name package)))
(cons package lst)
lst))
'())))
-413
View File
@@ -1,413 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;;
;;; 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/>.
;;; This manifest returns build artfacts for all supported systems. This can be
;;; controlled by SUPPORTED_SYSTEMS environment variable. For the list of
;;; artifacts produced, see artifacts-for-system and the `<thing>-for-system?`
;;; procedures. NOTE: the --system argument does not change the system for which
;;; the resulting package is built. They return different definitions of the
;;; images. To change the system, pass different SUPPORTED_SYSTEMS.
(use-modules (gnu compression)
(gnu image)
(gnu packages graphviz)
(gnu packages imagemagick)
(gnu packages package-management)
(gnu packages perl)
(gnu services)
(gnu system image)
(gnu system install)
(gnu system)
(guix build-system gnu)
(guix build-system trivial)
(guix channels)
(guix gexp)
(guix git)
(guix grafts)
(guix memoization)
(guix monads)
(guix packages)
(guix profiles)
(guix records)
(guix scripts pack)
(guix store)
(guix ui)
(guix utils)
(ice-9 format)
(ice-9 match)
(srfi srfi-9)
(srfi srfi-26)
(srfi srfi-35))
;; For easier testing, use (snapshot) guix package from (gnu packages
;; package-management). Otherwise, the package is updated to current commit and
;; might not be substitutable, leading to longer build times.
(define %use-snapshot-package?
(string=? (or (getenv "GUIX_USE_SNAPSHOT_PACKAGE") "no") "yes"))
(define (%guix-version)
;; NOTE: while package-version guix is not correct in general,
;; it is correct for the release itself. At that time, the
;; guix package is updated to vX.Y.Z and it's the version
;; we want to use.
(package-version guix))
(define (%vm-image-path)
(search-path %load-path "gnu/system/examples/vm-image.tmpl"))
(define (%vm-image-efi-path)
(search-path %load-path "gnu/system/examples/vm-image-efi.tmpl"))
;; monadic record and gexp-compiler
;; taken from Inria
;; https://gitlab.inria.fr/numpex-pc5/wp3/guix-images/-/blob/17bf4585abc2d637faa5d339436e778b7c9fb1ce/modules/guix-hpc/packs.scm
;; XXX: The <monadic> hack below will hopefully become unnecessary once the
;; (guix scripts pack) interface switches to declarative style--i.e.,
;; file-like objects.
(define-record-type <monadic>
(monadic->declarative mvalue)
monadic?
(mvalue monadic-value))
(define-gexp-compiler (monadic-compiler (monadic <monadic>) system target)
(monadic-value monadic))
;; The tarball should be the same for every system.
;; Still, we need to decide what system to build it
;; for, so use the one that CI has most resources for.
(define (source-tarball-for-system? system)
(member system
'("x86_64-linux")))
(define (iso-for-system? system)
(member system
'("x86_64-linux" "i686-linux" "aarch64-linux")))
(define (qcow2-for-system? system)
(member system
'("x86_64-linux" "aarch64-linux")))
(define* (qcow2-gpt-for-system? system)
(string=? system "aarch64-linux"))
(define (copy-/etc/config.scm config)
"Copy the configuration.scm of the operating system to /etc/config.scm, for
user's convenience. The file has to be writable, not a link to the store, so
etc-service-type can't be used here. CONFIG is a pair of strings, (FROM . TO).
The config will be copied from FROM to TO."
(match config
((from . to)
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils))
(when (not (file-exists? #$to))
(copy-file #$from #$to)
(make-file-writable #$to)))))
(_ (raise
(formatted-message-string
(G_ "unexpected config parameter, should be pair of strings: ~a"
config))))))
(define copy-/etc/config.scm-service-type
(service-type (name 'copy-/etc/config.scm)
(description
"Copy the system configuration file to /etc/config.scm.")
(extensions (list (service-extension activation-service-type
copy-/etc/config.scm)))
(default-value (cons "/run/current-system/configuration.scm"
"/etc/config.scm"))))
(define (operating-system-with-/etc/config.scm os)
"Copy the system configuration file to writable /etc/config.scm on first boot."
(operating-system
(inherit os)
(services (cons (service copy-/etc/config.scm-service-type)
(operating-system-user-services os)))))
(define (simple-provenance-entry config-file)
"Return system entries describing the operating system config, provided
through CONFIG-FILE."
(mbegin %store-monad
(return `(("configuration.scm"
,(local-file (assume-valid-file-name config-file)
"configuration.scm"))))))
;; This is mostly taken from provenance-service-type from (gnu services),
;; but it provides only configuration.scm, not channels.scm. This is
;; to get the same derivations for both Cuirass and local builds.
;; In the future, provenance-service-type could be adapted to support
;; this use case as well.
(define simple-provenance-service-type
(service-type (name 'provenance)
(extensions
(list (service-extension system-service-type
simple-provenance-entry)))
(default-value #f) ;the OS config file
(description
"Store configuration.scm of the system in the system
itself.")))
(define* (operating-system-with-simple-provenance
os
#:optional
(config-file
(operating-system-configuration-file
os)))
"Return a variant of OS that stores its CONFIG-FILE. This is similar to
`operating-system-with-provenance`, but it does copy only the
configuration.scm."
(operating-system
(inherit os)
(services (cons (service simple-provenance-service-type config-file)
(operating-system-user-services os)))))
(define (guix-package-commit guix)
;; Extract the commit of the GUIX package.
(match (package-source guix)
((? channel? source)
(channel-commit source))
(_
(apply (lambda* (#:key commit #:allow-other-keys) commit)
(package-arguments guix)))))
;; NOTE: Normally, we would use (current-guix), along with url
;; overridden to the upstream repository to not leak our local checkout.
;; But currently, the (current-guix) derivation has to be computed through
;; QEMU for systems other than your host system. This takes a lot of time,
;; it takes at least half an hour to get the derivations.
(define (guix-package/with-commit guix commit)
"Use the guix from (gnu packages package-management),
but override its commit to the specified version. Make sure
to also override the channel commit to have the correct
provenance."
(let ((scm-version (car (string-split (package-version guix) #\-))))
(package
(inherit guix)
(version (string-append scm-version "." (string-take commit 7)))
(source (git-checkout
(url (channel-url %default-guix-channel))
(commit commit)))
(arguments
(substitute-keyword-arguments (package-arguments guix)
((#:configure-flags flags '())
#~(cons*
(string-append "--with-channel-commit=" #$commit)
(filter (lambda (flag)
(not (string-prefix? "--with-channel-commit=" flag)))
#$flags))))))))
(define guix-for-images
(mlambda (system)
(cond
;; For testing purposes, use the guix package directly.
(%use-snapshot-package? guix)
;; Normally, update the guix package to current commit.
(else
(guix-package/with-commit guix (guix-package-commit (current-guix)))))))
(define %binary-tarball-compression "xz")
;; Like guix pack -C xz -s --localstatedir --profile-name=current-guix guix
(define* (binary-tarball-for-system system #:key (extra-packages '()))
(let* ((base-name (string-append "guix-binary-" (%guix-version) "." system))
(manifest (packages->manifest (cons* guix extra-packages)))
(profile (profile (content manifest)))
(inputs `(("profile" ,profile)))
(compression %binary-tarball-compression))
(manifest-entry
(name (string-append base-name ".tar." compression))
(version (%guix-version))
(item (monadic->declarative
(self-contained-tarball
base-name profile
#:profile-name "current-guix"
#:compressor (lookup-compressor compression)
#:localstatedir? #t))))))
;; Like guix system image -t iso9660 \
;; --label="GUIX_$${system}_$(VERSION)" gnu/system/install.scm
(define* (iso-for-system system)
(let* ((name (string-append
"guix-system-install-" (%guix-version) "." system ".iso"))
(base-os (make-installation-os
#:grub-displayed-version (%guix-version)
#:efi-only? (string=? system "aarch64-linux")))
(base-image (os->image base-os #:type iso-image-type))
(label (string-append "GUIX_" system "_"
(if (> (string-length (%guix-version)) 7)
(string-take (%guix-version) 7)
(%guix-version)))))
(manifest-entry
(name name)
(version (%guix-version))
(item (system-image
(image-with-label
(image
(inherit base-image)
(name (string->symbol name)))
label))))))
;; Like guix system image -t qcow2 gnu/system/examples/vm-image.tmpl
(define* (qcow2-for-system system)
(let* ((name (string-append
"guix-system-vm-image-" (%guix-version) "." system ".qcow2"))
(base-os-path
(if (qcow2-gpt-for-system? system)
(%vm-image-efi-path)
(%vm-image-path)))
(target-image-type
(if (qcow2-gpt-for-system? system)
qcow2-gpt-image-type
qcow2-image-type))
(base-os
(operating-system-with-/etc/config.scm
(operating-system-with-simple-provenance
(load base-os-path) base-os-path)))
(base-image (os->image base-os #:type target-image-type)))
(manifest-entry
(name name)
(version (%guix-version))
(item (system-image
(image
(inherit base-image)
(volatile-root? #f)
(size (* 20 (expt 1024 3))) ; 20 GiB to have spare space
(name (string->symbol name))))))))
(define* (guix-source-tarball)
(let ((guix (package
(inherit guix)
(native-inputs
(modify-inputs (package-native-inputs guix)
;; graphviz-minimal -> graphviz
(replace "graphviz" graphviz)
(append imagemagick)
(append perl))))))
(manifest-entry
(name (string-append "guix-" (%guix-version) ".tar.gz"))
(version (package-version guix))
(item (dist-package
guix
;; Guix is built from git source, not from tarball.
;; So it's fine to use its source directly.
(package-source guix))))))
(define* (manifest-entry-with-parameters system entry
#:key
(guix-for-images-proc guix-for-images))
(manifest-entry
(inherit entry)
(item
(with-parameters
((%current-system system)
(%current-target-system #f)
(current-guix-package (guix-for-images-proc system)))
(manifest-entry-item entry)))))
(define* (manifest-with-parameters system manifest
#:key
(guix-for-images-proc guix-for-images))
"Returns entries in the manifest accompanied with %current-system,
%current-target-sytem and current-guix-package parameters."
(make-manifest
(map (cut manifest-entry-with-parameters system <>
#:guix-for-images-proc guix-for-images-proc)
(manifest-entries manifest))))
(define (artifacts-for-system/nonparameterized system)
"Get all artifacts for given system. This will always include the
guix-binary tarball and optionally iso and/or qcow2 images."
(manifest
(append
(list
(binary-tarball-for-system system))
;; TODO: After source tarball generation is ready, uncomment.
;; (if (source-tarball-for-system? system)
;; (list (guix-source-tarball))
;; '())
(if (iso-for-system? system)
(list (iso-for-system system))
'())
(if (qcow2-for-system? system)
(list (qcow2-for-system system))
'()))))
(define* (artifacts-for-system system
#:key
(guix-for-images-proc guix-for-images))
"Collects all artifacts for a system. Gives them the proper %current-system
and %current-target-system parameters, so the --system passed on CLI is
irrelevant."
;; NOTE: parameterizing current system, because the tarball seems to somehow
;; depend on it early on. I haven't investigated it, but seems like a bug. Could
;; it be the gexp->derivation + monadic->declarative, not passing down the
;; system? Symptom: guix build --system=x86_64 -m artifacts-manifest.scm and
;; guix build --system=i686-linux -m artifacts-manifest.scm gives out different
;; results without the parameterization.
(parameterize
((%current-system system)
(%current-target-system #f)
(current-guix-package (guix-for-images-proc system)))
(manifest-with-parameters
system
(artifacts-for-system/nonparameterized system)
#:guix-for-images-proc guix-for-images-proc)))
(define (manifest->union manifest)
"Makes a union that will be a folder with all the entries symlinked. This
is different from a profile as it expects the entries are just simple files
and symlinks them by their manifest-entry-name."
(let ((entries (manifest-entries manifest)))
(computed-file
"artifacts-union"
(with-imported-modules '((guix build union)
(guix build utils))
#~(begin
(use-modules (guix build utils))
(mkdir-p #$output)
(for-each
(lambda* (entry)
(symlink (cdr entry)
(string-append #$output "/" (car entry))))
(list #$@(map (lambda (entry)
#~(cons
#$(manifest-entry-name entry)
#$(manifest-entry-item entry)))
entries))))))))
(define %supported-systems
(or (and
(getenv "SUPPORTED_SYSTEMS")
(string-split (getenv "SUPPORTED_SYSTEMS") #\ ))
'("x86_64-linux" "i686-linux"
"armhf-linux" "aarch64-linux"
"powerpc64le-linux" "riscv64-linux")))
(define supported-systems-union-manifest
(concatenate-manifests
(map artifacts-for-system
%supported-systems)))
(when %use-snapshot-package?
(warning (G_ "building images using the 'guix' package (snapshot)~%")))
(info (G_ "producing artifacts for the following systems: ~a~%")
%supported-systems)
supported-systems-union-manifest
-26
View File
@@ -1,26 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;;
;;; 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/>.
;;; Produce a single directory with all the artifacts inside of it, with proper
;;; names. They can then be easily copied to releasedir in Makefile. The files are
;;; symlinked to save space, but they should be copied out of the store as regular
;;; files.
(load "artifacts-manifest.scm")
(manifest->union
supported-systems-union-manifest)
@@ -1,94 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;;
;;; 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/>.
(use-modules (guix packages)
(guix gexp)
(gnu services)
(gnu tests install)
(ice-9 match)
(guix utils)
(srfi srfi-26)
(srfi srfi-1))
;; TODO find a better way to check for thunked fields
(define* (thunked-field? field obj)
(and
(procedure? obj)
(eq?
(car (procedure-minimum-arity obj))
1)
; Uhhh
(string-suffix? "(x)>"
(format #f "~a" obj))))
;; Prints names of all packages, prepending the service they
;; come from.
(define* (print-all-packages obj #:optional (pred package?))
(match obj
((? pred)
(format #t "\"~a\"~%" (package-name obj))
(list obj))
((? gexp?)
(list))
((a . b)
(append (print-all-packages a pred)
(print-all-packages b pred)))
((_ ...)
(apply append
(map (cut print-all-packages <> pred)
obj)))
(#(_ ...)
(print-all-packages (vector->list obj) proc))
((or (? service-type?)
(? origin?))
(list))
((? record?)
(let* ((record-type (record-type-descriptor obj))
(record-fields (record-type-fields record-type)))
(when (service? obj)
(format #t ";; ~a-service~%" (service-type-name (service-kind obj))))
(apply append
(map (lambda (field)
(let* ((accessor (record-accessor record-type field))
(field-obj (accessor obj)))
(if (thunked-field? field field-obj)
(print-all-packages (field-obj obj) pred)
(print-all-packages field-obj pred))))
record-fields))))
((? parameter?)
(list))
(_
(list))))
(define full-installer-os
((@@ (gnu tests install) installation-target-desktop-os-for-gui-tests)))
(define minimal-installer-os
((@@ (gnu tests install) installation-target-os-for-gui-tests)))
(display "Full os packages:")
(print-all-packages full-installer-os)
(display "Minimal os packages:")
(print-all-packages minimal-installer-os)
;; Note that the printed packages will contain duplicates.
;; I recommend to first put packages out of the profile service
;; and out of packages field (they will be above service packages)
;; at the bottom of the list and then filtering only unique lines, ie.
;; with `awk '!a[$0]++'`. And lastly removing services that no longer
;; have packages and also the packages that are already in minimal manifest
;; (in case of desktop manifest)
+1 -1
View File
@@ -22,7 +22,7 @@
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system cargo)
#:use-module ((gnu packages rust-sources) #:prefix package:)
#:use-module (gnu packages rust-sources)
#:export (lookup-cargo-inputs))
;;;
+5 -6
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2024, 2026 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2024 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -27,9 +27,8 @@
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (and (eq? (build-system-name (package-build-system package))
(quote cargo))
(supported-package? package))
(cons package lst)
lst))
(if (eq? (build-system-name (package-build-system package))
(quote cargo))
(cons package lst)
lst))
(list))))
+16 -15
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2024, 2026 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2024 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -17,9 +17,10 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
;;; This file returns a manifest of packages built using the cargo-build-system
;;; and the packages which use rust itself as an input. This is a short list of
;;; packages which can be checked to see if a rust update has gone smoothly. It
;;; is used to assist continuous integration of the rust-team branch.
;;; which are NOT prefixed with 'rust-' and the packages which use rust itself
;;; as an input. This is a short list of packages which can be checked to see
;;; if a rust update has gone smoothly. It is used to assist continuous
;;; integration of the rust-team branch.
(use-modules (guix packages)
(guix profiles)
@@ -30,15 +31,15 @@
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (and (supported-package? package)
(or (eq? (build-system-name (package-build-system package))
(quote cargo))
(any
(lambda (pkg)
(member (specification->package "rust") pkg))
(append (package-native-inputs package)
(package-propagated-inputs package)
(package-inputs package)))))
(cons package lst)
lst))
(if (or
(eq? (build-system-name (package-build-system package))
(quote cargo))
(any
(lambda (pkg)
(member (specification->package "rust") pkg))
(append (package-native-inputs package)
(package-propagated-inputs package)
(package-inputs package))))
(cons package lst)
lst))
(list))))
-37
View File
@@ -1,37 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2026 jgart <jgart@dismail.de>
;;;
;;; 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/>.
;;; This file returns a manifest of packages built using the texlive-build-system.
;;; It is used to assist continuous integration of the tex-team branch.
(use-modules (guix packages)
(guix profiles)
(guix build-system)
(gnu packages tex))
(define %sundry-texlive-packages
(list bibtool
dvisvgm
rubber
texmaker
texstudio
lyx))
(packages->manifest
(cons texlive-scheme-full
%sundry-texlive-packages))
+2 -2
View File
@@ -29,7 +29,7 @@
;;; Code:
(define %artwork-repository
(let ((commit "08259679a0faef63e3ba169df5b937d836bd9262"))
(let ((commit "4c7f2ce6428a63e202cd2a9474a06f68a946934d"))
(origin
(method git-fetch)
(uri (git-reference
@@ -39,6 +39,6 @@
"-checkout"))
(sha256
(base32
"0anryix0y8w9brksiaz39r8c10vdd0fp4h96b9f3m4aw0xpv8xlf")))))
"1rl569759q9wm1dxn7nkq3873d2k92giic7aa6jwzwr3n16prc7y")))))
;;; artwork.scm ends here
+6 -5
View File
@@ -2,7 +2,7 @@
;;; Copyright © 2017 David Craven <david@craven.ch>
;;; Copyright © 2017, 2020, 2022 Mathieu Othacehe <othacehe@gnu.org>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2019, 2021, 2023, 2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019, 2021, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz>
;;; Copyright © 2022 Reza Alizadeh Majd <r.majd@pantherx.org>
@@ -26,8 +26,7 @@
(define-module (gnu bootloader)
#:use-module (gnu system file-systems)
#:use-module (gnu system uuid)
#:autoload (guix discovery) (fold-module-public-variables)
#:autoload (guix describe) (modules-from-current-profile)
#:use-module (guix discovery)
#:use-module (guix gexp)
#:use-module (guix profiles)
#:use-module (guix records)
@@ -306,8 +305,10 @@ instead~%")))
(define (bootloader-modules)
"Return the list of bootloader modules."
(modules-from-current-profile "gnu/bootloader"
#:warn warn-about-load-error))
(all-modules (map (lambda (entry)
`(,entry . "gnu/bootloader"))
%load-path)
#:warn warn-about-load-error))
(define %bootloaders
;; The list of publically-known bootloaders.
+108
View File
@@ -0,0 +1,108 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Timothy Sample <samplet@ngyro.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 (gnu bootloader depthcharge)
#:use-module (gnu bootloader extlinux)
#:use-module (gnu bootloader)
#:use-module (gnu packages bootloaders)
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (ice-9 match)
#:export (depthcharge-bootloader))
(define (signed-kernel kernel kernel-arguments initrd)
(define builder
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils)
(ice-9 binary-ports)
(rnrs bytevectors))
(set-path-environment-variable "PATH" '("bin") (list #$dtc))
;; TODO: These files have to be writable, so we copy them.
;; This can probably be fixed by using a ".its" file, just
;; be careful not to break initrd loading.
(copy-file #$kernel "zImage")
(chmod "zImage" #o755)
(copy-file (string-append (dirname #$kernel) "/lib/dtbs/"
"rk3288-veyron-speedy.dtb")
"rk3288-veyron-speedy.dtb")
(chmod "rk3288-veyron-speedy.dtb" #o644)
(copy-file #$initrd "initrd")
(chmod "initrd" #o644)
(invoke (string-append #$u-boot-tools "/bin/mkimage")
"-D" "-I dts -O dtb -p 2048"
"-f" "auto"
"-A" "arm"
"-O" "linux"
"-T" "kernel"
"-C" "None"
"-d" "zImage"
"-a" "0"
"-b" "rk3288-veyron-speedy.dtb"
"-i" "initrd"
"image.itb")
(call-with-output-file "bootloader.bin"
(lambda (port)
(put-bytevector port (make-bytevector 512 0))))
(with-output-to-file "kernel-arguments"
(lambda ()
(display (string-join (list #$@kernel-arguments)))))
(invoke (string-append #$vboot-utils "/bin/vbutil_kernel")
"--pack" #$output
"--version" "1"
"--vmlinuz" "image.itb"
"--arch" "arm"
"--keyblock" (string-append #$vboot-utils
"/share/vboot-utils/devkeys/"
"kernel.keyblock")
"--signprivate" (string-append #$vboot-utils
"/share/vboot-utils/devkeys/"
"kernel_data_key.vbprivk")
"--config" "kernel-arguments"
"--bootloader" "bootloader.bin"))))
(computed-file "vmlinux.kpart" builder))
(define* (depthcharge-configuration-file config entries
#:key
(system (%current-system))
(old-entries '())
#:allow-other-keys)
(match entries
((entry)
(let ((kernel (menu-entry-linux entry))
(kernel-arguments (menu-entry-linux-arguments entry))
(initrd (menu-entry-initrd entry)))
;; XXX: Make this a symlink.
(signed-kernel kernel kernel-arguments initrd)))
(_ (error "Too many bootloader menu entries!"))))
(define install-depthcharge
#~(lambda (bootloader device mount-point)
(let ((kpart (string-append mount-point
"/boot/depthcharge/vmlinux.kpart")))
(write-file-on-device kpart (stat:size (stat kpart)) device 0))))
(define depthcharge-bootloader
(bootloader
(name 'depthcharge)
(package #f)
(installer install-depthcharge)
(configuration-file "/boot/depthcharge/vmlinux.kpart")
(configuration-file-generator depthcharge-configuration-file)))
+3 -14
View File
@@ -3,7 +3,7 @@
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019, 2020, 2023, 2024, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019, 2020, 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
;;; Copyright © 2020 Maxim Cournoyer <maxim@guixotic.coop>
;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
@@ -65,7 +65,6 @@
grub-efi-bootloader
grub-efi-removable-bootloader
grub-efi32-bootloader
grub-efi32-removable-bootloader
grub-efi-netboot-bootloader
grub-efi-netboot-removable-bootloader
grub-mkrescue-bootloader
@@ -427,11 +426,8 @@ when booting a root file system on a Btrfs subvolume."
(arguments (menu-entry-multiboot-arguments entry))
;; Choose between device names as understood by Mach's built-in
;; IDE driver ("hdX") and those understood by rumpdisk ("wdX"
;; in the "noide" case). There are no IDE drivers in Mach for
;; hurd64, so always use rumpdisk there.
(rumpdisk? (or (target-hurd64?)
(member "noide" arguments)))
(disk (if rumpdisk? "w" "h"))
;; in the "noide" case).
(disk (if (member "noide" arguments) "w" "h"))
(device-spec (and=> device file-system-device->string))
(device-name (and=> device-spec device-spec->device-name))
(modules (menu-entry-multiboot-modules entry)))
@@ -848,13 +844,6 @@ symlink to the store is not needed in this case."
(name 'grub-efi32)
(package grub-efi32)))
(define grub-efi32-removable-bootloader
(bootloader
(inherit grub-efi32-bootloader)
(name 'grub-efi32-removable-bootloader)
(installer (make-grub-efi-installer #:removable? #t
#:efi32? #t))))
(define (make-grub-efi-netboot-bootloader name subdir)
(bootloader
(name name)
+8 -83
View File
@@ -8,7 +8,6 @@
;;; Copyright © 2023-2024 Herman Rimm <herman@rimm.ee>
;;; Copyright © 2024 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2025 dan <i@dan.games>
;;; Copyright © 2026 Artyom V. Poptsov <poptsov.artyom@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -36,11 +35,11 @@
u-boot-a20-olinuxino-lime2-bootloader
u-boot-a20-olinuxino-micro-bootloader
u-boot-bananapi-m2-ultra-bootloader
u-boot-am335x-evm-bootloader
u-boot-beaglebone-black-bootloader
u-boot-cubietruck-bootloader
u-boot-firefly-rk3399-bootloader
u-boot-mx6cuboxi-bootloader
u-boot-nintendo-nes-classic-edition-bootloader
u-boot-novena-bootloader
u-boot-orangepi-r1-plus-lts-rk3328-bootloader
u-boot-orangepi-zero2w-bootloader
@@ -65,12 +64,7 @@
((? string?)
(list #~(install-file (string-append bootloader #$file)
install-dir)))
((? file-like?)
(list #~(mkdir-p install-dir)
#~(copy-file #$file
(string-append install-dir
"/"
#$(plain-file-name file)))))
((? file-like?) (list #~(install-file #$file install-dir)))
(#f '()))))
#~(lambda (bootloader device mount-point)
(let ((install-dir (string-append mount-point "/boot")))
@@ -97,48 +91,6 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
(if bootloader
(error "Failed to install U-Boot"))))
(define install-am335x-evm-u-boot
(write-u-boot-image
;; According to the "26.1.8.5.5 MMC/SD Read Sector Procedure in Raw Mode"
;; section in the "AM335x and AMIC110 Sitara™ Processors Technical
;; Reference Manual", we have offset, the bootrom tries to load code at the
;; offsets 0x0, 0x20000 (128KB), 0x40000 (256KB) and 0x60000 (384KB).
;;
;; The MBR is 512 Bytes
;; (https://en.wikipedia.org/wiki/Master_boot_record#Sector_layout).
;;
;; At the time of writing, u-boot.img is 1.4 MiB, and it is at offset
;; 0x60000 (384KB) as per CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR.
;;
;; We also need to align the first partition to make sure read/writes are
;; properly aligned.
;;
;; Given these constraints, we chose the following partitioning:
;;
;; 0 512 Bytes 128 KiB
;; | | (0x20000) 256 KiB
;; | | / (0x40000) 384 KiB 4 MiB
;; | | / | (0x60000) |
;; | | / | | |
;; v v / v v v
;; +-------+ +--------------+---------------+----------------+
;; | MBR | ... | First MLO | Second MLO | u-boot.img |
;; +-------+ +--------------+---------------+----------------+
;; <-512 B-> ... <-- 128 KiB --> <-- 128 KiB --> <-- 3712 KiB -->
;;
;; The rationale for that is as follows:
;;
;; - We add a second copy of the MLO at 256 KiB for improving reliability
;; as the doc/board/ti/am335x_evm.rst documentation in u-boot advise us
;; to do that, and also because the space there isn't used.
;;
;; - All can fit into 2MiB (u-boot.img can grow up to 1664 KiB), but we
;; want a bit more space in case u-boot.img grows over time, so we allow
;; u-boot to grow until the 4 MiB offset.
'(("MLO" 256 256) ;; First MLO
("MLO" 256 512) ;; Second MLO
("u-boot.img" 7424 768)) 512))
(define install-beaglebone-black-u-boot
;; http://wiki.beyondlogic.org/index.php?title=BeagleBoneBlack_Upgrading_uBoot
;; This first stage bootloader called MLO (U-Boot SPL) is expected at
@@ -180,12 +132,7 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
;; starfive_visionfive2.dtb. We cannot guarantee that users will
;; update this U-Boot, so set the FDT explicitly.
(plain-file "uEnv.txt"
(string-join
(list
"boot_targets=mmc1 nvme0 mmc0 dhcp"
"bootcmd_mmc1=bootflow scan"
"fdtfile=starfive/jh7110-starfive-visionfive-2-v1.3b.dtb")
"\n"))))
"fdtfile=starfive/jh7110-starfive-visionfive-2-v1.3b.dtb~%")))
;;;
@@ -200,33 +147,6 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
(installer #f)
(disk-image-installer install-u-boot)))
(define u-boot-am335x-evm-bootloader
(bootloader
(inherit u-boot-bootloader)
;; This bootloader supports the following computers:
;; - SanCloud BeagleBone Enhanced
;; - SanCloud BeagleBone Enhanced Extended WiFi
;; - SanCloud BeagleBone Enhanced Lite
;; - Seeed Studio BeagleBone Green Eco
;; - TI AM3359 ICE-V2
;; - TI AM335x BeagleBone
;; - TI AM335x BeagleBone Black
;; - TI AM335x BeagleBone Green
;; - TI AM335x EVM
;; - TI AM335x EVM-SK
;; - TI AM335x PocketBeagle
;;
;; This list was made by retrieving the list of Devicetrees used in
;; configs/am335x_evm_defconfig in u-boot source code. Once we have that we
;; can look at each Devicetree in arch/arm/boot/dts/ti/omap/ inside Linux,
;; and in each file, look at the model property to find the name of the
;; computers that this image supports.
(package u-boot-am335x-evm)
;; At the time of writing, our u-boot.img is 1.4 MiB. This is why we can't
;; reuse install-beaglebone-black-u-boot. And having the same image being
;; able to boot on multiple computers is useful.
(disk-image-installer install-am335x-evm-u-boot)))
(define u-boot-beaglebone-black-bootloader
(bootloader
(inherit u-boot-bootloader)
@@ -254,6 +174,11 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
(inherit u-boot-bootloader)
(disk-image-installer install-rockchip-u-boot)))
(define u-boot-nintendo-nes-classic-edition-bootloader
(bootloader
(inherit u-boot-allwinner-bootloader)
(package u-boot-nintendo-nes-classic-edition)))
(define u-boot-a20-olinuxino-lime-bootloader
(bootloader
(inherit u-boot-allwinner-bootloader)
+9 -16
View File
@@ -359,7 +359,7 @@ to it atomically and set the appropriate permissions."
(left unused-subid-range-left ;previous unused subuid range or #f
(default #f))
(min unused-subid-range-min ;lower bound of this unused subuid range
(default 0))
(default %subordinate-id-min))
(max unused-subid-range-max ;upper bound
(default %subordinate-id-max))
(right unused-subid-range-right ;next unused subuid range or #f
@@ -555,10 +555,7 @@ will be marked as used in it."
(define actual-range
(subid-range
(inherit range)
;; New IDs are only allocated between %subordinate-id-min and
;; %subordinate-id-max.
(start
(max allocation-start %subordinate-id-min))))
(start allocation-start)))
(if (within-interval? allocation actual-range)
(values
@@ -606,6 +603,13 @@ is visited to find the best unused range that can hold RANGE."
(define range-end
(subid-range-end range))
(unless (and (subordinate-id? range-start)
(subordinate-id? range-end))
(raise
(condition
(&invalid-subid-range-error
(range range)))))
(define less?
(< range-end allocation-start))
(define more?
@@ -798,23 +802,12 @@ new UIDs."
(define* (allocate-subids ranges #:optional (current-ranges '()))
"Return a list of subids entries for RANGES, a list of <subid-range>. IDs
found in CURRENT-RANGES, a list of subid entries, are reused."
;; Ranges from disk must always have a start.
(let ((generic (any (compose not subid-range-has-start?) current-ranges)))
(when generic
(raise
(condition
(&specific-subid-range-expected-error
(range generic))))))
(for-each
(lambda (range)
;; New ranges must always be included in the current supported set.
(unless (or (not (subid-range-has-start? range))
(and (subordinate-id? (subid-range-start range))
(subordinate-id? (subid-range-end range))))
(raise
(condition (&invalid-subid-range-error (range range))))))
ranges)
(define sorted-ranges
(stable-sort ranges
subid-range-less))
+24 -38
View File
@@ -11,7 +11,6 @@
;;; Copyright © 2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2024 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2025 Maxim Cournoyer <maxim@guixotic.coop>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -141,13 +140,12 @@ and bits are set according to the default behaviour of 'mkdir'."
#:key
(directory %skeleton-directory)
uid gid)
"Copy the account skeletons from DIRECTORY to HOME and make them writable.
When UID is an integer, make it the owner of all the files created except the
home directory; likewise for GID."
(define (set-permission file)
"Copy the account skeletons from DIRECTORY to HOME. When UID is an integer,
make it the owner of all the files created except the home directory; likewise
for GID."
(define (set-owner file)
(when (or uid gid)
(chown file (or uid -1) (or gid -1)))
(make-file-writable file))
(chown file (or uid -1) (or gid -1))))
(let ((files (scandir directory (negate dot-or-dot-dot?)
string<?)))
@@ -157,9 +155,10 @@ home directory; likewise for GID."
(copy-recursively (string-append directory "/" file)
target
#:log (%make-void-port "w"))
(for-each set-permission
(for-each set-owner
(find-files target (const #t)
#:directories? #t))))
#:directories? #t))
(make-file-writable target)))
files)))
(define* (make-skeletons-writable home
@@ -279,17 +278,6 @@ they already exist."
(for-each ensure-user-home users))
(define* (canonicalize-path* file)
"A safe version of `canonicalize-path' that warns rather than raises on errors.
`canonicalize-path' uses `realpath(2)', which can return various errors like
EINVAL, ELOOP, etc."
(or (false-if-exception (canonicalize-path file))
(begin
(format (current-warning-port)
"warning: could not canonicalize file `~a'; using as-is~%"
file)
file)))
(define (activate-etc etc)
"Install ETC, a directory in the store, as the source of static files for
/etc."
@@ -312,28 +300,26 @@ EINVAL, ELOOP, etc."
(rm-f "/etc/ssl")
(symlink "/run/current-system/profile/etc/ssl" "/etc/ssl")
(rm-f "/etc/static")
(symlink etc "/etc/static")
(for-each (lambda (file)
(let ((target (string-append "/etc/" file))
;; Canonicalize the file names to resolve any symlinks, to
;; ensure /etc/localtime points to a timezone data file in
;; the store containing the timezone name. This is done
;; for compatibility with software expecting this systemd
;; convention to be followed.
(source (canonicalize-path* (string-append etc "/" file))))
(source (string-append "/etc/static/" file)))
(rm-f target)
(cond ((string=? (basename target) "sudoers")
(begin
;; /etc/sudoers must be a regular file.
(copy-file source target)
;; XXX: dirty hack to meet sudo's expectations
(chmod target #o440)))
((string=? (basename target) "hosts")
;; /etc/hosts must be a regular file, as some software
;; like vpn-slice expect to be able to write to it.
(copy-file source target))
(else ;usual case
(symlink source target)))))
;; Things such as /etc/sudoers must be regular files, not
;; symlinks; furthermore, they could be modified behind our
;; back---e.g., with 'visudo'. Thus, make a copy instead of
;; symlinking them.
(if (file-is-directory? source)
(symlink source target)
(copy-file source target))
;; XXX: Dirty hack to meet sudo's expectations.
(when (string=? (basename target) "sudoers")
(chmod target #o440))))
(scandir etc (negate dot-or-dot-dot?)
;; The default is 'string-locale<?', but we don't have
;; it when run from the initrd's statically-linked
;; Guile.
+1 -1
View File
@@ -91,7 +91,7 @@ each retry."
((sleep*) delay) ;else wait and retry
(loop (+ 1 attempts)))
(error "maximum number of retry attempts reached"
(quote (begin body ...)) args))))))
(quote body ...) args))))))
;;;
+31 -60
View File
@@ -37,7 +37,6 @@
#:use-module (guix i18n)
#:use-module (rnrs io ports)
#:use-module (rnrs bytevectors)
#:use-module (ice-9 exceptions)
#:use-module (ice-9 match)
#:use-module (ice-9 rdelim)
#:use-module (ice-9 regex)
@@ -46,8 +45,6 @@
#:autoload (system repl repl) (start-repl)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:export (disk-partitions
partition-label-predicate
partition-uuid-predicate
@@ -68,9 +65,6 @@
cleanly-unmounted-ext2?
partition-lookup-error?
&partition-lookup-error
bind-mount
system*/tty
@@ -1188,10 +1182,6 @@ were found."
(define find-partition-by-luks-uuid
(find-partition luks-partition-uuid-predicate))
(define-condition-type &partition-lookup-error &condition
partition-lookup-error?
(spec partition-lookup-error-spec))
(define (canonicalize-device-spec spec)
"Return the device name corresponding to SPEC, which can be a <uuid>, a
@@ -1211,25 +1201,22 @@ file name or an nfs-root containing ':/')."
;; Some devices take a bit of time to appear, most notably USB
;; storage devices. Thus, wait for the device to appear.
(if (> count max-trials)
(raise (condition
(&partition-lookup-error
(spec (fmt spec)))))
(error "failed to resolve partition" (fmt spec))
(begin
(format #t "waiting for partition '~a' to appear...~%"
(fmt spec))
(sleep 1)
(loop (+ 1 count))))))))
(define (device-exists? device)
(and (file-exists? device)
device))
(match spec
((? string?)
(if (string-prefix? "/dev/" spec)
(if (or (string-contains spec ":/") ;nfs
(and (>= (string-length spec) 2)
(equal? (string-take spec 2) "//")) ;cifs
(string=? spec "none"))
spec ; do not resolve NFS / CIFS / tmpfs devices
;; Nothing to do, but wait until SPEC shows up.
(resolve device-exists? spec identity)
spec)) ; do not resolve NFS / CIFS / tmpfs devices
(resolve identity spec identity)))
((? file-system-label?)
;; Resolve the label.
(resolve find-partition-by-label
@@ -1332,14 +1319,6 @@ corresponds to the symbols listed in FLAGS."
(()
0))))
(define kind-and-args-exception?
(exception-predicate &exception-with-kind-and-args))
(define (system-error? exception)
"Return true if EXCEPTION is a Guile 'system-error exception."
(and (kind-and-args-exception? exception)
(eq? 'system-error (exception-kind exception))))
(define* (mount-file-system fs #:key (root "/root")
(check? (file-system-check? fs))
(skip-check-if-clean?
@@ -1360,8 +1339,8 @@ corresponds to the symbols listed in FLAGS."
(host-part (string-take source idx))
;; Strip [] from around host if present
(host (match (string-split host-part (string->char-set "[]"))
(("" h "") h)
((h) h)))
(("" h "") h)
((h) h)))
(inet-addr (host-to-ip host "nfs")))
;; Mounting an NFS file system requires passing the address
;; of the server in the addr= option
@@ -1447,37 +1426,26 @@ corresponds to the symbols listed in FLAGS."
"," 'prefix)
"")))))
(guard (c ((partition-lookup-error? c)
(format (current-error-port)
"could not find the partition: ~a~%"
(partition-lookup-error-spec c))
(unless (file-system-mount-may-fail? fs)
(raise c)))
((system-error? c)
(format (current-error-port)
"could not mount partition ~a: ~a~%"
(file-system-device fs)
(exception-message c))
(unless (file-system-mount-may-fail? fs)
(raise c))))
(let* ((type (file-system-type fs))
(source (canonicalize-device-spec (file-system-device fs)))
(target (string-append root "/"
(file-system-mount-point fs)))
(flags (logior (mount-flags->bit-mask (file-system-flags fs))
(let* ((type (file-system-type fs))
(source (canonicalize-device-spec (file-system-device fs)))
(target (string-append root "/"
(file-system-mount-point fs)))
(flags (logior (mount-flags->bit-mask (file-system-flags fs))
;; For bind mounts, preserve the original flags such
;; as MS_NOSUID, etc. Failing to do that, the
;; MS_REMOUNT call below fails with EPERM.
;; See <https://bugs.gnu.org/46292>
(if (memq 'bind-mount (file-system-flags fs))
(statfs-flags->mount-flags
(file-system-mount-flags (statfs source)))
0)))
(options (file-system-options fs)))
(when check?
(check-file-system source type (not skip-check-if-clean?) repair))
;; For bind mounts, preserve the original flags such
;; as MS_NOSUID, etc. Failing to do that, the
;; MS_REMOUNT call below fails with EPERM.
;; See <https://bugs.gnu.org/46292>
(if (memq 'bind-mount (file-system-flags fs))
(statfs-flags->mount-flags
(file-system-mount-flags (statfs source)))
0)))
(options (file-system-options fs)))
(when check?
(check-file-system source type (not skip-check-if-clean?) repair))
(catch 'system-error
(lambda ()
;; Create the mount point. Most of the time this is a directory, but
;; in the case of a bind mount, a regular file or socket may be
;; needed.
@@ -1506,7 +1474,10 @@ corresponds to the symbols listed in FLAGS."
(when (and (= MS_BIND (logand flags MS_BIND))
(= MS_RDONLY (logand flags MS_RDONLY)))
(let ((flags (logior MS_REMOUNT flags)))
(mount source target type flags options))))))
(mount source target type flags options))))
(lambda args
(or (file-system-mount-may-fail? fs)
(apply throw args))))))
(define %device-name-regexp "/dev/[hsvw]d([abcd])([0-9]*)")
(define %hurd-device-name-regexp "part:([0-9]*):device:[hw]d([0-9]*)")
+8 -72
View File
@@ -1,12 +1,12 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013-2020, 2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2022 Pavel Shlyak <p.shlyak@pantherx.org>
;;; Copyright © 2022, 2025 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
@@ -66,14 +66,12 @@
(number->string
(inexact->exact (ceiling (/ size 1024)))))
(define* (estimate-partition-size root #:optional (margin .25))
(define (estimate-partition-size root)
"Given the ROOT directory, evaluate and return its size. As this doesn't
take the partition metadata size into account, take a MARGIN. As this in
take the partition metadata size into account, take a 25% margin. As this in
turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(max (ash 1 20)
;; without inexact->exact, 'guess can result in an error like that:
;; "Wrong type (expecting exact integer): 7179941140.0".
(inexact->exact (round (* (+ 1. margin) (file-size root))))))
(* 1.25 (file-size root))))
(define* (make-btrfs-image partition target root)
"Handle the creation of BTRFS partition images. See
@@ -83,8 +81,7 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(label (partition-label partition))
(uuid (partition-uuid partition)))
(apply invoke
`("unshare" "--map-root-user" "mkfs.btrfs"
"-r" ,root
`("fakeroot" "mkfs.btrfs" "-r" ,root
"-L" ,label
,@(if uuid
`("-U" ,(uuid->string uuid))
@@ -119,43 +116,7 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(size-in-kib
(if (eq? size 'guess)
(estimate-partition-size root)
size)))))
;; 'mke2fs' does not create directory indexes by default, meaning that
;; directories have a limit of 65,000 sub-directories, which can be
;; problematic for the store. To avoid that, run 'e2fsck -D' to create
;; those directory indexes. See
;; <https://github.com/tytso/e2fsprogs/issues/257>.
(invoke "e2fsck" "-fDy" target)))
(define* (make-f2fs-image partition target root
#:key
(owner-uid 0)
(owner-gid 0))
"Handle the creation of F2FS partition images. See 'make-partition-image'."
(let ((size (partition-size partition))
(label (partition-label partition))
(uuid (partition-uuid partition))
(fs-options (partition-file-system-options partition)))
;; The mkfs.f2fs utility can't create files, so we need to create one
;; before running it.
(call-with-output-file target (const #t))
(truncate-file
target
(if (eq? size 'guess)
;; The F2FS filesystem has more overhead than other filesystems like
;; BTRFS and ext4.
(estimate-partition-size root .50)
size))
(apply invoke "fakeroot" "mkfs.f2fs"
"-l" label
"-R" (format #f "~a:~a" owner-uid owner-gid)
`(,@(if uuid
`("-U" ,(uuid->string uuid))
'())
,@fs-options
,target))
(invoke "fakeroot" "sload.f2fs" "-P" "-f" root target)))
size)))))))
(define* (make-vfat-image partition target root fs-bits)
"Handle the creation of VFAT partition images. See 'make-partition-image'."
@@ -183,23 +144,6 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(string-append "::" file))))
(scandir root))))
(define* (make-swap-image partition target)
"Make a swap partition of a certain size."
(let ((size (partition-size partition))
(label (partition-label partition))
(uuid (partition-uuid partition))
(fs-options (partition-file-system-options partition)))
(apply invoke "fakeroot" "mkswap"
"--pagesize" "4096"
"--endianness" "little"
"-L" label
"--file" target
"--size" (number->string size)
`(,@(if uuid
`("-U" ,(uuid->string uuid))
'())
,@fs-options))))
(define* (make-unformatted-image partition target)
"Make an unformatted partition of a certain size."
(let ((size (partition-size partition)))
@@ -218,14 +162,10 @@ ROOT directory to populate the image."
(make-btrfs-image partition target root))
((string-prefix? "ext" type)
(make-ext-image partition target root))
((string=? "f2fs" type)
(make-f2fs-image partition target root))
((or (string=? type "vfat") (string=? type "fat16"))
(make-vfat-image partition target root 16))
((string=? type "fat32")
(make-vfat-image partition target root 32))
((string=? "swap" type)
(make-swap-image partition target))
((string=? type "unformatted")
(make-unformatted-image partition target))
(else
@@ -429,11 +369,7 @@ GRUB configuration and OS-DRV as the stuff in it."
"-not" "-wholename" "/System/*"
"-not" "-name" "unicode.pf2"
"-not" "-name" "bzImage"
"-not" "-name" "zImage"
"-not" "-name" "Image"
"-not" "-name" "vmlinuz"
"-not" "-name" "*.gz" ; initrd
"-not" "-name" "*.zst" ; all man pages
"-not" "-name" "*.gz" ; initrd & all man pages
"-not" "-name" "*.png" ; includes grub-image.png
"-exec" "set_filter" "--zisofs"
"--")
+1 -72
View File
@@ -46,26 +46,7 @@
make-static-device-nodes
configure-qemu-networking
boot-system
linux-console
linux-console?
linux-console-device
linux-console-can-read?
linux-console-can-write?
linux-console-can-unblank?
linux-console-enabled?
linux-console-preferred?
linux-console-primary?
linux-console-printk?
linux-console-braille?
linux-console-safe-when-cpu-offline?
linux-console-major
linux-console-minor
linux-console-virtual?
read-linux-consoles))
boot-system))
;;; Commentary:
;;;
@@ -694,56 +675,4 @@ the root file system...\n" root-delay)
(start-repl)))))
#:on-error on-error))
(define-record-type <linux-console>
(make-linux-console device can-read? can-write? can-unblank?
enabled? preferred? primary? printk? braille?
safe-when-cpu-offline? major minor virtual?)
linux-console?
(device linux-console-device)
(can-read? linux-console-can-read?)
(can-write? linux-console-can-write?)
(can-unblank? linux-console-can-unblank?)
(enabled? linux-console-enabled?)
(preferred? linux-console-preferred?)
(primary? linux-console-primary?)
(printk? linux-console-printk?)
(braille? linux-console-braille?)
(safe-when-cpu-offline? linux-console-safe-when-cpu-offline?)
(major linux-console-major)
(minor linux-console-minor)
(virtual? linux-console-virtual?))
(define* (read-linux-consoles #:optional (consoles-file "/proc/consoles"))
"Parses CONSOLES-FILE and returns a list of <linux-console> records."
(if (not (file-exists? consoles-file))
'()
(with-input-from-file consoles-file
(lambda ()
(let ((line-regex (make-regexp
"^([^ ]+)[ ]+(.+)[ ]+([0-9]+):([0-9]+)$"))
(virt-regex (make-regexp "^tty[0-9]+$")))
(let loop ((line (read-line))
(results '()))
(cond
((eof-object? line)
(reverse results))
((regexp-exec line-regex line)
=> (lambda (m)
(let* ((dev (match:substring m 1))
(flags (match:substring m 2))
(major (string->number (match:substring m 3)))
(minor (string->number (match:substring m 4)))
(virtual? (regexp-exec virt-regex dev))
(has? (lambda (c)
(string-any (lambda (f) (char=? f c)) flags))))
(loop (read-line)
(cons (make-linux-console
dev
(has? #\R) (has? #\W) (has? #\U) (has? #\E)
(has? #\C) (has? #\B) (has? #\p) (has? #\b)
(has? #\a)
major minor virtual?)
results)))))
(else (loop (read-line) results)))))))))
;;; linux-boot.scm ends here
+2 -2
View File
@@ -107,8 +107,8 @@ QEMU monitor and to the guest's backdoor REPL."
(define extra-options
(list "-nographic"
"-monitor" (string-append "unix:" socket-directory "/monitor")
"-chardev" (string-append "socket,id=repl,path="
socket-directory "/repl")
"-chardev" (string-append "socket,id=repl,path=" socket-directory
"/repl,reconnect=1")
"-chardev" (string-append "socket,id=qga,server=on,wait=off,path="
socket-directory "/qemu-ga")
+7 -9
View File
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2024, 2026 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017, 2020, 2026 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2012-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2020, 2021 Mathieu Othacehe <othacehe@gnu.org>
@@ -232,18 +232,17 @@ SYSTEM."
(define* (guix-jobs store systems #:key source commit)
"Return a list of jobs for Guix itself."
(define instance
(checkout->channel-instance source
#:url (channel-url %default-guix-channel)
#:commit commit))
(define build
(primitive-load (string-append source "/build-aux/build-self.scm")))
(map
(lambda (system)
(let ((name (string->symbol
(string-append "guix." system)))
(drv (run-with-store store
(channel-instances->derivation (list instance)
#:system system))))
(build source #:version commit #:system system
#:pull-version 1
#:guile-version "2.2"))))
(derivation->job name drv)))
systems))
@@ -255,7 +254,6 @@ SYSTEM."
(define %guix-system-images
(list hurd-barebones-qcow2-image
hurd64-barebones-qcow2-image
pine64-barebones-raw-image
pinebook-pro-barebones-raw-image
novena-barebones-raw-image
-12
View File
@@ -3,7 +3,6 @@
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2022-2023, 2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2023 Carlo Zancanaro <carlo@zancanaro.id.au>
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -52,7 +51,6 @@
home-activation-service-type
home-run-on-change-service-type
home-provenance-service-type
home-gc-root-service-type
literal-string
literal-string?
@@ -759,16 +757,6 @@ environment, and its configuration file, when available.")))
(define sexp->home-provenance sexp->system-provenance)
(define home-provenance system-provenance)
;;;
;;; Garbage collector roots.
;;;
(define home-gc-root-service-type
(service-type
(inherit (system->home-service-type gc-root-service-type))
(default-value '())))
;;;
;;; Searching
+1 -1
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;; Copyright © 2025 Giacomo Leidi <goodoldpaul@autistici.org>
;;;
;;; This file is part of GNU Guix.
;;;
+1 -1
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;; Copyright © 2025 Giacomo Leidi <goodoldpaul@autistici.org>
;;;
;;; This file is part of GNU Guix.
;;;
+2 -97
View File
@@ -3,7 +3,6 @@
;;; Copyright © 2022 ( <paren@disroot.org>
;;; Copyright © 2023 conses <contact@conses.eu>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2025 dan <i@dan.games>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -26,7 +25,7 @@
#:use-module (gnu services configuration)
#:use-module (gnu services xorg)
#:autoload (gnu packages glib) (dbus)
#:autoload (gnu packages xdisorg) (darkman redshift unclutter)
#:autoload (gnu packages xdisorg) (redshift unclutter)
#:autoload (gnu packages xorg) (setxkbmap xmodmap)
#:use-module (guix records)
#:use-module (guix gexp)
@@ -47,11 +46,7 @@
home-xmodmap-configuration
home-xmodmap-service-type
home-startx-command-service-type
home-darkman-configuration
home-darkman-configuration?
home-darkman-service-type))
home-startx-command-service-type))
;;;
@@ -452,93 +447,3 @@ buttons under the Xorg display server via user-defined expressions.")))
(define-service-type-mapping
startx-command-service-type => home-startx-command-service-type)
;;;
;;; Darkman.
;;;
(define-maybe number)
(define (serialize-number field value)
(string-append (match field
('latitude "lat")
('longitude "lng")
(_ (symbol->string field)))
": " (number->string value) "\n"))
(define (serialize-boolean field value)
(string-append (match field
('use-geoclue "usegeoclue")
('dbus-server "dbusserver")
(_ "portal"))
": " (if value "true" "false") "\n"))
(define-configuration home-darkman-configuration
(darkman
(file-like darkman)
"The @code{darkman} package to use.")
(latitude
maybe-number
"Latitude, used at startup or when @code{use-geoclue} is @code{#f}. More than
one decimal point is generally not needed.")
(longitude
maybe-number
"Longitude, used at startup or when @code{use-geoclue} is @code{#f}. More than
one decimal point is generally not needed.")
(use-geoclue
(boolean #f)
"Whether to use a local geoclue instance to determine the current location.
Setting this to false without explicitly setting latitude and longtitude
disables automatic transitions entirely.")
(dbus-server
(boolean #t)
"Whether to expose the current mode via darkman's own D-Bus API.")
(portal
(boolean #t)
"Whether to expose the current mode via the XDG settings portal D-Bus API."))
(define (serialize-home-darkman-configuration config)
(mixed-text-file
"config.yaml"
(serialize-configuration config home-darkman-configuration-fields)))
(define (home-darkman-configuration-files config)
`(("darkman/config.yaml" ,(serialize-home-darkman-configuration config))))
(define (home-darkman-profile-service config)
(list (home-darkman-configuration-darkman config)))
(define (home-darkman-shepherd-service config)
(list
(shepherd-service
(provision '(darkman))
(requirement '(dbus))
(modules '((shepherd support))) ;for '%user-log-dir'
(start #~(make-forkexec-constructor
(list #$(file-append (home-darkman-configuration-darkman config)
"/bin/darkman")
"run")
#:log-file
(string-append %user-log-dir "/darkman.log")))
(stop #~(make-kill-destructor)))))
(define home-darkman-service-type
(service-type
(name 'home-darkman)
(extensions
(list (service-extension home-shepherd-service-type
home-darkman-shepherd-service)
(service-extension home-xdg-configuration-files-service-type
home-darkman-configuration-files)
(service-extension home-profile-service-type
home-darkman-profile-service)))
(default-value (home-darkman-configuration))
(description "Run the @code{darkman} daemon, which will invoke scripts in
$XDG_DATA_DIRS/dark-mode.d/ when sundown, and invoke scripts in
$XDG_DATA_DIRS/light-mode.d/ when sunrise.")))
+8 -6
View File
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2024, 2026 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;; Copyright © 2024 Giacomo Leidi <goodoldpaul@autistici.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -45,9 +45,7 @@
(define %home-dotfiles-excluded
'(".*~"
".*\\.swp"
;; This first / is safe until regexp-exec in directory-contents
;; is passed an absolute file name.
"/\\.git/.*"
"\\.git"
"\\.gitignore"))
(define %home-dotfiles-layouts
@@ -62,7 +60,10 @@
or 'stow, but ~a was found.")
value))))
(define-maybe/no-serialization list-of-strings)
(define list-of-strings?
(list-of string?))
(define-maybe list-of-strings)
(define-configuration/no-serialization home-dotfiles-configuration
(source-directory
@@ -137,7 +138,8 @@ value, excluding files that match any of the patterns configured."
(define (filter-files directory)
(find-files directory
(lambda (file stat)
(not (regexp-exec exclusion-rx file)))))
(not (regexp-exec exclusion-rx
(basename file))))))
(if (and stow? packages (maybe-value-set? packages))
(append-map filter-files
(map (lambda (pkg)
+1 -1
View File
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2023 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2023 Andrew Patterson <andrewpatt7@gmail.com>
;;;
;;; This file is part of GNU Guix.
-104
View File
@@ -1,104 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;;
;;; 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 (gnu home services gnome)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (gnu packages admin)
#:use-module (gnu packages gnome)
#:use-module (gnu system accounts)
#:use-module (gnu services configuration)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:export (gcr-ssh-agent-configuration
gcr-ssh-agent-configuration?
gcr-ssh-agent-configuration-fields
gcr-ssh-agent-configuration-package
gcr-ssh-agent-configuration-log-file
home-gcr-ssh-agent-log-file
home-gcr-ssh-agent-shepherd-service
home-gcr-ssh-agent-service-type))
(define-maybe/no-serialization string)
(define-configuration/no-serialization gcr-ssh-agent-configuration
(package
(package gcr)
"The @code{gcr} package to use.")
(log-file
(maybe-string)
"Where the service will write its logs. If unset, it defaults to
@file{$HOME/.local/state/shepherd/gcr-ssh-agent.log}."))
(define (home-gcr-ssh-agent-log-file config)
(define maybe-log-file (gcr-ssh-agent-configuration-log-file config))
(if (maybe-value-set? maybe-log-file)
maybe-log-file
#~(string-append %user-log-dir "/gcr-ssh-agent.log")))
(define (home-gcr-ssh-agent-shepherd-service config)
(let ((package
(gcr-ssh-agent-configuration-package config))
(log-file (home-gcr-ssh-agent-log-file config)))
(list
(shepherd-service
(provision '(gcr-ssh-agent ssh-agent))
(modules
;;for '%user-log-dir' and '%user-runtime-dir'
'((shepherd support)))
(start
#~(let* ((socket-directory
(string-append %user-runtime-dir
"/gcr"))
(socket-endpoint
(endpoint
(make-socket-address
AF_UNIX
(string-append socket-directory "/ssh"))
#:name "ssh"
#:socket-directory-permissions #o700)))
(make-systemd-constructor
(list #$(file-append package
"/libexec/gcr-ssh-agent")
"-d" socket-directory)
(list socket-endpoint)
;; With #:lazy-start #t the first ssh connection
;; hangs indefinitely.
#:lazy-start? #f
#:log-file #$log-file)))
(stop #~(make-systemd-destructor))))))
(define (home-gcr-ssh-agent-environment-variables config)
`(("SSH_AUTH_SOCK" . "${XDG_RUNTIME_DIR}/gcr/ssh")))
(define home-gcr-ssh-agent-service-type
(service-type
(name 'home-gcr-ssh-agent)
(extensions
(list (service-extension
home-shepherd-service-type
home-gcr-ssh-agent-shepherd-service)
(service-extension home-environment-variables-service-type
home-gcr-ssh-agent-environment-variables)))
(default-value (gcr-ssh-agent-configuration))
(description
"Provides @code{gcr-ssh-agent} Shepherd service and installs
@code{gcr} in the system profile.")))
+1 -3
View File
@@ -23,7 +23,6 @@
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnome)
#:use-module (gnu packages xorg)
#:use-module (gnu packages wm)
#:use-module (gnu services)
#:use-module (gnu services shepherd)
@@ -72,8 +71,7 @@ environment variables set for a Wayland desktop session."
niri
xdg-desktop-portal
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
xwayland-satellite)))))
xdg-desktop-portal-gtk)))))
(description "Install and configure Niri, a scrollable tiling Wayland
compositor. This service starts Niri as a user-level desktop session with
proper environment variables set for Wayland compatibility. It ensures Niri
-221
View File
@@ -1,221 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Lilah Tascheter <lilah@lunabee.space>
;;;
;;; 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 (gnu home services secrets)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (gnu packages password-utils)
#:use-module (gnu services)
#:use-module (gnu services configuration)
#:use-module (gnu services shepherd)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
#:export (wrap-himitsu-prompter
home-himitsu-configuration
home-himitsu-service-type
home-himitsu-ssh-configuration
home-himitsu-ssh-service-type
home-himitsu-secret-service-configuration
home-himitsu-secret-service-type))
;;
;; himitsu
;;
(define (wrap-himitsu-prompter prompter)
"Wraps a prompter to autodetect DISPLAY and WAYLAND_DISPLAY, necessary since
shepherd typically starts before a graphical session."
(program-file "himitsu-wrapped-prompter"
#~(begin (use-modules (ice-9 ftw) (ice-9 match) (srfi srfi-26))
(unless (or (getenv "DISPLAY") (getenv "WAYLAND_DISPLAY"))
(for-each (lambda (dir pat cont)
(match (scandir dir (cut regexp-exec pat <>) string<?)
((file . _) (cont file)) (_ #f)))
(list "/tmp/.X11-unix" (or (getenv "XDG_RUNTIME_DIR")
(string-append "/run/user/" (getuid))))
(map make-regexp '("^X[0-9]+$" "^wayland-[0-9]+$"))
(list (lambda (f)
(setenv "DISPLAY" (string-append ":" (string-drop f 1))))
(cut setenv "WAYLAND_DISPLAY" <>))))
(apply execl #$prompter #$prompter (cdr (command-line))))))
(define-maybe string (prefix himitsu-))
(define (string-or-gexp? s)
(or (string? s) (gexp? s)))
(define list-of-strings-or-gexps? (list-of string-or-gexp?))
(define (himitsu-serialize-string label val)
#~(format #f "~a=~a~%" '#$label #$val))
(define himitsu-serialize-file-like himitsu-serialize-string)
(define (himitsu-serialize-list-of-strings-or-gexps label vals)
#~(string-join (list #$@vals) "\n" 'suffix))
(define-configuration home-himitsu-configuration
(package (file-like himitsu) "himitsu package to use." empty-serializer)
(notify-reuse maybe-string "Command run to notify the user upon use of a
secret it was already authorized to use. Limited shell expansion available.")
(prompter (file-like (wrap-himitsu-prompter
(file-append hiprompt-gtk "/bin/hiprompt-gtk")))
"himitsu prompter to use to request user authorization for secret access.")
(extra-options (list-of-strings-or-gexps '()) "A list of extra options, one
per line, to put verbatim into the config file.")
(prefix himitsu-))
(define (himitsu-serialize config)
(mixed-text-file "himitsu.ini" "[himitsud]\n"
(serialize-configuration config home-himitsu-configuration-fields)))
(define (himitsu-shepherd-service config)
(define start
#~(lambda _
(let ((data (or (getenv "XDG_DATA_HOME")
(string-append user-homedir "/.local/share"))))
(if (directory-exists? (string-append data "/himitsu"))
(fork+exec-command
(list #$(let ((pkg (home-himitsu-configuration-package config)))
(file-append pkg "/bin/himitsud"))
"-C" #$(himitsu-serialize config))
#:log-file (string-append %user-log-dir "/himitsu.log"))
(error "Himitsu store must exist before the service can run! Try \
running 'himitsu-store -i' first?")))))
(list (shepherd-service
(documentation "Run the Himitsu secret service manager.")
(provision '(himitsud))
(modules (cons* '(shepherd support) %default-modules))
(start start)
(stop #~(make-kill-destructor)))))
;; we need to install the file or else himitsu-store will gen it
(define (himitsu-xdg-configuration-service config)
`(("himitsu/config.ini" ,(himitsu-serialize config))))
(define home-himitsu-service-type
(service-type
(name 'himitsu)
(extensions
(list (service-extension home-shepherd-service-type
himitsu-shepherd-service)
(service-extension home-xdg-configuration-files-service-type
himitsu-xdg-configuration-service)
(service-extension home-profile-service-type
(const (list himitsu)))))
(compose concatenate)
(extend (lambda (config exts)
(let ((opts (home-himitsu-configuration-extra-options config)))
(home-himitsu-configuration
(inherit config)
(extra-options (append exts opts))))))
(default-value (home-himitsu-configuration))
(description "Run the Himitsu secret storage manager upon login. You
should create the Himitsu database in advance.")))
;;
;; himitsu-ssh
;;
(define (remember-option? opt)
(or (number? opt) (memq opt '(session skip refuse))))
(define list-of-remember-options? (list-of remember-option?))
(define (himitsu-serialize-list-of-remember-options label val)
(himitsu-serialize-string label
(string-join (map (lambda (x) (cond ((number? x) (number->string x))
((symbol? x) (symbol->string x))))
val)
",")))
(define-configuration home-himitsu-ssh-configuration
(package (file-like himitsu-ssh) "himitsu-ssh package to use."
empty-serializer)
(persist (list-of-remember-options '(session 300 refuse)) "List of options
given when prompting to allow himitsu-ssh to see your keys. The option chosen
decides how long himitsu-ssh has this access. Options can be either 'session,
'refuse, 'skip, or a timeout in seconds. 'session means until the daemon
closes, 'refuse to decline and never ask again, and 'skip means to ask again
next use.")
(disclose (list-of-remember-options '(skip session 300)) "List of options
given when prompting to allow himitsu-ssh use of your keys. The format is the
same has persist.")
(prefix himitsu-))
(define (himitsu-ssh-shepherd-service config)
(let* ((package (home-himitsu-ssh-configuration-package config))
(binary (file-append package "/bin/hissh-agent")))
(list (shepherd-service
(documentation "Start the Himitsu ssh-agent implementation.")
(provision '(himitsu-ssh ssh-agent))
(requirement '(himitsud))
(start #~(make-forkexec-constructor (list #$binary)))
(stop #~(make-kill-destructor))))))
(define (himitsu-ssh-himitsu.ini config)
(list "[ssh.remember]"
(serialize-configuration config home-himitsu-ssh-configuration-fields)))
(define (himitsu-ssh-environment-variables _)
'(("SSH_AUTH_SOCK" . "${XDG_RUNTIME_DIR:-/run/user/$UID}/hissh-agent")))
(define home-himitsu-ssh-service-type
(service-type
(name 'himitsu-ssh)
(extensions (list (service-extension home-shepherd-service-type
himitsu-ssh-shepherd-service)
(service-extension home-himitsu-service-type
himitsu-ssh-himitsu.ini)
(service-extension home-environment-variables-service-type
himitsu-ssh-environment-variables)
(service-extension home-profile-service-type
(const (list himitsu-ssh)))))
(default-value (home-himitsu-ssh-configuration))
(description "Add support for ssh to store keys in Himitsu.")))
;;
;; himitsu-secret-service
;;
(define-configuration home-himitsu-secret-service-configuration
(package (file-like himitsu-secret-service) "himitsu-secret-service package to
use." empty-serializer)
(prefix himitsu-))
(define (himitsu-secret-service-shepherd-service config)
(let* ((package (home-himitsu-secret-service-configuration-package config))
(binary (file-append package "/bin/hisecrets-agent")))
(list (shepherd-service
(documentation "Start the Himitsu secret-service implementation.")
(provision '(himitsu-secret-service secret-service))
(requirement '(himitsud dbus))
(start #~(make-forkexec-constructor (list #$binary)))
(stop #~(make-kill-destructor))))))
(define home-himitsu-secret-service-type
(service-type
(name 'himitsu-secret-service)
(extensions
(list (service-extension home-shepherd-service-type
himitsu-secret-service-shepherd-service)))
(default-value (home-himitsu-secret-service-configuration))
(description "Add support to Himitsu for the freedesktop.org
secret-service protocol.")))
-6
View File
@@ -95,10 +95,6 @@ PulseAudio clients to use PipeWire transparently.")
(list (home-pipewire-pulseaudio-shepherd-service config))
'())))
(define (home-pipewire-profile-service config)
(list (home-pipewire-configuration-pipewire config)
(home-pipewire-configuration-wireplumber config)))
(define (home-pipewire-asoundrc config)
(match-record config <home-pipewire-configuration>
(pipewire extra-content)
@@ -130,8 +126,6 @@ PulseAudio clients to use PipeWire transparently.")
(extensions
(list (service-extension home-shepherd-service-type
home-pipewire-shepherd-services)
(service-extension home-profile-service-type
home-pipewire-profile-service)
(service-extension home-xdg-configuration-files-service-type
home-pipewire-xdg-configuration)))
(description
-8
View File
@@ -3,7 +3,6 @@
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2026 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -312,8 +311,6 @@ through before connecting to the server.")
(default #f))
(known-hosts home-openssh-configuration-known-hosts ;unspec | list of file-like
(default *unspecified*))
(known-hosts2 home-openssh-configuration-known-hosts2 ;unspec | list of file-like
(default *unspecified*))
(hosts home-openssh-configuration-hosts ;list of <openssh-host>
(default '()))
(add-keys-to-agent home-openssh-configuration-add-keys-to-agent ;string with limited values
@@ -379,7 +376,6 @@ inserted after each of them."
(let* ((ssh-config (plain-file "ssh.conf"
(openssh-configuration->string config)))
(known-hosts (home-openssh-configuration-known-hosts config))
(known-hosts2 (home-openssh-configuration-known-hosts2 config))
(authorized-keys (home-openssh-configuration-authorized-keys config))
(authorized-keys (and
authorized-keys
@@ -391,10 +387,6 @@ inserted after each of them."
'()
`((".ssh/known_hosts"
,(file-join "known_hosts" known-hosts "\n"))))
,@(if (unspecified? known-hosts2)
'()
`((".ssh/known_hosts2"
,(file-join "known_hosts2" known-hosts2 "\n"))))
(".ssh/config" ,ssh-config))))
(define openssh-activation
+20 -6
View File
@@ -102,6 +102,17 @@
;; Convenient value to inherit for extensions.
%empty-sway-configuration))
;; Helper function.
(define (flatmap f l)
(let loop ((lst (reverse l)) (acc '()))
(match lst
(() acc)
((head . tail)
(let* ((h (f head))
(acc (append h acc)))
(loop tail acc))))))
;;;
;;; Definition of configurations.
;;;
@@ -118,6 +129,9 @@
(define (list-of-string-ish? lst)
(every string-ish? lst))
(define (list-of-packages? lst)
(every package? lst))
(define (bar-position? p)
(member p '(top bottom)))
@@ -882,13 +896,13 @@
;; Outputs.
#$@(with-heading "Outputs."
(append-map serialize-output
(sway-configuration-outputs conf)))
(flatmap serialize-output
(sway-configuration-outputs conf)))
;; Inputs.
#$@(with-heading "Inputs."
(append-map serialize-input
(sway-configuration-inputs conf)))
(flatmap serialize-input
(sway-configuration-inputs conf)))
;; Bar configuration:
;; If the bar is unset, do not include anything.
@@ -908,8 +922,8 @@
;; Modes.
#$@(with-heading "Modes."
(append-map serialize-mode
(sway-configuration-modes conf)))
(flatmap serialize-mode
(sway-configuration-modes conf)))
;; Startup-Programs.
#$@(with-heading
+1 -12
View File
@@ -103,21 +103,10 @@ subdirectory from XDG_CONFIG_HOME to generate a target path."
(define backup
(string-append backup-directory "/" (preprocess-file file)))
(define (copy-file* oldfile newfile)
"Like 'copy-file', but also copies dangling symlinks."
(catch 'system-error
(lambda ()
(copy-file oldfile newfile))
(lambda args
(if (and (eq? 'symlink (stat:type (lstat oldfile)))
(= ENOENT (system-error-errno args)))
(symlink (readlink oldfile) newfile)
(apply throw args)))))
(mkdir-p backup-directory)
(format #t (G_ "Backing up ~a...") (target-file file))
(mkdir-p (dirname backup))
(copy-file* (target-file file) backup)
(copy-file (target-file file) backup)
(delete-file (target-file file))
(display (G_ " done\n")))
+4 -5
View File
@@ -108,11 +108,10 @@ like sockets.")
@file{/var/log}, but for user. It is not a part of XDG Base Directory
Specification, but helps to make implementation of home services more
consistent."
(serializer
(lambda (field-name val)
(when (maybe-value-set? val)
(warn-about-deprecation field-name #f #:replacement 'state-home))
(serialize-path field-name val))))
(lambda (field-name val)
(when (maybe-value-set? val)
(warn-about-deprecation field-name #f #:replacement 'state-home))
(serialize-path field-name val)))
(state-home
(path "$HOME/.local/state")
"Base directory for programs to store state data that should persist
+7 -6
View File
@@ -367,13 +367,14 @@ purposes."
'unknown)
((channels ...)
(map (lambda (channel)
;; NOTE: URL is not logged to synchronize the derivations
;; coming out of pre-inst-env, time-machine and Cuirass
;; for generating release artifacts.
`(channel ,(channel-name channel) ,(channel-commit channel)))
(let* ((uri (string->uri (channel-url channel)))
(url (if (or (not uri) (eq? 'file (uri-scheme uri)))
"local checkout"
(channel-url channel))))
`(channel ,(channel-name channel) ,url ,(channel-commit channel))))
channels))))
(define* (installer-program #:key dry-run? (guix-for-installer (current-guix)))
(define* (installer-program #:key dry-run?)
"Return a file-like object that runs the given INSTALLER."
(define init-gettext
;; Initialize gettext support, so that installer messages can be
@@ -422,7 +423,7 @@ purposes."
guile-gnutls
guile-zlib ;for (gnu build linux-modules)
guile-zstd ;for (gnu build linux-modules)
guix-for-installer)
(current-guix))
(with-imported-modules `(,@(source-module-closure
`(,@modules
(gnu services herd)
+3 -5
View File
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2024,2026 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -168,10 +168,8 @@ or #f. Return #t on success and #f on failure."
(const '())))
(install-command (append `( "guix" "system" "init"
"--fallback"
,@(if (%current-target-system)
`(,(string-append
"--target="
(%current-target-system)))
,@(if (target-hurd?)
'("--target=i586-pc-gnu")
'()))
options
(list (%installer-configuration-file)
+2 -3
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2024, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -27,8 +27,7 @@
str)
(define (kernel->configuration kernel dry-run?)
(if (and (string? kernel)
(string-prefix? "Hurd" kernel))
(if (equal? kernel "Hurd")
`((kernel %hurd-default-operating-system-kernel)
,(comment (G_ ";; \"noide\" disables the gnumach IDE driver, enabling rumpdisk.\n"))
(kernel-arguments '("noide"))
+8 -33
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2024, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -23,48 +23,23 @@
#:export (run-kernel-page))
(define (run-kernel-page)
;; TRANSLATORS: "Hurd" is a proper noun and must not be translated.
(let* ((hurd-x86 (G_ "Hurd 32-bit (experimental)"))
(hurd-x86_64 (G_ "Hurd 64-bit (highly experimental!)"))
(linux-libre "Linux Libre")
(kernels (parameterize ((%current-target-system #f))
`(,linux-libre
,@(cond ((target-x86-64?)
(list hurd-x86 hurd-x86_64))
((target-x86?)
(list hurd-x86))
(else
'())))))
(default (cond ((equal? (%current-target-system) "i586-pc-gnu")
hurd-x86)
((equal? (%current-target-system) "x86_64-pc-gnu")
hurd-x86_64)
(else
linux-libre)))
(let* ((kernels `(,@(if (target-x86?) '("Hurd") '())
"Linux Libre"))
(result
(run-listbox-selection-page
#:title (G_ "Kernel")
#:info-text
;; TRANSLATORS: "Hurd" is a proper noun and must not be translated.
;; TRANSLATORS: "Linux Libre" is a literal and must not be translated.
(G_ "Please select a kernel. When in doubt, choose \"Linux Libre\".
The Hurd is offered as a technology preview and development aid; many packages \
are not yet available in Guix, such as a desktop environment or even a \
windowing system (X, Wayland).")
are not yet available in Guix, such as a desktop environment or even a windowing \
system (X, Wayland).")
#:listbox-items kernels
#:listbox-item->text identity
#:listbox-default-item default
#:sort-listbox-items? #f ;keep Linux first
#:listbox-default-item "Linux Libre"
#:button-text (G_ "Back")
#:button-callback-procedure
(lambda _
(abort-to-prompt 'installer-step 'abort)))))
(let ((target (cond ((equal? result hurd-x86)
"i586-pc-gnu")
((equal? result hurd-x86_64)
"x86_64-pc-gnu")
(else
#f))))
(%current-target-system target))
(when (equal? result "Hurd")
(%current-target-system "i586-pc-gnu"))
result))
+8 -16
View File
@@ -27,7 +27,6 @@
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (ice-9 match)
@@ -113,24 +112,20 @@ network devices were found. Do you want to continue anyway?"))
full-value
(+ value 1)))))))
(define* (url-alive? url #:key (ensure-ok-status? #f))
(define (url-alive? url)
(false-if-exception
(let ((response (http-request url)))
(or (not ensure-ok-status?)
(= (response-code response)
200)))))
(begin
(http-request url)
#t)))
(define* (common-urls-alive? urls #:key (ensure-ok-status? #f))
"Return #t if at least some of the given URLS are alive,
meaning that they do respond to a HTTP request. If ENSURE-OK-STATUS? is
#t, return #t only if the code is 200."
(define (common-urls-alive? urls)
(dynamic-wind
(lambda ()
(sigaction SIGALRM
(lambda _ #f))
(alarm 3))
(lambda ()
(any (cut url-alive? <> #:ensure-ok-status? ensure-ok-status?)
(any url-alive?
urls))
(lambda ()
(alarm 0))))
@@ -145,9 +140,7 @@ FULL-VALUE tentatives, spaced by 1 second."
"https://bordeaux.guix.gnu.org"
"https://ci.guix.gnu.org"
"https://guix.gnu.org"
"https://gnu.org")
;; Any HTTP response means the users is online.
#:ensure-ok-status? #f))
"https://gnu.org")))
(file-exists? "/tmp/installer-assume-online")))
(let* ((full-value 5))
@@ -180,8 +173,7 @@ Do you want to continue anyway?"))
(common-urls-alive?
(list
"https://bordeaux.guix.gnu.org/nix-cache-info"
"https://ci.guix.gnu.org/nix-cache-info")
#:ensure-ok-status? #t)))
"https://ci.guix.gnu.org/nix-cache-info"))))
(let* ((full-value 5))
(run-scale-page
+13 -16
View File
@@ -108,23 +108,20 @@ all data on disk will be lost, are you sure you want to proceed?") item)
(define (run-label-page button-text button-callback)
"Run a page asking the user to select a partition table label."
;; Force the GPT label if UEFI is supported.
(cond ((efi-installation?)
((run-label-confirmation-page button-callback) "gpt"))
;; Force the MSDOS label on Hurd.
((target-hurd?)
((run-label-confirmation-page button-callback) "msdos"))
(else (run-listbox-selection-page
#:info-text (G_ "Select a new partition table type. \
;; Force the GPT label if UEFI is supported.
(if (efi-installation?)
((run-label-confirmation-page button-callback) "gpt")
(run-listbox-selection-page
#:info-text (G_ "Select a new partition table type. \
Be careful, all data on the disk will be lost.")
#:title (G_ "Partition table")
#:listbox-items '("msdos" "gpt")
#:listbox-default-item (if (target-hurd?) "msdos" "gpt")
#:listbox-item->text identity
#:listbox-callback-procedure
(run-label-confirmation-page button-callback)
#:button-text button-text
#:button-callback-procedure button-callback))))
#:title (G_ "Partition table")
#:listbox-items '("msdos" "gpt")
#:listbox-default-item (if (target-hurd?) "msdos" "gpt")
#:listbox-item->text identity
#:listbox-callback-procedure
(run-label-confirmation-page button-callback)
#:button-text button-text
#:button-callback-procedure button-callback)))
(define (run-type-page partition)
"Run a page asking the user to select a partition type."
+5 -13
View File
@@ -36,9 +36,11 @@
environments."
(let ((items (filter desktop-system-service? (%system-services))))
(run-checkbox-tree-page
#:info-text (G_ "Please select the desktop environment(s) you wish to \
#:info-text (if (target-hurd?)
(G_ "Currently, none of these is available for the Hurd.")
(G_ "Please select the desktop environment(s) you wish to \
install. If you select multiple desktop environments here, you will be able \
to choose from them later when you log in.")
to choose from them later when you log in."))
#:title (G_ "Desktop environment")
#:items items
#:selection (map system-service-recommended? items)
@@ -48,16 +50,6 @@ to choose from them later when you log in.")
(lambda ()
(abort-to-prompt 'installer-step 'abort)))))
;; FIXME: all platforms should support %desktop-services and some of the
;; offered desktop environments. Instead of globally disabling the desktop
;; page, disable only non-working desktop environments.
(define (run-desktop-environments-cbt-page/maybe)
"Run page with desktop environments, as long as the user is on
a system that supports them."
(if (or (target-hurd?) (target-x86-32?))
'()
(run-desktop-environments-cbt-page)))
(define (run-networking-cbt-page)
"Run a page allowing the user to select networking services."
(let ((items (filter (lambda (service)
@@ -139,7 +131,7 @@ client may be enough for a server.")
(abort-to-prompt 'installer-step 'abort)))))
(define (run-services-page)
(let ((desktop (run-desktop-environments-cbt-page/maybe)))
(let ((desktop (run-desktop-environments-cbt-page)))
;; When the user did not select any desktop services, and thus didn't get
;; '%desktop-services', offer network management services.
(append desktop
+3 -4
View File
@@ -233,12 +233,11 @@ force a wifi scan."
(lambda ()
(when (eq? exit-reason 'exit-component)
(cond
((components=? argument exit-button)
(abort-to-prompt 'installer-step 'abort))
((or (components=? argument scan-button)
(null? service-items))
((components=? argument scan-button)
(run-wifi-scan-page)
(run-wifi-page))
((components=? argument exit-button)
(abort-to-prompt 'installer-step 'abort))
((components=? argument listbox)
(let ((result (connect-wifi-service listbox service-items)))
(unless result
+36 -38
View File
@@ -195,21 +195,8 @@
(define (system-services->configuration services)
"Return the configuration field for SERVICES."
(let* ((snippets (append-map system-service-snippet services))
(packages (append-map system-service-packages services))
(desktop? (find desktop-system-service? services))
(packages
(append (append-map system-service-packages services)
(if desktop?
(cons (comment (G_ ";; Fonts to cover all languages.\n"))
(map (lambda (package)
`(specification->package ,package))
'("font-google-noto"
"font-google-noto-emoji"
;; FIXME: Selection of fonts depends on the
;; locale. Use a monospaced CJK font with
;; latin letters before there's proper fix.
;; See <https://codeberg.org/guix/guix/pulls/5654#issuecomment-9928509>
"font-sarasa-gothic")))
'())))
(base (if desktop?
(if (target-hurd?)
'%desktop-services/hurd
@@ -243,33 +230,44 @@
;; under their own account: use 'guix search KEYWORD' to search
;; for packages and 'guix install PACKAGE' to install a package.\n")))))
`(,@(if (null? packages)
(if (target-hurd?)
(if (null? snippets)
`(,@(if (null? packages)
(if (target-hurd?)
`(,@package-heading
(packages %base-packages/hurd))
'())
`(,@package-heading
(packages %base-packages/hurd))
'())
`(,@package-heading
(packages (append (list ,@packages)
,(if (target-hurd?)
'%base-packages/hurd
'%base-packages)))))
(packages (append (list ,@packages)
,(if (target-hurd?)
'%base-packages/hurd
'%base-packages)))))
,@service-heading
,(if (and (null? snippets)
(not desktop?))
`(services ,services)
`(services
(append (list ,@snippets
,@service-heading
(services ,services))
`(,@(if (null? packages)
(if (target-hurd?)
`(,@package-heading
(packages %base-packages/hurd))
'())
`(,@package-heading
(packages (append (list ,@packages)
,(if (target-hurd?)
'%base-packages/hurd
'%base-packages)))))
,@(if desktop?
;; XXX: Assume 'keyboard-layout' is in scope.
`((set-xorg-configuration
(xorg-configuration
(keyboard-layout keyboard-layout))))
'()))
,@service-heading
(services (append (list ,@snippets
,(vertical-space 1)
,(comment (G_ "\
,@(if desktop?
;; XXX: Assume 'keyboard-layout' is in
;; scope.
`((set-xorg-configuration
(xorg-configuration
(keyboard-layout keyboard-layout))))
'()))
,(vertical-space 1)
,(comment (G_ "\
;; This is the default list of services we
;; are appending to.\n"))
,services))))))
,services))))))
+99 -220
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -651,7 +651,7 @@ fdisk -l /dev/sda"
(format #f "#!/usr/bin/env bash
set -eo pipefail
apt-get update
apt-get install cloud-initramfs-growroot uidmap --assume-yes"))
apt-get install cloud-initramfs-growroot --assume-yes"))
(format #t "successfully installed rescue system packages on '~a'\n" name)))
(define (hetzner-machine-delete machine server)
+74 -38
View File
@@ -32,7 +32,6 @@
#:use-module (guix git-download)
#:use-module (guix build-system gnu)
#:use-module (guix build-system glib-or-gtk)
#:use-module (guix build-system pyproject)
#:use-module (guix build-system meson)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
@@ -78,43 +77,36 @@
(build-system glib-or-gtk-build-system)
(outputs '("out" "bin"))
(arguments
(list
#:tests? #f ; Tests require drivers
#:configure-flags
#~(list "CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types"
"--disable-static"
"--enable-fake")
#:phases
#~(modify-phases %standard-phases
#$@(if (this-package-native-input "config")
#~((add-after 'unpack 'update-config-scripts
(lambda* (#:key native-inputs inputs #:allow-other-keys)
(for-each
(lambda (dir)
(for-each
(lambda (file)
(install-file
(search-input-file
(or native-inputs inputs)
(string-append "/bin/" file)) dir))
(list "config.guess" "config.sub")))
(list "." "libltdl")))))
(list)))))
`(#:tests? #f ; Tests require drivers
#:configure-flags
(list "CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types"
"--disable-static"
"--enable-fake")
#:phases
(modify-phases %standard-phases
,@(if (this-package-native-input "config")
`((add-after 'unpack 'update-config-scripts
(lambda* (#:key native-inputs inputs #:allow-other-keys)
(for-each
(lambda (dir)
(for-each (lambda (file)
(install-file
(search-input-file
(or native-inputs inputs)
(string-append "/bin/" file)) dir))
'("config.guess" "config.sub")))
'("." "libltdl")))))
'()))))
(native-inputs
(append
(if (or (target-aarch64?)
(target-ppc64le?)
(target-riscv64?))
(list config)
(list))
(list latex2html
pkg-config
python-wrapper
swig-4.0)))
(if (or (target-aarch64?)
(target-ppc64le?)
(target-riscv64?))
(list config)
'())
(list latex2html pkg-config python-wrapper swig)))
(inputs
(list glib
gtk+-2
libusb-compat))
(list glib gtk+-2 libusb-compat))
(synopsis "Portable Braille Library")
(description "Libbraille is a library to easily access Braille displays and
terminals.")
@@ -160,11 +152,11 @@ terminals.")
"PYTHON_ROOT=/"
(string-append "TCL_DIR=" #$output "/lib")
"INSTALL_WRITABLE_DIRECTORY=no-thanks")
#:imported-modules (append %glib-or-gtk-build-system-modules
%pyproject-build-system-modules)
#:imported-modules `((guix build python-build-system)
,@%glib-or-gtk-build-system-modules)
#:modules '((guix build utils)
(guix build glib-or-gtk-build-system)
((guix build pyproject-build-system) #:prefix python:))
((guix build python-build-system) #:prefix python:))
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-errors
@@ -236,6 +228,50 @@ incorporated.")
(home-page "https://brltty.app/")
(license license:lgpl2.1+)))
(define-public florence
(package
(name "florence")
(version "0.6.3")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/florence/florence/" version
"/florence-" version ".tar.bz2"))
(sha256
(base32
"07h9qm22krlwayhzvc391lr23vicw81s48g7rirvx1fj0zyr4aa2"))))
(build-system glib-or-gtk-build-system)
(arguments
`(#:configure-flags (list "--with-xtst"
"--without-docs"
"--with-notification")))
(inputs
(list libxml2
libglade
(librsvg-for-system)
gstreamer
cairo
gtk+
libxtst
libxcomposite
libnotify))
(native-inputs
(list gettext-minimal intltool pkg-config))
(home-page "https://florence.sourceforge.net/")
(synopsis "Extensible, scalable virtual keyboard for X11")
(description
"Florence is an extensible scalable virtual keyboard for X11.
It is useful for people who can't use a real hardware keyboard (for
example for people with disabilities), but you must be able to use
a pointing device (as a mouse, a trackball, a touchscreen or opengazer).
Florence stays out of your way when you don't need it: it appears on the
screen only when you need it. A timer-based auto-click input method is
available to help to click.")
;; The documentation is under FDL1.2, but we do not install the
;; documentation.
(license license:gpl2+)))
(define-public footswitch
(let ((commit "e455d6752221b9e9c3818cc304c873b9c2792490")
(revision "0"))
+24 -22
View File
@@ -30,13 +30,10 @@
#:use-module (gnu packages check)
#:use-module (gnu packages gettext)
#:use-module (gnu packages perl)
#:use-module (gnu packages python-build)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (gnu packages)
#:use-module (guix build-system gnu)
#:use-module (guix build-system pyproject)
#:use-module (guix build-system python)
#:use-module (guix utils))
@@ -98,28 +95,33 @@
(define-public python-pylibacl
(package
(name "python-pylibacl")
(version "0.7.3")
(version "0.6.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pylibacl" version))
(sha256
(base32 "08pr5cbipij3j591bihh72r5h14lyrspy24qwmfjsn0c1rcgp7wx"))))
(build-system pyproject-build-system)
(origin
(method url-fetch)
(uri (pypi-uri "pylibacl" version))
(sha256
(base32
"1zyrk2m20p5b6bdwxhrwib273i6i71zyr5hzssbxfqis5qra9848"))))
(build-system python-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'disable-tests
(lambda* (#:key outputs inputs #:allow-other-keys)
;; These tests operate on real files, but our tmpfs does not support
;; ACLs.
(substitute* "tests/test_acls.py"
(("( *)def test_applyto(_extended(_mixed)?)?" match indent)
(string-append indent "@pytest.mark.skip(reason=\"guix\")\n"
match))))))))
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'disable-tests
(lambda* (#:key outputs inputs #:allow-other-keys)
;; These tests operate on real files, but our tmpfs does not support
;; ACLs.
(substitute* "tests/test_acls.py"
(("( *)def test_applyto(_extended(_mixed)?)?" match indent)
(string-append indent "@pytest.mark.skip(reason=\"guix\")\n"
match)))))
(replace 'check
(lambda* (#:key inputs outputs tests? #:allow-other-keys)
(when tests?
(add-installed-pythonpath inputs outputs)
(invoke "pytest" "tests")))))))
(inputs (list acl))
(native-inputs (list python-pytest python-setuptools))
(native-inputs (list python-pytest))
(home-page "https://pylibacl.k1024.org/")
(synopsis "POSIX.1e @acronym{ACLs, access control lists} for Python")
(description
+151 -449
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -197,7 +197,7 @@ come from Agda's standard library.")
(define-public agda-stdlib
(package
(name "agda-stdlib")
(version "2.3")
(version "2.1.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -206,7 +206,7 @@ come from Agda's standard library.")
(file-name (git-file-name name version))
(sha256
(base32
"17w5vfn5pb2cgfs22zph3jfqnki52ja8y4zwyqj24zwf9rxairr4"))))
"1n742qvlxaj4dprnknvzrr876af6yjfwa4ps1dr4v1h814sg0xz0"))))
(build-system agda-build-system)
(arguments
(list
+57 -87
View File
@@ -9,7 +9,6 @@
;;; Copyright © 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2024, 2025 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2025 Maxim Cournoyer <maxim@guixotic.coop>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -73,30 +72,22 @@
(build-system pyproject-build-system)
(arguments
(list
#:test-flags
;; This tests if find_library was called once, but we remove the call in
;; the stage below to make the library find libzbar.
#~(list #$@(map (lambda (test) (string-append "--deselect="
"pyzbar/tests/"
"test_zbar_library.py::"
"TestLoad::"
test))
(list "test_found_non_windows"
"test_not_found_non_windows")))
#:test-backend #~'unittest
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'remove-failing-test
(lambda _
;; This tests if find_library was called once, but we remove
;; the call in the stage below to make the library find libzbar.
(delete-file "pyzbar/tests/test_zbar_library.py")))
(add-before 'build 'set-library-file-name
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "pyzbar/zbar_library.py"
(("find_library\\('zbar'\\)")
(format #f "~s"
(search-input-file inputs "/lib/libzbar.so.0")))))))))
(lambda _
(let ((libzbar #$(this-package-input "zbar")))
(substitute* "pyzbar/zbar_library.py"
(("find_library\\('zbar'\\)")
(string-append "'" libzbar "/lib/libzbar.so.0'")))))))))
(native-inputs
(list pkg-config
python-numpy
python-pillow
python-pytest
python-setuptools))
(list pkg-config python-numpy python-pillow python-setuptools))
(inputs
(list zbar))
(home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
@@ -140,24 +131,29 @@ read all zbar supported codes.")
(define-public zint
(package
(name "zint")
(version "2.16.0")
(version "2.15.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/zint/zint")
(commit version)))
(url "https://github.com/zint/zint")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"1zpv9ar1kfjl3bb27jc8hd8601zcda9yv4dz1jhxfhdsg6v4cdg7"))))
(build-system cmake-build-system)
"0arnpdqspyy3bxafm3lqc020bhwq3vazfnja2fk2s8c7mr9wimgr"))))
(build-system qt-build-system)
(arguments
(list #:disallowed-references (list qtbase)
#:parallel-tests? #f ;test suite fails otherwise
#:configure-flags #~(list "-DZINT_TEST=ON"
"-DZINT_UNINSTALL=OFF")))
(native-inputs (list pkg-config))
(inputs (list libpng))
(list #:qtbase qtbase
#:parallel-tests? #f
#:configure-flags
#~(list "-DZINT_QT6=ON"
"-DZINT_TEST=ON"
"-DZINT_UNINSTALL=OFF")))
(native-inputs
(list pkg-config qttools))
(inputs
(list libpng
qtsvg))
(synopsis "Barcode encoding library")
(description "Zint is a suite of programs to allow easy encoding of data in
any of the wide range of public domain barcode standards and to allow
@@ -165,23 +161,6 @@ integration of this capability into your own programs.")
(home-page "https://www.zint.org.uk/")
(license (list license:bsd-3 license:gpl3+))))
(define-public zint-with-qt
(package/inherit zint
(name "zint-with-qt")
(build-system qt-build-system)
(arguments (substitute-keyword-arguments (package-arguments zint)
((#:disallowed-references references)
(delete qtbase references))
((#:qtbase _ #f)
qtbase)
((#:configure-flags flags ''())
#~(cons "-DZINT_QT6=ON" #$flags))))
(inputs (modify-inputs (package-inputs zint)
;; The UI library of qttools is linked to; hence it must be used
;; as an input rather than a native input.
(append qtsvg qttools)))
(synopsis "Barcode encoding library (with graphical user interface)")))
(define-public zxing-cpp
(package
(name "zxing-cpp")
@@ -219,6 +198,27 @@ integration of this capability into your own programs.")
(home-page "https://github.com/zxing-cpp/zxing-cpp")
(license license:asl2.0)))
;;; This older variant is kept for gst-plugins-bad (see:
;;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1684).
(define-public zxing-cpp-1.2
(package/inherit zxing-cpp
(name "zxing-cpp")
(version "1.2.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/zxing-cpp/zxing-cpp")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(patches (search-patches "zxing-cpp-1.2.0-gcc-14.patch"))
(sha256
(base32
"1gjj9c7h634rrmmgzbc7cxjqsxdq0paj6113k02ncjm1s9abk7ik"))))
;; Disable tests to avoid bundled dependencies.
(arguments '(#:tests? #f
#:configure-flags '("-DBUILD_BLACKBOX_TESTS=OFF")))
(native-inputs '())))
(define-public barcode
(package
(name "barcode")
@@ -300,38 +300,6 @@ barcodes of the modern ECC200 variety. libdmtx is a shared library, allowing
C/C++ programs to use its capabilities without restrictions or overhead.")
(license license:bsd-3)))
(define-public dmtx-utils
(package
(name "dmtx-utils")
(version "0.7.6")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/dmtx/dmtx-utils/")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
"06m3qncqdlcnmw83n95yrx2alaq6bld320ax26z4ndnla41yk0p4")))
(build-system gnu-build-system)
(native-inputs (list autoconf automake libtool pkg-config))
(inputs (list libdmtx imagemagick libjpeg-turbo))
(home-page "https://github.com/dmtx/dmtx-utils/")
(synopsis "Utilities for working with Data Matrix barcodes")
(description
"libdmtx is a software library that enables programs to read and write Data
Matrix barcodes of the modern ECC200 variety. This package, dmtx-utils,
provides command line utilities that allow scripts and command line users to
use libdmtx functionality.
This package includes the following programs:
@enumerate
@item @code{dmtxquery}: Extract information from dmtxread output.
@item @code{dmtxread}: Scan Data Matrix barcodes.
@item @code{dmtxwrite}: Create Data Matrix barcodes.
@end enumerate")
(license (list license:lgpl2.1 license:gpl2))))
;; XXX: qt variant utils are broken: zbarcam-qt fails with segmentation fault.
(define-public zbar
(package
@@ -350,11 +318,12 @@ This package includes the following programs:
(build-system glib-or-gtk-build-system)
(arguments
(list
#:configure-flags
#~(list "--disable-static"
"--without-dbus" ;See <https://github.com/mchehab/zbar/issues/104>
"--with-gtk=auto"
"--with-python=auto")))
#:configure-flags '(list "--disable-static"
"--with-gtk=auto"
"--with-python=auto"
(string-append "--with-dbusconfdir="
(assoc-ref %outputs "out")
"/etc"))))
(native-inputs
(list autoconf
automake
@@ -366,7 +335,8 @@ This package includes the following programs:
pkg-config
python-wrapper))
(inputs
(list imagemagick
(list dbus
imagemagick
libjpeg-turbo
perl
python
+61 -147
View File
@@ -17,11 +17,10 @@
;;; Copyright © 2022 宋文武 <iyzsong@envs.net>
;;; Copyright © 2022 Maxim Cournoyer <maxim@guixotic.coop>
;;; Copyright © 2023 Mehmet Tekman <mtekman89@gmail.com>
;;; Copyright © 2025-2026 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2025 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2025 Nigko Yerden <nigko.yerden@gmail.com>
;;; Copyright © 2025 Skylar Hill <stellarskylark@posteo.net>
;;; Copyright © 2025 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2025 Andy Tai <atai@atai.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -61,7 +60,6 @@
#:use-module (gnu packages image)
#:use-module (gnu packages java)
#:use-module (gnu packages libffi)
#:use-module (gnu packages linux)
#:use-module (gnu packages maths)
#:use-module (gnu packages mpi)
#:use-module (gnu packages multiprecision)
@@ -269,7 +267,7 @@ the real span of the lattice.")
(define-public pari-gp
(package
(name "pari-gp")
(version "2.17.3")
(version "2.17.2")
(source (origin
(method url-fetch)
(uri (string-append
@@ -277,7 +275,7 @@ the real span of the lattice.")
version ".tar.gz"))
(sha256
(base32
"1jrd8q8bii109i01qjsc15948a47cn1kcg7jw0kqsijcb36lz74d"))))
"0qahws0jmmqv3v611zdwhvg0rz5a678lhi8z51x16yzrbj7mfc3x"))))
(build-system gnu-build-system)
(native-inputs (list (texlive-local-tree)))
(inputs (list gmp libx11 perl readline))
@@ -313,7 +311,7 @@ PARI is also available as a C library to allow for faster computations.")
(define-public gp2c
(package
(name "gp2c")
(version "0.0.14pl1")
(version "0.0.14")
(source (origin
(method url-fetch)
(uri (string-append
@@ -321,7 +319,7 @@ PARI is also available as a C library to allow for faster computations.")
version ".tar.gz"))
(sha256
(base32
"1g160xg8p624vg1ms7mz34zrb9132ppwwrpqi4ldqqkqzlhf0p14"))))
"0c3v1g04mkb45xrcrxr9xzp61nnql38k6i6s77i5f14l0b614qdg"))))
(build-system gnu-build-system)
(native-inputs (list perl))
(inputs (list pari-gp))
@@ -498,20 +496,25 @@ or text interfaces) or as a C++ library.")
(define-public flint
(package
(name "flint")
(version "3.4.0")
(version "3.2.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://flintlib.org/download/flint-"
version ".tar.gz"))
(sha256
(base32 "0csa8n7d4l3mh892q36nhiv1r7bkb168vszz79p95bfy0jc6g5wl"))))
(base32 "0gyjbkhwrmx2vgb1gailnmmzacl4aikzgi70dzmpf8lpfxny8yya"))))
(build-system gnu-build-system)
(inputs
(list ntl))
(propagated-inputs
(list gmp mpfr)) ; header files included by flint.h or mpfr_mat.h
(arguments
;; Parallel tests failed in the past on ARM, this may need to be
;; tested again.
`(#:parallel-tests? #f
;; Prevent build machine specifics from ending up in the binary.
'(#:configure-flags '("--disable-assembly")))
#:configure-flags '("--disable-assembly")))
(synopsis "Fast library for number theory")
(description
"FLINT is a C library for number theory. It supports arithmetic
@@ -529,43 +532,31 @@ fast arithmetic.")
(properties
'((release-monitoring-url . "http://flintlib.org/downloads.html")))))
(define-public flint-3.3
(package
(inherit flint)
(version "3.3.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://flintlib.org/download/flint-"
version ".tar.gz"))
(sha256
(base32 "1yzasdcv90f6w926p9g92cli2daxvb0mh2s1w1qskkvn618hxmv4"))))))
(define-public python-flint
(package
(name "python-flint")
(version "0.8.0")
(version "0.7.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/fredrik-johansson/python-flint")
(commit version)))
(url "https://github.com/fredrik-johansson/python-flint")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "1xdclpxpas29v3g14z2fxqf7hv4a6iq7bknl9d9r1510dcpxm67a"))))
(base32 "09nsys2cajxsfh2c13nf98a2kwnm0msmab9f9zcjpkndj4ir453a"))))
(build-system pyproject-build-system)
(arguments
(list
;; tests: 905 passed
#:test-flags #~(list "--pyargs" "flint")))
(native-inputs
(list pkg-config
python-meson
(list meson-python
pkg-config
python-cython
python-pytest))
(inputs
(list gmp
flint-3.3))
flint))
(propagated-inputs
(list python-numpy))
(home-page "https://fredrikj.net/python-flint/")
@@ -627,7 +618,7 @@ matrices, and polynomials over the integers and over finite fields.")
(define-public singular
(package
(name "singular")
(version "4.4.1p5")
(version "4.4.1")
(source
(origin
(method url-fetch)
@@ -643,7 +634,7 @@ matrices, and polynomials over the integers and over finite fields.")
"/singular-" version ".tar.gz"))
(sha256
(base32
"1pwygpmhf4sddf1v5x5fr1kbbkb29wlfd5yyj7lryvhbs45s9rdw"))))
"16xlhar1krlskh9gxbw1gw4qi8248c95w71vzxdw72avs2pblkva"))))
(build-system gnu-build-system)
(arguments
(list
@@ -805,7 +796,7 @@ a C program.")
(native-inputs
(list googletest
pkg-config
python-numpy
python-numpy-2
python-wrapper))
(inputs
(list fftw
@@ -817,80 +808,6 @@ a C program.")
principle, 'Keep It Simple, Stupid.'")
(license license:bsd-3)))
(define-public kissfft-for-tflite-micro
(package
(inherit kissfft)
(name "kissfft-for-tflite-micro")
(version "130")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/mborgerding/kissfft")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
"137h3pkn6jmc3pcgnqsq481f6jjblx7ygw9gyipgcdysmnhrwiv2")
(patches (search-patches "kissfft-tflite-micro.patch"))))
(build-system gnu-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(delete 'build)
(replace 'install
(lambda _
(for-each (lambda (f)
(install-file f
(string-append #$output "/include")))
'("kiss_fft.h" "kissfft.hh"))
(for-each (lambda (f)
(install-file f
(string-append #$output
"/include/tools")))
(find-files "tools"))))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
(invoke "make" "CC=gcc" "testall")))))))
(native-inputs (list procps))
(inputs (list fftw))))
(define-public clac
(package
(name "clac")
(version "0.3.4")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/soveran/clac")
(commit version)))
(file-name (git-file-name name version))
(sha256
"0crpm5rxxipiz6kqs5ip900d77vvnslyjn5f6nj0lrc86bkbgi8d")))
(build-system gnu-build-system)
(arguments
(list
#:test-target "test"
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'set-env
(lambda _
(setenv "CC" "gcc")
(setenv "PREFIX" #$output))))))
(home-page "https://github.com/soveran/clac")
(synopsis "Command-line, stack-based calculator with postfix notation")
(description
"Clac is a command line, stack-based calculator with postfix notation
that displays the stack contents at all times. As you type, the stack
changes are reflected immediately.")
;; Bundles two dependencies, both also BSD-2. SDS is not yet packaged.
;; linenoise is packaged, but the package doesn't provide shared
;; object files so we have to build it anyway.
(license license:bsd-2)))
(define-public fftw
(package
(name "fftw")
@@ -985,44 +902,6 @@ gnu build version."))))
(string-append (package-description fftw)
" With OpenMPI parallelism support."))))
(define-public python-pyflct
(package
(name "python-pyflct")
(version "0.3.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pyflct" version))
(sha256
(base32 "1xv4h1a4f8y3ww97g2vc7fg2scfi142vwjz556nx0r1nnpgggj41"))))
(build-system pyproject-build-system)
(arguments
(list
;; tests: 6 passed
#:test-flags
#~(list "--pyargs" "pyflct")
#:phases
#~(modify-phases %standard-phases
(add-before 'check 'remove-local-source
(lambda _
(delete-file-recursively "pyflct"))))))
(native-inputs
(list python-cython
python-extension-helpers
python-pytest
python-setuptools
python-setuptools-scm))
(inputs
(list fftw))
(propagated-inputs
(list python-numpy
python-packaging))
(home-page "https://docs.sunpy.org/projects/pyflct/")
(synopsis "Python wrapper for Fourier Local Correlation Tracking")
(description
"This package provides a Python wrapper for Fourier Local Correlation Tracking.")
(license license:lgpl2.1)))
(define-public java-la4j
(package
(name "java-la4j")
@@ -2022,14 +1901,14 @@ no more than about 20 bits long).")
(define-public r-dtt
(package
(name "r-dtt")
(version "0.1-2.1")
(version "0.1-2")
(source
(origin
(method url-fetch)
(uri (cran-uri "dtt" version))
(sha256
(base32
"113qb6fjp08gcmv4cgq3cm2fk6k3r3j1wfsrygq8889i2bq4a073"))))
"0n8gj5iylfagdbaqirpykb01a9difsy4zl6qq55f0ghvazxqdvmn"))))
(properties `((upstream-name . "dtt")))
(build-system r-build-system)
(home-page "https://www.r-project.org")
@@ -2336,3 +2215,38 @@ systems. This encompasses:
@item the computation of the dimension and the degree of the solution set.
@end itemize")
(license license:gpl2+)))
(define-public clac
(package
(name "clac")
(version "0.3.4")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/soveran/clac")
(commit version)))
(file-name (git-file-name name version))
(sha256
"0crpm5rxxipiz6kqs5ip900d77vvnslyjn5f6nj0lrc86bkbgi8d")))
(build-system gnu-build-system)
(arguments
(list
#:test-target "test"
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'set-env
(lambda _
(setenv "CC" "gcc")
(setenv "PREFIX" #$output))))))
(home-page "https://github.com/soveran/clac")
(synopsis "Command-line, stack-based calculator with postfix notation")
(description
"Clac is a command line, stack-based calculator with postfix notation
that displays the stack contents at all times. As you type, the stack
changes are reflected immediately.")
;; Bundles two dependencies, both also BSD-2. SDS is not yet packaged.
;; linenoise is packaged, but the package doesn't provide shared
;; object files so we have to build it anyway.
(license license:bsd-2)))
+141 -139
View File
@@ -37,7 +37,6 @@
#:use-module (guix git-download)
#:use-module (guix build-system android-ndk)
#:use-module (guix build-system cmake)
#:use-module (guix build-system copy)
#:use-module (guix build-system emacs)
#:use-module (guix build-system gnu)
#:use-module (guix build-system go)
@@ -426,7 +425,7 @@ various Android core host applications.")
(lambda* (#:key inputs outputs #:allow-other-keys)
(install-file "diagnose_usb.h" (string-append (assoc-ref outputs "out") "/include"))
#t)))))
(native-inputs (list linux-libre-headers-5.15 gcc-11))
(native-inputs (list linux-libre-headers-5.4 gcc-11))
(inputs
(list android-libbase android-libcutils android-liblog openssl))
(home-page "https://developer.android.com/studio/command-line/adb.html")
@@ -468,17 +467,29 @@ the corresponding @command{rsync} flags.")
(package
(name "mkbootimg")
(version (android-platform-version))
(source (android-platform-system-core version))
(build-system copy-build-system)
(source (origin
(inherit (android-platform-system-core version))))
(build-system python-build-system)
(arguments
(list
#:install-plan
''(("mkbootimg/mkbootimg" "bin/")
("mkbootimg/bootimg.h" "include/"))))
(inputs (list python-wrapper))
`(#:tests? #f
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'enter-source
(lambda _ (chdir "mkbootimg") #t))
(delete 'configure)
(delete 'build)
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(include (string-append out "/include")))
(install-file "mkbootimg" bin)
(install-file "bootimg.h" include)
#t))))))
(home-page "https://developer.android.com/studio/command-line/adb.html")
(synopsis "Tool to create Android boot images")
(description "This package provides a tool to create Android Boot Images.")
(description "This package provides a tool to create Android Boot
Images.")
(license license:asl2.0)))
(define-public android-safe-iop
@@ -972,7 +983,7 @@ The standard for the ETC1 texture format can be found at
(define-public git-repo
(package
(name "git-repo")
(version "2.60.1")
(version "2.4.1")
(source
(origin
(method git-fetch)
@@ -981,90 +992,88 @@ The standard for the ETC1 texture format can be found at
(commit (string-append "v" version))))
(file-name (string-append "git-repo-" version "-checkout"))
(sha256
(base32 "1cx1b0zmvnmglyn6kbdifcy6w3gm89z2icw4pykxm0wyasy7sc1c"))))
(build-system pyproject-build-system)
(base32 "0khg1731927gvin73dcbw1657kbfq4k7agla5rpzqcnwkk5agzg3"))))
(build-system python-build-system)
(arguments
(list
#:test-flags
#~(list
;; XXX: Requires GnuPG.
"--deselect=tests/test_wrapper.py::SetupGnuPG::test_full"
;; This is expected, as the package is patched for this.
"-k" "not test_fetches_when_stale")
#:phases
#~(modify-phases %standard-phases
(add-before 'build 'set-executable-paths
(lambda* (#:key inputs outputs #:allow-other-keys)
(substitute* '("repo" "git_command.py")
(("^GIT = 'git'")
(format #f "GIT = '~a'"
(search-input-file inputs "/bin/git"))))
(substitute* "git_config.py"
((" command_base = \\['ssh',")
(format #f " command_base = ['~a',"
(search-input-file inputs "/bin/ssh"))))))
(add-before 'build 'do-not-self-update
(lambda* (#:key outputs #:allow-other-keys)
;; Setting the REPO_MAIN variable to an absolute file name is
;; enough to have _FindRepo return the store main.py file. The
;; self update mechanism is activated with the call to _Init() in
;; main(), so we bypass it.
;; Ticket requesting upstream to provide a mean to disable the
;; self update mechanism:
;; https://bugs.chromium.org/p/gerrit/issues/detail?id=12407.
(let ((repo-main (string-append #$output
"/share/git-repo/main.py")))
(substitute* "repo"
(("^REPO_MAIN = .*")
(format #f "REPO_MAIN = ~s~%" repo-main))
((" _Init\\(args, gitc_init=\\(cmd ==.*" all)
(string-append "True #" all)))
;; Prevent repo from trying to git describe its version from
;; the (disabled) self updated copy.
(substitute* "git_command.py"
(("ver = getattr\\(RepoSourceVersion.*")
(format #f "ver = ~s~%" #$version)))
(substitute* "subcmds/version.py"
(("rp_ver = .*")
(format #f "rp_ver = ~s~%" #$version)))
;; Prevent repo from adding its (disabled) self update copy to
;; the list of projects to fetch when using 'repo sync'.
(substitute* "subcmds/sync.py"
(("to_fetch\\.extend\\(all_projects\\).*" all)
(string-append "#" all))
(("self\\._Fetch\\(to_fetch")
"self._Fetch(all_projects")
(("_PostRepoFetch\\(rp, opt\\.repo_verify).*" all)
(string-append "pass #" all))))))
(delete 'build) ;nothing to build
(add-before 'check 'configure-git
(lambda _
(setenv "HOME" (getcwd))
;; XXX: pytest needs this for conftest to import local modules.
(setenv "PYTHONPATH" (getcwd))
(invoke "git" "config" "--global" "user.email" "you@example.com")
(invoke "git" "config" "--global" "user.name" "Your Name")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((bin-dir (string-append #$output "/bin"))
(repo-dir (string-append #$output "/share/"
#$name)))
(mkdir-p bin-dir)
(mkdir-p repo-dir)
(copy-recursively "." repo-dir)
(delete-file-recursively (string-append repo-dir "/tests"))
(symlink (string-append repo-dir "/repo")
(string-append bin-dir "/repo"))))))))
`(#:phases
(modify-phases %standard-phases
(add-before 'build 'set-executable-paths
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(git (assoc-ref inputs "git"))
(ssh (assoc-ref inputs "ssh")))
(substitute* '("repo" "git_command.py")
(("^GIT = 'git'")
(string-append "GIT = '" git "/bin/git'")))
(substitute* "git_config.py"
((" command_base = \\['ssh',")
(string-append " command_base = ['" ssh "/bin/ssh',")))
#t)))
(add-before 'build 'do-not-self-update
(lambda* (#:key outputs #:allow-other-keys)
;; Setting the REPO_MAIN variable to an absolute file name is
;; enough to have _FindRepo return the store main.py file. The
;; self update mechanism is activated with the call to _Init() in
;; main(), so we bypass it.
;; Ticket requesting upstream to provide a mean to disable the
;; self update mechanism:
;; https://bugs.chromium.org/p/gerrit/issues/detail?id=12407.
(let* ((out (assoc-ref outputs "out"))
(repo-main (string-append out "/share/git-repo/main.py")))
(substitute* "repo"
(("^REPO_MAIN = .*")
(format #f "REPO_MAIN = ~s~%" repo-main))
((" _Init\\(args, gitc_init=\\(cmd ==.*" all)
(string-append "True #" all)))
;; Prevent repo from trying to git describe its version from
;; the (disabled) self updated copy.
(substitute* "git_command.py"
(("ver = getattr\\(RepoSourceVersion.*")
(format #f "ver = ~s~%" ,version)))
(substitute* "subcmds/version.py"
(("rp_ver = .*")
(format #f "rp_ver = ~s~%" ,version)))
;; Prevent repo from adding its (disabled) self update copy to
;; the list of projects to fetch when using 'repo sync'.
(substitute* "subcmds/sync.py"
(("to_fetch\\.extend\\(all_projects\\).*" all)
(string-append "#" all))
(("self\\._Fetch\\(to_fetch")
"self._Fetch(all_projects")
(("_PostRepoFetch\\(rp, opt\\.repo_verify).*" all)
(string-append "#" all))))))
(delete 'build) ; nothing to build
(add-before 'check 'configure-git
(lambda _
(setenv "HOME" (getcwd))
(invoke "git" "config" "--global" "user.email" "you@example.com")
(invoke "git" "config" "--global" "user.name" "Your Name")))
(replace 'check
(lambda _
(invoke "./run_tests")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin-dir (string-append out "/bin"))
(repo-dir (string-append out "/share/" ,name)))
(mkdir-p bin-dir)
(mkdir-p repo-dir)
(copy-recursively "." repo-dir)
(delete-file-recursively (string-append repo-dir "/tests"))
(symlink (string-append repo-dir "/repo")
(string-append bin-dir "/repo"))
#t))))))
(inputs
;; TODO: Add git-remote-persistent-https once it is available in guix
(list git openssh))
(native-inputs (list python-pytest python-setuptools))
`(("git" ,git)
("ssh" ,openssh)))
(native-inputs
`(("pytest" ,python-pytest)))
(home-page "https://code.google.com/p/git-repo/")
(synopsis "Helps to manage many Git repositories")
(description
"Repo is a tool built on top of Git. Repo helps manage many Git
repositories, does the uploads to revision control systems, and automates
(description "Repo is a tool built on top of Git. Repo helps manage many
Git repositories, does the uploads to revision control systems, and automates
parts of the development workflow. Repo is not meant to replace Git, only to
make it easier to work with Git. The repo command is an executable Python
script that you can put anywhere in your path.")
@@ -1077,7 +1086,7 @@ script that you can put anywhere in your path.")
(source
(origin
(method url-fetch)
(uri (string-append "http://deb.debian.org/debian/pool/main/a/abootimg/"
(uri (string-append "http://http.debian.net/debian/pool/main/a/abootimg/"
"abootimg_" version ".orig.tar.gz"))
(sha256
(base32 "0sfc2k011l1ymv97821w89391gnqdh8pp0haz4sdcm5hx0axv2ba"))))
@@ -1168,6 +1177,7 @@ useful for reverse engineering, analysis of Android applications and more.")
python-croniter
python-cryptography
python-defusedxml
python-importlib-metadata
python-netifaces
python-pytz
python-pyyaml
@@ -1296,58 +1306,50 @@ emulator inside the comfort of Emacs.")
(package
(name "enjarify")
(version "1.0.3")
(home-page "https://github.com/Storyyeller/enjarify")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Storyyeller/enjarify")
(commit version)))
(file-name (git-file-name name version))
(patches
(search-patches "enjarify-setup-py.patch"))
(sha256
(base32 "1nam7h1g4f1h6jla4qcjjagnyvd24dv6d5445w04q8hx07nxdapk"))))
(build-system pyproject-build-system)
(method git-fetch)
(uri (git-reference
(url home-page)
(commit version)))
(file-name (git-file-name name version))
(patches
(search-patches "enjarify-setup-py.patch"))
(sha256
(base32
"1nam7h1g4f1h6jla4qcjjagnyvd24dv6d5445w04q8hx07nxdapk"))))
(build-system python-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-before 'check 'fix-tests
(lambda _
(substitute* "enjarify/runtests.py"
(("from \\.main") "from enjarify.main")
(("from \\.jvm") "from enjarify.jvm"))
;; Upstream adjusted this test in commit:
;; 3ae884a6485af82d300515813f537685b08dd800
(substitute* "tests/test2/expected.txt"
(("^20") "0"))
;; Upstream removed this argument in order to support 32-bit
;; architectures. commit:
;; 4be0111d879aa95fdc0d9f24fe529f8c664d4093
(substitute* "enjarify/runtests.py"
(("java -Xss515m") "java "))))
(add-after 'install 'install-enjarify-wrapper
(lambda _
(let ((bin (string-append #$output "/bin")))
(install-file "enjarify.sh" bin)
(symlink (string-append bin "/enjarify.sh")
(string-append bin "/enjarify")))))
(replace 'check
(lambda* (#:key tests? test-flags #:allow-other-keys)
(when tests?
(invoke "python" "-m" "enjarify.runtests")))))))
(native-inputs
(list openjdk12
python-setuptools))
(home-page "https://github.com/Storyyeller/enjarify")
`(#:phases
(modify-phases %standard-phases
(add-before 'check 'fixup-expected-test-results
;; Upstream adjusted this test in commit:
;; 3ae884a6485af82d300515813f537685b08dd800
(lambda _
(substitute* "tests/test2/expected.txt"
(("^20") "0"))
#t))
(add-before 'check 'drop-java-xss-argument
;; Upstream removed this argument in order to support 32-bit
;; architectures. commit: 4be0111d879aa95fdc0d9f24fe529f8c664d4093
(lambda _
(substitute* "enjarify/runtests.py"
(("java -Xss515m") "java "))
#t))
(add-after 'install 'install-enjarify-wrapper
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")))
(mkdir-p (string-append out "/bin/"))
(copy-file "enjarify.sh" (string-append out "/bin/enjarify"))
#t))))))
(native-inputs (list openjdk12))
(synopsis "Translate Dalvik bytecode to equivalent Java bytecode")
(description
"Android applications are Java programs that run on a customized virtual
machine, which is part of the Android operating system, the Dalvik VM. Their
bytecode differs from the bytecode of normal Java applications. Enjarify can
translate the Dalvik bytecode back to equivalent Java bytecode, which
simplifies the analysis of Android applications. It's an alternative fork of
not maintained Goole's project https://github.com/google/enjarify.")
(description "Android applications are Java programs that run on a
customized virtual machine, which is part of the Android operating system, the
Dalvik VM. Their bytecode differs from the bytecode of normal Java
applications. Enjarify can translate the Dalvik bytecode back to equivalent
Java bytecode, which simplifies the analysis of Android applications.")
(license license:asl2.0)))
(define-public android-file-transfer
+3 -4
View File
@@ -316,7 +316,7 @@ language.")
;; Ensure that all required Qt plugins are found at runtime.
(add-after 'install 'wrap-executable
(lambda* (#:key inputs #:allow-other-keys)
(let ((qt '("qtbase" "qtmultimedia" "qtwayland")))
(let ((qt '("qtbase" "qtmultimedia")))
(wrap-program (string-append #$output "/bin/Papagayo")
`("QT_PLUGIN_PATH" ":" prefix
,(map (lambda (label)
@@ -324,7 +324,7 @@ language.")
"/lib/qt5/plugins/"))
qt)))))))))
(inputs
(list bash-minimal qtbase-5 qtmultimedia-5 qtwayland-5 libsndfile))
(list bash-minimal qtbase-5 qtmultimedia-5 libsndfile))
(native-inputs
(list qttools-5))
(home-page "https://www.lostmarble.com/papagayo/")
@@ -352,8 +352,7 @@ waveform until they line up with the proper sounds.")
"0b1nwiwyg01087q318vymg4si76dw41ykxbn2zwd6dqbxzbpr1dh"))))
(build-system gnu-build-system)
(inputs
(list bash-minimal qtbase-5 qtxmlpatterns-5 qtmultimedia-5 qtsvg-5
qtwayland-5))
(list bash-minimal qtbase-5 qtxmlpatterns-5 qtmultimedia-5 qtsvg-5))
(arguments
(list
#:phases
+3 -4
View File
@@ -41,7 +41,7 @@
(define-public libapparmor
(package
(name "libapparmor")
(version "4.1.2")
(version "3.1.2")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -50,7 +50,7 @@
(file-name (git-file-name name version))
(sha256
(base32
"0p3vq0awvn4ar6sblmhcs0i9m7zc9kbwm3f3zcggx4lqgmy8s18b"))))
"1h77a7ww0rxfv5nsi1iy4fffklxdr2vq6r7kdsqm15yysglhbjyi"))))
(build-system gnu-build-system)
(arguments
(list #:configure-flags
@@ -84,7 +84,6 @@
(chdir "libraries/libapparmor"))))))
(native-inputs
(list autoconf
autoconf-archive
automake
bison
dejagnu
@@ -93,7 +92,7 @@
perl
python-minimal
ruby
swig-4.0
swig
which))
(home-page "https://apparmor.net")
(synopsis "Linux kernel security module")
+25 -27
View File
@@ -40,15 +40,13 @@
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/AppImage/type2-runtime")
(commit commit)))
(url "https://github.com/AppImage/type2-runtime")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "0954crhlbapxis96g1s0vfpf78ybr64zvjalak387ksxj560g44x"))))
(build-system gnu-build-system)
(arguments
(list
#:tests? #f ; No tests
#:make-flags
#~(list "-Csrc/runtime" "runtime-fuse3"
(string-append "CC=" #$(cc-for-target))
@@ -62,33 +60,34 @@
`((guix build gnu-build-system)
(guix build utils)
(ice-9 binary-ports))
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
(replace 'install
(lambda _
(install-file "src/runtime/runtime-fuse3"
(string-append #$output "/bin"))))
;; Must be after all elf reliant phases. Used to identify the
;; executable as an AppImage as per the specification.
(add-after 'make-dynamic-linker-cache 'set-magic-bytes
(lambda _
(let ((port (open (string-append #$output
"/bin/runtime-fuse3")
(logior O_WRONLY))))
(seek port 8 SEEK_SET)
(put-bytevector port #vu8(#x41 #x49 #x02))
(close-port port)))))
#:disallowed-references
(list (this-package-input "squashfuse-for-appimage")
(this-package-input "fuse")
(gexp-input (this-package-input "zstd") "static")
(gexp-input (this-package-input "zlib") "static"))))
#:phases #~(modify-phases %standard-phases
(delete 'configure)
(delete 'check) ; No tests.
(replace 'install
(lambda _
(install-file "src/runtime/runtime-fuse3"
(string-append #$output "/bin"))))
;; Must be after all elf reliant phases. Used to identify the
;; executable as an AppImage as per the specification.
(add-after 'make-dynamic-linker-cache 'set-magic-bytes
(lambda _
(let ((port (open (string-append #$output
"/bin/runtime-fuse3")
(logior O_WRONLY))))
(seek port 8 SEEK_SET)
(put-bytevector port #vu8(#x41 #x49 #x02))
(close-port port)))))
#:disallowed-references (list squashfuse-for-appimage
fuse-for-appimage
(gexp-input zstd "static")
(gexp-input zlib "static"))))
;; Only needed at build time.
(inputs (list squashfuse-for-appimage
fuse-for-appimage
`(,zstd "static")
`(,zlib "static")))
(build-system gnu-build-system)
(home-page "https://github.com/AppImage/type2-runtime")
(synopsis "Runtime for executing AppImages")
(description "The runtime is the executable part of every AppImage. It mounts
the payload via @acronym{FUSE} and executes the entrypoint, allowing users to run
@@ -97,5 +96,4 @@ ensures that the AppImage can access its bundled libraries and resources seamles
providing a consistent environment across different Linux distributions. In the
absence of @acronym{FUSE}, the AppImage can still be started using the
@option{--appimage-extract-and-run} flag.")
(home-page "https://github.com/AppImage/type2-runtime")
(license license:expat))))
+3 -3
View File
@@ -65,16 +65,16 @@
(define-public arcan
(package
(name "arcan")
(version "0.7.1")
(version "0.6.3.3")
(source (origin
(method git-fetch)
(file-name (git-file-name name version))
(uri (git-reference
(url "https://codeberg.org/letoram/arcan")
(url "https://github.com/letoram/arcan")
(commit version)))
(sha256
(base32
"1sn8rljghrw57q99n9hl03pr2ndgkzg4g3p443iaslg42bmww05c"))
"0rbswqqrgh9bkv0fzsswpkfw2zp1a7znwy0abgrxha5vpn13qd8c"))
(modules '((guix build utils)))
(snippet
;; Remove some bundled packages.
-108
View File
@@ -1,108 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2026 Carlos Durán Domínguez <wurt@wurt.eu>
;;;
;;; 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 (gnu packages array-languages)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system go)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages bash))
;;;
;;; Code:
(define-public goal
(package
(name "goal")
(version "1.5.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://codeberg.org/anaseto/goal")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1ckkjd2hf2v6f8x0ck9brp1ii4q8lcssvvwn7d6l1l5n9kcfjw7n"))))
(build-system go-build-system)
(inputs (list bash-minimal))
(outputs (list "out" "lib"))
(arguments
(list
#:unpack-path "codeberg.org/anaseto/goal"
#:import-path "codeberg.org/anaseto/goal/cmd/goal"
#:build-flags
#~(list "-tags" "full,nosse4") ;disable SSE4.2 optimizations
#:test-flags
#~(list "-skip" "TestSources/version.goal" ;git tests require a repo
"-tags" "full,nosse4")
#:phases
#~(modify-phases %standard-phases
;; Goal requires a shell interpreter.
(add-after 'unpack 'fix-sh-path
(lambda* (#:key unpack-path #:allow-other-keys)
(substitute* (string-append "src/" unpack-path "/os/os.go")
(("/bin/sh")
#$(file-append bash-minimal "/bin/sh")))))
;; Tests require the goal binary.
(add-before 'check 'add-goal-path
(lambda _
(setenv "PATH"
(string-append (getenv "PATH") ":" #$output "/bin"))))
;; Goal is embeddable, but end users typically don't need the source
;; code.
(replace 'install
(lambda* (#:key unpack-path #:allow-other-keys #:rest arguments)
(apply (assoc-ref %standard-phases 'install)
`(,@arguments #:import-path ,unpack-path))
(mkdir-p #$output:lib)
(rename-file (string-append #$output "/src")
(string-append #$output:lib "/src"))))
(add-after 'install 'install-goal-libs-and-documentation
(lambda* (#:key unpack-path inputs #:allow-other-keys #:rest
arguments)
(let ((outdir (string-append #$output "/share/goal/"
#$(version-major version) "/lib")))
(mkdir-p outdir)
(copy-recursively (string-append "src/" unpack-path "/lib")
outdir))
(install-file (string-append "src/" unpack-path "/docs/goal.1")
(string-append #$output "/share/man/man1")))))))
(native-search-paths
(list (search-path-specification
(variable "GOALLIB")
(separator #f)
(files `(,(string-append "share/goal/"
(version-major version) "/lib"))))))
(home-page "https://anaseto.codeberg.page/goal-docs/")
(synopsis "Embeddable scripting array language")
(description
"Goal is an embeddable array programming language with a bytecode
interpreter, written in Go. The command line intepreter can execute scripts
or run in interactive mode. Goal shines the most in common scripting tasks,
like handling columnar data or text processing. It is also suitable for
exploratory programming.")
(license license:isc)))
;;;
;;; Avoid adding new packages to the end of this file. To reduce the chances
;;; of a merge conflict, place them above in alphabetic order.
;;;
+7 -36
View File
@@ -15,7 +15,7 @@
;;; Copyright © 2021 Sergiu Ivanov <sivanov@colimite.fr>
;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2024, 2025 Maxim Cournoyer <maxim@guixotic.coop>
;;; Copyright © 2024 Maxim Cournoyer <maxim@guixotic.coop>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -52,7 +52,7 @@
(define-public aspell
(package
(name "aspell")
(version "0.60.8.1")
(version "0.60.8")
(source
(origin
(method url-fetch)
@@ -60,8 +60,9 @@
version ".tar.gz"))
(sha256
(base32
"06yjhwlgpcvbrl5g83qjrpzjwjx7hka5lhsfc3x5gm229nri5nnn"))
(patches (search-patches "aspell-default-dict-dir.patch"))))
"1wi60ankalmh8ds7nplz434jd7j94gdvbahdwsr539rlad8pxdzr"))
(patches (search-patches "aspell-default-dict-dir.patch"
"aspell-CVE-2019-25051.patch"))))
(build-system gnu-build-system)
(arguments
`(#:phases
@@ -77,7 +78,8 @@
(substitute* "common/config.cpp"
(("\"filter-path(.*)DICT_DIR" _ middle)
(string-append "\"filter-path" middle
"\"" libdir "\"")))))))))
"\"" libdir "\"")))
#t))))))
(native-inputs (list perl))
(native-search-paths
@@ -480,34 +482,3 @@ European languages.")
(for-each (cut install-file <> include-dir)
'("config.h" "defhash.h" "ispell.h"
"libispell.h" "local.h")))))))))))))
(define-public spell
(package
(name "spell")
(version "1.1")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://gnu/spell/spell-" version ".tar.gz"))
(sha256
(base32 "0i4pqbhzkv5y4c2j7ajx713jykxsnn4dqdcqfvzn04xkgra47hkw"))))
(build-system gnu-build-system)
(arguments
(list #:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'patch-commands
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "spell.c"
(("aspell")
(search-input-file inputs "bin/aspell"))
(("ispell_prog = \"ispell\"")
(format #f "ispell_prog = ~s"
(search-input-file inputs "bin/ispell")))))))))
(inputs (list aspell ispell))
(synopsis "Spell checking")
(description
"Spell is a command-line spell-checking program. It reads through
a text input and prints each misspelled word on a line of its own. It is
implemented as a wrapper for GNU aspell or ispell.")
(home-page "https://savannah.gnu.org/projects/spell/")
(license gpl3+)))
+18 -1
View File
@@ -749,7 +749,24 @@ files.")
(list
#:tests? #f ;; XXX: insists on using bundled googletest
#:configure-flags
#~(list "-DBUILD_SHARED_LIBS=ON")))
#~(list "-DBUILD_SHARED_LIBS=ON"
#$@(let ((target (%current-target-system)))
(if target
(cond ((string-prefix? "arm" target)
'("-DCMAKE_SYSTEM_PROCESSOR=arm"))
((string-prefix? "aarch64" target)
'("-DCMAKE_SYSTEM_PROCESSOR=aarch64"))
((string-prefix? "i686" target)
'("-DCMAKE_SYSTEM_PROCESSOR=x86"))
((string-prefix? "x86_64" target)
'("-DCMAKE_SYSTEM_PROCESSOR=x86_64"))
;; 32-bit and 64-bit
((string-prefix? "powerpc" target)
'("-DCMAKE_SYSTEM_PROCESSOR=powerpc"))
((string-prefix? "riscv64" target)
'("-DCMAKE_SYSTEM_PROCESSOR=riscv64"))
(else '()))
'())))))
(home-page "https://github.com/google/cpu_features")
(synopsis "Cross platform C99 library to get cpu features at runtime")
(description

Some files were not shown because too many files have changed in this diff Show More