1
0
forked from tribes/guix

Compare commits

..

14 Commits

Author SHA1 Message Date
Rutherther 88c2e2349a doc: Use versioned manual URLs.
* doc/build.scm (stylized-html): Move to versioned manual URL.
(html-manual): Use versioned manual URL.
* doc/htmlxref.cnf (GUIX): Add /1.4.0.

Change-Id: I82048a9548894e335e7c2427a739733304a7961a
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Fixes: #5681
2026-01-19 10:02:52 +01:00
Ludovic Courtès 3bf155b888 doc: Fix URL of ‘language-picker.svg’.
Fixes a regression introduced in
824d46a2fe.

* doc/build.scm (stylized-html)[build]: Avoid double leading slash for
‘language-picker.svg’.

Change-Id: I0817949862f061dbbe04352bda1e479347015c84
2025-07-09 14:29:35 +02:00
Ludovic Courtès a40cc32ae8 doc: Add links to versions and variants as a drop-down menu.
* doc/build.scm (%latest-guix-version): New variable.
(stylized-html): Add #:latest-version.
[build](menu-item-separator): New variable.
(version-menu-items, input-file-language): New procedures.
(stylized-html, process-html): Add ‘language’ parameter.  Update
callers.

Change-Id: If7cea2410802eec5af1d3c0407d5569250eb15ef
2025-07-09 14:19:04 +02:00
Ludovic Courtès 1691a4458c doc: Really honor ‘GUIX_WEB_SITE_URL’.
This is useful when testing changes locally, so that CSS links point to
the right place.

* doc/build.scm (%web-site-url): Default to /.
(%manual-css-url): Honor ‘%web-site-url’.

Change-Id: I8d885eba0fb8560dd7da7f21629c716a06c16b1f
2025-07-09 14:17:30 +02:00
Ludovic Courtès e32c098f5d doc: Update build machinery for today’s ‘master’.
This updates TeX Live package names to match what’s available in today’s
‘master’ branch since ‘master’ is what is used to build the on-line copy
of the manual.

* doc/build.scm (pdf-manual)[texinfo-profile]: Update TeX Live package
names.

Change-Id: I5db327e1543a1f9a8697bf3b1b65ab50959efdc4
2025-06-16 17:21:25 +02:00
Ludovic Courtès 4ea1538dd7 doc: Use CSS from guix.gnu.org.
This is a followup to commit 7bbc00ccf0315a68509cacd6a85e1ae8ae7f5e5d of
guix/artwork.git.

* doc/build.scm (%manual-css-url): New variable.
(%makeinfo-html-options): Use it instead of www.gnu.org/…/manual.css.
(stylized-html): Likewise for the default #:manual-css-url.

Change-Id: I20bd3866383f8cbb4984993c15dbab483a17f6c9
2025-06-16 17:17:02 +02:00
Christopher Baines 10527dac08 doc: build.scm: Handle (current-source-directory) being #f.
Since this seems to be the case when the devel manual is being built on
bayfront.

* doc/build.scm: Use the current working directory as a fallback
if (current-source-directory) is #f, and log the value of root.

Change-Id: Ic43fd05a4a0822d9efb935069850f0a8cadd80aa
2025-06-16 17:15:40 +02:00
Ludovic Courtès f492b57306 doc: Change ‘guix-install.sh’ URL to https://guix.gnu.org/install.sh.
This is a followup to 47d554602c, as
proposed in
<https://lists.gnu.org/archive/html/guix-devel/2025-01/msg00167.html>.

* doc/guix.texi (Installation, Binary Installation): Change URL for
installation script.  Add ‘-O guix-install.sh’ to wget command line.

Change-Id: I83702cacc3bdf8d15d3972d2de17e1ce8607ed52
2025-04-09 13:05:06 +02:00
Leo Famulari 9b3c194c2d doc: Use the correct patch submission email address.
Reported by sleep_walker on #guix.

* doc/contributing.texi (Sending a Patch Series): Fix the email address
in the example.

Change-Id: If81243f9f23128a62201a77d328c158de94a4683
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2025-03-12 22:46:28 +09:00
Ludovic Courtès bba1e723b0 doc: Add missing quotes in wget command for ‘guix-install.sh’.
* doc/guix.texi (Binary Installation): Add missing quotes in wget
command.

Change-Id: I4ebb50492070c298ccc4f02e62d90e875ffe44da
2025-01-21 16:14:02 +01:00
Ludovic Courtès 47d554602c doc: Change ‘guix-install.sh’ URL to gitweb.
The cgit interface at Savannah has been taken down.

* doc/guix.texi (Installation): Change ‘guix-install.sh’ URL to gitweb.

Change-Id: I45274bdb7713d16bafe2d0b464865362bddcf303
2025-01-21 14:13:48 +01:00
Florian Pelz aaf86bbe1f doc: build: Handle when guile source is packed with zstd.
* doc/build.scm (guile-manual): Also include zstd in PATH.

Change-Id: Iff49825fe84121bff777ed45c03fb14af0a0e719
2024-09-05 00:19:07 +02:00
Ludovic Courtès 889fe96307 doc: Repair building non-English website manuals.
Fixes: <https://issues.guix.gnu.org/72257>.

* doc/build.scm (translated-texi-manuals): Copy the code
from (@ (guix self) translate-texi-manuals) rather than importing
it.  This fixes building doc/build.scm at version 1.4.0 with
recent Guix revisions.

Change-Id: Ia23425f824e4a6e619f32a28493b811c0e7c31d5
Signed-off-by: Florian Pelz <pelzflorian@pelzflorian.de>
2024-07-26 21:41:40 +02:00
Ludovic Courtès efc8489651 doc: Adjust HTML patterns to correctly process Texinfo 6.8 output.
Prior to ceb5ef8347, (@ (gnu packages
texinfo) texinfo), which is what is used here, was pointing to version 6.7.

* doc/build.scm (html-manual-identifier-index)[build](worthy-entry?):
Adjust patterns for Texinfo 6.8.
(syntax-highlighted-html)[build](syntax-highlight): Likewise.
2023-06-08 23:52:23 +02:00
1320 changed files with 358969 additions and 733290 deletions
+24 -7
View File
@@ -32,7 +32,27 @@
;; Geiser
;; This allows automatically setting the `geiser-guile-load-path'
;; variable when using various Guix checkouts (e.g., via git worktrees).
(geiser-repl-per-project-p . t)))
(eval . (let ((root-dir-unexpanded (locate-dominating-file
default-directory ".dir-locals.el")))
;; While Guix should in theory always have a .dir-locals.el
;; (we are reading this file, after all) there seems to be a
;; strange problem where this code "escapes" to some other buffers,
;; at least vc-mode. See:
;; https://lists.gnu.org/archive/html/guix-devel/2020-11/msg00296.html
;; Upstream report: <https://bugs.gnu.org/44698>
;; Hence the following "when", which might otherwise be unnecessary;
;; it prevents causing an error when root-dir-unexpanded is nil.
(when root-dir-unexpanded
(let* ((root-dir (expand-file-name root-dir-unexpanded))
;; Workaround for bug https://issues.guix.gnu.org/43818.
(root-dir* (directory-file-name root-dir)))
(unless (boundp 'geiser-guile-load-path)
(defvar geiser-guile-load-path '()))
(make-local-variable 'geiser-guile-load-path)
(require 'cl-lib)
(cl-pushnew root-dir* geiser-guile-load-path
:test #'string-equal)))))))
(c-mode . ((c-file-style . "gnu")))
(scheme-mode
@@ -41,7 +61,7 @@
(eval . (put 'eval-when 'scheme-indent-function 1))
(eval . (put 'call-with-prompt 'scheme-indent-function 1))
(eval . (put 'test-assert 'scheme-indent-function 1))
(eval . (put 'test-assertm 'scheme-indent-function 2))
(eval . (put 'test-assertm 'scheme-indent-function 1))
(eval . (put 'test-equalm 'scheme-indent-function 1))
(eval . (put 'test-equal 'scheme-indent-function 1))
(eval . (put 'test-eq 'scheme-indent-function 1))
@@ -50,11 +70,7 @@
(eval . (put 'guard 'scheme-indent-function 1))
(eval . (put 'lambda* 'scheme-indent-function 1))
(eval . (put 'substitute* 'scheme-indent-function 1))
(eval . (put 'match-record 'scheme-indent-function 3))
(eval . (put 'match-record-lambda 'scheme-indent-function 2))
;; TODO: Contribute these to Emacs' scheme-mode.
(eval . (put 'let-keywords 'scheme-indent-function 3))
(eval . (put 'match-record 'scheme-indent-function 2))
;; 'modify-inputs' and its keywords.
(eval . (put 'modify-inputs 'scheme-indent-function 1))
@@ -78,6 +94,7 @@
(eval . (put 'origin 'scheme-indent-function 0))
(eval . (put 'build-system 'scheme-indent-function 0))
(eval . (put 'bag 'scheme-indent-function 0))
(eval . (put 'gexp->derivation 'scheme-indent-function 1))
(eval . (put 'graft 'scheme-indent-function 0))
(eval . (put 'operating-system 'scheme-indent-function 0))
(eval . (put 'file-system 'scheme-indent-function 0))
-1
View File
@@ -159,4 +159,3 @@ tmp
/gnu/packages/aux-files/guile-guile-launcher.o
/guile
.DS_Store
.mumi/current-issue
+15 -13
View File
@@ -7,6 +7,8 @@
(;; primary: "D963 A5A3 8A80 3D52 4461 F914 7483 0A27 6C32 8EC2"
("2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"
(name "abcdw"))
("4FB9 9F49 2B12 A365 7997 E664 8246 0C08 2A0E E98F"
(name "alezost"))
("50F3 3E2E 5B0C 3D90 0424 ABE8 9BDC F497 A4BB CC7F"
(name "ambrevar"))
("AD17 A21E F8AE D8F1 CC02 DBD9 F7D5 C9BF 765C 61E3"
@@ -18,6 +20,9 @@
(;; primary: "34FF 38BC D151 25A6 E340 A0B5 3453 2F9F AFCA 8B8E"
"A3A4 B419 0074 087C A7DE 5698 BC45 CA67 E2F8 D007"
(name "bavier"))
(;; primary: "8929 BBC5 73CD 9206 3DDD 979D 3D36 CAA0 116F 0F99"
"1C9B F005 1A1A 6A44 5257 599A A949 03A1 66A1 8FAE"
(name "bricewge"))
(;; primary: "0401 7A2A 6D9A 0CCD C81D 8EC2 96AB 007F 1A7E D999"
"09CD D25B 5244 A376 78F6 EEA8 0CC5 2153 1979 91A5"
(name "carl"))
@@ -37,9 +42,6 @@
(;; primary: "2453 02B1 BAB1 F867 FDCA 96BC 8F3F 861F 82EB 7A9A"
"CBC5 9C66 EC27 B971 7940 6B3E 6BE8 208A DF21 FE3F"
(name "glv"))
(;; primary: "220F 98D9 5E86 204C 0036 DA7B 6DEC 4360 408B 4185"
"F4C2 D1DF 3FDE EA63 D1D3 0776 ACC6 6D09 CA52 8292"
(name "hako"))
("2219 43F4 9E9F 276F 9499 3382 BF28 6CB6 593E 5FFD"
(name "hoebjo"))
("B943 509D 633E 80DD 27FC 4EED 634A 8DFF D3F6 31DF"
@@ -49,22 +51,22 @@
(name "iyzsong"))
("1A85 8392 E331 EAFD B8C2 7FFB F3C1 A0D9 C1D6 5273"
(name "janneke"))
("3B1D 7F19 E36B B60C 0F5B 2CA9 A52A A2B4 77B6 DD35"
(name "jgart"))
(;; primary: "1BA4 08C5 8BF2 0EA7 3179 635A 865D C0A3 DED9 B5D0"
"E31D 9DDE EBA5 4A14 8A20 4550 DA45 97F9 47B4 1025"
(name "jlicht"))
("8141 6036 E81A 5CF7 8F80 1071 ECFC 8398 8B4E 4B9F"
(name "jonsger"))
("3924 8CD8 41C6 3CC3 36DC AF2F 505E 40B9 1617 1A8A"
(name "jpoiret"))
("017D 74E2 7F58 5696 3801 781D F663 943E 08D8 092A"
(name "lbraun"))
("CA4F 8CF4 37D7 478F DA05 5FD4 4213 7701 1A37 8446"
(name "lbraun (professional)"))
("ACC2 3BA0 59F7 CCF4 08F0 43AD 442A 84B8 C70E 2F87"
(name "lilyp"))
(;; primary: "4F71 6F9A 8FA2 C80E F1B5 E1BA 5E35 F231 DE1A C5E0"
"B051 5948 F1E7 D3C1 B980 38A0 2646 FA30 BACA 7F08"
(name "lfam"))
("CBF5 9755 CBE7 E7EF EF18 3FB1 DD40 9A15 D822 469D"
(name "marusich"))
("BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"
(name "mbakke"))
("D919 0965 CE03 199E AF28 B3BE 7CEF 2984 7562 C516"
@@ -76,6 +78,8 @@
(;; primary: "F5BC 5534 C36F 0087 B39D 36EF 1C9D C4FE B9DB 7C4B"
"F5DA 2032 4B87 3D0B 7A38 7672 0DB0 FF88 4F55 6D79"
(name "nckx"))
("E576 BFB2 CF6E B13D F571 33B9 E315 A758 4613 1564"
(name "niedzejkob"))
("ED0E F1C8 E126 BA83 1B48 5FE9 DA00 B4F0 48E9 2F2D"
(name "ngz"))
("CEF4 CB91 4856 BA38 0A20 A7E2 3008 88CB 39C6 3817"
@@ -83,9 +87,9 @@
(;; primary: "41CA 12EA DE0C F33F 6885 A58F 5719 6E37 E00B 77FD"
"72D5 3D81 8CB6 F4A1 7258 374C A8FC 9E44 7F4F 7D54"
(name "planglois"))
(;; primary: "7E9F 5BF6 1680 4367 127B 7A87 F9E6 9FB8 5A75 54F1"
"A420 7B56 C255 109F 2CB3 157E 4990 97AE 5EA8 15D9"
(name "podiki"))
(;; primary: "B68B DF22 73F9 DA0E 63C1 8A32 515B F416 9242 D600"
"C699 ED09 E51B CE89 FD1D A078 AAC7 E891 896B 568A"
(name "pgarlick"))
("CD2D 5EAA A98C CB37 DA91 D6B0 5F58 1664 7F8B E551"
(name "raghavgururajan"))
("BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC"
@@ -107,6 +111,4 @@
(name "vagrantc"))
(;; primary: "C955 CC5D C048 7FB1 7966 40A9 199A F6A3 67E9 4ABB"
"7238 7123 8EAC EB63 4548 5857 167F 8EA5 001A FA9C"
(name "wigust"))
("705A 29B7 01EE 410E B6F9 236E 92F1 D22C 608E E7E5"
(name "zimoun"))))
(name "wigust"))))
-1
View File
@@ -39,7 +39,6 @@ Joshua Grant <tadni@riseup.net> <gzg@riseup.net>
Joshua Grant <tadni@riseup.net> <jgrant@parenthetical.io>
Joshua Grant <tadni@riseup.net> <tadnimi@gmail.com>
Joshua Grant <tadni@riseup.net> <youlysses@riseup.net>
Juliana Sims <juli@incana.org> <jtsims@protonmail.com>
Kei Kebreau <kkebreau@posteo.net>
Leo Famulari <leo@famulari.name> <lfamular@gmail.com>
Liliana Marie Prikler <liliana.prikler@gmail.com>
-3
View File
@@ -1,3 +0,0 @@
((debbugs-host . "debbugs.gnu.org")
(patch-email-address . "guix-patches@gnu.org")
(mumi-host . "issues.guix.gnu.org"))
-10
View File
@@ -1,10 +0,0 @@
# This config file allows for Patchwork integration with
# https://patches.guix-patches.cbaines.net/.
[settings]
project: guix-patches
patchwork_url: https://patches.guix-patches.cbaines.net
add_signoff: False
# TODO: enable check_patch
check_patch: False
ignore_bad_tags: True
+20 -92
View File
@@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
# Copyright © 2015, 2017 Alex Kost <alezost@gmail.com>
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
@@ -7,14 +7,13 @@
# Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
# Copyright © 2017 Leo Famulari <leo@famulari.name>
# Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
# Copyright © 2017, 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2017, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
# Copyright © 2018 Nikita <nikita@n0.is>
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
# Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
# Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
# Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
# Copyright © 2020, 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
# Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
# Copyright © 2021 Andrew Tropin <andrew@trop.in>
#
@@ -112,7 +111,6 @@ MODULES = \
guix/derivations.scm \
guix/grafts.scm \
guix/repl.scm \
guix/rpm.scm \
guix/transformations.scm \
guix/inferior.scm \
guix/describe.scm \
@@ -141,7 +139,6 @@ MODULES = \
guix/platforms/riscv.scm \
guix/platforms/x86.scm \
guix/build-system.scm \
guix/build-system/agda.scm \
guix/build-system/android-ndk.scm \
guix/build-system/ant.scm \
guix/build-system/cargo.scm \
@@ -156,7 +153,6 @@ MODULES = \
guix/build-system/font.scm \
guix/build-system/go.scm \
guix/build-system/meson.scm \
guix/build-system/mozilla.scm \
guix/build-system/minify.scm \
guix/build-system/minetest.scm \
guix/build-system/asdf.scm \
@@ -182,7 +178,6 @@ MODULES = \
guix/build-system/ruby.scm \
guix/build-system/scons.scm \
guix/build-system/texlive.scm \
guix/build-system/tree-sitter.scm \
guix/build-system/trivial.scm \
guix/ftp-client.scm \
guix/http-client.scm \
@@ -197,7 +192,6 @@ MODULES = \
guix/diagnostics.scm \
guix/ui.scm \
guix/status.scm \
guix/build/agda-build-system.scm \
guix/build/android-ndk-build-system.scm \
guix/build/ant-build-system.scm \
guix/build/download.scm \
@@ -240,11 +234,9 @@ MODULES = \
guix/build/ruby-build-system.scm \
guix/build/scons-build-system.scm \
guix/build/texlive-build-system.scm \
guix/build/tree-sitter-build-system.scm \
guix/build/waf-build-system.scm \
guix/build/haskell-build-system.scm \
guix/build/julia-build-system.scm \
guix/build/kconfig.scm \
guix/build/linux-module-build-system.scm \
guix/build/store-copy.scm \
guix/build/json.scm \
@@ -296,7 +288,6 @@ MODULES = \
guix/import/print.scm \
guix/import/pypi.scm \
guix/import/stackage.scm \
guix/import/test.scm \
guix/import/texlive.scm \
guix/import/utils.scm \
guix/scripts.scm \
@@ -306,7 +297,6 @@ MODULES = \
guix/scripts/archive.scm \
guix/scripts/import.scm \
guix/scripts/package.scm \
guix/scripts/locate.scm \
guix/scripts/install.scm \
guix/scripts/remove.scm \
guix/scripts/upgrade.scm \
@@ -333,7 +323,6 @@ MODULES = \
guix/scripts/lint.scm \
guix/scripts/challenge.scm \
guix/scripts/import/crate.scm \
guix/scripts/import/cpan.scm \
guix/scripts/import/cran.scm \
guix/scripts/import/egg.scm \
guix/scripts/import/elm.scm \
@@ -410,14 +399,10 @@ AUX_FILES = \
gnu/packages/aux-files/chromium/master-preferences.json \
gnu/packages/aux-files/emacs/guix-emacs.el \
gnu/packages/aux-files/guix.vim \
gnu/packages/aux-files/linux-libre/6.4-arm.conf \
gnu/packages/aux-files/linux-libre/6.4-arm64.conf \
gnu/packages/aux-files/linux-libre/6.4-i686.conf \
gnu/packages/aux-files/linux-libre/6.4-x86_64.conf \
gnu/packages/aux-files/linux-libre/6.1-arm.conf \
gnu/packages/aux-files/linux-libre/6.1-arm64.conf \
gnu/packages/aux-files/linux-libre/6.1-i686.conf \
gnu/packages/aux-files/linux-libre/6.1-x86_64.conf \
gnu/packages/aux-files/linux-libre/6.0-arm.conf \
gnu/packages/aux-files/linux-libre/6.0-arm64.conf \
gnu/packages/aux-files/linux-libre/6.0-i686.conf \
gnu/packages/aux-files/linux-libre/6.0-x86_64.conf \
gnu/packages/aux-files/linux-libre/5.15-arm.conf \
gnu/packages/aux-files/linux-libre/5.15-arm64.conf \
gnu/packages/aux-files/linux-libre/5.15-i686.conf \
@@ -437,13 +422,14 @@ AUX_FILES = \
gnu/packages/aux-files/linux-libre/4.14-arm.conf \
gnu/packages/aux-files/linux-libre/4.14-i686.conf \
gnu/packages/aux-files/linux-libre/4.14-x86_64.conf \
gnu/packages/aux-files/linux-libre/4.9-i686.conf \
gnu/packages/aux-files/linux-libre/4.9-x86_64.conf \
gnu/packages/aux-files/pack-audit.c \
gnu/packages/aux-files/python/sanity-check.py \
gnu/packages/aux-files/python/sanity-check-next.py \
gnu/packages/aux-files/python/sitecustomize.py \
gnu/packages/aux-files/renpy/renpy.in \
gnu/packages/aux-files/run-in-namespace.c \
gnu/packages/aux-files/xml/patch-catalog-xml.xsl \
gnu/packages/aux-files/xml/docbook-xml/catalog-4.1.2.xml
gnu/packages/aux-files/run-in-namespace.c
# Templates, examples.
EXAMPLES = \
@@ -454,9 +440,6 @@ EXAMPLES = \
gnu/system/examples/desktop.tmpl \
gnu/system/examples/lightweight-desktop.tmpl \
gnu/system/examples/docker-image.tmpl \
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
GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go)
@@ -548,7 +531,6 @@ SCM_TESTS = \
tests/pypi.scm \
tests/read-print.scm \
tests/records.scm \
tests/rpm.scm \
tests/scripts.scm \
tests/search-paths.scm \
tests/services.scm \
@@ -556,9 +538,7 @@ SCM_TESTS = \
tests/services/configuration.scm \
tests/services/lightdm.scm \
tests/services/linux.scm \
tests/services/pam-mount.scm \
tests/services/telephony.scm \
tests/services/vpn.scm \
tests/sets.scm \
tests/size.scm \
tests/status.scm \
@@ -599,7 +579,6 @@ SH_TESTS = \
tests/guix-gc.sh \
tests/guix-git-authenticate.sh \
tests/guix-hash.sh \
tests/guix-locate.sh \
tests/guix-pack.sh \
tests/guix-pack-localstatedir.sh \
tests/guix-pack-relocatable.sh \
@@ -613,10 +592,8 @@ SH_TESTS = \
tests/guix-authenticate.sh \
tests/guix-environment.sh \
tests/guix-environment-container.sh \
tests/guix-refresh.sh \
tests/guix-shell.sh \
tests/guix-shell-export-manifest.sh \
tests/guix-time-machine.sh \
tests/guix-graph.sh \
tests/guix-describe.sh \
tests/guix-repl.sh \
@@ -698,7 +675,8 @@ EXTRA_DIST += \
build-aux/compile-all.scm \
build-aux/compile-as-derivation.scm \
build-aux/config.rpath \
build-aux/convert-xref.scm \
build-aux/convert-xref.scm \
build-aux/cuirass/hurd-manifest.scm \
build-aux/generate-authors.scm \
build-aux/test-driver.scm \
build-aux/update-NEWS.scm \
@@ -708,8 +686,6 @@ EXTRA_DIST += \
etc/guix-install.sh \
etc/historical-authorizations \
etc/news.scm \
etc/hurd-manifest.scm \
etc/kernels-manifest.scm \
etc/release-manifest.scm \
etc/source-manifest.scm \
etc/system-tests.scm \
@@ -776,30 +752,15 @@ endef
# in <https://issues.guix.gnu.org/48963>. Each 'eval' call below creates a
# 'make-*-go' phony target that builds the corresponding subset.
first_fifth := \
gnu/packages/a% gnu/packages/b% gnu/packages/c%
second_fifth := \
gnu/packages/d% gnu/packages/e% gnu/packages/f%
third_fifth := \
gnu/packages/g% gnu/packages/h% gnu/packages/i%
fourth_fifth := \
gnu/packages/j% gnu/packages/k% gnu/packages/l% gnu/packages/m% \
gnu/packages/n% gnu/packages/o%
first_half := \
gnu/packages/a% gnu/packages/b% gnu/packages/c% gnu/packages/d% \
gnu/packages/e% gnu/packages/f% gnu/packages/g% gnu/packages/h% \
gnu/packages/i% gnu/packages/j% gnu/packages/k% gnu/packages/l%
MODULES_CORE := guix.scm $(filter-out guix/scripts/%,$(filter guix/%,$(MODULES)))
MODULES_PACKAGES1 := $(filter $(first_fifth),$(MODULES))
MODULES_PACKAGES2 := $(filter $(second_fifth),$(MODULES))
MODULES_PACKAGES3 := $(filter $(third_fifth),$(MODULES))
MODULES_PACKAGES4 := $(filter $(fourth_fifth),$(MODULES))
MODULES_PACKAGES5 := $(filter-out $(first_fifth) $(second_fifth) \
$(third_fifth) $(fourth_fifth), \
$(filter gnu/packages/%,$(MODULES)))
MODULES_PACKAGES := $(MODULES_PACKAGES1) $(MODULES_PACKAGES2) \
$(MODULES_PACKAGES3) $(MODULES_PACKAGES4) \
$(MODULES_PACKAGES5)
MODULES_PACKAGES1 := $(filter $(first_half),$(MODULES))
MODULES_PACKAGES2 := $(filter-out $(first_half),$(filter gnu/packages/%,$(MODULES)))
MODULES_PACKAGES := $(MODULES_PACKAGES1) $(MODULES_PACKAGES2)
MODULES_SYSTEM := gnu.scm $(filter-out gnu/packages/%,$(filter gnu/%,$(MODULES)))
MODULES_CLI := $(filter guix/scripts/%,$(MODULES))
MODULES_PO := guix/build/po.scm
@@ -819,27 +780,7 @@ $(eval $(call guile-compilation-rule,make-packages2-go, \
$(words $(MODULES_CORE) $(MODULES_PACKAGES1))))
.PHONY: make-packages2-go
$(eval $(call guile-compilation-rule,make-packages3-go, \
$(MODULES_PACKAGES3) make-core-go make-packages1-go make-packages2-go, \
$(words $(MODULES_CORE) $(MODULES_PACKAGES1) $(MODULES_PACKAGES2))))
.PHONY: make-packages3-go
$(eval $(call guile-compilation-rule,make-packages4-go, \
$(MODULES_PACKAGES4) make-core-go make-packages1-go make-packages2-go \
make-packages3-go, \
$(words $(MODULES_CORE) $(MODULES_PACKAGES1) $(MODULES_PACKAGES2) \
$(MODULES_PACKAGES3))))
.PHONY: make-packages4-go
$(eval $(call guile-compilation-rule,make-packages5-go, \
$(MODULES_PACKAGES5) make-core-go make-packages1-go make-packages2-go \
make-packages3-go make-packages4-go, \
$(words $(MODULES_CORE) $(MODULES_PACKAGES1) $(MODULES_PACKAGES2) \
$(MODULES_PACKAGES3) $(MODULES_PACKAGES4))))
.PHONY: make-packages5-go
make-packages-go: make-packages1-go make-packages2-go \
make-packages3-go make-packages4-go make-packages5-go
make-packages-go: make-packages1-go make-packages2-go
.PHONY: make-packages-go
$(eval $(call guile-compilation-rule,make-system-go, \
@@ -1156,19 +1097,6 @@ cuirass-jobs: $(GOBJECTS)
.PHONY: clean-go make-go as-derivation authenticate
.PHONY: update-guix-package update-NEWS cuirass-jobs release
# Git auto-configuration.
.git/hooks/pre-push: etc/git/pre-push
$(AM_V_at)if test -d .git; then \
cp etc/git/pre-push .git/hooks/pre-push; \
fi
.git/config: etc/git/gitconfig
$(AM_V_at)if command -v git >/dev/null && test -d .git; then \
git config --add include.path ../etc/git/gitconfig; \
fi
nodist_noinst_DATA = .git/hooks/pre-push .git/config
# Downloading up-to-date PO files.
WEBLATE_REPO = https://framagit.org/tyreunom/guix-translations
-3
View File
@@ -13,9 +13,6 @@ Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
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
* Changes in 1.4.0 (since 1.3.0)
** Package management
*** New guix home command, for home environment management
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -31,7 +31,7 @@
(srfi srfi-1))
(use-package-modules
base bootloaders commencement compression file gawk gdb gettext guile
base commencement compression file gawk gdb gettext guile
hurd less m4 package-management python ssh version-control)
(define (input->package input)
@@ -64,14 +64,11 @@
;; development packages
gcc-toolchain gdb-minimal git-minimal gnu-make
gettext-minimal python-minimal
;; ourselves!
(package-without-tests guix)
;; system
grub-minimal grub
;; guix environment guix --without-tests=python-minimal --without-tests=gettext-minimal
(package-without-tests gettext-minimal)
(package-without-tests python-minimal)
(append
guix-dependencies
%base-packages/hurd)))
(delete guile-3.0 %base-packages/hurd))))
+204 -16
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019-2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
@@ -34,6 +34,7 @@
(guix profiles)
(guix utils)
(git)
(gnu packages)
(gnu packages base)
(gnu packages compression)
(gnu packages gawk)
@@ -52,8 +53,116 @@
(define file-append*
(@@ (guix self) file-append*))
(define translated-texi-manuals
(@@ (guix self) translate-texi-manuals))
(define (translated-texi-manuals source)
"Return the translated texinfo manuals built from SOURCE."
(define po4a
(specification->package "po4a"))
(define gettext-minimal
(specification->package "gettext-minimal"))
(define documentation
(file-append* source "doc"))
(define documentation-po
(file-append* source "po/doc"))
(define build
(with-imported-modules '((guix build utils) (guix build po))
#~(begin
(use-modules (guix build utils) (guix build po)
(ice-9 match) (ice-9 regex) (ice-9 textual-ports)
(ice-9 vlist) (ice-9 threads)
(srfi srfi-1))
(define (translate-tmp-texi po source output)
"Translate Texinfo file SOURCE using messages from PO, and write
the result to OUTPUT."
(invoke #+(file-append po4a "/bin/po4a-translate")
"-M" "UTF-8" "-L" "UTF-8" "-k" "0" "-f" "texinfo"
"-m" source "-p" po "-l" output))
(define (canonicalize-whitespace str)
;; Change whitespace (newlines, etc.) in STR to #\space.
(string-map (lambda (chr)
(if (char-set-contains? char-set:whitespace chr)
#\space
chr))
str))
(define* (translate-texi prefix po lang
#:key (extras '()))
"Translate the manual for one language LANG using the PO file.
PREFIX must be the prefix of the manual, 'guix' or 'guix-cookbook'. EXTRAS is
a list of extra files, such as '(\"contributing\")."
(for-each (lambda (file)
(translate-tmp-texi po (string-append file ".texi")
(string-append file "." lang
".texi.tmp")))
(cons prefix extras))
(for-each (lambda (file)
(let* ((texi (string-append file "." lang ".texi"))
(tmp (string-append texi ".tmp")))
(copy-file tmp texi)
(translate-cross-references texi po)))
(cons prefix extras)))
(define (available-translations directory domain)
;; Return the list of available translations under DIRECTORY for
;; DOMAIN, a gettext domain such as "guix-manual". The result is
;; a list of language/PO file pairs.
(filter-map (lambda (po)
(let ((base (basename po)))
(and (string-prefix? (string-append domain ".")
base)
(match (string-split base #\.)
((_ ... lang "po")
(cons lang po))))))
(find-files directory
"\\.[a-z]{2}(_[A-Z]{2})?\\.po$")))
(define parallel-jobs
;; Limit thread creation by 'n-par-for-each', mostly to put an
;; upper bound on memory usage.
(min (parallel-job-count) 4))
(mkdir #$output)
(copy-recursively #$documentation "."
#:log (%make-void-port "w"))
(for-each
(lambda (file)
(copy-file file (basename file)))
(find-files #$documentation-po ".*.po$"))
(setenv "GUIX_LOCPATH"
#+(file-append glibc-utf8-locales "/lib/locale"))
(setenv "PATH" #+(file-append gettext-minimal "/bin"))
(setenv "LC_ALL" "en_US.UTF-8")
(setlocale LC_ALL "en_US.UTF-8")
(n-par-for-each parallel-jobs
(match-lambda
((language . po)
(translate-texi "guix" po language
#:extras '("contributing"))))
(available-translations "." "guix-manual"))
(n-par-for-each parallel-jobs
(match-lambda
((language . po)
(translate-texi "guix-cookbook" po language)))
(available-translations "." "guix-cookbook"))
(for-each (lambda (file)
(install-file file #$output))
(append
(find-files "." "contributing\\..*\\.texi$")
(find-files "." "guix\\..*\\.texi$")
(find-files "." "guix-cookbook\\..*\\.texi$"))))))
(computed-file "guix-translated-texinfo" build))
(define info-manual
(@@ (guix self) info-manual))
@@ -78,6 +187,10 @@
%cookbook-languages
%manual-languages))
(define %latest-guix-version
;; Latest released version.
"1.4.0")
(define (texinfo-manual-images source)
"Return a directory containing all the images used by the user manual, taken
from SOURCE, the root of the source tree."
@@ -184,11 +297,16 @@ as well as images, OS examples, and translations."
(define %web-site-url
;; URL of the web site home page.
(or (getenv "GUIX_WEB_SITE_URL")
"/software/guix/"))
"/"))
(define %manual-css-url
;; URL of the main CSS file.
(in-vicinity %web-site-url
"themes/initial/css/manual.css"))
(define %makeinfo-html-options
;; Options passed to 'makeinfo --html'.
'("--css-ref=https://www.gnu.org/software/gnulib/manual.css"
`(,(string-append "--css-ref=" %manual-css-url)
"-c" "EXTRA_HEAD=<meta name=\"viewport\" \
content=\"width=device-width, initial-scale=1\" />"))
@@ -622,9 +740,10 @@ its <pre class=\"lisp\"> blocks (as produced by 'makeinfo --html')."
(define* (stylized-html source input
#:key
(latest-version %latest-guix-version)
(languages %languages)
(manual %manual)
(manual-css-url "/static/base/css/manual.css"))
(manual-css-url %manual-css-url))
"Process all the HTML files in INPUT; add them MANUAL-CSS-URL as a <style>
link, and add a menu to choose among LANGUAGES. Use the Guix PO files found
in SOURCE."
@@ -670,6 +789,14 @@ in SOURCE."
(href ,url))
,label)))
(define menu-item-separator
;; Thin horizontal line to separate drop-down menu items.
`(img (@ (class "hline")
(src ,(in-vicinity
#$%web-site-url
"themes/initial/img/h-separator.png"))
(alt ""))))
(define* (navigation-bar menus #:key split-node?)
;; Return the navigation bar showing all of MENUS.
`(header (@ (class "navbar"))
@@ -716,7 +843,43 @@ in SOURCE."
"https://translate.fedoraproject.org/projects/guix/documentation-cookbook/"
"https://translate.fedoraproject.org/projects/guix/documentation-manual/")))))
(define (stylized-html sxml file)
(define (version-menu-items language split-node?)
;; Return the menu items to select the version of the manual of
;; the type of medium (PDF, split-node, etc.).
(define language-extension
(if (string=? language "en")
""
(string-append "." language)))
(define pdf-link
(string-append (if split-node? "../" "")
#$manual language-extension ".pdf"))
(define version-links
(list (menu-item #$latest-version
(string-append
"/manual/" #$latest-version
"/" language
(if split-node? "/html_node" "")))
(menu-item "development"
(string-append
"/manual/devel/" language
(if split-node? "/html_node" "")))
menu-item-separator))
(append (if (string=? #$manual "guix")
version-links
'())
(list (if split-node?
(menu-item "single page"
(string-append "../" #$manual
language-extension
".html"))
(menu-item "multiple pages"
"html_node"))
(menu-item "PDF" pdf-link))))
(define (stylized-html sxml file language)
;; Return SXML, which was read from FILE, with additional
;; styling.
(define split-node?
@@ -739,9 +902,16 @@ in SOURCE."
;; TODO: Add "Contribute" menu, to report
;; errors, etc.
(list (menu-dropdown
#:label "Version"
#:items
(version-menu-items language
split-node?))
(menu-dropdown
#:label
`(img (@ (alt "Language")
(src "/static/base/img/language-picker.svg")))
(src #$(in-vicinity
%web-site-url
"themes/initial/img/language-picker.svg"))))
#:items
(language-menu-items file)))
#:split-node? split-node?)
@@ -753,13 +923,13 @@ in SOURCE."
((? string? str)
str))))
(define (process-html file)
(define (process-html file language)
;; Parse FILE and add links to translations. Install the result
;; to #$output.
(format (current-error-port) "processing ~a...~%" file)
(let* ((shtml (parameterize ((%strict-tokenizer? #t))
(call-with-input-file file html->shtml)))
(processed (stylized-html shtml file))
(processed (stylized-html shtml file language))
(base (string-drop file (string-length #$input)))
(target (string-append #$output base)))
(mkdir-p (dirname target))
@@ -767,6 +937,15 @@ in SOURCE."
(lambda (port)
(write-shtml-as-html processed port)))))
(define (input-file-language file)
;; Return the language code of FILE, an input file, as a string
;; like "sv" or "zh-cn".
(match (string-tokenize (string-drop file
(string-length #$input))
(char-set-complement
(char-set #\/)))
((language _ ...) language)))
;; Install a UTF-8 locale so we can process UTF-8 files.
(setenv "GUIX_LOCPATH"
#+(file-append glibc-utf8-locales "/lib/locale"))
@@ -777,7 +956,8 @@ in SOURCE."
(n-par-for-each (parallel-job-count)
(lambda (file)
(if (string-suffix? ".html" file)
(process-html file)
(let ((language (input-file-language file)))
(process-html file language))
;; Copy FILE as is to #$output.
(let* ((base (string-drop file (string-length #$input)))
(target (string-append #$output base)))
@@ -844,7 +1024,8 @@ makeinfo OPTIONS."
(let* ((texi (language->texi-file-name language))
(opts `("--html"
"-c" ,(string-append "TOP_NODE_UP_URL=/manual/"
language)
#$%latest-guix-version
"/" language)
#$@options
,texi)))
(format #t "building HTML manual for language '~a'...~%"
@@ -912,8 +1093,11 @@ makeinfo OPTIONS."
sed
tar
texinfo
(texlive-updmap.cfg
(list texlive-epsf texlive-texinfo)))))))
texlive-scheme-basic
texlive-bin ;for GUIX_TEXMF
texlive-epsf
texlive-ec
texlive-texinfo)))))
(define build
(with-imported-modules '((guix build utils))
@@ -1299,6 +1483,7 @@ commit date (an integer)."
(setenv "PATH"
(string-append #+tar "/bin:"
#+xz "/bin:"
#+zstd "/bin:"
#+texinfo "/bin"))
(invoke "tar" "xf" #$(package-source guile))
(mkdir-p (string-append #$output "/en/html_node"))
@@ -1362,7 +1547,9 @@ by 'html-identifier-indexes'."
(let* ((root (canonicalize-path
(string-append (current-source-directory) "/..")))
(string-append (or (current-source-directory)
(string-append (getcwd) "/doc"))
"/..")))
(commit date (latest-commit+date root))
(version (or (getenv "GUIX_MANUAL_VERSION")
(string-take commit 7)))
@@ -1409,7 +1596,8 @@ by 'html-identifier-indexes'."
(merge-index-alists guix-split-node-indexes guile-split-node-indexes))
(format (current-error-port)
"building manual from work tree around commit ~a, ~a~%"
"building manual from work tree (~a) around commit ~a, ~a~%"
root
commit
(let* ((time (make-time time-utc 0 date))
(date (time-utc->date time)))
+171 -253
View File
@@ -26,7 +26,7 @@ choice.
* Packaging Guidelines:: Growing the distribution.
* Coding Style:: Hygiene of the contributor.
* Submitting Patches:: Share your work.
* Tracking Bugs and Changes:: Keeping it all organized.
* Tracking Bugs and Patches:: Keeping it all organized.
* Commit Access:: Pushing to the official repository.
* Updating the Guix Package:: Updating the Guix package definition.
* Writing Documentation:: Improving documentation in GNU Guix.
@@ -130,16 +130,14 @@ more information.
Then, run:
@example
./configure --localstatedir=/var --sysconfdir=/etc
./configure --localstatedir=/var
@end example
@noindent
... where @file{/var} is the normal @code{localstatedir} value
(@pxref{The Store}, for information about this) and @file{/etc} is the
normal @code{sysconfdir} value. Note that you will probably not run
@command{make install} at the end (you don't have to) but it's still
important to pass the right @code{localstatedir} and @code{sysconfdir}
values, which get recorded in the @code{(guix config)} Guile module.
(@pxref{The Store}, for information about this). Note that you will
probably not run @command{make install} at the end (you don't have to)
but it's still important to pass the right @code{localstatedir}.
Finally, you can build Guix and, if you feel so inclined, run the tests
(@pxref{Running the Test Suite}):
@@ -300,10 +298,15 @@ Geiser allows for interactive and incremental development from within
Emacs: code compilation and evaluation from within buffers, access to
on-line documentation (docstrings), context-sensitive completion,
@kbd{M-.} to jump to an object definition, a REPL to try out your code,
and more (@pxref{Introduction,,, geiser, Geiser User Manual}). If you
allow Emacs to load the @file{.dir-locals.el} file at the root of the
project checkout, it will cause Geiser to automatically add the local
Guix sources to the Guile load path.
and more (@pxref{Introduction,,, geiser, Geiser User Manual}). For
convenient Guix development, make sure to augment Guiles load path so
that it finds source files from your checkout:
@lisp
;; @r{Assuming the Guix checkout is in ~/src/guix.}
(with-eval-after-load 'geiser-guile
(add-to-list 'geiser-guile-load-path "~/src/guix"))
@end lisp
To actually edit the code, Emacs already has a neat Scheme mode. But in
addition to that, you must not miss
@@ -612,7 +615,7 @@ A typical package definition may look like this:
)))
@end lisp
@deffn {Procedure} git-version @var{VERSION} @var{REVISION} @var{COMMIT}
@deffn {Scheme Procedure} git-version @var{VERSION} @var{REVISION} @var{COMMIT}
Return the version string for packages using @code{git-fetch}.
@lisp
@@ -621,7 +624,7 @@ Return the version string for packages using @code{git-fetch}.
@end lisp
@end deffn
@deffn {Procedure} hg-version @var{VERSION} @var{REVISION} @var{CHANGESET}
@deffn {Scheme Procedure} hg-version @var{VERSION} @var{REVISION} @var{CHANGESET}
Return the version string for packages using @code{hg-fetch}. It works
in the same way as @code{git-version}.
@end deffn
@@ -773,8 +776,9 @@ the word @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.
@code{python2-foo}. Packages should be added when they are necessary;
we don't add Python 2 variants of the package unless we are going to use
them.
If a project already contains the word @code{python}, we drop this;
for instance, the module python-dateutil is packaged under the names
@@ -965,7 +969,7 @@ When the @var{author} contains hyphens or uppercase letters, as with
The module @code{(guix build-system elm)} provides the following utilities for
working with names and related conventions:
@deffn {Procedure} elm-package-origin @var{elm-name} @var{version} @
@deffn {Scheme procedure} elm-package-origin @var{elm-name} @var{version} @
@var{hash}
Returns a Git origin using the repository naming and tagging regime required
for a published Elm package with the upstream name @var{elm-name} at version
@@ -985,7 +989,7 @@ For example:
@end lisp
@end deffn
@deffn {Procedure} elm->package-name @var{elm-name}
@deffn {Scheme procedure} elm->package-name @var{elm-name}
Returns the Guix-style package name for an Elm package with upstream name
@var{elm-name}.
@@ -993,13 +997,13 @@ Note that there is more than one possible @var{elm-name} for which
@code{elm->package-name} will produce a given result.
@end deffn
@deffn {Procedure} guix-package->elm-name @var{package}
@deffn {Scheme procedure} guix-package->elm-name @var{package}
Given an Elm @var{package}, returns the possibly-inferred upstream name, or
@code{#f} the upstream name is not specified via the @code{'upstream-name}
property and can not be inferred by @code{infer-elm-package-name}.
@end deffn
@deffn {Procedure} infer-elm-package-name @var{guix-name}
@deffn {Scheme procedure} infer-elm-package-name @var{guix-name}
Given the @var{guix-name} of an Elm package, returns the inferred upstream
name, or @code{#f} if the upstream name can't be inferred. If the result is
not @code{#f}, supplying it to @code{elm->package-name} would produce
@@ -1156,26 +1160,16 @@ readability of patches. Seasoned Guix developers may also want to look
at the section on commit access (@pxref{Commit Access}).
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}).
keep track of submissions (@pxref{Tracking Bugs and Patches}). 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}).
Please write commit logs in the ChangeLog format (@pxref{Change Logs,,,
standards, GNU Coding Standards}); you can check the commit history for
examples.
You can help make the review process more efficient, and increase the
chance that your patch will be reviewed quickly, by describing the
context of your patch and the impact you expect it to have. For
example, if your patch is fixing something that is broken, describe the
problem and how your patch fixes it. Tell us how you have tested your
patch. Will users of the code changed by your patch have to adjust
their workflow at all? If so, tell us how. In general, try to imagine
what questions a reviewer will ask, and answer those questions in
advance.
Before submitting a patch that adds or modifies a package definition,
please run through this check list:
@@ -1247,14 +1241,53 @@ Take a look at the profile reported by @command{guix size}
(@pxref{Invoking guix size}). This will allow you to notice references
to other packages unwillingly retained. It may also help determine
whether to split the package (@pxref{Packages with Multiple Outputs}),
and which optional dependencies should be used. In particular, avoid
adding @code{texlive} as a dependency: because of its extreme size, use
@code{texlive-updmap.cfg} procedure instead.
and which optional dependencies should be used. In particular, avoid adding
@code{texlive} as a dependency: because of its extreme size, use
the @code{texlive-tiny} package or @code{texlive-union} procedure instead.
@item
Check that dependent packages (if applicable) are not affected by the
change; @code{guix refresh --list-dependent @var{package}} will help you
do that (@pxref{Invoking guix refresh}).
For important changes, check that dependent packages (if applicable) are
not affected by the change; @code{guix refresh --list-dependent
@var{package}} will help you do that (@pxref{Invoking guix refresh}).
@c See <https://lists.gnu.org/archive/html/guix-devel/2016-10/msg00933.html>.
@cindex branching strategy
@cindex rebuild scheduling strategy
Depending on the number of dependent packages and thus the amount of
rebuilding induced, commits go to different branches, along these lines:
@table @asis
@item 300 dependent packages or less
@code{master} branch (non-disruptive changes).
@item between 300 and 1,800 dependent packages
@code{staging} branch (non-disruptive changes). This branch is intended
to be merged in @code{master} every 6 weeks or so. Topical changes
(e.g., an update of the GNOME stack) can instead go to a specific branch
(say, @code{gnome-updates}). This branch is not expected to be
buildable or usable until late in its development process.
@item more than 1,800 dependent packages
@code{core-updates} branch (may include major and potentially disruptive
changes). This branch is intended to be merged in @code{master} every
6 months or so. This branch is not expected to be buildable or usable
until late in its development process.
@end table
All these branches are @uref{https://@value{SUBSTITUTE-SERVER-1},
tracked by our build farm} and merged into @code{master} once
everything has been successfully built. This allows us to fix issues
before they hit users, and to reduce the window during which pre-built
binaries are not available.
When we decide to start building the @code{staging} or
@code{core-updates} branches, they will be forked and renamed with the
suffix @code{-frozen}, at which time only bug fixes may be pushed to the
frozen branches. The @code{core-updates} and @code{staging} branches
will remain open to accept patches for the next cycle. Please ask on
the mailing list or IRC if unsure where to place a patch.
@c TODO: It would be good with badges on the website that tracks these
@c branches. Or maybe even a status page.
@item
@cindex determinism, of build processes
@@ -1340,12 +1373,6 @@ 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::
* Teams::
@end menu
@node Configuring Git
@subsection Configuring Git
@cindex git configuration
@@ -1359,8 +1386,28 @@ different name or email just for commits in this repository, you can
use @command{git config --local}, or edit @file{.git/config} in the
repository instead of @file{~/.gitconfig}.
Other important Git configuration will automatically be configured when
building the project (@pxref{Building from Git}).
We provide some default settings in @file{etc/git/gitconfig} which
modify how patches are generated, making them easier to read and apply.
These settings can be applied by manually copying them to
@file{.git/config} in your checkout, or by telling Git to include the
whole file:
@example
git config --local include.path ../etc/git/gitconfig
@end example
From then on, any changes to @file{etc/git/gitconfig} would
automatically take effect.
Since the first patch in a series must be sent separately
(@pxref{Sending a Patch Series}), it can also be helpful to tell
@command{git format-patch} to handle the e-mail threading instead of
@command{git send-email}:
@example
git config --local format.thread shallow
git config --local sendemail.thread no
@end example
@node Sending a Patch Series
@subsection Sending a Patch Series
@@ -1383,12 +1430,10 @@ output of the @code{git} package, i.e. @code{git:send-email}.
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:
the Guix mailing list to be reviewed and merged:
@example
$ git send-email --annotate -1
$ git send-email -1 -a --base=auto --to=guix-patches@@gnu.org
@end example
@quotation Tip
@@ -1399,50 +1444,49 @@ other than the @code{master} branch of
@url{https://git.savannah.gnu.org/cgit/guix.git}.
@example
git send-email --annotate --subject-prefix='PATCH core-updates' -1
git send-email -1 -a --base=auto \
--subject-prefix='PATCH core-updates' \
--to=guix-patches@@gnu.org
@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.
drop the @option{-a} flag (which is short for @option{--annotate}).
The @option{--base=auto} flag automatically adds a note at the bottom
of the patch of the commit it was based on, making it easier for
maintainers to rebase and merge your patch.
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}.
@command{git commit -a} 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
$ git commit -a
$ git send-email -1 -a --base=auto -v @var{REVISION} \
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org
@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
interface at @url{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, see @xref{Teams}.
The @file{etc/teams.scm} script may be used to notify all those who
may be interested in your patch of its existence (@pxref{Teams}).
Use @command{etc/teams.scm list-teams} to display all the teams,
decide which team(s) your patch relates to, and use
@command{etc/teams.scm cc} to output various @command{git send-email}
flags which will notify the appropriate team members, or use
@command{etc/teams.scm cc-members} to detect the appropriate teams
automatically.
@unnumberedsubsubsec Multiple Patches
@anchor{Multiple Patches}
@@ -1469,7 +1513,9 @@ We can now send @emph{just} the cover letter to the
that we can send the rest of the patches to.
@example
$ git send-email outgoing/0000-cover-letter.patch --annotate
$ git send-email outgoing/0000-cover-letter.patch -a \
--to=guix-patches@@gnu.org \
$(etc/teams.scm cc-members ...)
$ rm outgoing/0000-cover-letter.patch # we don't want to resend it!
@end example
@@ -1481,7 +1527,9 @@ 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
$ git send-email outgoing/*.patch \
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org \
$(etc/teams.scm cc-members ...)
$ rm -rf outgoing # we don't need these anymore
@end example
@@ -1490,13 +1538,14 @@ 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
$ git send-email -@var{NUMBER_COMMITS} \
-v@var{REVISION} --base=auto \
--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 these changes are necessary.
If need be, you may use @option{--cover-letter -a} to send another cover
letter, e.g. for explaining what's changed since the last revision, and
these changes are necessary.
@node Teams
@subsection Teams
@@ -1523,8 +1572,7 @@ You can run the following command to have the @code{Mentors} team put in
CC of a patch series:
@example
$ git send-email --to=@var{ISSUE_NUMBER}@@debbugs.gnu.org \
--header-cmd='etc/teams.scm cc-mentors-header-cmd' *.patch
$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org $(./etc/teams.scm cc mentors) *.patch
@end example
The appropriate team or teams can also be inferred from the modified
@@ -1533,18 +1581,17 @@ current Git repository to review, you can run:
@example
$ guix shell -D guix
[env]$ git send-email --to=@var{ISSUE_NUMBER}@@debbugs.gnu.org -2
[env]$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org $(./etc/teams.scm cc-members HEAD~2 HEAD) *.patch
@end example
@node Tracking Bugs and Changes
@section Tracking Bugs and Changes
@node Tracking Bugs and Patches
@section Tracking Bugs and Patches
This section describes how the Guix project tracks its bug reports,
patch submissions and topic branches.
This section describes how the Guix project tracks its bug reports and
patch submissions.
@menu
* 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.
@end menu
@@ -1563,71 +1610,9 @@ email to @email{bug-guix@@gnu.org}, while patch submissions are filed
against the @code{guix-patches} package by sending email to
@email{guix-patches@@gnu.org} (@pxref{Submitting Patches}).
@node Managing Patches and Branches
@subsection Managing Patches and Branches
@cindex branching strategy
@cindex rebuild scheduling strategy
Changes should be posted to @email{guix-patches@@gnu.org}. This mailing
list fills the patch-tracking database (@pxref{The Issue Tracker}). It
also allows patches to be picked up and tested by the quality assurance
tooling; the result of that testing eventually shows up on the dashboard
at @indicateurl{https://qa.guix.gnu.org/issue/@var{ISSUE_NUMBER}}, where
@var{ISSUE_NUMBER} is the number assigned by the issue tracker. Leave
time for a review, without committing anything.
As an exception, some changes considered ``trivial'' or ``obvious'' may
be pushed directly to the @code{master} branch. This includes changes
to fix typos and reverting commits that caused immediate problems. This
is subject to being adjusted, allowing individuals to commit directly on
non-controversial changes on parts theyre familiar with.
Changes which affect more than 300 dependent packages (@pxref{Invoking
guix refresh}) should first be pushed to a topic branch other than
@code{master}; the set of changes should be consistent---e.g., ``GNOME
update'', ``NumPy update'', etc. This allows for testing: the branch
will automatically show up at
@indicateurl{https://qa.guix.gnu.org/branch/@var{branch}}, with an
indication of its build status on various platforms.
@cindex feature branches, coordination
To help coordinate the merging of branches, you must create a new
guix-patches issue each time you wish to merge a branch (@pxref{The
Issue Tracker}). The title of the issue requesting to merge a branch
should have the following format:
@cindex merge requests, template
@example
Request for merging "@var{name}" branch
@end example
The @url{https://qa.guix.gnu.org/, QA infrastructure} recognizes such
issues and lists the merge requests on its main page. Normally branches
will be merged in a ``first come, first merged'' manner, tracked through
the guix-patches issues.
If you agree on a different order with those involved, you can track
this by updating which issues block@footnote{You can mark an issue as
blocked by another by emailing @email{control@@debbugs.gnu.org} with the
following line in the body of the email: @code{block XXXXX by YYYYY}.
Where @code{XXXXX} is the number for the blocked issue, and @code{YYYYY}
is the number for the issue blocking it.} which other issues.
Therefore, to know which branch is at the front of the queue, look for
the oldest issue, or the issue that isn't @dfn{blocked} by any other
branch merges. An ordered list of branches with the open issues is
available at @url{https://qa.guix.gnu.org}.
Once a branch is at the front of the queue, wait until sufficient time
has passed for the build farms to have processed the changes, and for
the necessary testing to have happened. For example, you can check
@indicateurl{https://qa.guix.gnu.org/branch/@var{branch}} to see
information on some builds and substitute availability.
@node Debbugs User Interfaces
@subsection Debbugs User Interfaces
@subsubsection Web interface
A web interface (actually @emph{two} web interfaces!) are available to
browse issues:
@@ -1649,88 +1634,6 @@ To view discussions related to issue number @var{n}, go to
@indicateurl{https://issues.guix.gnu.org/@var{n}} or
@indicateurl{https://bugs.gnu.org/@var{n}}.
@subsubsection Command-line interface
Mumi also comes with a command-line interface that can be used to search
existing issues, open new issues and send patches. You do not need to
use Emacs to use the mumi command-line client. You interact with it
only on the command-line.
To use the mumi command-line interface, navigate to a local clone of the
Guix git repository, and drop into a shell with mumi, git and
git:send-email installed.
@example
$ cd guix
~/guix$ guix shell mumi git git:send-email
@end example
To search for issues, say all open issues about "zig", run
@example
~/guix [env]$ mumi search zig is:open
#60889 Add zig-build-system
opened on 17 Jan 17:37 Z by Ekaitz Zarraga
#61036 [PATCH 0/3] Update zig to 0.10.1
opened on 24 Jan 09:42 Z by Efraim Flashner
#39136 [PATCH] gnu: services: Add endlessh.
opened on 14 Jan 2020 21:21 by Nicol? Balzarotti
#60424 [PATCH] gnu: Add python-online-judge-tools
opened on 30 Dec 2022 07:03 by gemmaro
#45601 [PATCH 0/6] vlang 0.2 update
opened on 1 Jan 2021 19:23 by Ryan Prior
@end example
Pick an issue and make it the "current" issue.
@example
~/guix [env]$ mumi current 61036
#61036 [PATCH 0/3] Update zig to 0.10.1
opened on 24 Jan 09:42 Z by Efraim Flashner
@end example
Once an issue is the current issue, you can easily create and send
patches to it using
@example
~/guix [env]$ git format-patch origin/master
~/guix [env]$ mumi send-email foo.patch bar.patch
@end example
Note that you do not have to pass in @samp{--to} or @samp{--cc}
arguments to @command{git format-patch}. @command{mumi send-email} will
put them in correctly when sending the patches.
To open a new issue, run
@example
~/guix [env]$ mumi new
@end example
and send patches
@example
~/guix [env]$ mumi send-email foo.patch bar.patch
@end example
@command{mumi send-email} is really a wrapper around @command{git
send-email} that automates away all the nitty-gritty of sending patches.
It uses the current issue state to automatically figure out the correct
@samp{To} address to send to, other participants to @samp{Cc}, headers
to add, etc.
Also note that, unlike @command{git send-email}, @command{mumi
send-email} works perfectly well with single and multiple patches alike.
It automates away the debbugs dance of sending the first patch, waiting
for a response from debbugs and sending the remaining patches. It does
so by sending the first patch, polling the server for a response, and
then sending the remaining patches. This polling can unfortunately take
a few minutes. So, please be patient.
@subsubsection Emacs interface
If you use Emacs, you may find it more convenient to interact with
issues using @file{debbugs.el}, which you can install with:
@@ -1809,12 +1712,7 @@ project for at least 6 months. This ensures enough interactions with
the contributor, which is essential for mentoring and assessing whether
they are ready to become a committer. Commit access should not be
thought of as a ``badge of honor'' but rather as a responsibility a
contributor is willing to take to help the project. It is expected from
all contributors, and even more so from committers, to help build
consensus and make decisions based on consensus. To learn what
consensus decision making means and understand its finer details, you
are encouraged to read
@url{https://www.seedsforchange.org.uk/consensus}.
contributor is willing to take to help the project.
The following sections explain how to get commit access, how to be ready
to push commits, and the policies and community expectations for commits
@@ -1913,24 +1811,36 @@ To check that commits are signed with correct key, use:
make authenticate
@end example
To avoid accidentally pushing unsigned or signed with the wrong key
commits to Savannah, make sure to configure Git according to
@xref{Configuring Git}.
You can prevent yourself from accidentally pushing unsigned or signed
with the wrong key commits to Savannah by using the pre-push Git hook
located at @file{etc/git/pre-push}:
@example
cp etc/git/pre-push .git/hooks/pre-push
@end example
It additionally calls @code{make check-channel-news} to be sure
@file{news.scm} file is correct.
@subsection Commit Policy
If you get commit access, please make sure to follow the policy below
(discussions of the policy can take place on
If you get commit access, please make sure to follow
the policy below (discussions of the policy can take place on
@email{guix-devel@@gnu.org}).
Ensure you're aware of how the changes should be handled
(@pxref{Managing Patches and Branches}) prior to being pushed to the
repository, especially for the @code{master} branch.
Non-trivial patches should always be posted to
@email{guix-patches@@gnu.org} (trivial patches include fixing typos,
etc.). This mailing list fills the patch-tracking database
(@pxref{Tracking Bugs and Patches}).
If you're committing and pushing your own changes, try and wait at least
one week (two weeks for more significant changes) after you send them
for review. After this, if no one else is available to review them and
if you're confident about the changes, it's OK to commit.
For patches that just add a new package, and a simple one, it's OK to
commit, if you're confident (which means you successfully built it in a
chroot setup, and have done a reasonable copyright and license
auditing). Likewise for package upgrades, except upgrades that trigger
a lot of rebuilds (for example, upgrading GnuTLS or GLib). We have a
mailing list for commit notifications (@email{guix-commits@@gnu.org}),
so people can notice. Before pushing your changes, make sure to run
@code{git pull --rebase}.
When pushing a commit on behalf of somebody else, please add a
@code{Signed-off-by} line at the end of the commit log message---e.g.,
@@ -1945,6 +1855,14 @@ right before pushing:
make check-channel-news
@end example
For anything else, please post to @email{guix-patches@@gnu.org} and
leave time for a review, without committing anything (@pxref{Submitting
Patches}). If you didnt receive any reply after two weeks, and if
you're confident, it's OK to commit.
That last part is subject to being adjusted, allowing individuals to commit
directly on non-controversial changes on parts theyre familiar with.
@subsection Addressing Issues
Peer review (@pxref{Submitting Patches}) and tools such as
+1 -1
View File
@@ -9,4 +9,4 @@
(package
(inherit gdb)
(native-inputs (modify-inputs (package-native-inputs gdb)
(prepend autoconf-2.69 automake texinfo))))
(prepend autoconf-2.64 automake texinfo))))
+87 -1049
View File
File diff suppressed because it is too large Load Diff
+1926 -5068
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,7 +1,7 @@
# htmlxref.cnf - reference file for free Texinfo manuals on the web.
# Modified by Ludovic Courtès <ludo@gnu.org> for the GNU Guix manual.
htmlxrefversion=2022-12-18.15; # UTC
htmlxrefversion=2026-01-19.09; # UTC
# Copyright 2010-2020, 2022 Free Software Foundation, Inc.
#
@@ -415,7 +415,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
GUIX = ${GUIX_ROOT}/manual/1.4.0
guix.de mono ${GUIX}/de/guix.de.html
guix.de node ${GUIX}/de/html_node/
guix.es mono ${GUIX}/es/guix.es.html
+111 -76
View File
@@ -1,79 +1,114 @@
digraph "Guix package" {
"139803511371136" [label = "gcc-core-mesboot0@2.95.3", shape = box, fontname = sans];
"139803511371136" -> "139803511371312" [color = red];
"139803511371136" -> "139803511372016" [color = red];
"139803511371136" -> "139803511371488" [color = red];
"139803511371136" -> "139803511371664" [color = red];
"139803511371136" -> "139803511371840" [color = red];
"139803511371136" -> "139803507105792" [color = red];
"139803511371136" -> "139803511373600" [color = red];
"139803511371136" -> "139803507105968" [color = red];
"139803511371136" -> "139803749199472" [color = red];
"139803511371312" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = sans];
"139803511371312" -> "139803511372016" [color = dimgrey];
"139803511371312" -> "139803511371488" [color = dimgrey];
"139803511371312" -> "139803511371664" [color = dimgrey];
"139803511371312" -> "139803511371840" [color = dimgrey];
"139803511371312" -> "139803507105792" [color = dimgrey];
"139803511371312" -> "139803511373600" [color = dimgrey];
"139803511371312" -> "139803507105968" [color = dimgrey];
"139803511371312" -> "139803749199472" [color = dimgrey];
"139803511372016" [label = "gzip-mesboot@1.2.4", shape = box, fontname = sans];
"139803511372016" -> "139803511372192" [color = magenta];
"139803511372016" -> "139803507105792" [color = magenta];
"139803511372016" -> "139803511373600" [color = magenta];
"139803511372016" -> "139803507105968" [color = magenta];
"139803511372016" -> "139803749199472" [color = magenta];
"139803511372192" [label = "tcc-boot0@0.9.26-1136-g5bba73cc", shape = box, fontname = sans];
"139803511372192" -> "139803511372368" [color = magenta];
"139803511372192" -> "139803511372544" [color = magenta];
"139803511372192" -> "139803507105792" [color = magenta];
"139803511372192" -> "139803511373600" [color = magenta];
"139803511372192" -> "139803507105968" [color = magenta];
"139803511372192" -> "139803749199472" [color = magenta];
"139803511372368" [label = "mes-boot@0.24", shape = box, fontname = sans];
"139803511372368" -> "139803511372544" [color = darkviolet];
"139803511372368" -> "139803507105792" [color = darkviolet];
"139803511372368" -> "139803511373600" [color = darkviolet];
"139803511372368" -> "139803507105968" [color = darkviolet];
"139803511372368" -> "139803749199472" [color = darkviolet];
"139803511372544" [label = "stage0-posix@1.4", shape = box, fontname = sans];
"139803511372544" -> "139803511373072" [color = peachpuff4];
"139803511372544" -> "139803507105792" [color = peachpuff4];
"139803511372544" -> "139803511373600" [color = peachpuff4];
"139803511372544" -> "139803507105968" [color = peachpuff4];
"139803511372544" -> "139803749199472" [color = peachpuff4];
"139803511373072" [label = "bootstrap-seeds@1.0.0", shape = ellipse, fontname = sans];
"139803511373072" -> "139803507105968" [color = cyan3];
"139803507105968" [label = "bootar@1b", shape = box, fontname = sans];
"139803507105968" -> "139803749199472" [color = dimgrey];
"139803749199472" [label = "guile-bootstrap@2.0", shape = ellipse, fontname = sans];
"139803507105792" [label = "gash-boot@0.3.0", shape = box, fontname = sans];
"139803507105792" -> "139803507105968" [color = darkviolet];
"139803507105792" -> "139803749199472" [color = darkviolet];
"139803511373600" [label = "gash-utils-boot@0.2.0", shape = box, fontname = sans];
"139803511373600" -> "139803507105968" [color = red];
"139803511373600" -> "139803507105792" [color = red];
"139803511373600" -> "139803749199472" [color = red];
"139803511371488" [label = "patch-mesboot@2.5.9", shape = box, fontname = sans];
"139803511371488" -> "139803511371840" [color = darkseagreen];
"139803511371488" -> "139803511372192" [color = darkseagreen];
"139803511371488" -> "139803507105792" [color = darkseagreen];
"139803511371488" -> "139803511373600" [color = darkseagreen];
"139803511371488" -> "139803507105968" [color = darkseagreen];
"139803511371488" -> "139803749199472" [color = darkseagreen];
"139803511371840" [label = "make-mesboot0@3.80", shape = box, fontname = sans];
"139803511371840" -> "139803511372192" [color = blue];
"139803511371840" -> "139803507105792" [color = blue];
"139803511371840" -> "139803511373600" [color = blue];
"139803511371840" -> "139803507105968" [color = blue];
"139803511371840" -> "139803749199472" [color = blue];
"139803511371664" [label = "tcc-boot@0.9.27", shape = box, fontname = sans];
"139803511371664" -> "139803511371840" [color = peachpuff4];
"139803511371664" -> "139803511372192" [color = peachpuff4];
"139803511371664" -> "139803507105792" [color = peachpuff4];
"139803511371664" -> "139803511373600" [color = peachpuff4];
"139803511371664" -> "139803507105968" [color = peachpuff4];
"139803511371664" -> "139803749199472" [color = peachpuff4];
"139781154519456" [label = "gcc-core-mesboot0@2.95.3", shape = box, fontname = Helvetica];
"139781154519456" -> "139781154519632" [color = darkgoldenrod];
"139781154519456" -> "139781154520688" [color = darkgoldenrod];
"139781154519456" -> "139781034971312" [color = darkgoldenrod];
"139781154519456" -> "139781154520160" [color = darkgoldenrod];
"139781154519456" -> "139781034971664" [color = darkgoldenrod];
"139781154519456" -> "139781154519984" [color = darkgoldenrod];
"139781154519456" -> "139781154519808" [color = darkgoldenrod];
"139781154519456" -> "139781154520512" [color = darkgoldenrod];
"139781154519456" -> "139781034971488" [color = darkgoldenrod];
"139781154519456" -> "139781034972896" [color = darkgoldenrod];
"139781154519456" -> "139781034972368" [color = darkgoldenrod];
"139781154519456" -> "139781034973072" [color = darkgoldenrod];
"139781154519456" -> "139781131267872" [color = darkgoldenrod];
"139781154519632" [label = "binutils-mesboot0@2.14", shape = box, fontname = Helvetica];
"139781154519632" -> "139781154520688" [color = peachpuff4];
"139781154519632" -> "139781034971312" [color = peachpuff4];
"139781154519632" -> "139781154520160" [color = peachpuff4];
"139781154519632" -> "139781034971664" [color = peachpuff4];
"139781154519632" -> "139781154519984" [color = peachpuff4];
"139781154519632" -> "139781154519808" [color = peachpuff4];
"139781154519632" -> "139781154520512" [color = peachpuff4];
"139781154519632" -> "139781034971488" [color = peachpuff4];
"139781154519632" -> "139781034972896" [color = peachpuff4];
"139781154519632" -> "139781034972368" [color = peachpuff4];
"139781154519632" -> "139781034973072" [color = peachpuff4];
"139781154519632" -> "139781131267872" [color = peachpuff4];
"139781154520688" [label = "bash-mesboot0@2.05b", shape = box, fontname = Helvetica];
"139781154520688" -> "139781034971488" [color = magenta];
"139781154520688" -> "139781034971840" [color = magenta];
"139781154520688" -> "139781034972896" [color = magenta];
"139781154520688" -> "139781034972368" [color = magenta];
"139781154520688" -> "139781034973072" [color = magenta];
"139781154520688" -> "139781131267872" [color = magenta];
"139781034971488" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica];
"139781034971488" -> "139781034971840" [color = dimgrey];
"139781034971488" -> "139781034972896" [color = dimgrey];
"139781034971488" -> "139781034972368" [color = dimgrey];
"139781034971488" -> "139781034973072" [color = dimgrey];
"139781034971488" -> "139781131267872" [color = dimgrey];
"139781034971840" [label = "tcc-boot0@0.9.26-1103-g6e62e0e", shape = box, fontname = Helvetica];
"139781034971840" -> "139781034972016" [color = magenta];
"139781034971840" -> "139781131266816" [color = magenta];
"139781034971840" -> "139781034972896" [color = magenta];
"139781034971840" -> "139781034972368" [color = magenta];
"139781034971840" -> "139781034973072" [color = magenta];
"139781034971840" -> "139781131267872" [color = magenta];
"139781034972016" [label = "mes-boot@0.22", shape = box, fontname = Helvetica];
"139781034972016" -> "139781034972192" [color = cyan3];
"139781034972016" -> "139781131266816" [color = cyan3];
"139781034972016" -> "139781034972896" [color = cyan3];
"139781034972016" -> "139781034972368" [color = cyan3];
"139781034972016" -> "139781034973072" [color = cyan3];
"139781034972016" -> "139781131267872" [color = cyan3];
"139781034972192" [label = "bootstrap-mes-rewired@0.19", shape = ellipse, fontname = Helvetica];
"139781034972192" -> "139781131266640" [color = darkseagreen];
"139781034972192" -> "139781034972896" [color = darkseagreen];
"139781131266640" [label = "bootstrap-mes@0", shape = ellipse, fontname = Helvetica];
"139781034972896" [label = "gash-boot@0.2.0", shape = box, fontname = Helvetica];
"139781034972896" -> "139781034973072" [color = darkviolet];
"139781034972896" -> "139781131267872" [color = darkviolet];
"139781034973072" [label = "bootar@1", shape = box, fontname = Helvetica];
"139781034973072" -> "139781131267872" [color = darkviolet];
"139781131267872" [label = "guile-bootstrap@2.0", shape = ellipse, fontname = Helvetica];
"139781131266816" [label = "bootstrap-mescc-tools@0.5.2", shape = ellipse, fontname = Helvetica];
"139781034972368" [label = "gash-utils-boot@0.1.0", shape = box, fontname = Helvetica];
"139781034972368" -> "139781034973072" [color = darkseagreen];
"139781034972368" -> "139781034972896" [color = darkseagreen];
"139781034972368" -> "139781131267872" [color = darkseagreen];
"139781034971312" [label = "bzip2-mesboot@1.0.8", shape = box, fontname = Helvetica];
"139781034971312" -> "139781034971488" [color = cyan3];
"139781034971312" -> "139781034971840" [color = cyan3];
"139781034971312" -> "139781034972896" [color = cyan3];
"139781034971312" -> "139781034972368" [color = cyan3];
"139781034971312" -> "139781034973072" [color = cyan3];
"139781034971312" -> "139781131267872" [color = cyan3];
"139781154520160" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica];
"139781154520160" -> "139781034971488" [color = red];
"139781154520160" -> "139781034971840" [color = red];
"139781154520160" -> "139781034972896" [color = red];
"139781154520160" -> "139781034972368" [color = red];
"139781154520160" -> "139781034973072" [color = red];
"139781154520160" -> "139781131267872" [color = red];
"139781034971664" [label = "gzip-mesboot@1.2.4", shape = box, fontname = Helvetica];
"139781034971664" -> "139781034971840" [color = red];
"139781034971664" -> "139781034972896" [color = red];
"139781034971664" -> "139781034972368" [color = red];
"139781034971664" -> "139781034973072" [color = red];
"139781034971664" -> "139781131267872" [color = red];
"139781154519984" [label = "patch-mesboot@2.5.9", shape = box, fontname = Helvetica];
"139781154519984" -> "139781034971488" [color = blue];
"139781154519984" -> "139781034971840" [color = blue];
"139781154519984" -> "139781034972896" [color = blue];
"139781154519984" -> "139781034972368" [color = blue];
"139781154519984" -> "139781034973072" [color = blue];
"139781154519984" -> "139781131267872" [color = blue];
"139781154519808" [label = "sed-mesboot0@1.18", shape = box, fontname = Helvetica];
"139781154519808" -> "139781034971488" [color = red];
"139781154519808" -> "139781034971840" [color = red];
"139781154519808" -> "139781034972896" [color = red];
"139781154519808" -> "139781034972368" [color = red];
"139781154519808" -> "139781034973072" [color = red];
"139781154519808" -> "139781131267872" [color = red];
"139781154520512" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica];
"139781154520512" -> "139781034971312" [color = darkviolet];
"139781154520512" -> "139781034971488" [color = darkviolet];
"139781154520512" -> "139781034971840" [color = darkviolet];
"139781154520512" -> "139781034972896" [color = darkviolet];
"139781154520512" -> "139781034972368" [color = darkviolet];
"139781154520512" -> "139781034973072" [color = darkviolet];
"139781154520512" -> "139781131267872" [color = darkviolet];
}
+2 -2
View File
@@ -229,8 +229,8 @@ $(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans)
# The 'case' ensures the man pages are only generated if the corresponding
# source script (the first prerequisite) has been changed. The $(GOBJECTS)
# prerequisite is solely meant to force these docs to be made only after all
# Guile modules have been compiled. We also need the guix script to exist.
$(srcdir)/%D%/guix-%.1: guix/scripts/%.scm $(GOBJECTS) scripts/guix
# Guile modules have been compiled.
$(srcdir)/%D%/guix-%.1: guix/scripts/%.scm $(GOBJECTS)
-@case '$?' in \
*$<*) $(AM_V_P) && set -x || echo " HELP2MAN $@"; \
$(gen_man) --output="$@" "guix $*";; \
-13
View File
@@ -3,16 +3,3 @@
[diff "texinfo"]
xfuncname = "^@node[[:space:]]+([^,]+).*$"
[format]
forceinbodyfrom = true # help preserve commit authorship
thread = shallow
useAutoBase = true
[pull]
rebase = true
[sendemail]
to = guix-patches@gnu.org
headerCmd = etc/teams.scm cc-members-header-cmd
thread = no
+3 -26
View File
@@ -1,6 +1,6 @@
; -*- lisp -*-
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018, 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Daniel Brooks <db48x@db48x.net>
;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
;;;
@@ -37,13 +37,11 @@
(block guix_daemon
;; Require existing types
(typeattributeset cil_gen_require domain)
(typeattributeset cil_gen_require init_t)
(typeattributeset cil_gen_require init_var_run_t)
(typeattributeset cil_gen_require nscd_var_run_t)
(typeattributeset cil_gen_require system_dbusd_var_run_t)
(typeattributeset cil_gen_require tmp_t)
(typeattributeset cil_gen_require nscd_var_run_t)
(typeattributeset cil_gen_require var_log_t)
(typeattributeset cil_gen_require domain)
;; Declare own types
(type guix_daemon_t)
@@ -94,9 +92,6 @@
(allow init_t
guix_store_content_t
(file (open read execute)))
(allow init_t
guix_profiles_t
(dir (setattr)))
;; guix-daemon needs to know the names of users
(allow guix_daemon_t
@@ -176,11 +171,6 @@
execute_no_trans read write open entrypoint map
getattr link unlink)))
;; Remounting /gnu/store read-write.
(allow guix_daemon_t
fs_t
(filesystem (remount)))
;; TODO: unknown
(allow guix_daemon_t
root_t
@@ -228,9 +218,6 @@
(allow guix_daemon_t
tmpfs_t
(file (create open read unlink write)))
(allow guix_daemon_t ;same as above, but with tmp_t
tmp_t
(file (create open read unlink write)))
(allow guix_daemon_t
tmpfs_t
(dir (getattr add_name remove_name write)))
@@ -297,14 +284,6 @@
guix_store_content_t
(sock_file (create getattr setattr unlink write)))
;; Access to run state directories
(allow guix_daemon_t
system_dbusd_var_run_t
(dir (search)))
(allow guix_daemon_t
init_var_run_t
(dir (search)))
;; Access to configuration files and directories
(allow guix_daemon_t
guix_daemon_conf_t
@@ -468,8 +447,6 @@
any (unconfined_u object_r guix_store_content_t (low low)))
(filecon "@prefix@/bin/guix-daemon"
file (system_u object_r guix_daemon_exec_t (low low)))
(filecon "@guix_localstatedir@/guix/profiles/per-user/[^/]+/current-guix/bin/guix-daemon"
file (system_u object_r guix_daemon_exec_t (low low)))
(filecon "@storedir@/.+-(guix-.+|profile)/bin/guix-daemon"
file (system_u object_r guix_daemon_exec_t (low low)))
(filecon "@storedir@/[a-z0-9]+-guix-daemon"
+43 -85
View File
@@ -9,9 +9,8 @@
# Copyright © 2020 Daniel Brooks <db48x@db48x.net>
# Copyright © 2021 Jakub Kądziołka <kuba@kadziolka.net>
# Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
# Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
# Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
# Copyright © 2022 Prafulla Giri <prafulla.giri@protonmail.com>
# Copyright © 2023 Andrew Tropin <andrew@trop.in>
#
# This file is part of GNU Guix.
#
@@ -30,22 +29,6 @@
# We require Bash but for portability we'd rather not use /bin/bash or
# /usr/bin/env in the shebang, hence this hack.
# Environment variables
#
# GUIX_BINARY_FILE_NAME
#
# Can be used to override the automatic download mechanism and point
# to a local Guix binary archive filename like
# "/tmp/guix-binary-1.4.0rc2.armhf-linux.tar.xz"
#
# GUIX_ALLOW_OVERWRITE
#
# Instead of aborting to avoid overwriting a previous installations,
# allow copying over /var/guix or /gnu. This can be useful when the
# installation required the user to extract Guix packs under /gnu to
# satisfy its dependencies.
if [ "x$BASH_VERSION" = "x" ]
then
exec bash "$0" "$@"
@@ -70,7 +53,6 @@ REQUIRE=(
"chmod"
"uname"
"groupadd"
"useradd"
"tail"
"tr"
"xz"
@@ -138,8 +120,10 @@ chk_require()
command -v "$c" &>/dev/null || warn+=("$c")
done
[ "${#warn}" -ne 0 ] && die "Missing commands: ${warn[*]}."
[ "${#warn}" -ne 0 ] &&
{ _err "${ERR}Missing commands: ${warn[*]}.";
return 1; }
_msg "${PAS}verification of required commands completed"
}
@@ -353,18 +337,16 @@ sys_create_store()
_debug "--- [ ${FUNCNAME[0]} ] ---"
if [[ -e /var/guix && -e /gnu ]]; then
if [ -n "$GUIX_ALLOW_OVERWRITE" ]; then
_msg "${WAR}Overwriting existing installation!"
else
die "A previous Guix installation was found. Refusing to overwrite."
fi
if [[ -e "/var/guix" || -e "/gnu" ]]; then
die "A previous Guix installation was found. Refusing to overwrite."
fi
cd "$tmp_path"
tar --extract --file "$pkg" && _msg "${PAS}unpacked archive"
_msg "${INF}Installing /var/guix and /gnu..."
# Strip (skip) the leading . component, which fails on read-only /.
tar --extract --strip-components=1 --file "$pkg" -C /
mv "${tmp_path}/var/guix" /var/
mv "${tmp_path}/gnu" /
_msg "${INF}Linking the root user's profile"
mkdir -p ~root/.config/guix
@@ -434,27 +416,36 @@ sys_enable_guix_daemon()
_msg "${PAS}enabled Guix daemon via upstart"
;;
systemd)
{ install_unit()
{
local dest="/etc/systemd/system/$1"
rm -f "$dest"
cp ~root/.config/guix/current/lib/systemd/system/"$1" "$dest"
chmod 664 "$dest"
systemctl daemon-reload
systemctl enable "$1"
}
{ # systemd .mount units must be named after the target directory.
# Here we assume a hard-coded name of /gnu/store.
# XXX Work around <https://issues.guix.gnu.org/41356> until next release.
if [ -f ~root/.config/guix/current/lib/systemd/system/gnu-store.mount ]; then
cp ~root/.config/guix/current/lib/systemd/system/gnu-store.mount \
/etc/systemd/system/;
chmod 664 /etc/systemd/system/gnu-store.mount;
systemctl daemon-reload &&
systemctl enable gnu-store.mount;
fi
install_unit guix-daemon.service
cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
/etc/systemd/system/;
chmod 664 /etc/systemd/system/guix-daemon.service;
# Work around <https://bugs.gnu.org/36074>, present in 1.0.1.
sed -i /etc/systemd/system/guix-daemon.service \
-e "s/GUIX_LOCPATH='/'GUIX_LOCPATH=/";
# Work around <https://bugs.gnu.org/35671>, present in 1.0.1.
if ! grep en_US /etc/systemd/system/guix-daemon.service >/dev/null;
then sed -i /etc/systemd/system/guix-daemon.service \
-e 's/^Environment=\(.*\)$/Environment=\1 LC_ALL=en_US.UTF-8';
fi;
configure_substitute_discovery \
/etc/systemd/system/guix-daemon.service
# Install after guix-daemon.service to avoid a harmless warning.
# systemd .mount units must be named after the target directory.
# Here we assume a hard-coded name of /gnu/store.
install_unit gnu-store.mount
systemctl daemon-reload &&
systemctl enable guix-daemon &&
systemctl start guix-daemon; } &&
_msg "${PAS}enabled Guix daemon via systemd"
;;
@@ -544,19 +535,15 @@ export PATH="$_GUIX_PROFILE/bin${PATH:+:}$PATH"
# searches 'Info-default-directory-list'.
export INFOPATH="$_GUIX_PROFILE/share/info:$INFOPATH"
# GUIX_PROFILE: User's default profile and home profile
GUIX_PROFILE="$HOME/.guix-profile"
[ -f "$GUIX_PROFILE/etc/profile" ] && . "$GUIX_PROFILE/etc/profile"
[ -L "$GUIX_PROFILE" ] || \
GUIX_LOCPATH="$GUIX_PROFILE/lib/locale:${GUIX_LOCPATH:+:}$GUIX_LOCPATH"
# GUIX_PROFILE: User's default profile
# Prefer the one from 'guix home' if it exists.
GUIX_PROFILE="$HOME/.guix-home/profile"
[ -f "$GUIX_PROFILE/etc/profile" ] && . "$GUIX_PROFILE/etc/profile"
[ -L "$GUIX_PROFILE" ] || \
GUIX_LOCPATH="$GUIX_PROFILE/lib/locale:${GUIX_LOCPATH:+:}$GUIX_LOCPATH"
[ -L $GUIX_PROFILE ] || GUIX_PROFILE="$HOME/.guix-profile"
[ -L $GUIX_PROFILE ] || return
GUIX_LOCPATH="$GUIX_PROFILE/lib/locale"
export GUIX_LOCPATH
[ -f "$GUIX_PROFILE/etc/profile" ] && . "$GUIX_PROFILE/etc/profile"
EOF
}
@@ -581,8 +568,7 @@ sys_create_shell_completion()
sys_customize_bashrc()
{
prompt_yes_no "Customize users Bash shell prompt for Guix?" || return 0
prompt_yes_no "Customize users Bash shell prompt for Guix?" || return
for bashrc in /home/*/.bashrc /root/.bashrc; do
test -f "$bashrc" || continue
grep -Fq '$GUIX_ENVIRONMENT' "$bashrc" && continue
@@ -599,30 +585,6 @@ fi
_msg "${PAS}Bash shell prompt successfully customized for Guix"
}
sys_maybe_setup_selinux()
{
if ! [ -f /sys/fs/selinux/policy ]
then
return
fi
local c
for c in semodule restorecon
do
if ! command -v "$c" &>/dev/null
then
return
fi
done
prompt_yes_no "Install SELinux policy that might be required to run guix-daemon?" \
|| return 0
local var_guix=/var/guix/profiles/per-user/root/current-guix
semodule -i "${var_guix}/share/selinux/guix-daemon.cil"
restorecon -R /gnu /var/guix
}
welcome()
{
local char
@@ -653,10 +615,7 @@ https://www.gnu.org/software/guix/
EOF
# Don't use read -p here! It won't display when run non-interactively.
echo -n "Press return to continue..."$'\r'
if ! read -r char; then
echo
die "Can't read standard input. Hint: don't pipe scripts into a shell."
fi
read -r char
if [ "$char" ]; then
echo
echo "...that ($char) was not a return!"
@@ -698,7 +657,6 @@ main()
sys_create_store "${GUIX_BINARY_FILE_NAME}" "${tmp_path}"
sys_create_build_user
sys_maybe_setup_selinux
sys_enable_guix_daemon
sys_authorize_build_farms
sys_create_init_profile
-35
View File
@@ -1,35 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Leo Famulari <leo@famulari.name>
;;;
;;; 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 related to linux-libre.
;;; Simplistically, it selects packages whose names begin with "linux-libre".
;;; It is used to assist continuous integration of the kernel packages.
(use-modules (guix packages)
(guix profiles)
(gnu packages))
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(if (string-prefix? "linux-libre"
(package-name package))
(cons package lst)
lst))
'())))
+6 -477
View File
@@ -1,22 +1,22 @@
;; GNU Guix news, for use by 'guix pull'.
;;
;; Copyright © 2019-2023 Ludovic Courtès <ludo@gnu.org>
;; Copyright © 2019-2022 Ludovic Courtès <ludo@gnu.org>
;; Copyright © 20192021 Tobias Geerinckx-Rice <me@tobias.gr>
;; 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 © 20192023 Florian Pelz <pelzflorian@pelzflorian.de>
;; Copyright © 2019, 2020, 2021 Julien Lepiller <julien@lepiller.eu>
;; Copyright © 20192022 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>
;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;; Copyright © 20212023 Leo Famulari <leo@famulari.name>
;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;; Copyright © 2021 Leo Famulari <leo@famulari.name>
;; Copyright © 2021 Zhu Zihao <all_but_last@163.com>
;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be>
;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;; Copyright © 2021, 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;; Copyright © 2021 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;; Copyright © 2022 Thiago Jung Bauermann <bauermann@kolabnow.com>
;;
;; Copying and distribution of this file, with or without modification, are
@@ -26,477 +26,6 @@
(channel-news
(version 0)
(entry (commit "db775e7367e8deffb513aad94f4afb875d796d0b")
(title
(en "Linux-libre 6.3 removed due to end of upstream support")
(de "Linux-libre 6.3 wurde entfernt"))
(body
(en "The linux-libre 6.3 kernel series has reached the end of
its life, and is no longer supported upstream. For this
reason, it has been removed from GNU Guix.")
(de "Vom Kernel @code{linux-libre} wird die 6.3-Versionsreihe keine
Unterstützung von dessen Anbieter mehr erfahren (end of life). Daher ist es
aus GNU Guix entfernt worden.")))
(entry (commit "bff1f2d4d07e934ea296f9c724b5337996a27c44")
(title
(en "Linux-libre kernel updated to 6.4")
(de "Linux-libre-Kernel wird auf 6.4 aktualisiert")
(fr "Le noyau linux-libre est mis à jour vers la 6.4")
(pt "Kernel linux-libre atualizado para 6.4"))
(body
(en "The default version of the linux-libre kernel has been updated to
the 6.4 release series.")
(de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 6.4-Versionsreihe.")
(fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 6.4.")
(pt "A versão padrão do kernel linux-libre foi atualizada para a
série do kernel 6.4.")))
(entry (commit "1b7aabbc79969a89141aadd3d41d7a5329a3462e")
(title
(en "New @command{guix locate} command")
(de "Neuer Befehl @command{guix locate}")
(fr "Nouvelle commande @command{guix locate}"))
(body
(en "The new @command{guix locate} command lets you search for
packages containing a given file---at long last! For instance, to find which
package(s) provide a file named @file{ls}, run:
@example
guix locate ls
@end example
Currently the command relies on purely local information. It is thus unable
to find packages that have not reached your store. This limitation will be
lifted in a future revision.
Run @command{info \"(guix) Invoking guix locate\"} for more info.")
(de "Mit dem neuen Befehl @command{guix locate} können Sie nach
Paketen suchen, die eine angegebene Datei enthalten  endlich ist es
soweit! Um zum Beispiel das Paket bzw.@: die Pakete zu finden, die eine
Datei namens @file{ls} bereitstellen, führen Sie aus:
@example
guix locate ls
@end example
Derzeit benutzt der Befehl ausschließlich lokal vorliegende
Informationen. Daher können Sie damit nur Pakete finden, die sich in
Ihrem Store-Verzeichnis befinden. Diese Einschränkung werden wir in
einer zukünftigen Version aufheben.
Führen Sie @command{info \"(guix) Invoking guix locate\"} aus, um mehr zu
erfahren.")
(fr "La nouvelle commande @command{guix locate} permet de chercher le
ou les paquets contenant un fichier donné---enfin! Par exemple, pour trouver
quel paquet fournit un fichier nommé @file{ls}, on lance:
@example
guix locate ls
@end example
Pour le moment la commande se base uniquement sur des informations locales.
Elle ne peut donc pas trouver des paquets absents de votre dépôt. Cette limitation
sera levée dans une prochaine version.
Lancer @command{info \"(guix) Invoking guix locate\"} pour plus d'informations.")))
(entry (commit "ba5da5125a81307500982517e2f458d57b024668")
(title
(en "New @code{arguments} rule for @command{guix style}")
(de "Neue Stilregel @code{arguments} für @command{guix style}")
(fr "Nouvelle règle @code{arguments} pour @command{guix style}"))
(body
(en "The @command{guix style} command has a new @dfn{styling rule}
for package definitions. Package writers may now run the following command:
@example
guix style -L /path/to/channel -S arguments @var{package}
@end example
This command rewrites the @code{arguments} field of @var{package} so that it
uses G-expressions instead of classical quasiquotation.
Run @command{info \"(guix) Invoking guix style\"} for more info.")
(de "Der Befehl @command{guix style} verfügt über eine neue @dfn{Stilregel}
für Paketdefinitionen. Paketautoren können jetzt folgenden Befehl benutzen:
@example
guix style -L /pfad/zum/kanal -S arguments @var{Paket}
@end example
Dadurch wird das Feld @code{arguments} in @var{Paket} so umgeschrieben, dass
G-Ausdrücke (gexps) anstelle von klassischer Quasiquotierung verwendet
werden.
Führen Sie @command{info \"(guix.de) Aufruf von guix style\"} aus, um
mehr Informationen zu erhalten.")
(fr "La commande @command{guix style} a une nouvelle @dfn{règle de
style} pour les définitions de paquets. Les auteurices de paquets peuvent
maintenant lancer la commande suivante:
@example
guix style -L /chemin/vers/canal -S arguments @var{paquet}
@end example
Cette commande réécrit le champ @code{arguments} de @var{paquet} pour qu'il
utilise des G-expressions plutôt que des quasicitations classiques.
Lancer @command{info \"(guix.fr) Invoquer guix style\"} pour plus
d'informations.")))
(entry (commit "ae11fcb84ac478dfa56d322ef08890645183a087")
(title
(en "New @option{--with-configure-flag} transformation option")
(de "Neue Paketumwandlungsoption @option{--with-configure-flag}")
(fr "Nouvelle option de transformation @option{--with-configure-flag}"))
(body
(en "The new @option{--with-configure-flag} package transformation
option lets you pass an additional configure flag to the build system of a
package. For instance, here is how you would pass a flag to @command{cmake},
the build system of the @code{lapack} package:
@example
guix build lapack \\
--with-configure-flag=lapack=-DBUILD_SHARED_LIBS=OFF
@end example
Run @command{info \"(guix) Package Transformation Options\"} for more info.")
(de "Die neue Paketumwandlungsoption @option{--with-configure-flag}
macht es möglich, dem Erstellungssystem eines Pakets eine zusätzliche
Befehlszeilenoption für configure mitzugeben. Zum Beispiel können Sie dem
@command{cmake}-Erstellungssystem des @code{lapack}-Pakets eine Option mitgeben:
@example
guix build lapack \\
--with-configure-flag=lapack=-DBUILD_SHARED_LIBS=OFF
@end example
Führen Sie für mehr Informationen @command{info \"(guix.de)
Paketumwandlungsoptionen\"} aus.")
(fr "La nouvelle option de transformation de paquets
@option{--with-configure-flag} permet de passer un drapeau supplémentaire au
système de construction d'un paquet. Par exemple, voici comment on passerait
un drapeau à @command{cmake}, le système de construction du logiciel
@code{lapack}:
@example
guix build lapack \\
--with-configure-flag=lapack=-DBUILD_SHARED_LIBS=OFF
@end example
Voir @command{info \"(guix.fr) Options de transformation de paquets\"} pour
plus de détails.")))
(entry (commit "c919bfefd98bf2e29549539b4e28e6dc2a8a6f32")
(title
(en "Core packages updated")
(de "Kern-Pakete aktualisiert")
(fr "Mise à jour des logiciels importants"))
(body
(en "Core packages have been updated, following months of hard work
by contributors. Noteworthy package upgrades include:
@itemize
@item glibc 2.35;
@item Python 3.10;
@item Perl 5.36;
@item Mesa 22;
@item GCC 11 is now used as the default compiler.
@end itemize
A major highlight is the introduction of the so-called @dfn{full-source
bootstrap}: packages are all built starting from a 500-byte program called
stage0, which is then used to build a higher-level interpreter, a basic Scheme
interpreter and C compiler (GNU Mes), and so on, until @acronym{GCC, the GNU
Compiler Collection} is finally built. This is a premiere and a huge step
forward in terms of transparency of auditability.")
(de "Die Pakete, die den Kern der Distribution ausmachen, haben eine
Aktualisierung bekommen. Dies ist das Ergebnis monatelanger harter Arbeit
unserer Mitwirkenden. Zu den wichtigen Paketaktualisierungen gehören:
@itemize
@item glibc 2.35,
@item Python 3.10,
@item Perl 5.36,
@item Mesa 22,
@item GCC 11 wird jetzt standardmäßig als Compiler benutzt.
@end itemize
Eine große Neuigkeit ist, dass Guix jetzt auf Bootstrapping aus dem Quellcode
allein basiert: Grundlage der Pakete ist ein 500 Byte großes Programm namens
stage0, womit ein weiter abstrahierter Interpretierer kompiliert wird, dann ein
grundlegender Scheme-Interpretierer und C-Compiler (GNU Mes), und so geht es
weiter, bis endlich @acronym{GCC, die GNU Compiler Collection} erstellt wird. Es
ist eine Premiere und ein großer Schritt nach vorne, was Transparenz und
Auditierbarkeit angeht.")
(fr "Les logiciels de base ont été mis à jour, après des mois de dur
labeur par les contributeur·rices du projet. Parmi les mises à jour notables,
il y a:
@itemize
@item glibc 2.35;
@item Python 3.10;
@item Perl 5.36;
@item Mesa 22;
@item GCC 11 est dorénavant le compilateur par défaut.
@end itemize
Une autre nouveauté importante est l'introduction de @dfn{l'amorçage intégral
depuis le source} (@i{full-source bootstrap} en anglais): les logiciels sont
compilés en partant d'un programme de 500 octets appelé stage0, à partir
duquel on compile un interprète de plus haut niveau, un interprète Scheme et
un compilateur C de base (GNU Mes), et ainsi de suite, jusqu ce que
@acronym{GCC, the GNU Compiler Collection} soit enfin compilé. C'est une
première et un grand pas en avant en termes de transparence et
d'auditabilité.")))
(entry (commit "21564fada141bfba25d471518b293b6004244c3a")
(title
(en "Linux-libre LTS kernel updated to 6.1")
(de "Linux-libre LTS Kernel wird auf 6.1 aktualisiert"))
(body
(en "The default version of the @code{linux-libre-lts} kernel has been
updated to the 6.1 longterm release series.")
(de "Der standardmäßig verwendete @code{linux-libre-lts}-Kernel basiert
jetzt auf der 6.1-Versionsreihe (Langzeitunterstützung).")))
(entry (commit "57db09aae73e3713a10c5253758d84e1046f80dc")
(title
(en "Using Guix within @command{guix shell --container}")
(de "Guix innerhalb @command{guix shell --container} nutzen")
(fr "Utilisation de Guix dans @command{guix shell --container}"))
(body
(en "The @option{--container} (or @option{-C}) option lets you spawn
a container---an isolated software environment. In some cases, it is useful
to use Guix from within the container, something that is normally not
possible.
The new @option{--nesting} (or @option{-W}) option lets you do exactly that: a
container created with that option will let you use @command{guix} commands,
including @command{guix shell -C}, @emph{inside} of it.
The example below shows how to evaluate a @file{guix.scm} file to build a
package from within an isolated container, which is useful if @file{guix.scm}
is untrusted:
@example
guix shell -CW -- guix build -f guix.scm
@end example
Run @command{info \"(guix) Invoking guix shell\"} for more information.")
(de "Mit der Befehlszeilenoption @option{--container} (oder
@option{-C}) können Sie Container anlegen, also isolierte
Software-Umgebungen. Allerdings will man manchmal Guix innerhalb eines
Containers nutzen, was unmöglich ist, wenn Sie es normal aufrufen.
Die neue Befehlszeilenoption @option{--nesting} (oder @option{-W}) ergänzt
genau das: In einem damit angelegten Container lassen sich
@command{guix}-Befehle, einschließlich @command{guix shell -C}, @emph{im
Container} benutzen.
Folgendes Beispiel zeigt, wie Sie eine Datei @file{guix.scm} auswerten lassen,
um ein Paket aus dem isolierten Container heraus erstellen zu lassen. Das
können Sie gebrauchen, wenn Sie @file{guix.scm} @emph{nicht} vertrauen:
@example
guix shell -CW -- guix build -f guix.scm
@end example
Führen Sie @command{info \"(guix.de) Aufruf von guix shell\"} aus, um mehr
zu erfahren.")
(fr "L'option @option{--container} (ou @option{-C}) permet de
démarrer un conteneur---un environnement logiciel isolé. Dans certains cas,
il peut être utile d'utiliser Guix à l'intérieur du conteneur, ce qui n'est
normalement pas possible.
La nouvelle option @option{--nesting} (ou @option{-W}) résoud ce problème : un
conteneur créé avec cette option permet d'utiliser des commandes
@command{guix} à l'intérieur, y compris @command{guix shell -C}.
L'exemple ci-dessous montre comment évaluer un fichier @file{guix.scm} pour
construire un paquet depuis un conteneur isolé, ce qui est utile si
@file{guix.scm} n'est pas de confiance :
@example
guix shell -CW -- guix build -f guix.scm
@end example
Lancer @command{info \"(guix.fr) Invoquer guix shell\"} pour plus
d'informations.")))
(entry (commit "0e18c5e5bcb9204c278cfc75493d3b02b746d5c3")
(title
(en "Linux-libre kernel updated to 6.2")
(de "Linux-libre-Kernel wird auf 6.2 aktualisiert")
(fr "Le noyau linux-libre est mis à jour vers la 6.2")
(pt "Kernel linux-libre atualizado para 6.2"))
(body
(en "The default version of the linux-libre kernel has been updated to
the 6.2 release series.")
(de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 6.2-Versionsreihe.")
(fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 6.2.")
(pt "A versão padrão do kernel linux-libre foi atualizada para a
série do kernel 6.2.")))
(entry (commit "598f4c509bbfec2b983a8ee246cce0a0fe45ec7f")
(title
(de "Neues Format @samp{rpm} für den Befehl @command{guix pack}")
(en "New @samp{rpm} format for the @command{guix pack} command")
(fr "Nouveau format @samp{rpm} pour la commande @command{guix pack}"))
(body
(de "Sie können jetzt auch RPM-Archive (mit der Dateinamenserweiterung
.rpm) erzeugen mit dem Befehl @command{guix pack --format=rpm}. Damit
haben Sie einen alternativen Distributionsweg für mit Guix erstellte
Software. Hier sehen Sie ein einfaches Beispiel, wie Sie ein
RPM-Archiv für das Paket @code{hello} erzeugen:
@example
guix pack --format=rpm --symlink=/usr/bin/hello=bin/hello hello
@end example
Siehe @command{info \"(guix.de) Aufruf von guix pack\"} für mehr
Informationen.")
(en "RPM archives (with the .rpm file extension) can now be produced
via the @command{guix pack --format=rpm} command, providing an alternative
distribution path for software built with Guix. Here is a simple example that
generates an RPM archive for the @code{hello} package:
@example
guix pack --format=rpm --symlink=/usr/bin/hello=bin/hello hello
@end example
See @command{info \"(guix) Invoking guix pack\"} for more information.")
(fr "Vous pouvez désormais produire une archive RPM (avec l'extension
.rpm) avec la commande @command{guix pack --format=rpm} qui propose
donc une nouvelle manière de distribuer les logiciels construits avec
Guix. Voici un exemple permettant de générer une archive RPM pour le
paquet @code{hello} :
@example
guix pack --format=rpm --symlink=/usr/bin/hello=bin/hello hello
@end example
Consultez @command{info \"(guix.fr) Invoquer guix pack\"} pour plus
d'informations.")))
(entry (commit "137b91f03bbb7f1df71cf10c4f79ae57fbcea400")
(title
(en "New @option{--with-version} package transformation option")
(de "Neue Paketumwandlungsoption @option{--with-version}")
(fr "Nouvelle option de transformation @option{--with-version}"))
(body
(en "The new @option{--with-version} package transformation option
generalizes @option{--with-latest}: it gets the specified upstream release of
a package and uses it instead of the currently-packaged version.
For example, the command below would spawn GNOME Clocks built against GTK
4.7.0, skipping its test suite:
@example
guix shell gnome-clocks --with-version=gtk=4.7.0 \\
--without-tests=gtk -- gnome-clocks
@end example
Run @command{info \"(guix) Package Transformation Options\"} for more info.")
(de "Die neue Paketumwandlungsoption @option{--with-version}
verallgemeinert @option{--with-latest}: Mit ihr kann man angeben, welche
vom Anbieter veröffentlichte Version man anstelle der derzeit im Paket
vorgegebenen haben möchte.
Zum Beispiel kann mit folgendem Befehl ein für die GTK-Version 4.7.0
erstelltes GNOME Clocks aufgerufen werden, wobei der Testkatalog dafür
übersprungen wird.
@example
guix shell gnome-clocks --with-version=gtk=4.7.0 \\
--without-tests=gtk -- gnome-clocks
@end example
Führen Sie für mehr Informationen @command{info \"(guix.de)
Paketumwandlungsoptionen\"} aus.")
(fr "La nouvelle option de transformation de paquets
@option{--with-version} généralise @option{--with-latest} : elle permet de
spécifier quelle version amont d'un logiciel utiliser à la place de celle
actuellement fournie.
Par exemple, la commande ci-dessous démarre GNOME Clocks construit avec GTK
4.7.0, sans lancer sa suite de tests :
@example
guix shell gnome-clocks --with-version=gtk=4.7.0 \\
--without-tests=gtk -- gnome-clocks
@end example
Voir @command{info \"(guix.fr) Options de transformation de paquets\"} pour
plus de détails.")))
(entry (commit "9ea37eb9f5329c213757bbfe5d9241cde8433858")
(title
(en "Linux-libre 6.0 removed due to end of upstream support")
(de "Linux-libre 6.0 wurde entfernt"))
(body
(en "The linux-libre 6.0 kernel series has reached the end of
its life, and no longer supported upstream. For this
reason, it has been removed from GNU Guix.")
(de "Vom Kernel @code{linux-libre} wird die 6.0-Versionsreihe keine
Unterstützung von dessen Anbieter mehr erfahren (end of life). Daher ist es
aus GNU Guix entfernt worden.")))
(entry (commit "ce8a34bc9ab89f31f107383ba791954864aed372")
(title
(en "Linux-libre kernel updated to 6.1")
(de "Linux-libre-Kernel wird auf 6.1 aktualisiert")
(fr "Le noyau linux-libre est mis à jour vers la 6.1")
(pt "Kernel linux-libre atualizado para 6.1"))
(body
(en "The default version of the linux-libre kernel has been updated to
the 6.1 release series.")
(de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 6.1-Versionsreihe.")
(fr "La version par défaut du noyau linux-libre est mise à jour
vers la série des 6.1.")
(pt "A versão padrão do kernel linux-libre foi atualizada para a
série do kernel 6.1.")))
(entry (commit "064c5b7e450f9f6d55cfcd0ec2bc9e96ee0b2958")
(title
(en "Linux-libre 4.9 removed due to end of upstream support")
(de "Linux-libre 4.9 wurde entfernt"))
(body
(en "The linux-libre 4.9 kernel series has reach the end of its life,
and is no longer supported upstream. For this reason, it has been removed from
GNU Guix.")
(de "Vom Kernel @code{linux-libre} wird die 4.9-Versionsreihe keine
Unterstützung von dessen Anbieter mehr erfahren (end of life). Daher ist es
aus GNU Guix entfernt worden.")))
(entry (commit "dfc6957a5af7d179d4618eb19d4f555c519bc6f2")
(title
(en "New @code{customize-linux} procedure")
(de "Neue Prozedur @code{customize-linux}")
(fr "Nouvelle procédure @code{customize-linux}"))
(body
(en "The @code{(gnu packages linux)} module includes a new
@code{customize-linux} procedure, which should now be used instead of
replacing the @samp{\"kconfig\"} native input of a @code{linux-libre}-derived
package, as the kernel config file is no longer provided as a native
input.")
(de "Das Modul @code{(gnu packages linux)} enthält eine neue Prozedur
@code{customize-linux}, die von nun an für angepasste Linux-Pakete benutzt
werden sollte. Die native Eingabe @samp{\"kconfig\"} eines von
@code{linux-libre} abgeleiteten Pakets zu ersetzen, funktioniert nicht mehr,
weil die Kernel-Konfigurationsdatei nicht mehr als native Eingabe vorliegt.")
(fr "Le module @code{(gnu packages linux)} inclut une nouvelle
procédure @code{customize-linux}, qui devrait maintenant être utilisée au lieu
de remplacer l'entrée native @samp{\"kconfig\"} d'un paquet dérivé de
@code{linux-libre}, car le fichier de configuration du noyau n'est plus fourni
en tant qu'entrée native.")))
(entry (commit "788602b37ff42f730d4b7b569b0fb51465f147da")
(title
(en "New @option{--symlink} option for @command{guix shell}")
+4 -3
View File
@@ -1,7 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2023 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -74,14 +73,16 @@ TARGET."
"connman" "network-manager" "network-manager-applet"
"openssh" "ntp" "tor"
"linux-libre" "grub-hybrid"
"icecat"))
;; FIXME: Add IceCat when Rust is available on i686.
;;"icecat"
))
%default-xorg-modules))
(define %packages-to-cross-build
;; Packages that must be cross-buildable from x86_64-linux.
;; FIXME: Add (@ (gnu packages gcc) gcc) when <https://bugs.gnu.org/40463>
;; is fixed.
(append (list (@ (gnu packages guile) guile-3.0/pinned))
(append (list (@ (gnu packages guile) guile-3.0/fixed))
(map specification->package
'("coreutils" "grep" "sed" "findutils" "diffutils" "patch"
"gawk" "gettext" "gzip" "xz"
+4 -4
View File
@@ -56,12 +56,12 @@ scheme-mode
(git-reference...
"(git-reference"
n> "(url \"" p "\")"
n> "(commit " (p "commit") "))")
n> "(commit \"" p "\"))")
(svn-reference...
"(svn-reference"
n> "(url \"" p "\")"
n> "(revision " (p "revision") "))")
n> "(revision \"" p "\"))")
(cvs-reference...
"(cvs-reference"
@@ -72,12 +72,12 @@ scheme-mode
(hg-reference...
"(hg-reference"
n> "(url \"" p "\")"
n> "(changeset " (p "changeset") "))")
n> "(changeset \"" p "\"))")
(bzr-reference...
"(bzr-reference"
n> "(url \"" p "\")"
n> "(revision " (p "revision") "))")
n> "(revision \"" p "\"))")
(:phases\ "#:phases (modify-phases %standard-phases"
n> p ")")
+1 -1
View File
@@ -1,6 +1,6 @@
-*- mode: lisp-data -*-
text-mode :when (bound-and-true-p git-commit-mode)
text-mode :when (and (fboundp 'git-commit-mode) (git-commit-mode))
(add\ "gnu: Add "
(p (with-temp-buffer
@@ -1,9 +0,0 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-add-package
# key: add
# --
gnu: Add ${1:`(when (string-match "\\+(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): New variable.
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`
@@ -1,9 +0,0 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-remove-package
# key: remove
# --
gnu: Remove ${1:`(when (string-match "\\-(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): Delete variable.
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`
@@ -1,14 +0,0 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-rename-package
# key: rename
# --
gnu: ${1:`(when (string-match "\\-(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))
`}: Rename package to ${2:`
(when (string-match "\\+(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): Define in terms of
'deprecated-package'.
($2): New variable, formerly known as "$1".
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`
@@ -1,12 +0,0 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-update-package
# key: update
# --
gnu: ${1:`(when (string-match "^[ ]*(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}: Update to ${2:`
(when (string-match "^\\+[ ]*(version \"\\(.*\\)\"" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}.
* `(car (log-edit-files))` ($1): Update to $2.$0
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`
@@ -1,9 +0,0 @@
# -*- mode: snippet -*-
# name: guix-vc-commit-message-use-https-home-page
# key: https
# --
gnu: ${1:`(when (string-match "^[ ]*(define-public \\(\\S-+\\)" vc-patch-string)
(match-string-no-properties 1 vc-patch-string))`}: Use HTTPS home page URI.
* `(car (log-edit-files))` ($1)[home-page]: Use HTTPS URI.
`(mapconcat (lambda (file) (concat "* " file)) (cdr (log-edit-files)) "\n")`
@@ -1,9 +0,0 @@
# -*- mode: snippet -*-
# name: guix-news-entry
# key: entry...
# --
(entry (commit "$1")
(title
(en "$2"))
(body
(en "$3")))
+81 -297
View File
@@ -3,10 +3,8 @@
!#
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -36,27 +34,9 @@
(ice-9 format)
(ice-9 regex)
(ice-9 match)
(ice-9 rdelim)
(guix ui)
(git))
(define-record-type <regexp*>
(%make-regexp* pat flag rx)
regexp*?
(pat regexp*-pattern)
(flag regexp*-flag)
(rx regexp*-rx))
;;; Work around regexp implementation.
;;; This record allows to track the regexp pattern and then display it.
(define* (make-regexp* pat #:optional (flag regexp/extended))
"Alternative to `make-regexp' producing annotated <regexp*> objects."
(%make-regexp* pat flag (make-regexp pat flag)))
(define (regexp*-exec rx* str)
"Execute the RX* regexp, a <regexp*> object."
(regexp-exec (regexp*-rx rx*) str))
(define-record-type <team>
(make-team id name description members scope)
team?
@@ -117,7 +97,7 @@
(list "gnu/packages/django.scm"
"gnu/packages/jupyter.scm"
;; Match haskell.scm and haskell-*.scm.
(make-regexp* "^gnu/packages/python(-.+|)\\.scm$")
(make-regexp "^gnu/packages/python(-.+|)\\.scm$")
"gnu/packages/sphinx.scm"
"gnu/packages/tryton.scm"
"guix/build/pyproject-build-system.scm"
@@ -137,7 +117,7 @@ the haskell-build-system."
#:scope
(list "gnu/packages/dhall.scm"
;; Match haskell.scm and haskell-*.scm.
(make-regexp* "^gnu/packages/haskell(-.+|)\\.scm$")
(make-regexp "^gnu/packages/haskell(-.+|)\\.scm$")
"gnu/packages/purescript.scm"
"guix/build/haskell-build-system.scm"
"guix/build-system/haskell.scm"
@@ -146,17 +126,6 @@ the haskell-build-system."
"guix/import/stackage.scm"
"guix/scripts/import/hackage.scm")))
(define-team qt
(team 'qt
#:name "Qt team"
#:description
"The Qt toolkit/library and the qt-build-system,
as well as some packages using Qt."
#:scope (list "gnu/packages/qt.scm"
"guix/build-system/qt.scm"
"guix/build/qt-build-system.scm"
"guix/build/qt-utils.scm")))
(define-team r
(team 'r
#:name "R team"
@@ -171,40 +140,12 @@ and the r-build-system."
"guix/scripts/import/cran.scm"
"tests/cran.scm")))
(define-team telephony
(team 'telephony
#:name "Telephony team"
#:description
"Telephony packages and services such as Jami, Linphone, etc."
#:scope (list "gnu/build/jami-service.scm"
"gnu/packages/jami.scm"
"gnu/packages/linphone.scm"
"gnu/packages/telephony.scm"
"gnu/services/telephony.scm"
"gnu/tests/data/jami-dummy-account.dat"
"gnu/tests/telephony.scm"
"tests/services/telephony.scm")))
(define-team tex
(team 'tex
#:name "TeX team"
#:description
"TeX, LaTeX, XeLaTeX, LuaTeX, TeXLive, the texlive-build-system, and
the \"texlive\" importer."
#:scope (list "gnu/packages/tex.scm"
"gnu/packages/texlive.scm"
"guix/build/texlive-build-system.scm"
"guix/build-system/texlive.scm"
"guix/import/texlive.scm"
"guix/scripts/import/texlive.scm"
"tests/texlive.scm")))
(define-team julia
(team 'julia
#:name "Julia team"
#:description
"The Julia language, Julia packages, and the julia-build-system."
#:scope (list (make-regexp* "^gnu/packages/julia(-.+|)\\.scm$")
#:scope (list (make-regexp "^gnu/packages/julia(-.+|)\\.scm$")
"guix/build/julia-build-system.scm"
"guix/build-system/julia.scm")))
@@ -233,36 +174,27 @@ importer, and the ocaml-build-system."
and the maven-build-system."
#:scope
(list ;; Match java.scm and java-*.scm.
(make-regexp* "^gnu/packages/java(-.+|)\\.scm$")
(make-regexp "^gnu/packages/java(-.+|)\\.scm$")
;; Match maven.scm and maven-*.scm
(make-regexp* "^gnu/packages/maven(-.+|)\\.scm$")
(make-regexp "^gnu/packages/maven(-.+|)\\.scm$")
"guix/build/ant-build-system.scm"
"guix/build/java-utils.scm"
"guix/build/maven-build-system.scm"
;; The maven directory
(make-regexp* "^guix/build/maven/")
(make-regexp "^guix/build/maven/")
"guix/build-system/ant.scm"
"guix/build-system/maven.scm")))
(define-team science
(team 'science
#:name "Science team"
#:description "The main science disciplines and fields related
packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
#:scope (list "gnu/packages/algebra.scm"
"gnu/packages/astronomy.scm"
"gnu/packages/geo.scm"
"gnu/packages/chemistry.scm"
"gnu/packages/maths.scm")))
#:name "Science team"))
(define-team emacs
(team 'emacs
#:name "Emacs team"
#:description "The extensible, customizable text editor and its
ecosystem."
#:scope (list "gnu/packages/aux-files/emacs/guix-emacs.el"
(make-regexp* "^gnu/packages/emacs(-.+|)\\.scm$")
"gnu/packages/tree-sitter.scm"
#:scope (list (make-regexp "^gnu/packages/emacs(-.+|)\\.scm$")
"guix/build/emacs-build-system.scm"
"guix/build/emacs-utils.scm"
"guix/build-system/emacs.scm"
@@ -276,7 +208,7 @@ ecosystem."
#:description
"Common Lisp and similar languages, Common Lisp packages and the
asdf-build-system."
#:scope (list (make-regexp* "^gnu/packages/lisp(-.+|)\\.scm$")
#:scope (list (make-regexp "^gnu/packages/lisp(-.+|)\\.scm$")
"guix/build/asdf-build-system.scm"
"guix/build/lisp-utils.scm"
"guix/build-system/asdf.scm")))
@@ -301,22 +233,14 @@ asdf-build-system."
"guix/scripts/import/go.scm"
"tests/go.scm")))
(define-team bootstrap
(team 'bootstrap
#:name "Bootstrap"
#:scope (list "gnu/packages/mes.scm")))
(define-team embedded
(team 'embedded
#:name "Embedded"
#:scope (list "gnu/packages/bootloaders.scm"
"gnu/packages/firmware.scm")))
(define-team embedded-bootstrap
(team 'embedded-bootstrap
#:name "Embedded / Bootstrap"))
(define-team rust
(team 'rust
#:name "Rust"
#:scope (list (make-regexp* "^gnu/packages/(crates|rust)(-.+|)\\.scm$")
"gnu/packages/sequoia.scm"
#:scope (list (make-regexp "^gnu/packages/(crates|rust)(-.+|)\\.scm$")
"guix/build/cargo-build-system.scm"
"guix/build/cargo-utils.scm"
"guix/build-system/cargo.scm"
@@ -414,9 +338,9 @@ asdf-build-system."
"guix/upstream.scm"
"guix/utils.scm"
"guix/workers.scm"
(make-regexp* "^guix/platforms/")
(make-regexp* "^guix/scripts/")
(make-regexp* "^guix/store/"))))
(make-regexp "^guix/platforms/")
(make-regexp "^guix/scripts/")
(make-regexp "^guix/store/"))))
(define-team games
(team 'games
@@ -429,32 +353,21 @@ asdf-build-system."
"gnu/packages/motti.scm"
"guix/build/minetest-build-system.scm")))
(define-team localization
(team 'localization
#:name "Localization (l10n) team"
#:description
"Localization of your system to specific languages."
#:scope (list "gnu/packages/anthy.scm"
"gnu/packages/fcitx5.scm"
"gnu/packages/fcitx.scm"
"gnu/packages/fonts.scm"
"gnu/packages/ibus.scm")))
(define-team translations
(team 'translations
#:name "Translations"
#:scope (list "etc/news.scm"
(make-regexp* "^po/"))))
(make-regexp "^po/"))))
(define-team installer
(team 'installer
#:name "Installer script and system installer"
#:scope (list (make-regexp* "^gnu/installer(\\.scm$|/)"))))
#:scope (list (make-regexp "^gnu/installer(\\.scm$|/)"))))
(define-team home
(team 'home
#:name "Team for \"Guix Home\""
#:scope (list (make-regexp* "^(gnu|guix/scripts)/home(\\.scm$|/)")
#:scope (list (make-regexp "^(gnu|guix/scripts)/home(\\.scm$|/)")
"tests/guix-home.sh"
"tests/home-import.scm"
"tests/home-services.scm")))
@@ -480,45 +393,13 @@ and Thunderbird."
"The Racket language and Racket-based languages, Racket packages,
Racket's variant of Chez Scheme, and development of a Racket build system and
importer."
#:scope (list "gnu/packages/chez.scm"
"gnu/packages/racket.scm")))
(define-team reproduciblebuilds
(team 'reproduciblebuilds
#:name "Reproducible Builds team"
#:description
"Reproducible Builds tooling and issues that affect any guix packages."
#:scope (list "gnu/packages/diffoscope.scm")))
(define-team gnome
(team 'gnome
#:name "Gnome team"
#:description
"The Gnome desktop environment, along with core technologies such as
GLib/GIO, GTK, GStreamer and Webkit."
#:scope (list "gnu/packages/glib.scm"
"gnu/packages/gstreamer.scm"
"gnu/packages/gtk.scm"
"gnu/packages/gnome.scm"
"gnu/packages/gnome-xyz.scm"
"gnu/packages/webkit.scm"
"guix/build/glib-or-gtk-build-system.scm"
"guix/build/meson-build-system.scm")))
(define-team xfce
(team 'xfce
#:name "Xfce team"
#:description "Xfce desktop environment."
#:scope (list "gnu/packages/xfce.scm")))
(define-team lxqt
(team 'lxqt
#:name "LXQt team"
#:description "LXQt desktop environment."
#:scope (list "gnu/packages/lxqt.scm"
"gnu/packages/qt.scm")))
#:scope (list "gnu/packages/racket.scm")))
(define-member (person "Thiago Jung Bauermann"
"bauermann@kolabnow.com")
embedded-bootstrap translations)
(define-member (person "Eric Bavier"
"bavier@posteo.net")
science)
@@ -533,15 +414,11 @@ GLib/GIO, GTK, GStreamer and Webkit."
(define-member (person "Ludovic Courtès"
"ludo@gnu.org")
core home bootstrap installer mentors)
core home embedded-bootstrap mentors)
(define-member (person "Andreas Enge"
"andreas@enge.fr")
lxqt science tex)
(define-member (person "Tobias Geerinckx-Rice"
"me@tobias.gr")
core kernel mentors)
science)
(define-member (person "Björn Höfling"
"bjoern.hoefling@bjoernhoefling.de")
@@ -553,7 +430,7 @@ GLib/GIO, GTK, GStreamer and Webkit."
(define-member (person "Efraim Flashner"
"efraim@flashner.co.il")
embedded bootstrap julia rust science)
embedded-bootstrap julia rust science)
(define-member (person "jgart"
"jgart@dismail.de")
@@ -581,14 +458,14 @@ GLib/GIO, GTK, GStreamer and Webkit."
(define-member (person "Liliana Marie Prikler"
"liliana.prikler@gmail.com")
emacs games gnome)
emacs games)
(define-member (person "Ricardo Wurmus"
"rekado@elephly.net")
r core mentors tex)
r core mentors)
(define-member (person "Christopher Baines"
"guix@cbaines.net")
"mail@cbaines.net")
core mentors ruby)
(define-member (person "Andrew Tropin"
@@ -613,37 +490,13 @@ GLib/GIO, GTK, GStreamer and Webkit."
(define-member (person "Raghav Gururajan"
"rg@raghavgururajan.name")
gnome mentors)
(define-member (person "宋文武"
"iyzsong@envs.net")
games localization lxqt xfce)
(define-member (person "Vagrant Cascadian"
"vagrant@debian.org")
embedded)
(define-member (person "Vagrant Cascadian"
"vagrant@reproducible-builds.org")
reproduciblebuilds)
(define-member (person "Zhu Zihao"
"all_but_last@163.com")
localization xfce)
(define-member (person "Maxim Cournoyer"
"maxim.cournoyer@gmail.com")
gnome qt telephony)
(define-member (person "Katherine Cox-Buday"
"cox.katherine.e+guix@gmail.com")
emacs go lisp)
mentors)
(define (find-team name)
(or (hash-ref %teams (string->symbol name))
(error (format #false
"no such team: ~a~%" name))))
"no such team: ~a~%" name))))
(define (find-team-by-scope files)
"Return the team(s) which scope matches at least one of the FILES, as list
@@ -654,8 +507,8 @@ of file names as string."
(any (match-lambda
((? string? scope)
(string=? scope file))
((? regexp*? scope)
(regexp*-exec scope file)))
((? regexp? scope)
(regexp-exec scope file)))
(team-scope team)))
files)
(cons team acc)
@@ -666,74 +519,56 @@ of file names as string."
(define (cc . teams)
"Return arguments for `git send-email' to notify the members of the given
TEAMS when a patch is received by Debbugs."
(let ((members (append-map team-members teams)))
(unless (null? members)
(format #true "--add-header=\"X-Debbugs-Cc: ~{~a~^, ~}\""
(map person-email (sort-members members))))))
(format #true
"~{--add-header=\"X-Debbugs-Cc: ~a\"~^ ~}"
(map person-email
(delete-duplicates (append-map team-members teams) equal?))))
(define (sort-members members)
"Deduplicate and sort MEMBERS alphabetically by their name."
(sort (delete-duplicates members equal?)
(lambda (m1 m2)
(string<? (person-name m1) (person-name m2)))))
(define (member->string member)
"Return the 'email <name>' string representation of MEMBER."
(let* ((name (person-name member))
(quoted-name/maybe (if (string-contains name ",")
(string-append "\"" name "\"")
name)))
(format #false "~a <~a>" quoted-name/maybe (person-email member))))
(define* (list-members team #:key (prefix ""))
(define* (list-members team #:optional port (prefix ""))
"Print the members of the given TEAM."
(for-each (lambda (member)
(format #t "~a~a~%" prefix (member->string member)))
(sort-members (team-members team))))
(define port* (or port (current-output-port)))
(for-each
(lambda (member)
(format port*
"~a~a <~a>~%"
prefix
(person-name member)
(person-email member)))
(sort
(team-members team)
(lambda (m1 m2) (string<? (person-name m1) (person-name m2))))))
(define (print-team team)
"Print TEAM, a <team> record object."
(format #t
"\
(define (list-teams)
"Print all teams, their scope and their members."
(define port* (current-output-port))
(define width* (%text-width))
(for-each
(lambda (team)
(format port*
"\
id: ~a
name: ~a
description: ~a
~amembers:
"
(team-id team)
(team-name team)
(or (and=> (team-description team)
(lambda (text)
(string->recutils
(fill-paragraph text (%text-width)
(string-length "description: ")))))
"<none>")
(match (team-scope team)
(() "")
(scope (format #f "scope:~%~{+ ~a~^~%~}~%"
(sort (map (match-lambda
((? regexp*? rx)
(regexp*-pattern rx))
(item item))
scope)
string<?)))))
(list-members team #:prefix "+ ")
(newline))
(define (sort-teams teams)
"Sort TEAMS, a list of <team> record objects."
(sort teams
(lambda (team1 team2)
(string<? (symbol->string (team-id team1))
(symbol->string (team-id team2))))))
(define* (list-teams #:optional team-names)
"Print all teams, their scope and their members."
(for-each print-team
(sort-teams
(if team-names
(map find-team team-names)
(hash-map->list (lambda (_ value) value) %teams)))))
(team-id team)
(team-name team)
(or (and=> (team-description team)
(lambda (text)
(string->recutils
(fill-paragraph text width*
(string-length "description: ")))))
"<none>")
(match (team-scope team)
(() "")
(scope (format #f "scope: ~{~s ~}~%" scope))))
(list-members team port* "+ ")
(newline))
(sort
(hash-map->list (lambda (key value) value) %teams)
(lambda (team1 team2)
(string<? (symbol->string (team-id team1))
(symbol->string (team-id team2)))))))
(define (diff-revisions rev-start rev-end)
@@ -761,51 +596,14 @@ and REV-END, two git revision strings."
(const 0))
files))
(define (git-patch->commit-id file)
"Parse the commit ID from the first line of FILE, a patch produced with git."
(call-with-input-file file
(lambda (port)
(let ((m (string-match "^From ([0-9a-f]{40})" (read-line port))))
(unless m
(error "invalid patch file:" file))
(match:substring m 1)))))
(define (git-patch->revisions file)
"Return the start and end revisions of FILE, a patch file produced with git."
(let* ((rev-end (git-patch->commit-id file))
(rev-start (string-append rev-end "^")))
(list rev-start rev-end)))
(define (patch->teams patch-file)
"Return the name of the teams in scope for the changes in PATCH-FILE."
(map (compose symbol->string team-id)
(find-team-by-scope (apply diff-revisions
(git-patch->revisions patch-file)))))
(define (main . args)
(match args
(("cc" . team-names)
(apply cc (map find-team team-names)))
(("cc-members" patch-file)
(unless (file-exists? patch-file)
(error "patch file does not exist:" patch-file))
(apply main "cc-members" (git-patch->revisions patch-file)))
(("cc-members" rev-start rev-end)
(apply cc (find-team-by-scope
(diff-revisions rev-start rev-end))))
(("cc-members-header-cmd" patch-file)
(let* ((teams (map find-team (patch->teams patch-file)))
(members (sort-members (append-map team-members teams))))
(unless (null? members)
(format #true "X-Debbugs-Cc: ~{~a~^, ~}"
(map member->string members)))))
(("cc-mentors-header-cmd" patch-file)
(format #true "X-Debbugs-Cc: ~{~a~^, ~}"
(map member->string
(sort-members (team-members (find-team "mentors"))))))
(("get-maintainer" patch-file)
(apply main "list-members" (patch->teams patch-file)))
(("list-teams" . args)
(list-teams))
(("list-members" . team-names)
@@ -813,28 +611,14 @@ and REV-END, two git revision strings."
(lambda (team-name)
(list-members (find-team team-name)))
team-names))
(("show" . team-names)
(list-teams team-names))
(anything
(format (current-error-port)
"Usage: etc/teams.scm <command> [<args>]
Commands:
cc <team-name>
get git send-email flags for cc-ing <team-name>
cc-members <start> <end> | <patch>
cc teams related to files changed between revisions or in a patch file
cc-members-header-cmd <patch>
cc-members variant for use with 'git send-email --header-cmd'
cc-mentors-header-cmd <patch>
command to use with 'git send-email --header-cmd' to notify mentors
list-teams
list teams and their members
list-members <team-name>
list members belonging to <team-name>
get-maintainer <patch>
compatibility mode with Linux get_maintainer.pl
show <team-name>
display <team-name> properties~%"))))
cc <team-name> get git send-email flags for cc-ing <team-name>
cc-members <start> <end> cc teams related to files changed between revisions
list-teams list teams and their members
list-members <team-name> list members belonging to <team-name>~%"))))
(apply main (cdr (command-line)))
-50
View File
@@ -1,50 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.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/>.
;;; This file returns a manifest of packages related to linux-libre.
;;; Simplistically, it selects packages whose names begin with "linux-libre".
;;; It is used to assist continuous integration of the kernel packages.
(use-modules (guix packages)
(guix profiles)
(guix utils)
(gnu packages))
(define* (qt-packages-manifest #:key major-version negate-version-test?)
"Return a manifest of Qt packages for MAJOR-VERSION, or any version if left
unspecified. If NEGATE-VERSION-TEST? is true, select all the Qt packages
*not* matching MAJOR-VERSION."
(manifest
(map package->manifest-entry
(fold-packages
(lambda (package lst)
(let ((uri (and=> (package-source package)
(lambda (x)
(and (origin? x)
(origin-uri x))))))
(if (and uri
(string? uri)
(string-prefix? "mirror://qt/" uri)
(if major-version
((if negate-version-test? not identity)
(string=? major-version (version-major
(package-version package))))
#t))
(cons package lst)
lst)))
'()))))
-34
View File
@@ -1,34 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.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/>.
;;; This file returns a manifest of packages related to linux-libre.
;;; Simplistically, it selects packages whose names begin with "linux-libre".
;;; It is used to assist continuous integration of the kernel packages.
(load "common.scm")
;;; Commentary:
;;;
;;; This manifest can be used to update the latest Qt packages collection, via
;;; e.g.:
;;;
;;; ./pre-inst-env guix refresh -u -m etc/teams/qt/qt-manifest.scm
;;;
;;; Code:
(qt-packages-manifest #:major-version "5" #:negate-version-test? #t)
+52 -53
View File
@@ -322,22 +322,26 @@ instead~%")))
(force %bootloaders))
(leave (G_ "~a: no such bootloader~%") name)))
(define (efi-bootloader-profile packages files hooks)
"Creates a profile from the lists of PACKAGES and FILES from the store.
This profile is meant to be used by the bootloader-installer.
(define (efi-bootloader-profile files bootloader-package hooks)
"Creates a profile with BOOTLOADER-PACKAGE and a directory collection/ with
links to additional FILES from the store. This collection is meant to be used
by the bootloader installer.
FILES is a list of file or directory names from the store, which will be
symlinked into the profile. If a directory name ends with '/', then the
directory content instead of the directory itself will be symlinked into the
profile.
symlinked into the collection/ directory. If a directory name ends with '/',
then the directory content instead of the directory itself will be symlinked
into the collection/ directory.
FILES may contain file like objects produced by procedures like plain-file,
FILES may contain file like objects produced by functions like plain-file,
local-file, etc., or package contents produced with file-append.
HOOKS lists additional hook functions to modify the profile."
(define (efi-bootloader-profile-hook manifest)
(define (bootloader-collection manifest)
(define build
(with-imported-modules '((guix build utils))
(with-imported-modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-1)
(srfi srfi-26))
#~(begin
(use-modules ((guix build utils)
#:select (mkdir-p strip-store-file-name))
@@ -361,7 +365,8 @@ HOOKS lists additional hook functions to modify the profile."
(define (name-is-store-entry? name)
"Return #t if NAME is a direct store entry and nothing inside."
(not (string-index (strip-store-file-name name) #\/)))
(let* ((files '#$files)
(let* ((collection (string-append #$output "/collection"))
(files '#$files)
(directories (filter name-ends-with-/? files))
(names-from-directories
(append-map (lambda (directory)
@@ -369,11 +374,11 @@ HOOKS lists additional hook functions to modify the profile."
directories))
(names (append names-from-directories
(remove name-ends-with-/? files))))
(mkdir-p #$output)
(mkdir-p collection)
(if (every file-exists? names)
(begin
(for-each (lambda (name)
(symlink-to name #$output
(symlink-to name collection
(if (name-is-store-entry? name)
strip-store-file-name
basename)))
@@ -381,63 +386,57 @@ HOOKS lists additional hook functions to modify the profile."
#t)
#f)))))
(gexp->derivation "efi-bootloader-profile"
(gexp->derivation "bootloader-collection"
build
#:local-build? #t
#:substitutable? #f
#:properties
`((type . profile-hook)
(hook . efi-bootloader-profile-hook))))
(hook . bootloader-collection))))
(profile (content (packages->manifest packages))
(name "efi-bootloader-profile")
(hooks (cons efi-bootloader-profile-hook hooks))
(profile (content (packages->manifest (list bootloader-package)))
(name "bootloader-profile")
(hooks (append (list bootloader-collection) hooks))
(locales? #f)
(allow-collisions? #f)
(relative-symlinks? #f)))
(define* (efi-bootloader-chain final-bootloader
(define* (efi-bootloader-chain files
final-bootloader
#:key
(packages '())
(files '())
(hooks '())
installer
disk-image-installer)
"Define a chain of bootloaders with the FINAL-BOOTLOADER, optional PACKAGES,
and optional directories and files from the store given in the list of FILES.
installer)
"Define a bootloader chain with FINAL-BOOTLOADER as the final bootloader and
certain directories and files from the store given in the list of FILES.
The package of the FINAL-BOOTLOADER and all PACKAGES and FILES will be placed
in an efi-bootloader-profile, which will be passed to the INSTALLER.
FILES may contain file-like objects produced by procedures like plain-file,
local-file, etc., or package contents produced with file-append.
FILES may contain file like objects produced by functions like plain-file,
local-file, etc., or package contents produced with file-append. They will be
collected inside a directory collection/ inside a generated bootloader profile,
which will be passed to the INSTALLER.
If a directory name in FILES ends with '/', then the directory content instead
of the directory itself will be symlinked into the efi-bootloader-profile.
of the directory itself will be symlinked into the collection/ directory.
The procedures in the HOOKS list can be used to further modify the bootloader
profile. It is possible to pass a single function instead of a list.
If the INSTALLER argument is used, then this gexp procedure will be called to
install the efi-bootloader-profile. Otherwise the installer of the
FINAL-BOOTLOADER will be called.
If the DISK-IMAGE-INSTALLER is used, then this gexp procedure will be called
to install the efi-bootloader-profile into a disk image. Otherwise the
disk-image-installer of the FINAL-BOOTLOADER will be called."
(bootloader
(inherit final-bootloader)
(name "efi-bootloader-chain")
(package
(efi-bootloader-profile (cons (bootloader-package final-bootloader)
packages)
files
(if (list? hooks)
hooks
(list hooks))))
(installer
(or installer
(bootloader-installer final-bootloader)))
(disk-image-installer
(or disk-image-installer
(bootloader-disk-image-installer final-bootloader)))))
If the INSTALLER argument is used, then this function will be called to install
the bootloader. Otherwise the installer of the FINAL-BOOTLOADER will be called."
(let* ((final-installer (or installer
(bootloader-installer final-bootloader)))
(profile (efi-bootloader-profile files
(bootloader-package final-bootloader)
(if (list? hooks)
hooks
(list hooks)))))
(bootloader
(inherit final-bootloader)
(package profile)
(installer
#~(lambda (bootloader target mount-point)
(#$final-installer bootloader target mount-point)
(copy-recursively
(string-append bootloader "/collection")
(string-append mount-point target)
#:follow-symlinks? #t
#:log (%make-void-port "w")))))))
+90 -152
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 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
@@ -53,14 +53,13 @@
grub-theme-gfxmode
install-grub-efi-removable
make-grub-efi-netboot-installer
install-grub-efi-netboot
grub-bootloader
grub-efi-bootloader
grub-efi-removable-bootloader
grub-efi32-bootloader
grub-efi-netboot-bootloader
grub-efi-netboot-removable-bootloader
grub-mkrescue-bootloader
grub-minimal-bootloader
@@ -354,7 +353,7 @@ code."
((or #f (? string?))
#~(format #f "search --file --set ~a" #$file)))))
(define* (make-grub-configuration grub config entries
(define* (grub-configuration-file config entries
#:key
(locale #f)
(system (%current-system))
@@ -392,7 +391,7 @@ when booting a root file system on a Btrfs subvolume."
;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a
;; separate partition.
;; When STORE-DIRECTORY-PREFIX is defined, prepend it the linux and
;; When BTRFS-SUBVOLUME-FILE-NAME is defined, prepend it the linux and
;; initrd paths, to allow booting from a Btrfs subvolume.
#~(format port "menuentry ~s {
~a
@@ -404,23 +403,17 @@ when booting a root file system on a Btrfs subvolume."
#$linux (string-join (list #$@arguments))
#$initrd)))
(multiboot-kernel
(let* ((kernel (menu-entry-multiboot-kernel entry))
(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).
(disk (if (member "noide" arguments) "w" "h"))
(modules (menu-entry-multiboot-modules entry))
(root-index 1)) ; XXX EFI will need root-index 2
(let ((kernel (menu-entry-multiboot-kernel entry))
(arguments (menu-entry-multiboot-arguments entry))
(modules (menu-entry-multiboot-modules entry))
(root-index 1)) ; XXX EFI will need root-index 2
#~(format port "
menuentry ~s {
multiboot ~a root=part:~a:device:~ad0~a~a
multiboot ~a root=device:hd0s~a~a~a
}~%"
#$label
#$kernel
#$root-index
#$disk
(string-join (list #$@arguments) " " 'prefix)
#$root-index (string-join (list #$@arguments) " " 'prefix)
(string-join (map string-join '#$modules)
"\n module " 'prefix))))
(chain-loader
@@ -460,7 +453,9 @@ menuentry ~s {
(define locale-config
(let* ((entry (first all-entries))
(device (menu-entry-device entry))
(mount-point (menu-entry-device-mount-point entry)))
(mount-point (menu-entry-device-mount-point entry))
(bootloader (bootloader-configuration-bootloader config))
(grub (bootloader-package bootloader)))
#~(let ((locale #$(and locale
(locale-definition-source
(locale-name->definition locale))))
@@ -486,6 +481,8 @@ set lang=~a~%"
(define keyboard-layout-config
(let* ((layout (bootloader-configuration-keyboard-layout config))
(grub (bootloader-package
(bootloader-configuration-bootloader config)))
(keymap* (and layout
(keyboard-layout-file layout #:grub grub)))
(entry (first all-entries))
@@ -536,16 +533,6 @@ fi~%"))))
#:options '(#:local-build? #t
#:substitutable? #f)))
(define (grub-configuration-file config . args)
(let* ((bootloader (bootloader-configuration-bootloader config))
(grub (bootloader-package bootloader)))
(apply make-grub-configuration grub config args)))
(define (grub-efi-configuration-file . args)
(apply make-grub-configuration grub-efi args))
(define grub-cfg "/boot/grub/grub.cfg")
;;;
@@ -687,31 +674,42 @@ fi~%"))))
((target-arm?) "--target=arm-efi"))
"--efi-directory" target-esp)))))
(define* (make-grub-efi-netboot-installer grub-efi grub-cfg subdir)
"Make a bootloader-installer for a grub-efi-netboot bootloader, which expects
its files in SUBDIR and its configuration file in GRUB-CFG.
As a grub-efi-netboot package is already pre-installed by 'grub-mknetdir', the
installer basically copies all files from the bootloader-package (or profile)
into the bootloader-target directory.
Additionally for network booting over TFTP, two relative symlinks to the store
and to the GRUB-CFG file are necessary. Due to this a TFTP root directory must
not be located on a FAT file-system.
If the bootloader-target does not support symlinks, then it is assumed to be a
kind of EFI System Partition (ESP). In this case an intermediate configuration
file is created with the help of GRUB-EFI to load the GRUB-CFG.
The installer is usable for any efi-bootloader-chain, which prepares the
bootloader-profile in a way ready for copying.
The installer does not manipulate the system's 'UEFI Boot Manager'.
The returned installer accepts the BOOTLOADER, TARGET and MOUNT-POINT
arguments. Its job is to copy the BOOTLOADER, which must be a pre-installed
grub-efi-netboot package with a SUBDIR like efi/boot or efi/Guix, below the
directory TARGET for the system whose root is mounted at MOUNT-POINT.
(define (install-grub-efi-netboot subdir)
"Define a grub-efi-netboot bootloader installer for installation in SUBDIR,
which is usually efi/Guix or efi/boot."
(let* ((system (string-split (nix-system->gnu-triplet
(or (%current-target-system)
(%current-system)))
#\-))
(arch (first system))
(boot-efi-link (match system
;; These are the supportend systems and the names
;; defined by the UEFI standard for removable media.
(("i686" _ ...) "/bootia32.efi")
(("x86_64" _ ...) "/bootx64.efi")
(("arm" _ ...) "/bootarm.efi")
(("aarch64" _ ...) "/bootaa64.efi")
(("riscv" _ ...) "/bootriscv32.efi")
(("riscv64" _ ...) "/bootriscv64.efi")
;; Other systems are not supported, although defined.
;; (("riscv128" _ ...) "/bootriscv128.efi")
;; (("ia64" _ ...) "/bootia64.efi")
((_ ...) #f)))
(core-efi (string-append
;; This is the arch dependent file name of GRUB, e.g.
;; i368-efi/core.efi or arm64-efi/core.efi.
(match arch
("i686" "i386")
("aarch64" "arm64")
("riscv" "riscv32")
(_ arch))
"-efi/core.efi")))
(with-imported-modules
'((guix build union))
#~(lambda (bootloader target mount-point)
"Install the BOOTLOADER, which must be the package grub, as e.g.
bootx64.efi or bootaa64.efi into SUBDIR, which is usually efi/Guix or efi/boot,
below the directory TARGET for the system whose root is mounted at MOUNT-POINT.
MOUNT-POINT is the last argument in 'guix system init /etc/config.scm mnt/point'
or '/' for other 'guix system' commands.
@@ -721,19 +719,17 @@ bootloader-configuration in:
(operating-system
(bootloader (bootloader-configuration
(targets '(\"/boot/efi\"))
(targets '(\"/boot\"))
))
)
TARGET is required to be an absolute directory name, usually mounted via NFS,
and finally needs to be provided by a TFTP server as
the TFTP root directory.
and finally needs to be provided by a TFTP server as the TFTP root directory.
Usually the installer will be used to prepare network booting over TFTP. Then
GRUB will load tftp://server/SUBDIR/grub.cfg and this file will instruct it to
load more files from the store like tftp://server/gnu/store/-linux/Image.
To make this possible two symlinks are created. The first symlink points
To make this possible two symlinks will be created. The first symlink points
relatively form MOUNT-POINT/TARGET/SUBDIR/grub.cfg to
MOUNT-POINT/boot/grub/grub.cfg, and the second symlink points relatively from
MOUNT-POINT/TARGET/%store-prefix to MOUNT-POINT/%store-prefix.
@@ -743,80 +739,34 @@ paths on the TFTP server side are unknown.
It is also important to note that both symlinks will point outside the TFTP root
directory and that the TARGET/%store-prefix symlink makes the whole store
accessible via TFTP. Possibly the TFTP server must be configured to allow
accesses outside its TFTP root directory. This all may need to be considered
for security aspects. It is advised to disable any TFTP write access!
The installer can also be used to prepare booting from local storage, if the
underlying file-system, like FAT on an EFI System Partition (ESP), does not
support symlinks. In this case the MOUNT-POINT/TARGET/SUBDIR/grub.cfg will be
created with the help of GRUB-EFI to load the /boot/grub/grub.cfg file. A
symlink to the store is not needed in this case."
(with-imported-modules '((guix build union))
#~(lambda (bootloader target mount-point)
;; In context of a disk image creation TARGET will be #f and an
;; installer is expected to do necessary installations on MOUNT-POINT,
;; which will become the root file system. If TARGET is #f, this
;; installer has nothing to do, as it only cares about the EFI System
;; Partition (ESP).
(when target
(use-modules ((guix build union) #:select (symlink-relative))
(ice-9 popen)
(ice-9 rdelim))
(let* ((mount-point/target (string-append mount-point target "/"))
;; When installing Guix, it is common to mount TARGET below
;; MOUNT-POINT rather than the root directory.
(bootloader-target (if (file-exists? mount-point/target)
mount-point/target
target))
(store (string-append mount-point (%store-prefix)))
(store-link (string-append bootloader-target (%store-prefix)))
(grub-cfg (string-append mount-point #$grub-cfg))
(grub-cfg-link (string-append bootloader-target
#$subdir "/"
(basename grub-cfg))))
;; Copy the bootloader into the bootloader-target directory.
;; Should we beforehand recursively delete any existing file?
(copy-recursively bootloader bootloader-target
#:follow-symlinks? #t
#:log (%make-void-port "w"))
;; For TFTP we need to install additional relative symlinks.
;; If we install on an EFI System Partition (ESP) or some other FAT
;; file-system, then symlinks cannot be created and are not needed.
;; Therefore we ignore exceptions when trying.
;; Prepare the symlink to the grub.cfg.
(mkdir-p (dirname grub-cfg-link))
(false-if-exception (delete-file grub-cfg-link))
(if (unspecified?
(false-if-exception (symlink-relative grub-cfg grub-cfg-link)))
;; Symlinks are supported.
(begin
;; Prepare the symlink to the store.
(mkdir-p (dirname store-link))
(false-if-exception (delete-file store-link))
(symlink-relative store store-link))
;; Creating symlinks does not seem to be supported. Probably
;; an ESP is used. Add a script to search and load the actual
;; grub.cfg.
(let* ((probe #$(file-append grub-efi "/sbin/grub-probe"))
(port (open-pipe* OPEN_READ probe "--target=fs_uuid"
grub-cfg))
(search-root
(match (read-line port)
((? eof-object?)
;; There is no UUID available. As a fallback search
;; everywhere for the grub.cfg.
(string-append "search --file --set " #$grub-cfg))
(fs-uuid
;; The UUID to load the grub.cfg from is known.
(string-append "search --fs-uuid --set " fs-uuid))))
(load-grub-cfg (string-append "configfile " #$grub-cfg)))
(close-pipe port)
(with-output-to-file grub-cfg-link
(lambda ()
(display (string-join (list search-root
load-grub-cfg)
"\n")))))))))))
accessible via TFTP. Possibly the TFTP server must be configured
to allow accesses outside its TFTP root directory. This may need to be
considered for security aspects."
(use-modules ((guix build union) #:select (symlink-relative)))
(let* ((net-dir (string-append mount-point target "/"))
(sub-dir (string-append net-dir #$subdir "/"))
(store (string-append mount-point (%store-prefix)))
(store-link (string-append net-dir (%store-prefix)))
(grub-cfg (string-append mount-point "/boot/grub/grub.cfg"))
(grub-cfg-link (string-append sub-dir (basename grub-cfg)))
(boot-efi-link (string-append sub-dir #$boot-efi-link)))
;; Prepare the symlink to the store.
(mkdir-p (dirname store-link))
(false-if-exception (delete-file store-link))
(symlink-relative store store-link)
;; Prepare the symlink to the grub.cfg, which points into the store.
(mkdir-p (dirname grub-cfg-link))
(false-if-exception (delete-file grub-cfg-link))
(symlink-relative grub-cfg grub-cfg-link)
;; Install GRUB, which refers to the grub.cfg, with support for
;; encrypted partitions,
(setenv "GRUB_ENABLE_CRYPTODISK" "y")
(invoke/quiet (string-append bootloader "/bin/grub-mknetdir")
(string-append "--net-directory=" net-dir)
(string-append "--subdir=" #$subdir))
;; Prepare the bootloader symlink, which points to core.efi of GRUB.
(false-if-exception (delete-file boot-efi-link))
(symlink #$core-efi boot-efi-link))))))
@@ -834,7 +784,7 @@ symlink to the store is not needed in this case."
(package grub)
(installer install-grub)
(disk-image-installer install-grub-disk-image)
(configuration-file grub-cfg)
(configuration-file "/boot/grub/grub.cfg")
(configuration-file-generator grub-configuration-file)))
(define grub-minimal-bootloader
@@ -844,12 +794,11 @@ symlink to the store is not needed in this case."
(define grub-efi-bootloader
(bootloader
(name 'grub-efi)
(package grub-efi)
(inherit grub-bootloader)
(installer install-grub-efi)
(disk-image-installer #f)
(configuration-file grub-cfg)
(configuration-file-generator grub-configuration-file)))
(name 'grub-efi)
(package grub-efi)))
(define grub-efi-removable-bootloader
(bootloader
@@ -864,22 +813,11 @@ symlink to the store is not needed in this case."
(name 'grub-efi32)
(package grub-efi32)))
(define (make-grub-efi-netboot-bootloader name subdir)
(bootloader
(name name)
(package (make-grub-efi-netboot (symbol->string name) subdir))
(installer (make-grub-efi-netboot-installer grub-efi grub-cfg subdir))
(disk-image-installer #f)
(configuration-file grub-cfg)
(configuration-file-generator grub-efi-configuration-file)))
(define grub-efi-netboot-bootloader
(make-grub-efi-netboot-bootloader 'grub-efi-netboot-bootloader
"efi/Guix"))
(define grub-efi-netboot-removable-bootloader
(make-grub-efi-netboot-bootloader 'grub-efi-netboot-removable-bootloader
"efi/boot"))
(bootloader
(inherit grub-efi-bootloader)
(name 'grub-efi-netboot-bootloader)
(installer (install-grub-efi-netboot "efi/Guix"))))
(define grub-mkrescue-bootloader
(bootloader
-35
View File
@@ -3,8 +3,6 @@
;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -44,8 +42,6 @@
u-boot-puma-rk3399-bootloader
u-boot-rock64-rk3328-bootloader
u-boot-rockpro64-rk3399-bootloader
u-boot-sifive-unmatched-bootloader
u-boot-ts7970-q-2g-1000mhz-c-bootloader
u-boot-wandboard-bootloader))
(define install-u-boot
@@ -131,21 +127,6 @@
(define install-pinebook-pro-rk3399-u-boot install-rockpro64-rk3399-u-boot)
(define install-u-boot-ts7970-q-2g-1000mhz-c-u-boot
#~(lambda (bootloader device mount-point)
(let ((u-boot.imx (string-append bootloader "/libexec/u-boot.imx"))
(install-dir (string-append mount-point "/boot")))
(install-file u-boot.imx install-dir))))
(define install-sifive-unmatched-u-boot
#~(lambda (bootloader root-index image)
(let ((spl (string-append bootloader "/libexec/spl/u-boot-spl.bin"))
(u-boot (string-append bootloader "/libexec/u-boot.itb")))
(write-file-on-device spl (stat:size (stat spl))
image (* 34 512))
(write-file-on-device u-boot (stat:size (stat u-boot))
image (* 2082 512)))))
;;;
@@ -274,19 +255,3 @@
(inherit u-boot-bootloader)
(package u-boot-pinebook-pro-rk3399)
(disk-image-installer install-pinebook-pro-rk3399-u-boot)))
(define u-boot-ts7970-q-2g-1000mhz-c-bootloader
;; This bootloader doesn't really need to be installed, as it is read from
;; an SPI memory chip, not the SD card. It is copied to /boot/u-boot.imx
;; for convenience and should be manually flashed at the U-Boot prompt.
(bootloader
(inherit u-boot-bootloader)
(package u-boot-ts7970-q-2g-1000mhz-c)
(installer install-u-boot-ts7970-q-2g-1000mhz-c-u-boot)
(disk-image-installer #f)))
(define u-boot-sifive-unmatched-bootloader
(bootloader
(inherit u-boot-bootloader)
(package u-boot-sifive-unmatched)
(disk-image-installer install-sifive-unmatched-u-boot)))
+3 -8
View File
@@ -363,14 +363,9 @@ second element is the name it should appear at, such as:
"Tell the kernel to look for device firmware under DIRECTORY. This
mechanism bypasses udev: it allows Linux to handle firmware loading directly
by itself, without having to resort to a \"user helper\"."
;; If the kernel was built without firmware loading support, this file
;; does not exist. Do nothing in that case.
(let ((firmware-path "/sys/module/firmware_class/parameters/path"))
(when (file-exists? firmware-path)
(call-with-output-file firmware-path
(lambda (port)
(display directory port))))))
(call-with-output-file "/sys/module/firmware_class/parameters/path"
(lambda (port)
(display directory port))))
(define (activate-ptrace-attach)
"Allow users to PTRACE_ATTACH their own processes.
+2 -2
View File
@@ -64,10 +64,10 @@
;;; which is required at least for the Jami service.
(define sleep*
(lambda () ;delay execution
(if (resolve-module '(fibers) #f #:ensure #f)
(if (resolve-module '(fibers) #f)
(module-ref (resolve-interface '(fibers)) 'sleep)
(begin
(format #t "Fibers not available -- blocking 'sleep' in use~%")
(format #f "fibers not available -- blocking 'sleep' in use")
sleep))))
;;;
-1
View File
@@ -1123,7 +1123,6 @@ an exception in such cases but perform the nearest sane action."
"Return the number suitable for the 'flags' argument of 'mount' that
corresponds to the symbols listed in FLAGS."
(let loop ((flags flags))
;; Note: Keep in sync with invalid-file-system-flags.
(match flags
(('read-only rest ...)
(logior MS_RDONLY (loop rest)))
+28 -63
View File
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -105,7 +105,7 @@ Return the value associated with OPTION, or #f on failure."
;; TODO: Set the 'gnu.translator' extended attribute for passive translator
;; settings?
(mkdir-p (scope "servers/bus/pci")))
)
(define (passive-translator-xattr? file-name)
"Return true if FILE-NAME has an extended @code{gnu.translator} attribute
@@ -127,9 +127,6 @@ set."
(define (translated? file-name)
"Return true if a translator is installed on FILE-NAME."
;; On GNU/Hurd, 'getxattr' in glibc opens the file without O_NOTRANS, and
;; then, for "gnu.translator", it calls 'file_get_translator', resulting in
;; EOPNOTSUPP (conversely, 'showtrans' opens the file with O_NOTRANS).
(if (string-contains %host-type "linux-gnu")
(passive-translator-xattr? file-name)
(passive-translator-installed? file-name)))
@@ -183,8 +180,7 @@ set."
(mkdir-p dir))))
(define servers
'(("servers/bus/pci" ("/hurd/pci-arbiter"))
("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
'(("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
("servers/crash-kill" ("/hurd/crash" "--kill"))
("servers/crash-suspend" ("/hurd/crash" "--suspend"))
("servers/password" ("/hurd/password"))
@@ -195,7 +191,7 @@ set."
("proc" ("/hurd/procfs" "--stat-mode=444"))))
(define devices
`(("dev/full" ("/hurd/null" "--full") #o666)
'(("dev/full" ("/hurd/null" "--full") #o666)
("dev/null" ("/hurd/null") #o666)
("dev/random" ("/hurd/random" "--seed-file" "/var/lib/random-seed")
#o644)
@@ -214,58 +210,31 @@ set."
;; 'fd_to_filename' in libc expects it.
("dev/fd" ("/hurd/magic" "--directory" "fd") #o555)
("dev/rumpdisk" ("/hurd/rumpdisk") #o660)
("dev/netdde" ("/hurd/netdde") #o660)
("dev/eth0" ("/hurd/devnode" "--master-device=/dev/net"
"eth0")
#o660)
("dev/eth1" ("/hurd/devnode" "--master-device=/dev/net"
"eth1")
#o660)
("dev/tty1" ("/hurd/term" "/dev/tty1" "hurdio" "/dev/vcs/1/console")
#o666)
("dev/tty2" ("/hurd/term" "/dev/tty2" "hurdio" "/dev/vcs/2/console")
#o666)
("dev/tty3" ("/hurd/term" "/dev/tty3" "hurdio" "/dev/vcs/3/console")
#o666)
;; Create a number of ttys; syslogd writes to tty12 by default.
;; FIXME: Creating /dev/tty12 leads the console client to switch to
;; tty12 when syslogd starts, which is confusing for users. Thus, do
;; not create tty12.
,@(map (lambda (n)
(let ((n (number->string n)))
`(,(string-append "dev/tty" n)
("/hurd/term" ,(string-append "/dev/tty" n)
"hurdio" ,(string-append "/dev/vcs/" n "/console"))
#o666)))
(iota 11 1))
("dev/ptyp0" ("/hurd/term" "/dev/ptyp0" "pty-master" "/dev/ttyp0")
#o666)
("dev/ptyp1" ("/hurd/term" "/dev/ptyp1" "pty-master" "/dev/ttyp1")
#o666)
("dev/ptyp2" ("/hurd/term" "/dev/ptyp2" "pty-master" "/dev/ttyp2")
#o666)
,@(append-map (lambda (n)
(let ((n (number->string n)))
`((,(string-append "dev/ptyp" n)
("/hurd/term" ,(string-append "/dev/ptyp" n)
"pty-master" ,(string-append "/dev/ttyp" n))
#o666)
(,(string-append "dev/ttyp" n)
("/hurd/term" ,(string-append "/dev/ttyp" n)
"pty-slave" ,(string-append "/dev/ptyp" n))
#o666))))
(iota 10 0))
,@(append-map (lambda (n)
(let* ((n (number->string n))
(drive (string-append "dev/wd" n))
(disk (string-append "@/dev/disk:wd" n)))
`((,drive ("/hurd/storeio" ,disk) #o600)
,@(map (lambda (p)
(let ((p (number->string p)))
`(,(string-append drive "s" p)
("/hurd/storeio"
"--store-type=typed"
,(string-append
"part:" p ":device:" disk))
#o660)))
(iota 4 1)))))
(iota 4 0))))
("dev/ttyp0" ("/hurd/term" "/dev/ttyp0" "pty-slave" "/dev/ptyp0")
#o666)
("dev/ttyp1" ("/hurd/term" "/dev/ttyp1" "pty-slave" "/dev/ptyp1")
#o666)
("dev/ttyp2" ("/hurd/term" "/dev/ttyp2" "pty-slave" "/dev/ptyp2")
#o666)))
(for-each scope-set-translator servers)
(mkdir* "dev/vcs/1")
(mkdir* "dev/vcs/2")
(mkdir* "dev/vcs/2")
(rename-file (scope "dev/console") (scope "dev/console-"))
(for-each scope-set-translator devices)
@@ -274,10 +243,6 @@ set."
(false-if-EEXIST (symlink "/dev/fd/1" (scope "dev/stdout")))
(false-if-EEXIST (symlink "/dev/fd/2" (scope "dev/stderr")))
(false-if-EEXIST (symlink "crash-dump-core" (scope "servers/crash")))
(false-if-EEXIST (symlink "/dev/rumpdisk" (scope "dev/disk")))
(false-if-EEXIST (symlink "/dev/netdde" (scope "dev/net")))
(false-if-EEXIST (symlink "/servers/socket/2" (scope "servers/socket/inet")))
(false-if-EEXIST (symlink "/servers/socket/26" (scope "servers/socket/inet6")))
;; Make sure /etc/mtab is a symlink to /proc/mounts.
(false-if-exception (delete-file (scope "etc/mtab")))
@@ -309,14 +274,14 @@ XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM
(system (find-long-option "gnu.system" args))
(to-load (find-long-option "gnu.load" args)))
(false-if-exception (delete-file "/hurd"))
(let ((hurd/hurd (readlink* (string-append system "/profile/hurd"))))
(symlink hurd/hurd "/hurd"))
(format #t "Setting-up essential translators...\n")
(setenv "PATH" (string-append system "/profile/bin"))
(set-hurd-device-translators)
(false-if-exception (delete-file "/hurd"))
(let ((hurd/hurd (readlink* (string-append system "/profile/hurd"))))
(symlink hurd/hurd "/hurd"))
(format #t "Starting pager...\n")
(unless (zero? (system* "/hurd/mach-defpager"))
(format #t "FAILED...Good luck!\n"))
+1 -15
View File
@@ -7,7 +7,6 @@
;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2022 Pavel Shlyak <p.shlyak@pantherx.org>
;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -112,10 +111,7 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(if (eq? size 'guess)
(estimate-partition-size root)
size))
;; u-boot in particular needs the formatted block
;; size and the physical block size to be equal.
;; TODO: What about 4k blocks?
(if (member 'esp flags) (list "-S" "512") '()))
(if (member 'esp flags) (list "-S" "1024") '()))
(for-each (lambda (file)
(unless (member file '("." ".."))
(invoke "mcopy" "-bsp" "-i" target
@@ -123,14 +119,6 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(string-append "::" file))))
(scandir root))))
(define* (make-unformatted-image partition target)
"Make an unformatted partition of a certain size."
(let ((size (partition-size partition)))
;; Create the file and then truncate it to the desired size.
(with-output-to-file target
(lambda _ (display "")))
(truncate-file target size)))
(define* (make-partition-image partition-sexp target root)
"Create and return the image of PARTITION-SEXP as TARGET. Use the given
ROOT directory to populate the image."
@@ -143,8 +131,6 @@ ROOT directory to populate the image."
(make-vfat-image partition target root 16))
((string=? type "fat32")
(make-vfat-image partition target root 32))
((string=? type "unformatted")
(make-unformatted-image partition target))
(else
(raise (condition
(&message
+4 -13
View File
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2017-2019, 2022, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017-2019, 2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -404,7 +404,7 @@ load path must be adjusted as needed."
(define (container-excursion pid thunk)
"Run THUNK as a child process within the namespaces of process PID and
return the exit status, an integer as returned by 'waitpid'."
return the exit status."
(define (namespace-file pid namespace)
(string-append "/proc/" (number->string pid) "/ns/" namespace))
@@ -432,20 +432,11 @@ return the exit status, an integer as returned by 'waitpid'."
'("user" "ipc" "uts" "net" "pid" "mnt"))
(purify-environment)
(chdir "/")
;; Per setns(2), changing the PID namespace only applies to child
;; processes, not to the process itself. Thus fork so that THUNK runs
;; in the right PID namespace, which also gives it access to /proc.
(match (primitive-fork)
(0 (call-with-clean-exit thunk))
(pid (primitive-exit
(match (waitpid pid)
((_ . status)
(or (status:exit-val status) 127)))))))))
(thunk))))
(pid
(match (waitpid pid)
((_ . status)
status)))))
(status:exit-val status))))))
(define (container-excursion* pid thunk)
"Like 'container-excursion', but return the return value of THUNK."
+10 -31
View File
@@ -1,8 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -37,7 +36,6 @@
wait-for-unix-socket
marionette-control
wait-for-screen-text
%default-ocrad-arguments
%qwerty-us-keystrokes
marionette-type
@@ -289,30 +287,23 @@ Monitor\")."
;; The "quit" command terminates QEMU immediately, with no output.
(unless (string=? command "quit") (wait-for-monitor-prompt monitor)))))
(define %default-ocrad-arguments
'("--invert" "--scale=10"))
(define* (invoke-ocrad-ocr image #:key (ocrad "ocrad")
(ocr-arguments %default-ocrad-arguments))
(define* (invoke-ocrad-ocr image #:key (ocrad "ocrad"))
"Invoke the OCRAD command on image, and return the recognized text."
(let* ((command (string-join `(,ocrad ,@ocr-arguments ,image)))
(pipe (open-input-pipe command))
(let* ((pipe (open-pipe* OPEN_READ ocrad "-i" "-s" "10" image))
(text (get-string-all pipe)))
(unless (zero? (close-pipe pipe))
(error "'ocrad' failed" ocrad))
text))
(define* (invoke-tesseract-ocr image #:key (tesseract "tesseract")
(ocr-arguments '()))
(define* (invoke-tesseract-ocr image #:key (tesseract "tesseract"))
"Invoke the TESSERACT command on IMAGE, and return the recognized text."
(let* ((output-basename (tmpnam))
(output-basename* (string-append output-basename ".txt"))
(arguments (cons* image output-basename ocr-arguments)))
(output-basename* (string-append output-basename ".txt")))
(dynamic-wind
(const #t)
(lambda ()
(let ((exit-val (status:exit-val
(apply system* tesseract arguments))))
(system* tesseract image output-basename))))
(unless (zero? exit-val)
(error "'tesseract' failed" tesseract))
(call-with-input-file output-basename* get-string-all)))
@@ -320,8 +311,7 @@ Monitor\")."
(false-if-exception (delete-file output-basename))
(false-if-exception (delete-file output-basename*))))))
(define* (marionette-screen-text marionette #:key (ocr "ocrad")
ocr-arguments)
(define* (marionette-screen-text marionette #:key (ocr "ocrad"))
"Take a screenshot of MARIONETTE, perform optical character
recognition (OCR), and return the text read from the screen as a string, along
the screen dump image used. Do this by invoking OCR, which should be the file
@@ -334,22 +324,14 @@ if it is not needed."
;; Process it via the OCR.
(cond
((string-contains ocr "ocrad")
(values (invoke-ocrad-ocr image
#:ocrad ocr
#:ocr-arguments
(or ocr-arguments %default-ocrad-arguments))
image))
(values (invoke-ocrad-ocr image #:ocrad ocr) image))
((string-contains ocr "tesseract")
(values (invoke-tesseract-ocr image
#:tesseract ocr
#:ocr-arguments (or ocr-arguments '()))
image))
(values (invoke-tesseract-ocr image #:tesseract ocr) image))
(else (error "unsupported ocr command"))))
(define* (wait-for-screen-text marionette predicate
#:key
(ocr "ocrad")
ocr-arguments
(timeout 30)
pre-action
post-action)
@@ -377,10 +359,7 @@ Likewise for POST-ACTION, except it runs at the end of a successful OCR."
'ocr-text: last-text
'screendump: screendump-backup))
(let* ((_ (and (procedure? pre-action) (pre-action)))
(text screendump
(marionette-screen-text marionette
#:ocr ocr
#:ocr-arguments ocr-arguments))
(text screendump (marionette-screen-text marionette #:ocr ocr))
(_ (and (procedure? post-action) (post-action)))
(result (predicate text)))
(cond (result
+1 -1
View File
@@ -62,7 +62,7 @@ bindings available within the lexical scope of BODY."
(define (wait-for-readable-fd port timeout)
"Wait until PORT has data available for reading or TIMEOUT has expired.
Return #t in the former case and #f in the latter case."
(match (resolve-module '(fibers) #f #:ensure #f) ;using Fibers?
(match (resolve-module '(fibers) #f) ;using Fibers?
(#f
(log "blocking on socket...~%")
(match (select (list port) '() '() timeout)
+33 -41
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012-2022 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>
@@ -24,7 +24,6 @@
#:use-module (guix build-system channel)
#:use-module (guix config)
#:autoload (guix describe) (package-channels)
#:use-module (guix memoization)
#:use-module (guix store)
#:use-module (guix profiles)
#:use-module (guix packages)
@@ -47,7 +46,6 @@
#:use-module (gnu image)
#:use-module (gnu packages)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gdb)
#:use-module (gnu packages base)
#:use-module (gnu packages gawk)
#:use-module (gnu packages guile)
@@ -139,7 +137,7 @@ SYSTEM."
;; Note: Don't put the '-final' package variants because (1) that's
;; implicit, and (2) they cannot be cross-built (due to the explicit input
;; chain.)
(list gcc-10 gcc-11 gcc-12 glibc binutils gdb-minimal
(list gcc-8 gcc-9 gcc-10 gcc-11 glibc binutils
gmp mpfr mpc coreutils findutils diffutils patch sed grep
gawk gnu-gettext hello guile-2.2 guile-3.0 zlib gzip xz guix
%bootstrap-binaries-tarball
@@ -343,32 +341,29 @@ otherwise use the IMAGE name."
;; Return the name of a package's job.
package-name)
(define base-packages
(mlambda (system)
"Return the set of packages considered to be part of the base for SYSTEM."
(delete-duplicates
(append-map (match-lambda
((_ package _ ...)
(match (package-transitive-inputs package)
(((_ inputs _ ...) ...)
inputs))))
(%final-inputs system)))))
(define package->job
(lambda* (store package system #:key (suffix ""))
"Return a job for PACKAGE on SYSTEM, or #f if this combination is not
(let ((base-packages
(delete-duplicates
(append-map (match-lambda
((_ package _ ...)
(match (package-transitive-inputs package)
(((_ inputs _ ...) ...)
inputs))))
(%final-inputs)))))
(lambda* (store package system #:key (suffix ""))
"Return a job for PACKAGE on SYSTEM, or #f if this combination is not
valid. Append SUFFIX to the job name."
(cond ((member package (base-packages system))
(package-job store (string-append "base." (job-name package))
package system #:suffix suffix))
((supported-package? package system)
(let ((drv (package-derivation store package system
#:graft? #f)))
(and (substitutable-derivation? drv)
(package-job store (job-name package)
package system #:suffix suffix))))
(else
#f))))
(cond ((member package base-packages)
(package-job store (string-append "base." (job-name package))
package system #:suffix suffix))
((supported-package? package system)
(let ((drv (package-derivation store package system
#:graft? #f)))
(and (substitutable-derivation? drv)
(package-job store (job-name package)
package system #:suffix suffix))))
(else
#f)))))
(define %x86-64-micro-architectures
;; Micro-architectures for which we build tuned variants.
@@ -421,9 +416,9 @@ valid. Append SUFFIX to the job name."
(map channel-url channels)))
arguments))
(define (manifests->jobs store manifests systems)
(define (manifests->jobs store manifests)
"Return the list of jobs for the entries in MANIFESTS, a list of file
names, for each one of SYSTEMS."
names."
(define (load-manifest manifest)
(save-module-excursion
(lambda ()
@@ -434,12 +429,11 @@ names, for each one of SYSTEMS."
(string-append (manifest-entry-name entry) "-"
(manifest-entry-version entry)))
(define (manifest-entry->job entry system)
(define (manifest-entry->job entry)
(let* ((obj (manifest-entry-item entry))
(drv (parameterize ((%graft? #f))
(run-with-store store
(lower-object obj system)
#:system system)))
(lower-object obj))))
(max-silent-time (or (and (package? obj)
(assoc-ref (package-properties obj)
'max-silent-time))
@@ -451,13 +445,11 @@ names, for each one of SYSTEMS."
#:max-silent-time max-silent-time
#:timeout timeout)))
(let ((entries (delete-duplicates
(append-map (compose manifest-entries load-manifest)
manifests)
manifest-entry=?)))
(append-map (lambda (system)
(map (cut manifest-entry->job <> system) entries))
systems)))
(map manifest-entry->job
(delete-duplicates
(append-map (compose manifest-entries load-manifest)
manifests)
manifest-entry=?)))
(define (arguments->systems arguments)
"Return the systems list from ARGUMENTS."
@@ -579,7 +571,7 @@ names, for each one of SYSTEMS."
(('manifests . rest)
;; Build packages in the list of manifests.
(let ((manifests (arguments->manifests rest channels)))
(manifests->jobs store manifests systems)))
(manifests->jobs store manifests)))
(else
(error "unknown subset" subset))))
systems)))
+1 -16
View File
@@ -35,7 +35,6 @@
this-home-environment
home-environment-derivation
home-environment-packages
home-environment-user-services
home-environment-essential-services
home-environment-services
@@ -103,21 +102,7 @@
#:target-type home-service-type)))
(service-value home)))
(define (home-environment-configuration-file he)
"Return the configuration file of HE, based on its 'location' field, or #f
if it could not be determined."
(let ((file (and=> (home-environment-location he)
location-file)))
(and file
(or (and (string-prefix? "/" file) file)
(search-path %load-path file)))))
(define* (home-environment-with-provenance he
#:optional
(config-file
(home-environment-configuration-file
he)))
(define* (home-environment-with-provenance he config-file)
"Return a variant of HE that stores its own provenance information,
including CONFIG-FILE, if available. This is achieved by adding an instance
of HOME-PROVENANCE-SERVICE-TYPE to its services."
+28 -128
View File
@@ -1,7 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021-2023 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2022-2023 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -33,9 +32,7 @@
#:use-module (guix diagnostics)
#:use-module (guix i18n)
#:use-module (guix modules)
#:use-module (guix memoization)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (ice-9 match)
#:use-module (ice-9 vlist)
@@ -50,11 +47,6 @@
home-run-on-change-service-type
home-provenance-service-type
literal-string
literal-string?
literal-string-value
with-shell-quotation-bindings
environment-variable-shell-definitions
home-files-directory
xdg-configuration-files-directory
@@ -64,16 +56,11 @@
lookup-home-service-types
home-provenance
define-service-type-mapping
system->home-service-type
%initialize-gettext)
#:re-export (service
service-type
service-extension
for-home
for-home?))
service-extension))
;;; Comment:
;;;
@@ -184,59 +171,33 @@ packages, configuration files, activation script, and so on.")))
configuration files that the user has declared in their
@code{home-environment} record.")))
;; Representation of a literal string.
(define-record-type <literal-string>
(literal-string str)
literal-string?
(str literal-string-value))
(define (with-shell-quotation-bindings exp)
"Insert EXP, a gexp, in a lexical environment providing the
'shell-single-quote' and 'shell-double-quote' bindings."
#~(let* ((quote-string
(lambda (value quoted-chars)
(list->string (string-fold-right
(lambda (chr lst)
(if (memq chr quoted-chars)
(append (list #\\ chr) lst)
(cons chr lst)))
'()
value))))
(shell-double-quote
(lambda (value)
;; Double-quote VALUE, leaving dollar sign as is.
(string-append "\"" (quote-string value '(#\" #\\))
"\"")))
(shell-single-quote
(lambda (value)
;; Single-quote VALUE to enter a literal string.
(string-append "'" (quote-string value '(#\'))
"'"))))
#$exp))
(define (environment-variable-shell-definitions variables)
"Return a gexp that evaluates to a list of POSIX shell statements defining
VARIABLES, a list of environment variable name/value pairs. The returned code
ensures variable values are properly quoted."
(with-shell-quotation-bindings
#~(string-append
#$@(map (match-lambda
((key . #f)
"")
((key . #t)
#~(string-append "export " #$key "\n"))
((key . (or (? string? value)
(? file-like? value)
(? gexp? value)))
#~(string-append "export " #$key "="
(shell-double-quote #$value)
"\n"))
((key . (? literal-string? value))
#~(string-append "export " #$key "="
(shell-single-quote
#$(literal-string-value value))
"\n")))
variables))))
#~(let ((shell-quote
(lambda (value)
;; Double-quote VALUE, leaving dollar sign as is.
(let ((quoted (list->string
(string-fold-right
(lambda (chr lst)
(case chr
((#\" #\\)
(append (list chr #\\) lst))
(else (cons chr lst))))
'()
value))))
(string-append "\"" quoted "\"")))))
(string-append
#$@(map (match-lambda
((key . #f)
"")
((key . #t)
#~(string-append "export " #$key "\n"))
((key . value)
#~(string-append "export " #$key "="
(shell-quote #$value) "\n")))
variables))))
(define (environment-variables->setup-environment-script vars)
"Return a file that can be sourced by a POSIX compliant shell which
@@ -352,7 +313,7 @@ directory containing FILES."
(extend append)
(default-value '())
(description "Files that will be put in
@file{~/.guix-home/files}, and further processed during activation.")))
@file{~~/.guix-home/files}, and further processed during activation.")))
(define xdg-configuration-files-directory ".config")
@@ -373,7 +334,7 @@ directory containing FILES."
(extend append)
(default-value '())
(description "Files that will be put in
@file{~/.guix-home/files/.config}, and further processed during activation.")))
@file{~~/.guix-home/files/.config}, and further processed during activation.")))
(define xdg-data-files-directory ".local/share")
@@ -394,7 +355,7 @@ directory containing FILES."
(extend append)
(default-value '())
(description "Files that will be put in
@file{~/.guix-home/files/.local/share}, and further processed during
@file{~~/.guix-home/files/.local/share}, and further processed during
activation.")))
@@ -519,67 +480,6 @@ directory. @command{activate} script automatically called during
reconfiguration or generation switching. This service can be extended
with one gexp, but many times, and all gexps must be idempotent.")))
;;;
;;; Service type graph rewriting.
;;;
(define (service-type-mapping proc)
"Return a procedure that applies PROC to map a service type graph to another
one."
(define (rewrite extension)
(match (proc (service-extension-target extension))
(#f #f)
(target
(service-extension target
(service-extension-compute extension)))))
(define replace
(mlambdaq (type)
(service-type
(inherit type)
(name (symbol-append 'home- (service-type-name type)))
(location (service-type-location type))
(extensions (filter-map rewrite (service-type-extensions type))))))
replace)
(define %system/home-service-type-mapping
;; Mapping of System to Home services.
(make-hash-table))
(define system->home-service-type
;; Map the given System service type to the corresponding Home service type.
(let ()
(define (replace type)
(define replacement
(hashq-ref %system/home-service-type-mapping type
*unspecified*))
(if (eq? replacement *unspecified*)
type
replacement))
(service-type-mapping replace)))
(define-syntax define-service-type-mapping
(syntax-rules (=>)
((_ system-type => home-type)
(hashq-set! %system/home-service-type-mapping
system-type home-type))))
(define-syntax define-service-type-mappings
(syntax-rules (=>)
((_ (system-type => home-type) ...)
(begin
(define-service-type-mapping system-type => home-type)
...))))
(define-service-type-mappings
(system-service-type => home-service-type)
(activation-service-type => home-activation-service-type)
(profile-service-type => home-profile-service-type))
;;;
;;; On-change.
+5 -115
View File
@@ -1,8 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2022 ( <paren@disroot.org>
;;; Copyright © 2023 conses <contact@conses.eu>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,8 +22,7 @@
#:use-module (gnu home services shepherd)
#:use-module (gnu services configuration)
#:autoload (gnu packages glib) (dbus)
#:autoload (gnu packages xdisorg) (redshift unclutter)
#:autoload (gnu packages xorg) (setxkbmap xmodmap)
#:autoload (gnu packages xdisorg) (redshift)
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
@@ -35,13 +32,7 @@
home-redshift-service-type
home-dbus-configuration
home-dbus-service-type
home-unclutter-configuration
home-unclutter-service-type
home-xmodmap-configuration
home-xmodmap-service-type))
home-dbus-service-type))
;;;
@@ -214,9 +205,9 @@ according to time of day.")))
(cons "DBUS_VERBOSE=1"
(default-environment-variables))
#:log-file
(format #f "~a/log/dbus.log"
(or (getenv "XDG_STATE_HOME")
(format #f "~a/.local/state"
(format #f "~a/dbus.log"
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME"))))))
(stop #~(make-kill-destructor)))))
@@ -235,104 +226,3 @@ according to time of day.")))
(default-value (home-dbus-configuration))
(description
"Run the session-specific D-Bus inter-process message bus.")))
;;;
;;; Unclutter.
;;;
(define-configuration/no-serialization home-unclutter-configuration
(unclutter
(file-like unclutter)
"The @code{unclutter} package to use.")
(idle-timeout
(integer 5)
"Timeout in seconds after which to hide the cursor."))
(define (home-unclutter-shepherd-service config)
(list
(shepherd-service
(provision '(unclutter))
(requirement '())
(one-shot? #t)
(start #~(make-forkexec-constructor
(list
#$(file-append
(home-unclutter-configuration-unclutter config)
"/bin/unclutter")
"-idle"
(number->string
#$(home-unclutter-configuration-idle-timeout config)))
#:log-file (string-append
(or (getenv "XDG_STATE_HOME")
(format #f "~a/.local/state"
(getenv "HOME")))
"/log/unclutter.log"))))))
(define home-unclutter-service-type
(service-type
(name 'home-unclutter)
(extensions
(list
(service-extension home-shepherd-service-type
home-unclutter-shepherd-service)))
(default-value (home-unclutter-configuration))
(description "Run the @code{unclutter} daemon, which, on systems using the
Xorg graphical display server, automatically hides the cursor after a
user-defined timeout has expired.")))
;;;
;;; Xmodmap.
;;;
(define-configuration/no-serialization home-xmodmap-configuration
(xmodmap
(file-like xmodmap)
"The @code{xmodmap} package to use.")
(key-map
(list '())
"List of expressions to be read by @code{xmodmap} on service startup."))
(define (serialize-xmodmap-configuration field-name val)
(define serialize-field
(match-lambda
((key . value)
(format #f "~a = ~a" key value))
(e e)))
#~(string-append
#$@(interpose (map serialize-field val) "\n" 'suffix)))
(define (xmodmap-shepherd-service config)
(define config-file
(mixed-text-file
"config"
(serialize-xmodmap-configuration
#f (home-xmodmap-configuration-key-map config))))
(list
(shepherd-service
(provision '(xmodmap))
(start #~(make-system-constructor
(string-join
(list #$(file-append
(home-xmodmap-configuration-xmodmap config)
"/bin/xmodmap")
#$config-file))))
(stop #~(make-system-constructor
#$(file-append setxkbmap "/bin/setxkbmap")))
(documentation "On startup, run @code{xmodmap} and read the expressions in
the configuration file. On stop, reset all the mappings back to the
defaults."))))
(define home-xmodmap-service-type
(service-type
(name 'home-xmodmap)
(extensions
(list
(service-extension home-shepherd-service-type
xmodmap-shepherd-service)))
(default-value (home-xmodmap-configuration))
(description "Run the @code{xmodmap} utility to modify keymaps and pointer
buttons under the Xorg display server via user-defined expressions.")))
-34
View File
@@ -1,34 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.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/>.
(define-module (gnu home services dict)
#:use-module (gnu home services)
#:use-module (gnu services)
#:use-module (gnu services dict)
#:use-module ((gnu system shadow) #:select (account-service-type))
;; For the 'home-shepherd-service-type' mapping.
#:use-module (gnu home services shepherd)
#:export (home-dicod-service-type)
#:re-export (dicod-configuration))
(define home-dicod-service-type
(service-type
(inherit (system->home-service-type
(remove-service-extensions dicod-service-type
(list account-service-type))))
(default-value (for-home (dicod-configuration)))))
+7 -35
View File
@@ -1,8 +1,6 @@
;;; 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 <goodoldpaul@autistici.org>
;;; Copyright © 2023 Andrew Patterson <andrewpatt7@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -23,9 +21,6 @@
#:use-module (gnu home services)
#:use-module (gnu packages fontutils)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:use-module (sxml simple)
#:export (home-fontconfig-service-type))
@@ -38,36 +33,15 @@
;;;
;;; Code:
(define (write-fontconfig-doctype)
"Prints fontconfig's DOCTYPE to current-output-port."
;; This is necessary because SXML doesn't seem to have a way to represent a doctype,
;; but sxml->xml /does/ currently call any thunks in the SXML with the XML output port
;; as current-output-port, allowing the output to include arbitrary text instead of
;; just properly quoted XML.
(format #t "<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>"))
(define (config->sxml config)
"Converts a <home-fontconfig-configuration> record into the SXML representation
of fontconfig's fonts.conf file."
(define (snippets->sxml snippet)
(match snippet
((or (? string? dir)
(? gexp? dir))
`(dir ,dir))
((? list?)
snippet)))
`(*TOP* (*PI* xml "version='1.0'")
,write-fontconfig-doctype
(fontconfig
,@(map snippets->sxml config))))
(define (add-fontconfig-config-file config)
(define (add-fontconfig-config-file he-symlink-path)
`(("fontconfig/fonts.conf"
,(mixed-text-file
"fonts.conf"
(call-with-output-string
(lambda (port)
(sxml->xml (config->sxml config) port)))))))
"<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<dir>~/.guix-home/profile/share/fonts</dir>
</fontconfig>"))))
(define (regenerate-font-cache-gexp _)
`(("profile/share/fonts"
@@ -85,9 +59,7 @@ of fontconfig's fonts.conf file."
(service-extension
home-profile-service-type
(const (list fontconfig)))))
(compose concatenate)
(extend append)
(default-value '("~/.guix-home/profile/share/fonts"))
(default-value #f)
(description
"Provides configuration file for fontconfig and make
fc-* utilities aware of font packages installed in Guix Home's profile.")))
-225
View File
@@ -1,225 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; 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 gnupg)
#:use-module (guix gexp)
#:use-module ((guix records) #:select (match-record))
#:use-module (gnu services)
#:use-module (gnu services configuration)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:autoload (gnu packages gnupg) (gnupg pinentry parcimonie)
#:export (home-gpg-agent-configuration
home-gpg-agent-configuration?
home-gpg-agent-configuration-gnupg
home-gpg-agent-configuration-pinentry-program
home-gpg-agent-configuration-ssh-support?
home-gpg-agent-configuration-default-cache-ttl
home-gpg-agent-configuration-max-cache-ttl
home-gpg-agent-configuration-max-cache-ttl-ssh
home-gpg-agent-configuration-extra-content
home-gpg-agent-service-type
home-parcimonie-configuration
home-parcimonie-configuration?
home-parcimonie-configuration-parcimonie
home-parcimonie-configuration-gnupg-already-torified?
home-parcimonie-configuration-refresh-guix-keyrings?
home-parcimonie-configuration-extra-content
home-parcimonie-service-type))
(define raw-configuration-string? string?)
;; Configuration of 'gpg-agent'.
(define-configuration/no-serialization home-gpg-agent-configuration
(gnupg
(file-like gnupg)
"The GnuPG package to use.")
(pinentry-program
(file-like (file-append pinentry "/bin/pinentry-curses"))
"Pinentry program to use. Pinentry is a small user interface that
@command{gpg-agent} delegates to anytime it needs user input for a passphrase
or @acronym{PIN, personal identification number} (@pxref{Top,,, pinentry,
Using the PIN-Entry}).")
(ssh-support?
(boolean #f)
"Whether to enable @acronym{SSH, secure shell} support. When true,
@command{gpg-agent} acts as a drop-in replacement for OpenSSH's
@command{ssh-agent} program, taking care of OpenSSH secret keys and directing
passphrase requests to the chosen Pinentry program.")
(default-cache-ttl
(integer 600)
"Time a cache entry is valid, in seconds.")
(max-cache-ttl
(integer 7200)
"Maximum time a cache entry is valid, in seconds. After this time a cache
entry will be expired even if it has been accessed recently.")
(default-cache-ttl-ssh
(integer 1800)
"Time a cache entry for SSH keys is valid, in seconds.")
(max-cache-ttl-ssh
(integer 7200)
"Maximum time a cache entry for SSH keys is valid, in seconds.")
(extra-content
(raw-configuration-string "")
"Raw content to add to the end of @file{~/.gnupg/gpg-agent.conf}."))
(define (home-gpg-agent-configuration-file config)
"Return the @file{gpg-agent.conf} file for @var{config}."
(match-record config <home-gpg-agent-configuration>
(pinentry-program default-cache-ttl max-cache-ttl
default-cache-ttl-ssh max-cache-ttl-ssh
extra-content)
(mixed-text-file "gpg-agent.conf"
"pinentry-program " pinentry-program "\n"
"default-cache-ttl "
(number->string default-cache-ttl) "\n"
"max-cache-ttl "
(number->string max-cache-ttl) "\n"
"default-cache-ttl-ssh "
(number->string default-cache-ttl-ssh) "\n"
"max-cache-ttl-ssh "
(number->string max-cache-ttl-ssh) "\n"
extra-content)))
(define (home-gpg-agent-shepherd-services config)
"Return the possibly-empty list of Shepherd services for @var{config}."
(match-record config <home-gpg-agent-configuration>
(gnupg ssh-support?)
;; 'gpg-agent' is started on demand by GnuPG's programs, but it has to be
;; started explicitly when OpenSSH support is enabled (info "(gnupg) Agent
;; Options").
(if ssh-support?
(let ((endpoint (lambda (name socket)
#~(endpoint
(make-socket-address
AF_UNIX
(string-append %user-runtime-dir
"/gnupg/" #$socket))
#:name #$name
#:socket-directory-permissions #o700))))
(list (shepherd-service
(provision '(gpg-agent ssh-agent))
(modules '((shepherd support))) ;for '%user-runtime-dir'
(start #~(make-systemd-constructor
(list #$(file-append gnupg "/bin/gpg-agent")
"--supervised" "--enable-ssh-support")
(list #$(endpoint "ssh" "S.gpg-agent.ssh")
#$(endpoint "browser" "S.gpg-agent.browser")
#$(endpoint "extra" "S.gpg-agent.extra")
;; #$(endpoint "scdaemon" "S.scdaemon")
#$(endpoint "std" "S.gpg-agent"))))
(stop #~(make-systemd-destructor))
(documentation "Start 'gpg-agent', the GnuPG passphrase
agent, with support for handling OpenSSH material."))))
'())))
(define (home-gpg-agent-files config)
`((".gnupg/gpg-agent.conf" ,(home-gpg-agent-configuration-file config))))
(define (home-gpg-agent-environment-variables config)
"Return GnuPG environment variables needed for @var{config}."
(if (home-gpg-agent-configuration-ssh-support? config)
`(("SSH_AUTH_SOCK"
. "$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh"))
'()))
(define home-gpg-agent-service-type
(service-type
(name 'home-gpg-agent)
(extensions
(list (service-extension home-files-service-type
home-gpg-agent-files)
(service-extension home-shepherd-service-type
home-gpg-agent-shepherd-services)
(service-extension home-environment-variables-service-type
home-gpg-agent-environment-variables)))
(default-value (home-gpg-agent-configuration))
(description
"Configure GnuPG's agent, @command{gpg-agent}, which is responsible for
managing OpenPGP and optionally SSH private keys. When SSH support is
enabled, @command{gpg-agent} acts as a drop-in replacement for OpenSSH's
@command{ssh-agent}.")))
(define-configuration/no-serialization home-parcimonie-configuration
(parcimonie
(file-like parcimonie)
"The parcimonie package to use.")
(verbose?
(boolean #f)
"Provide extra output to the log file.")
(gnupg-aleady-torified?
(boolean #f)
"GnuPG is already configured to use tor and parcimonie won't attempt to use
tor directly.")
(refresh-guix-keyrings?
(boolean #f)
"Also refresh any Guix keyrings found in the XDG_CONFIG_DIR.")
(extra-content
(raw-configuration-string "")
"Raw content to add to the parcimonie service."))
(define (home-parcimonie-shepherd-service config)
"Return a user service to run parcimonie."
(match-record config <home-parcimonie-configuration>
(parcimonie verbose? gnupg-aleady-torified?
refresh-guix-keyrings? extra-content)
(let ((log-file #~(string-append %user-log-dir "/parcimonie.log")))
(list (shepherd-service
(provision '(parcimonie))
(modules '((shepherd support) ;for '%user-log-dir'
(guix build utils)
(srfi srfi-1)))
(start #~(make-forkexec-constructor
(cons*
#$(file-append parcimonie "/bin/parcimonie")
#$@(if verbose?
'("--verbose")
'())
#$@(if gnupg-aleady-torified?
'("--gnupg_already_torified")
'())
#$@(if (not (string=? extra-content ""))
(list extra-content)
'())
#$@(if refresh-guix-keyrings?
'((append-map
(lambda (item)
(list (string-append "--gnupg_extra_args="
"--keyring=" item)))
(find-files
(string-append (getenv "XDG_CONFIG_HOME") "/guix")
"^trustedkeys\\.kbx$")))
'((list))))
#:log-file #$log-file))
(stop #~(make-kill-destructor))
(respawn? #t)
(documentation "Incrementally refresh gnupg keyring over Tor"))))))
(define home-parcimonie-service-type
(service-type
(name 'home-parcimonie)
(extensions
(list (service-extension home-shepherd-service-type
home-parcimonie-shepherd-service)))
(default-value (home-parcimonie-configuration))
(description
"Incrementally refresh GnuPG keyrings over Tor.")))
-222
View File
@@ -1,222 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Tanguy Le Carrour <tanguy@bioneland.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/>.
(define-module (gnu home services mail)
#:use-module (guix gexp)
#:use-module (gnu services)
#:use-module (gnu services configuration)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (gnu packages mail)
#:use-module (ice-9 string-fun)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:export (home-msmtp-configuration
home-msmtp-configuration?
home-msmtp-configuration-defaults
home-msmtp-configuration-accounts
home-msmtp-configuration-default-account
home-msmtp-configuration-extra-content
home-msmtp-service-type
msmtp-configuration
msmtp-configuration-auth?
msmtp-configuration-tls?
msmtp-configuration-tls-starttls?
msmtp-configuration-tls-trust-file
msmtp-configuration-log-file
msmtp-configuration-host
msmtp-configuration-port
msmtp-configuration-user
msmtp-configuration-from
msmtp-configuration-password-eval
msmtp-configuration-extra-content
msmtp-account
msmtp-account-name
msmtp-account-configuration))
(define-maybe string (prefix msmtp-configuration-))
(define-maybe boolean (prefix msmtp-configuration-))
(define-maybe integer (prefix msmtp-configuration-))
;; Serialization of 'msmtp'.
(define (uglify-symbol field-name)
(let* ((name (symbol->string field-name))
(ugly-name (string-replace-substring name "-" "_")))
(if (string-suffix? "?" ugly-name)
(string-drop-right ugly-name 1)
ugly-name)))
(define (msmtp-configuration-serialize-boolean field-name value)
#~(string-append #$(uglify-symbol field-name) " "
(if #$value "on" "off") "\n"))
(define (msmtp-configuration-serialize-string field-name value)
#~(string-append #$(uglify-symbol field-name) " " #$value "\n"))
(define (msmtp-configuration-serialize-maybe-string-no-underscore field-name value)
#~(if #$(maybe-value-set? value)
(string-append
#$(string-replace-substring (uglify-symbol field-name) "_" "") " " #$value "\n")
""))
(define (msmtp-configuration-serialize-integer field-name value)
#~(string-append #$(uglify-symbol field-name) " "
(number->string #$value) "\n"))
(define (msmtp-configuration-serialize-extra-content field-name value)
#~(if (string=? #$value "") "" (string-append #$value "\n")))
(define (msmtp-account-serialize-name field-name value)
#~(string-append "\naccount " #$value "\n"))
(define (msmtp-account-serialize-msmtp-configuration field-name value)
#~(string-append #$(serialize-configuration value msmtp-configuration-fields)))
(define (home-msmtp-configuration-serialize-list-of-msmtp-accounts field-name value)
#~(string-append #$@(map (cut serialize-configuration <> msmtp-account-fields)
value)))
(define (home-msmtp-configuration-serialize-msmtp-configuration field-name value)
#~(string-append "defaults\n"
#$(serialize-configuration value msmtp-configuration-fields)))
(define (home-msmtp-configuration-serialize-default-account field-name value)
#~(if #$(maybe-value-set? value)
(string-append "\naccount default : " #$value "\n")
""))
(define (home-msmtp-configuration-serialize-extra-content field-name value)
#~(if (string=? #$value "") "" (string-append #$value "\n")))
;; Configuration of 'msmtp'.
;; Source <https://marlam.de/msmtp/msmtp.html#Configuration-files>.
(define-configuration msmtp-configuration
(auth?
maybe-boolean
"Enable or disable authentication.")
(tls?
maybe-boolean
"Enable or disable TLS (also known as SSL) for secured connections.")
(tls-starttls?
maybe-boolean
"Choose the TLS variant: start TLS from within the session (on, default),
or tunnel the session through TLS (off).")
(tls-trust-file
maybe-string
"Activate server certificate verification using a list of
trusted Certification Authorities (CAs).")
(log-file
maybe-string
"Enable logging to the specified file. An empty argument disables logging.
The file name - directs the log information to standard output."
(serializer msmtp-configuration-serialize-maybe-string-no-underscore))
(host
maybe-string
"The SMTP server to send the mail to.")
(port
maybe-integer
"The port that the SMTP server listens on. The default is 25 (\"smtp\"),
unless TLS without STARTTLS is used, in which case it is 465 (\"smtps\").")
(user
maybe-string
"Set the user name for authentication.")
(from
maybe-string
"Set the envelope-from address.")
(password-eval
maybe-string
"Set the password for authentication to the output (stdout) of the command cmd."
(serializer msmtp-configuration-serialize-maybe-string-no-underscore))
(extra-content
(string "")
"Extra content appended as-is to the configuration block. Run
@command{man msmtp} for more information about the configuration file
format."
(serializer msmtp-configuration-serialize-extra-content))
(prefix msmtp-configuration-))
(define-configuration msmtp-account
(name
(string)
"The unique name of the account."
(serializer msmtp-account-serialize-name))
(configuration
(msmtp-configuration)
"The configuration for this given account.")
(prefix msmtp-account-))
(define (list-of-msmtp-accounts? lst)
(every msmtp-account? lst))
(define-configuration home-msmtp-configuration
(defaults
(msmtp-configuration (msmtp-configuration))
"The configuration that will be set as default for all accounts.")
(accounts
(list-of-msmtp-accounts '())
"A list of @code{msmtp-account} records which contain
information about all your accounts.")
(default-account
maybe-string
"Set the default account."
(serializer home-msmtp-configuration-serialize-default-account))
(extra-content
(string "")
"Extra content appended as-is to the configuration file. Run
@command{man msmtp} for more information about the configuration file
format."
(serializer home-msmtp-configuration-serialize-extra-content))
(prefix home-msmtp-configuration-))
(define (home-msmtp-files config)
(list
`(".config/msmtp/config"
,(mixed-text-file "msmtp-config"
(serialize-configuration config home-msmtp-configuration-fields)))))
(define (home-msmtp-profile-entries config)
(list msmtp))
(define home-msmtp-service-type
(service-type (name 'home-msmtp)
(extensions
(list (service-extension home-profile-service-type
home-msmtp-profile-entries)
(service-extension home-files-service-type
home-msmtp-files)))
(default-value (home-msmtp-configuration))
(description "Configure msmtp, a simple
@acronym{SMTP, Simple Mail Transfer Protocol} client that can relay email
to SMTP servers.")))
+87 -11
View File
@@ -1,8 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021, 2023 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,9 +19,16 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu home services mcron)
#:use-module (gnu packages guile-xyz)
#:use-module (gnu home services)
#:use-module (gnu services configuration)
#:use-module (gnu services shepherd)
#:use-module (gnu home services shepherd)
#:use-module (gnu services mcron) ;for the service mapping
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:export (home-mcron-configuration
home-mcron-service-type))
@@ -49,16 +55,86 @@
;;
;;; Code:
(define-syntax-rule (home-mcron-configuration fields ...)
;; Macro provided for backward compatibility.
(for-home (mcron-configuration fields ...)))
(define list-of-gexps?
(list-of gexp?))
(define-configuration/no-serialization home-mcron-configuration
(mcron (file-like mcron) "The mcron package to use.")
(jobs
(list-of-gexps '())
"This is a list of gexps (@pxref{G-Expressions}), where each gexp
corresponds to an mcron job specification (@pxref{Syntax, mcron job
specifications,, mcron, GNU@tie{}mcron}).")
(log? (boolean #t) "Log messages to standard output.")
(log-format
(string "~1@*~a ~a: ~a~%")
"@code{(ice-9 format)} format string for log messages. The default value
produces messages like \"@samp{@var{pid} @var{name}:
@var{message}\"} (@pxref{Invoking mcron, Invoking,, mcron, GNU@tie{}mcron}).
Each message is also prefixed by a timestamp by GNU Shepherd."))
(define job-files (@@ (gnu services mcron) job-files))
(define shepherd-schedule-action
(@@ (gnu services mcron) shepherd-schedule-action))
(define (home-mcron-shepherd-services config)
(match-record config <home-mcron-configuration>
(mcron jobs log? log-format)
(if (null? jobs)
'() ;no jobs to run
(let ((files (job-files mcron jobs)))
(list (shepherd-service
(documentation "User cron jobs.")
(provision '(mcron))
(modules `((srfi srfi-1)
(srfi srfi-26)
(ice-9 popen) ;for the 'schedule' action
(ice-9 rdelim)
(ice-9 match)
,@%default-modules))
(start #~(make-forkexec-constructor
(list (string-append #$mcron "/bin/mcron")
#$@(if log?
#~("--log" "--log-format" #$log-format)
#~())
#$@files)
#:log-file (string-append
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME")))
"/mcron.log")))
(stop #~(make-kill-destructor))
(actions
(list (shepherd-schedule-action mcron files)))))))))
(define home-mcron-profile (compose list home-mcron-configuration-mcron))
(define (home-mcron-extend config jobs)
(home-mcron-configuration
(inherit config)
(jobs (append (home-mcron-configuration-jobs config)
jobs))))
(define home-mcron-service-type
(service-type
(inherit (system->home-service-type mcron-service-type))
(default-value (for-home (mcron-configuration)))))
(service-type (name 'home-mcron)
(extensions
(list (service-extension
home-shepherd-service-type
home-mcron-shepherd-services)
(service-extension
home-profile-service-type
home-mcron-profile)))
(compose concatenate)
(extend home-mcron-extend)
(default-value (home-mcron-configuration))
(description
"Install and configure the GNU mcron cron job manager.")))
(define-service-type-mapping
mcron-service-type => home-mcron-service-type)
;;;
;;; Generate documentation.
;;;
(define (generate-doc)
(configuration->documentation 'home-mcron-configuration))
;;; mcron.scm ends here
-68
View File
@@ -1,68 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.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/>.
(define-module (gnu home services media)
#:use-module (srfi srfi-26)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (gnu packages kodi)
#:use-module (gnu services configuration)
#:use-module (gnu services shepherd)
#:use-module (guix records)
#:use-module (guix gexp)
#:export (home-kodi-configuration
home-kodi-service-type))
;;;
;;; Kodi.
;;;
(define-record-type* <home-kodi-configuration>
home-kodi-configuration make-home-kodi-configuration
home-kodi-configuration?
(kodi home-kodi-kodi ;file-like
(default kodi))
(extra-options home-kodi-extra-options ;list of string
(default '())))
(define (home-kodi-services config)
"Return a <shepherd-service> for kodi with CONFIG."
(match-record config <home-kodi-configuration>
(kodi extra-options)
(let* ((kodi (file-append kodi "/bin/kodi"))
(command #~'(#$kodi "-fs" #$@extra-options))
(log-file #~(string-append %user-log-dir "/kodi.log")))
(list (shepherd-service
(documentation "Run the kodi media center.")
(provision '(kodi))
(modules '((shepherd support))) ;for '%user-log-dir'
(start #~(make-forkexec-constructor #$command
#:log-file #$log-file))
(stop #~(make-kill-destructor)))))))
(define home-kodi-service-type
(service-type
(name 'home-kodi)
(default-value (home-kodi-configuration))
(extensions
(list (service-extension home-shepherd-service-type
home-kodi-services)))
(description
"Install and configure the Kodi media center so that it runs as a Shepherd
service.")))
-66
View File
@@ -1,66 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.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/>.
(define-module (gnu home services messaging)
#:use-module (srfi srfi-26)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (gnu packages messaging)
#:use-module (gnu services configuration)
#:use-module (gnu services shepherd)
#:use-module (guix records)
#:use-module (guix gexp)
#:export (home-znc-configuration
home-znc-service-type))
;;;
;;; Znc.
;;;
(define-record-type* <home-znc-configuration>
home-znc-configuration make-home-znc-configuration
home-znc-configuration?
(znc home-znc-znc ;string
(default znc))
(extra-options home-znc-extra-options ;list of string
(default '())))
(define (home-znc-services config)
"Return a <shepherd-service> for znc with CONFIG."
(match-record config <home-znc-configuration>
(znc extra-options)
(let* ((znc (file-append znc "/bin/znc"))
(command #~'(#$znc "--foreground" #$@extra-options))
(log-file #~(string-append %user-log-dir "/znc.log")))
(list (shepherd-service
(documentation "Run the znc IRC bouncer.")
(provision '(znc))
(modules '((shepherd support))) ;for '%user-log-dir'
(start #~(make-forkexec-constructor #$command
#:log-file #$log-file))
(stop #~(make-kill-destructor)))))))
(define home-znc-service-type
(service-type
(name 'home-znc)
(default-value (home-znc-configuration))
(extensions
(list (service-extension home-shepherd-service-type
home-znc-services)))
(description
"Install and configure @command{znc}, an @acronym{IRC, Internet Relay
Chat} bouncer, as a Shepherd service.")))
+4 -4
View File
@@ -128,10 +128,10 @@
(list "-i")
(list)))
#:log-file (string-append
(or (getenv "XDG_STATE_HOME")
(format #f "~a/.local/state"
(getenv "HOME")))
"/log/batsignal.log")))
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME")))
"/batsignal.log")))
(stop #~(make-kill-destructor))))))
(define home-batsignal-service-type
+55 -169
View File
@@ -1,7 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,7 +19,6 @@
(define-module (gnu home services shells)
#:use-module (gnu services configuration)
#:autoload (gnu system shadow) (%default-bashrc)
#:use-module (gnu home services utils)
#:use-module (gnu home services)
#:use-module (gnu packages shells)
@@ -45,10 +43,7 @@
home-fish-service-type
home-fish-configuration
home-fish-extension
home-inputrc-service-type
home-inputrc-configuration))
home-fish-extension))
;;; Commentary:
;;;
@@ -137,7 +132,7 @@ Shell startup process will continue with
(environment-variables
(alist '())
"Association list of environment variables to set for the Zsh session."
(serializer serialize-posix-env-vars))
serialize-posix-env-vars)
(zshenv
(text-config '())
"List of file-like objects, which will be added to @file{.zshenv}.
@@ -313,24 +308,16 @@ source ~/.profile
;;;
(define (bash-serialize-aliases field-name val)
(with-shell-quotation-bindings
#~(string-append
#$@(map
(match-lambda
((key . #f)
"")
((key . #t)
#~(string-append "alias " #$key "\n"))
((key . (? literal-string? value))
#~(string-append "alias " #$key "="
(shell-single-quote
#$(literal-string-value value))
"\n"))
((key . value)
#~(string-append "alias " #$key "="
(shell-double-quote #$value)
"\n")))
val))))
#~(string-append
#$@(map
(match-lambda
((key . #f)
"")
((key . #t)
#~(string-append "alias " #$key "\n"))
((key . value)
#~(string-append "alias " #$key "=\"" #$value "\"\n")))
val)))
(define-configuration home-bash-configuration
(package
@@ -346,7 +333,7 @@ source ~/.profile
rules for the @code{home-environment-variables-service-type} apply
here (@pxref{Essential Home Services}). The contents of this field will be
added after the contents of the @code{bash-profile} field."
(serializer serialize-posix-env-vars))
serialize-posix-env-vars)
(aliases
(alist '())
"Association list of aliases to set for the Bash session. The aliases will be
@@ -363,7 +350,7 @@ turns into
@example
alias ls=\"ls -alF\"
@end example"
(serializer bash-serialize-aliases))
bash-serialize-aliases)
(bash-profile
(text-config '())
"List of file-like objects, which will be added to @file{.bash_profile}.
@@ -383,6 +370,43 @@ Used for executing user's commands at the exit of login shell. It
won't be read in some cases (if the shell terminates by exec'ing
another process for example)."))
;; TODO: Use value from (gnu system shadow)
(define guix-bashrc
"\
# Bash initialization for interactive non-login shells and
# for remote shells (info \"(bash) Bash Startup Files\").
# Export 'SHELL' to child processes. Programs such as 'screen'
# honor it and otherwise use /bin/sh.
export SHELL
if [[ $- != *i* ]]
then
# We are being invoked from a non-interactive shell. If this
# is an SSH session (as in \"ssh host command\"), source
# /etc/profile so we get PATH and other essential variables.
[[ -n \"$SSH_CLIENT\" ]] && source /etc/profile
# Don't do anything else.
return
fi
# Source the system-wide file.
if [[ -e /etc/bashrc ]]; then
source /etc/bashrc
fi
# Adjust the prompt depending on whether we're in 'guix environment'.
if [ -n \"$GUIX_ENVIRONMENT\" ]
then
PS1='\\u@\\h \\w [env]\\$ '
else
PS1='\\u@\\h \\w\\$ '
fi
alias ls='ls -p --color=auto'
alias ll='ls -l'
alias grep='grep --color=auto'\n")
(define (add-bash-configuration config)
(define (filter-fields field)
(filter-configuration-fields home-bash-configuration-fields
@@ -419,23 +443,13 @@ if [ -f ~/.profile ]; then source ~/.profile; fi
# Honor per-interactive-shell startup file
if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
"
;; The host distro might provide a bad 'PS1' default--e.g., not taking
;; $GUIX_ENVIRONMENT into account. Provide a good default here when
;; asked to. The default can be overridden below via
;; 'environment-variables'.
(if (home-bash-configuration-guix-defaults? config)
"PS1='\\u@\\h \\w${GUIX_ENVIRONMENT:+ [env]}\\$ '\n"
"")
(serialize-field 'bash-profile)
(serialize-field 'environment-variables)))
,@(list (file-if-not-empty
'bashrc
(if (home-bash-configuration-guix-defaults? config)
(list (serialize-field 'aliases)
(plain-file-content %default-bashrc))
(list (serialize-field 'aliases) guix-bashrc)
(list (serialize-field 'aliases))))
(file-if-not-empty 'bash-logout)))))
@@ -548,19 +562,19 @@ with text blocks from other extensions and the base service."))
(environment-variables
(alist '())
"Association list of environment variables to set in Fish."
(serializer serialize-fish-env-vars))
serialize-fish-env-vars)
(aliases
(alist '())
"Association list of aliases for Fish, both the key and the value
should be a string. An alias is just a simple function that wraps a
command, If you want something more akin to @dfn{aliases} in POSIX
shells, see the @code{abbreviations} field."
(serializer serialize-fish-aliases))
serialize-fish-aliases)
(abbreviations
(alist '())
"Association list of abbreviations for Fish. These are words that,
when typed in the shell, will automatically expand to the full text."
(serializer serialize-fish-abbreviations)))
serialize-fish-abbreviations))
(define (fish-files-service config)
`(("fish/config.fish"
@@ -638,134 +652,6 @@ end\n\n")
(description "\
Install and configure Fish, the friendly interactive shell.")))
;;;
;;; Readline.
;;;
(define (serialize-inputrc-key-bindings field-name val)
#~(string-append
#$@(map
(match-lambda
((key . value)
#~(string-append #$key ": " #$value "\n")))
val)))
(define (serialize-inputrc-variables field-name val)
#~(string-append
#$@(map
(match-lambda
((key . #f)
#~(string-append "set " #$key " off\n"))
((key . #t)
#~(string-append "set " #$key " on\n"))
((key . value)
#~(string-append "set " #$key " " #$value "\n")))
val)))
(define (serialize-inputrc-conditional-constructs field-name val)
#~(string-append
#$@(map
(match-lambda
(("$endif" . _)
"$endif\n")
(("$include" . value)
#~(string-append "$include " #$value "\n"))
;; TODO: key can only be "$if" or "$else".
((key . value)
#~(string-append #$key "\n"
#$(serialize-configuration
value
home-inputrc-configuration-fields))))
val)))
(define (serialize-inputrc-extra-content field-name value)
#~(if (string=? #$value "") "" (string-append #$value "\n")))
(define-configuration home-inputrc-configuration
(key-bindings
(alist '())
"Association list of readline key bindings to be added to the
@code{~/.inputrc} file. This is where code like this:
@lisp
'((\"Control-l\" . \"clear-screen\"))
@end lisp
turns into
@example
Control-l: clear-screen
@end example"
(serializer serialize-inputrc-key-bindings))
(variables
(alist '())
"Association list of readline variables to set. This is where configuration
options like this:
@lisp
'((\"bell-style\" . \"visible\")
(\"colored-completion-prefix\" . #t))
@end lisp
turns into
@example
set bell-style visible
set colored-completion-prefix on
@end example"
(serializer serialize-inputrc-variables))
(conditional-constructs
(alist '())
"Association list of conditionals to add to the initialization file. This
includes @command{$if}, @command{else}, @command{endif} and @command{include}
and they receive a value of another @command{home-inputrc-configuration}.
@lisp
(conditional-constructs
`((\"$if mode=vi\" .
,(home-inputrc-configuration
(variables
`((\"show-mode-in-prompt\" . #t)))))
(\"$else\" .
,(home-inputrc-configuration
(key-bindings
`((\"Control-l\" . \"clear-screen\")))))
(\"$endif\" . #t)))
@end lisp
turns into
@example
$if mode=vi
set show-mode-in-prompt on
$else
Control-l: clear-screen
$endif
@end example"
(serializer serialize-inputrc-conditional-constructs))
(extra-content
(string "")
"Extra content appended as-is to the configuration file. Run @command{man
readline} for more information about all the configuration options."
(serializer serialize-inputrc-extra-content)))
(define (home-inputrc-files config)
(list
`(".inputrc"
,(mixed-text-file "inputrc"
(serialize-configuration
config
home-inputrc-configuration-fields)))))
(define home-inputrc-service-type
(service-type (name 'inputrc)
(extensions
(list (service-extension home-files-service-type
home-inputrc-files)))
(default-value (home-inputrc-configuration))
(description "Configure readline in @code{.inputrc}.")))
(define (generate-home-shell-profile-documentation)
(generate-documentation
+6 -9
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021, 2023 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;;
;;; This file is part of GNU Guix.
@@ -52,7 +52,7 @@
home-shepherd-configuration make-home-shepherd-configuration
home-shepherd-configuration?
(shepherd home-shepherd-configuration-shepherd
(default shepherd-0.10)) ; package
(default shepherd-0.9)) ; package
(auto-start? home-shepherd-configuration-auto-start?
(default #t))
(daemonize? home-shepherd-configuration-daemonize?
@@ -108,10 +108,9 @@ as shepherd package."
(or (getenv "XDG_RUNTIME_DIR")
(format #f "/run/user/~a" (getuid)))
"/shepherd/socket"))
(let* ((state-dir (or (getenv "XDG_STATE_HOME")
(format #f "~a/.local/state"
(getenv "HOME"))))
(log-dir (string-append state-dir "/log")))
(let ((log-dir (or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME")))))
;; TODO: Remove it, 0.9.2 creates it automatically?
((@ (guix build utils) mkdir-p) log-dir)
(system*
@@ -141,7 +140,7 @@ as shepherd package."
(define (shepherd-xdg-configuration-files config)
`(("shepherd/init.scm" ,(home-shepherd-configuration-file config))))
(define home-shepherd-service-type
(define-public home-shepherd-service-type
(service-type (name 'home-shepherd)
(extensions
(list (service-extension
@@ -168,6 +167,4 @@ as shepherd package."
(default-value (home-shepherd-configuration))
(description "Configure and install userland Shepherd.")))
(define-service-type-mapping
shepherd-root-service-type => home-shepherd-service-type)
-151
View File
@@ -1,151 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.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/>.
(define-module (gnu home services sound)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:export (home-pulseaudio-rtp-sink-service-type
home-pulseaudio-rtp-source-service-type
%pulseaudio-rtp-multicast-address))
;;;
;;; PulseAudio support.
;;;
(define (with-pulseaudio-connection sock exp)
;; Wrap EXP in an expression where SOCK is bound to a socket connected to
;; the user's PulseAudio command-line interface socket.
#~(let* ((#$sock (socket AF_UNIX SOCK_STREAM 0))
(pulse-user-file
(lambda (name)
(string-append "/run/user/" (number->string (getuid))
"/pulse/" name)))
(file (pulse-user-file "cli")))
(let loop ((tries 0))
(catch #t
(lambda ()
(connect #$sock AF_UNIX file)
(let ((result #$exp))
(close-port #$sock)
result))
(lambda (key . args)
(if (and (eq? key 'system-error)
(= ENOENT (system-error-errno (cons key args)))
(< tries 3))
;; The CLI socket doesn't exist yet, so send pulseaudio
;; SIGUSR2 so that it creates it and listens to it.
(let ((pid (call-with-input-file (pulse-user-file "pid")
read)))
(when (and (integer? pid) (> pid 1))
(kill pid SIGUSR2))
((@ (fibers) sleep) 1)
(loop (+ tries 1)))
(begin
(close-port #$sock)
(apply throw key args))))))))
(define %pulseaudio-rtp-multicast-address
;; Default address used by 'module-rtp-sink' and 'module-rtp-recv'. This is
;; a multicast address, for the Session Announcement Protocol (SAP) and the
;; Session Description Protocol (SDP).
"224.0.0.56")
(define (pulseaudio-rtp-sink-shepherd-services destination-ip)
(list (shepherd-service
(provision '(pulseaudio-rtp-sink))
(start
#~(lambda* (#:optional (destination-ip #$destination-ip))
#$(with-pulseaudio-connection
#~sock
#~(begin
(display "\
load-module module-null-sink \
sink_name=rtp sink_properties=\"device.description='RTP network output'\"\n"
sock)
(display (string-append "\
load-module module-rtp-send source=rtp.monitor"
(if destination-ip
(string-append
" destination_ip="
destination-ip)
"")
"\n")
sock)
#t))))
(stop
#~(lambda (_)
#$(with-pulseaudio-connection
#~sock
#~(begin
(display "unload-module module-rtp-send\n"
sock)
(display "unload-module module-null-sink\n"
sock)
#f))))
(auto-start? #f))))
(define home-pulseaudio-rtp-sink-service-type
(service-type
(name 'pulseaudio-rtp-sink)
(extensions
(list (service-extension home-shepherd-service-type
pulseaudio-rtp-sink-shepherd-services)))
(description
"Define a PulseAudio sink to broadcast audio output over RTP, which can
then by played by another PulseAudio instance.")
;; By default, send to the SAP multicast address, 224.0.0.56, which can be
;; network-intensive.
(default-value %pulseaudio-rtp-multicast-address)))
(define (pulseaudio-rtp-source-shepherd-services source-ip)
(list (shepherd-service
(provision '(pulseaudio-rtp-source))
(start
#~(lambda* (#:optional (source-ip #$source-ip))
#$(with-pulseaudio-connection
#~sock
#~(begin
(format sock "\
load-module module-rtp-recv sap_address=~a\n" source-ip)
#t))))
(stop
#~(lambda (_)
#$(with-pulseaudio-connection
#~sock
#~(begin
(display "unload-module module-rtp-recv\n"
sock)
#f))))
(auto-start? #f))))
(define home-pulseaudio-rtp-source-service-type
(service-type
(name 'pulseaudio-rtp-source)
(extensions
(list (service-extension home-shepherd-service-type
pulseaudio-rtp-source-shepherd-services)))
(description
"Define a PulseAudio source to receive audio broadcasted over RTP by
another PulseAudio instance.")
(default-value %pulseaudio-rtp-multicast-address)))
+31 -238
View File
@@ -1,8 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,41 +19,26 @@
(define-module (gnu home services ssh)
#:use-module (guix gexp)
#:use-module (guix records)
#:use-module (guix deprecation)
#:use-module (guix diagnostics)
#:use-module (guix i18n)
#:use-module (gnu services)
#:use-module (gnu services configuration)
#:use-module (guix modules)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module ((gnu home services utils)
#:select (object->camel-case-string))
#:autoload (gnu packages base) (glibc-utf8-locales)
#:use-module (gnu packages ssh)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-9 gnu)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (ice-9 match)
#:autoload (ice-9 regex) (string-match match:substring)
#:export (home-openssh-configuration
home-openssh-configuration-authorized-keys
home-openssh-configuration-known-hosts
home-openssh-configuration-hosts
home-openssh-configuration-add-keys-to-agent
home-openssh-configuration?
home-ssh-agent-configuration
home-ssh-agent-openssh
home-ssh-agent-socket-directory
home-ssh-agent-extra-options
home-ssh-agent-configuration?
openssh-host
openssh-host-host-name
openssh-host-match-criteria
openssh-host-identity-file
openssh-host-name
openssh-host-port
@@ -69,15 +51,8 @@
openssh-host-host-key-algorithms
openssh-host-accepted-key-types
openssh-host-extra-content
proxy-jump
proxy-jump-host-name
proxy-jump-port
proxy-jump-user
proxy-command
proxy-command->string
home-openssh-service-type
home-ssh-agent-service-type))
home-openssh-service-type))
(define (serialize-field-name name)
(match name
@@ -104,11 +79,7 @@
(cond ((= family AF_INET) "inet")
((= family AF_INET6) "inet6")
;; The 'else' branch is unreachable.
(else
(raise
(formatted-message
(G_ "~s: invalid address family value")
family))))
(else (raise (condition (&error)))))
"\n")
""))
@@ -119,8 +90,6 @@
(string-append " " (serialize-field-name field) " "
(number->string value) "\n"))
(define-maybe boolean)
(define (serialize-boolean field value)
(string-append " " (serialize-field-name field) " "
(if value "yes" "no") "\n"))
@@ -140,91 +109,13 @@
(define-maybe string-list)
(define-record-type <proxy-command>
(proxy-command command)
proxy-command?
(command proxy-command->string))
(set-record-type-printer! <proxy-command>
(lambda (obj port)
(format port "#<proxy-command ~s>" (proxy-command->string obj))))
(define-configuration/no-serialization proxy-jump
(user
maybe-string
"User name on the remote host.")
(host-name
(string)
"Host name---e.g., @code{foo.example.org} or @code{192.168.1.2}.")
(port
maybe-natural-number
"TCP port number to connect to."))
(define (proxy-jump->string proxy-jump)
(match-record proxy-jump <proxy-jump>
(host-name user port)
(string-append
(if (maybe-value-set? user) (string-append user "@") "")
host-name
(if (maybe-value-set? port) (string-append ":" (number->string port)) ""))))
(define (proxy-command-or-jump-list? x)
(or (proxy-command? x)
(and (list? x)
(every proxy-jump? x))))
(define (serialize-proxy-command-or-jump-list field value)
(if (proxy-command? value)
(serialize-string 'proxy-command (proxy-command->string value))
(serialize-string-list 'proxy-jump (map proxy-jump->string value))))
(define-maybe proxy-command-or-jump-list)
(define (sanitize-proxy-command properties)
(lambda (value)
(when (maybe-value-set? value)
(warn-about-deprecation 'proxy-command properties #:replacement 'proxy))
(unless (maybe-string? value)
(configuration-field-error (source-properties->location properties) 'proxy-command value))
value))
(define ssh-match-keywords
'(canonical final exec host originalhost user localuser))
(define (match-criteria? str)
;; Rule out the case of "all" keyword.
(if (member str '("all"
"canonical all"
"final all"))
#t
(let* ((first (string-take str (string-index str #\ )))
(keyword (string->symbol (if (string-prefix? "!" first)
(string-drop first 1)
first))))
(memq keyword ssh-match-keywords))))
(define (serialize-match-criteria _ value)
(string-append "Match " value "\n"))
(define-maybe match-criteria)
(define-configuration openssh-host
(name
maybe-string
"Name of this host declaration. A @code{openssh-host} must define only
@code{name} or @code{match-criteria}. Use host-name @code{\"*\"} for
top-level options.")
(string)
"Name of this host declaration.")
(host-name
maybe-string
"Host name---e.g., @code{\"foo.example.org\"} or @code{\"192.168.1.2\"}.")
(match-criteria
maybe-match-criteria
"When specified, this string denotes the set of hosts to which the entry
applies, superseding the @code{host-name} field. Its first element must be
all or one of @code{ssh-match-keywords}. The rest of the elements are
arguments for the keyword, or other criteria. A @code{openssh-host} must
define only @code{name} or @code{match-criteria}. Other host configuration
options will apply to all hosts matching @code{match-criteria}.")
(address-family
maybe-address-family
"Address family to use when connecting to this host: one of
@@ -241,31 +132,25 @@ Additionally, the field can be left unset to allow any address family.")
maybe-string
"User name on the remote host.")
(forward-x11?
maybe-boolean
(boolean #f)
"Whether to forward remote client connections to the local X11 graphical
display.")
(forward-x11-trusted?
maybe-boolean
(boolean #f)
"Whether remote X11 clients have full access to the original X11 graphical
display.")
(forward-agent?
maybe-boolean
(boolean #f)
"Whether the authentication agent (if any) is forwarded to the remote
machine.")
(compression?
maybe-boolean
(boolean #f)
"Whether to compress data in transit.")
(proxy-command
maybe-string
"The command to use to connect to the server. As an example, a command
to connect via an HTTP proxy at 192.0.2.0 would be: @code{\"nc -X
connect -x 192.0.2.0:8080 %h %p\"}. Using 'proxy-command' is deprecated, use
'proxy' instead."
(sanitizer (sanitize-proxy-command (current-source-location))))
(proxy
maybe-proxy-command-or-jump-list
"The command to use to connect to the server or a list of SSH hosts to jump
through before connecting to the server.")
connect -x 192.0.2.0:8080 %h %p\"}.")
(host-key-algorithms
maybe-string-list
"The list of accepted host key algorithms---e.g.,
@@ -279,72 +164,33 @@ through before connecting to the server.")
@file{~/.ssh/config}."))
(define (serialize-openssh-host config)
(define (openssh-host-name-or-match-field? field)
(or (eq? (configuration-field-name field) 'name)
(eq? (configuration-field-name field) 'match-criteria)))
(define (openssh-host-name-field? field)
(eq? (configuration-field-name field) 'name))
(string-append
(if (maybe-value-set? (openssh-host-name config))
(if (maybe-value-set? (openssh-host-match-criteria config))
(raise
(formatted-message
(G_ "define either 'name' or 'match-criteria', not both")))
(string-append "Host " (openssh-host-name config) "\n"))
(if (maybe-value-set? (openssh-host-match-criteria config))
(serialize-match-criteria #t (openssh-host-match-criteria config))
(raise
(formatted-message
(G_ "define either 'name' or 'match-criteria' once")))))
"Host " (openssh-host-name config) "\n"
(string-concatenate
(map (lambda (field)
((configuration-field-serializer field)
(configuration-field-name field)
((configuration-field-getter field) config)))
(remove openssh-host-name-or-match-field?
(remove openssh-host-name-field?
openssh-host-fields)))))
(define-record-type* <home-openssh-configuration>
home-openssh-configuration make-home-openssh-configuration
home-openssh-configuration?
(authorized-keys home-openssh-configuration-authorized-keys ;list of file-like
(default #f))
(known-hosts home-openssh-configuration-known-hosts ;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
(default "no")))
(define (serialize-add-keys-to-agent value)
(define (valid-time-string? str)
(and (> (string-length str) 0)
(equal?
str
(match:substring
(string-match "\
[0-9]+|([0-9]+[Ww])?([0-9]+[Dd])?([0-9]+[Hh])?([0-9]+[Mm])?([0-9]+[Ss])?"
str)))))
(string-append "AddKeysToAgent "
(cond ((member value '("yes" "no" "confirm" "ask")) value)
((valid-time-string? value) value)
((and (string-prefix? "confirm" value)
(valid-time-string?
(cdr (string-split value #\ )))) value)
;; The 'else' branch is unreachable.
(else
(raise
(formatted-message
(G_ "~s: invalid 'add-keys-to-agent' value")
value))))))
(authorized-keys home-openssh-configuration-authorized-keys ;list of file-like
(default '()))
(known-hosts home-openssh-configuration-known-hosts ;unspec | list of file-like
(default *unspecified*))
(hosts home-openssh-configuration-hosts ;list of <openssh-host>
(default '())))
(define (openssh-configuration->string config)
(string-join
(cons* (serialize-add-keys-to-agent
(home-openssh-configuration-add-keys-to-agent config))
(map serialize-openssh-host
(home-openssh-configuration-hosts config)))
"\n"))
(string-join (map serialize-openssh-host
(home-openssh-configuration-hosts config))
"\n"))
(define* (file-join name files #:optional (delimiter " "))
"Return a file in the store called @var{name} that is the concatenation
@@ -371,21 +217,19 @@ inserted after each of them."
'#$files)))))))
(define (openssh-configuration-files config)
(let* ((ssh-config (plain-file "ssh.conf"
(openssh-configuration->string config)))
(known-hosts (home-openssh-configuration-known-hosts config))
(authorized-keys (home-openssh-configuration-authorized-keys config))
(authorized-keys (and
authorized-keys
(file-join "authorized_keys" authorized-keys "\n"))))
`(,@(if authorized-keys
`((".ssh/authorized_keys" ,authorized-keys))
'())
(let ((config (plain-file "ssh.conf"
(openssh-configuration->string config)))
(known-hosts (home-openssh-configuration-known-hosts config))
(authorized-keys (file-join
"authorized_keys"
(home-openssh-configuration-authorized-keys config)
"\n")))
`((".ssh/authorized_keys" ,authorized-keys)
,@(if (unspecified? known-hosts)
'()
`((".ssh/known_hosts"
,(file-join "known_hosts" known-hosts "\n"))))
(".ssh/config" ,ssh-config))))
(".ssh/config" ,config))))
(define openssh-activation
(with-imported-modules (source-module-closure
@@ -410,54 +254,3 @@ inserted after each of them."
by providing a @file{~/.ssh/config} file, which is honored by the OpenSSH
client,@command{ssh}, and by other tools such as @command{guix deploy}.")
(default-value (home-openssh-configuration))))
;;;
;;; Ssh-agent.
;;;
(define-record-type* <home-ssh-agent-configuration>
home-ssh-agent-configuration make-home-ssh-agent-configuration
home-ssh-agent-configuration?
(openssh home-ssh-agent-openssh ;file-like
(default openssh))
(socket-directory home-ssh-agent-socket-directory ;string
(default #~(string-append %user-runtime-dir "/ssh-agent")))
(extra-options home-ssh-agent-extra-options ;list of string
(default '())))
(define (home-ssh-agent-services config)
"Return a <shepherd-service> for an ssh-agent with CONFIG."
(match-record config <home-ssh-agent-configuration>
(openssh socket-directory extra-options)
(let* ((ssh-agent (file-append openssh "/bin/ssh-agent"))
(socket-file #~(string-append #$socket-directory "/socket"))
(command #~`(#$ssh-agent
"-D" "-a" ,#$socket-file
#$@extra-options))
(log-file #~(string-append %user-log-dir "/ssh-agent.log")))
(list (shepherd-service
(documentation "Run the ssh-agent.")
(provision '(ssh-agent))
(modules '((shepherd support))) ;for '%user-runtime-dir', etc.
(start #~(lambda _
(unless (file-exists? #$socket-directory)
(mkdir-p #$socket-directory)
(chmod #$socket-directory #o700))
(fork+exec-command #$command #:log-file #$log-file)))
(stop #~(make-kill-destructor)))))))
(define (home-ssh-agent-environment-variables config)
'(("SSH_AUTH_SOCK"
. "${SSH_AUTH_SOCK-${XDG_RUNTIME_DIR-$HOME/.cache}/ssh-agent/socket}")))
(define home-ssh-agent-service-type
(service-type
(name 'home-ssh-agent)
(default-value (home-ssh-agent-configuration))
(extensions
(list (service-extension home-shepherd-service-type
home-ssh-agent-services)
(service-extension home-environment-variables-service-type
home-ssh-agent-environment-variables)))
(description
"Install and configure @command{ssh-agent} as a Shepherd service.")))
-32
View File
@@ -1,32 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.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/>.
(define-module (gnu home services syncthing)
#:use-module (gnu services)
#:use-module (gnu home services)
#:use-module (gnu services syncthing)
;; For the 'home-shepherd-service-type' mapping.
#:use-module (gnu home services shepherd)
#:export (home-syncthing-service-type)
#:re-export (syncthing-configuration
syncthing-configuration?))
(define home-syncthing-service-type
(service-type
(inherit (system->home-service-type syncthing-service-type))
(default-value (for-home (syncthing-configuration)))))
+32 -69
View File
@@ -1,7 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021, 2022 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -23,7 +22,6 @@
#:use-module (gnu home services)
#:use-module (gnu packages freedesktop)
#:use-module (gnu home services utils)
#:use-module (guix deprecation)
#:use-module (guix gexp)
#:use-module (guix modules)
#:use-module (guix records)
@@ -37,24 +35,10 @@
#:export (home-xdg-base-directories-service-type
home-xdg-base-directories-configuration
home-xdg-base-directories-configuration?
home-xdg-base-directories-configuration-cache-home
home-xdg-base-directories-configuration-config-home
home-xdg-base-directories-configuration-data-home
home-xdg-base-directories-configuration-state-home
home-xdg-base-directories-configuration-log-home ; deprecated
home-xdg-base-directories-configuration-runtime-dir
home-xdg-user-directories-service-type
home-xdg-user-directories-configuration
home-xdg-user-directories-configuration?
home-xdg-user-directories-configuration-desktop
home-xdg-user-directories-configuration-documents
home-xdg-user-directories-configuration-download
home-xdg-user-directories-configuration-music
home-xdg-user-directories-configuration-pictures
home-xdg-user-directories-configuration-publicshare
home-xdg-user-directories-configuration-templates
home-xdg-user-directories-configuration-videos
xdg-desktop-action
xdg-desktop-entry
@@ -79,7 +63,6 @@
(define (serialize-path field-name val) "")
(define path? string?)
(define-maybe path)
(define-configuration home-xdg-base-directories-configuration
(cache-home
@@ -100,23 +83,18 @@ read-only shared data, analogus to @file{/usr/share}, but for user.")
(path "${XDG_RUNTIME_DIR:-/run/user/$UID}")
"Base directory for programs to store user-specific runtime files,
like sockets.")
;; TODO: deprecated field, use $XDG_STATE_HOME(/log) instead.
(log-home
maybe-path
(path "$HOME/.local/var/log")
"Base directory for programs to store log files, analogus to
@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."
(lambda (field-name val)
(when (maybe-value-set? val)
(warn-about-deprecation field-name #f #:replacement 'state-home))
(serialize-path field-name val)))
consistent.")
(state-home
(path "$HOME/.local/state")
"Base directory for programs to store state data that should persist
between (application) restarts, such as logs, but are not important or
portable enough to the user to warrant storing them in
@env{XDG_DATA_HOME}."))
(path "$HOME/.local/var/lib")
"Base directory for programs to store state files, like databases,
analogus to @file{/var/lib}, but for user. It is not a part of XDG
Base Directory Specification, but helps to make implementation of home
services more consistent."))
(define (home-xdg-base-directories-environment-variables-service config)
(map
@@ -125,41 +103,25 @@ portable enough to the user to warrant storing them in
#f "XDG_~a"
(object->snake-case-string (configuration-field-name field) 'upper))
((configuration-field-getter field) config)))
;; XXX: deprecated field, remove later
(if (maybe-value-set?
(home-xdg-base-directories-configuration-log-home config))
home-xdg-base-directories-configuration-fields
(filter-configuration-fields
home-xdg-base-directories-configuration-fields
'(log-home) #t))))
home-xdg-base-directories-configuration-fields))
(define (ensure-xdg-base-dirs-on-activation config)
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils))
(map (lambda (xdg-base-dir-variable)
(mkdir-p
(getenv
xdg-base-dir-variable)))
'#$(filter-map
(lambda (field)
(let ((variable
(string-append
"XDG_"
(object->snake-case-string
(configuration-field-name field) 'upper))))
;; XDG_RUNTIME_DIR shouldn't be created during activation
;; and will be provided by elogind or other service.
(and (not (string=? "XDG_RUNTIME_DIR" variable))
variable)))
;; XXX: deprecated field, remove later
(if (maybe-value-set?
(home-xdg-base-directories-configuration-log-home
config))
home-xdg-base-directories-configuration-fields
(filter-configuration-fields
home-xdg-base-directories-configuration-fields
'(log-home) #t)))))))
#~(map (lambda (xdg-base-dir-variable)
((@ (guix build utils) mkdir-p)
(getenv
xdg-base-dir-variable)))
'#$(filter-map
(lambda (field)
(let ((variable
(string-append
"XDG_"
(object->snake-case-string
(configuration-field-name field) 'upper))))
;; XDG_RUNTIME_DIR shouldn't be created during activation
;; and will be provided by elogind or other service.
(and (not (string=? "XDG_RUNTIME_DIR" variable))
variable)))
home-xdg-base-directories-configuration-fields)))
(define (last-extension-or-cfg config extensions)
"Picks configuration value from last provided extension. If there
@@ -178,10 +140,13 @@ are no extensions use configuration instead."
(default-value (home-xdg-base-directories-configuration))
(compose identity)
(extend last-extension-or-cfg)
(description "Configure XDG base directories. The
services of this service-type is instantiated by default, to provide
non-default value, extend the service-type (using @code{simple-service}
for example).")))
(description "Configure XDG base directories. This
service introduces two additional variables @env{XDG_STATE_HOME},
@env{XDG_LOG_HOME}. They are not a part of XDG specification, at
least yet, but are convenient to have, it improves the consistency
between different home services. The services of this service-type is
instantiated by default, to provide non-default value, extend the
service-type (using @code{simple-service} for example).")))
(define (generate-home-xdg-base-directories-documentation)
(generate-documentation
@@ -266,8 +231,6 @@ pre-populated content.")
home-activation-service-type
home-xdg-user-directories-activation-service)))
(default-value (home-xdg-user-directories-configuration))
(compose identity)
(extend last-extension-or-cfg)
(description "Configure XDG user directories. To
disable a directory, point it to the $HOME.")))
+3 -4
View File
@@ -93,10 +93,9 @@ optionally, CODESET."
(define (supported-locales->locales supported-locales)
"Given SUPPORTED-LOCALES, a file produced by 'glibc-supported-locales',
return a list of locales where each locale is an alist."
(filter-map (match-lambda
(("C.UTF-8" . codeset) #f)
((locale . codeset)
(locale-string->locale locale codeset)))
(map (match-lambda
((locale . codeset)
(locale-string->locale locale codeset)))
(call-with-input-file supported-locales read)))
+2 -17
View File
@@ -4,7 +4,6 @@
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
;;; Copyright © 2023 Denys Nykula <vegan@libre.net.ua>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,7 +23,6 @@
(define-module (gnu installer services)
#:use-module (guix records)
#:use-module (guix read-print)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:export (system-service?
system-service-name
@@ -161,19 +159,6 @@
(base (if desktop?
'%desktop-services
'%base-services))
(native-console-font (match (getenv "LANGUAGE")
((or "be" "bg" "el" "eo" "kk" "ky"
"mk" "mn" "ru" "sr" "tg" "uk")
"LatGrkCyr-8x16")
(_ #f)))
(services (if native-console-font
`(modify-services ,base
(console-font-service-type
config => (map (lambda (tty)
(cons (car tty)
,native-console-font))
config)))
base))
(service-heading (list (vertical-space 1)
(comment (G_ "\
;; Below is the list of system services. To search for available
@@ -192,7 +177,7 @@
%base-packages))))
,@service-heading
(services ,services))
(services ,base))
`(,@(if (null? packages)
'()
`(,@package-heading
@@ -214,4 +199,4 @@
,(comment (G_ "\
;; This is the default list of services we
;; are appending to.\n"))
,services))))))
,base))))))
+148 -249
View File
File diff suppressed because it is too large Load Diff
+2 -5
View File
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.org>
;;; Copyright © 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -291,10 +291,7 @@ exist on the machine."
if any of the modules needed by 'needed-for-boot' file systems in MACHINE are
not available in the initrd."
(define file-systems
(filter (lambda (file-system)
(and (file-system-needed-for-boot? file-system)
(not (member (file-system-type file-system)
%pseudo-file-system-types))))
(filter file-system-needed-for-boot?
(operating-system-file-systems (machine-operating-system machine))))
(define (missing-modules fs)
+5 -11
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2020, 2022-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012-2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
@@ -38,7 +38,6 @@
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:use-module (ice-9 binary-ports)
#:autoload (rnrs bytevectors) (bytevector?)
#:autoload (system base compile) (compile)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
@@ -443,15 +442,10 @@ reducing the memory footprint."
(lambda (port)
;; Store the cache as a '.go' file. This makes loading fast and reduces
;; heap usage since some of the static data is directly mmapped.
(match (compile `'(,@exp)
#:to 'bytecode
#:opts '(#:to-file? #t))
((? bytevector? bv)
(put-bytevector port bv))
(proc
;; In Guile 3.0.9, the linker can return a procedure instead of a
;; bytevector. Adjust to that.
(proc port)))))
(put-bytevector port
(compile `'(,@exp)
#:to 'bytecode
#:opts '(#:to-file? #t)))))
cache-file)
+28 -37
View File
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Marek Benc <merkur32@gmail.com>
;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
@@ -25,6 +25,7 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system gnu)
#:use-module (guix build-system glib-or-gtk)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
@@ -40,7 +41,6 @@
#:use-module (gnu packages ots)
#:use-module (gnu packages popt)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages readline)
#:use-module (gnu packages wv)
#:use-module (gnu packages xml))
@@ -74,14 +74,7 @@
"latex " "loadbindings " "mht " "mif " "mswrite " "opendocument "
"openwriter " "openxml " "opml " "ots " "paint " "passepartout "
"pdb " "pdf " "presentation " "s5 " "sdw " "t602 " "urldict "
"wikipedia " "wml " "xslfo")
"--enable-introspection"
(string-append "--with-gir-dir="
(assoc-ref %outputs "out")
"/share/gir-1.0")
(string-append "--with-typelib-dir="
(assoc-ref %outputs "out")
"/lib/girepository-1.0"))
"wikipedia " "wml " "xslfo"))
;; tests fail with: Gtk-CRITICAL **: gtk_settings_get_for_screen:
;; assertion 'GDK_IS_SCREEN (screen)' failed
;; GLib-GObject-CRITICAL **: g_object_get_qdata:
@@ -92,34 +85,32 @@
#:make-flags
(list "gtk_update_icon_cache=true")))
(inputs
(list boost
enchant
fontconfig
fribidi
glib
goffice
gtk+
libchamplain
libglade
libgsf
libjpeg-turbo
libpng
(librsvg-for-system)
libxml2
libxslt
ots
popt
readline
telepathy-glib
wv
zlib))
`(("boost" ,boost)
("enchant" ,enchant)
("fontconfig" ,fontconfig)
("fribidi" ,fribidi)
("glib" ,glib)
("goffice" ,goffice)
("gtk+" ,gtk+)
("libchamplain" ,libchamplain)
("libglade" ,libglade)
("libgsf" ,libgsf)
("libjpeg" ,libjpeg-turbo)
("libpng" ,libpng)
("librsvg" ,librsvg)
("libxml2" ,libxml2)
("libxslt" ,libxslt)
("ots" ,ots)
("popt" ,popt)
("readline" ,readline)
("telepathy" ,telepathy-glib)
("wv" ,wv)
("zlib" ,zlib)))
(native-inputs
(list gobject-introspection
intltool
`(,glib "bin")
libtool
pkg-config
python-wrapper))
`(("intltool" ,intltool)
("glib:bin" ,glib "bin")
("libtool" ,libtool)
("pkg-config" ,pkg-config)))
(home-page "https://www.abisource.com/")
(synopsis "Word processing program")
+78 -105
View File
@@ -3,9 +3,8 @@
;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
;;; Copyright © 2018, 2021, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 Andrew Miloradovsky <andrew@interpretmath.pw>
;;; Copyright © 2020, 2023 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2022 Hunter Jozwiak <hunter.t.joz@gmail.com>
;;; Copyright © 2023 Ivan Gankevich <igankevich@capybaramail.xyz>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,7 +23,6 @@
(define-module (gnu packages accessibility)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix download)
@@ -93,56 +91,66 @@ terminals.")
(define-public brltty
(package
(name "brltty")
(version "6.6")
(version "6.5")
(source
(origin
(method url-fetch)
(uri
(string-append "https://brltty.app/archive/brltty-" version ".tar.gz"))
(sha256
(base32 "1z54rin4zhg3294pq47gamzjy2c56zfkl07rx2qy2khlpyczds0k"))))
(base32 "1h62xzd5k0aaq2k4v3w93rizxnb8psvkxrlx62wr08ybwpspgp7z"))))
(build-system glib-or-gtk-build-system)
(arguments
(list
#:tests? #f ; no target
;; High parallelism may cause errors such as:
;; ranlib: ./libbrlapi_stubs.a: error reading brlapi_stubs.o: file truncated
#:parallel-build? #f
#:configure-flags
#~(list
(string-append "--with-libbraille="
#$(this-package-input "libbraille"))
(string-append "--with-espeak_ng="
#$(this-package-input "espeak-ng"))
(string-append "--with-espeak="
#$(this-package-input "espeak"))
(string-append "--with-flite="
#$(this-package-input "flite"))
;; Required for RUNPATH validation.
(string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
#:make-flags
#~(list
(string-append "JAVA_JAR_DIR=" #$output)
(string-append "JAVA_JNI_DIR=" #$output)
(string-append "OCAML_DESTDIR=" #$output "/lib")
(string-append "PYTHON_PREFIX=" #$output)
"PYTHON_ROOT=/"
(string-append "TCL_DIR=" #$output "/lib")
"INSTALL_WRITABLE_DIRECTORY=no-thanks")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-errors
(lambda _
(substitute* "configure"
(("/sbin/ldconfig")
(which "true")))
;; Make Python bindings use rpath.
(substitute* "Bindings/Python/setup.py.in"
(("extra_compile_args =")
(string-append "extra_link_args = ['-Wl,-rpath="
#$output
"/lib'], "
"extra_compile_args = "))))))))
`(#:tests? #f ; No target
;; High parallelism may cause errors such as:
;; ranlib: ./libbrlapi_stubs.a: error reading brlapi_stubs.o: file truncated
#:parallel-build? #f
#:configure-flags
(list
(string-append "--with-libbraille="
(assoc-ref %build-inputs "libbraille"))
(string-append "--with-espeak_ng="
(assoc-ref %build-inputs "espeak-ng"))
(string-append "--with-espeak="
(assoc-ref %build-inputs "espeak"))
(string-append "--with-flite="
(assoc-ref %build-inputs "flite"))
;; Required for RUNPATH validation.
(string-append "LDFLAGS=-Wl,-rpath="
(assoc-ref %outputs "out")
"/lib"))
#:make-flags
(list
(string-append "JAVA_JAR_DIR="
(assoc-ref %outputs "out"))
(string-append "JAVA_JNI_DIR="
(assoc-ref %outputs "out"))
(string-append "OCAML_DESTDIR="
(assoc-ref %outputs "out")
"/lib")
(string-append "PYTHON_PREFIX="
(assoc-ref %outputs "out"))
"PYTHON_ROOT=/"
(string-append "TCL_DIR="
(assoc-ref %outputs "out")
"/lib")
"INSTALL_WRITABLE_DIRECTORY=no-thanks")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-errors
(lambda* (#:key outputs #:allow-other-keys)
(substitute* "configure"
(("/sbin/ldconfig")
(which "true")))
;; Make Python bindings use rpath.
(substitute* "Bindings/Python/setup.py.in"
(("extra_compile_args =")
(string-append "extra_link_args = ['-Wl,-rpath="
(assoc-ref outputs "out")
"/lib'], "
"extra_compile_args = "))))))))
(native-inputs
(list clisp
python-cython
@@ -212,7 +220,7 @@ incorporated.")
(inputs
(list libxml2
libglade
(librsvg-for-system)
librsvg
gstreamer
cairo
gtk+
@@ -221,7 +229,7 @@ incorporated.")
libnotify))
(native-inputs
(list gettext-minimal intltool pkg-config))
(home-page "https://florence.sourceforge.net/")
(home-page "http://florence.sourceforge.net/")
(synopsis "Extensible, scalable virtual keyboard for X11")
(description
"Florence is an extensible scalable virtual keyboard for X11.
@@ -237,11 +245,11 @@ available to help to click.")
(license license:gpl2+)))
(define-public footswitch
(let ((commit "e455d6752221b9e9c3818cc304c873b9c2792490")
(revision "0"))
(let ((commit "ca43d53fc2002520cc825d119702afc124303e73")
(revision "2"))
(package
(name "footswitch")
(version (git-version "1.0" revision commit))
(version (git-version "0.1" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
@@ -250,32 +258,32 @@ available to help to click.")
(file-name (git-file-name name version))
(sha256
(base32
"0xkk60sg3szpgbl3z8djlpagglsldv9viqibsih6wcnbhikzlc6j"))))
"14pyzc4ws1mj859xs9n4x83wzxxvd3bh5bdxzr6nv267xwx1mq68"))))
(build-system gnu-build-system)
(arguments
(list
#:tests? #f ; no tests
#:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
#:phases
#~(modify-phases %standard-phases
(delete 'configure)
;; Install target in the Makefile does not work for Guix.
(replace 'install
(lambda _
(let ((bin (string-append #$output "/bin")))
(install-file "footswitch" bin)
(install-file "scythe" bin)))))))
(native-inputs
(list pkg-config))
(inputs
(list hidapi))
(arguments
`(#:tests? #f ; no tests
#:make-flags (list (string-append "CC=" ,(cc-for-target)))
#:phases (modify-phases %standard-phases
(delete 'configure)
;; Install target in the Makefile does not work for Guix
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((bin (string-append (assoc-ref outputs "out")
"/bin")))
(install-file "footswitch" bin)
(install-file "scythe" bin)
#t))))))
(home-page "https://github.com/rgerganov/footswitch")
(synopsis "Command line utilities for PCsensor and Scythe foot switches")
(synopsis "Command line utility for PCsensor foot switch")
(description
"This package provides command line utilities for programming PCsensor
and Scythe foot switches. It works for both single pedal and three pedal
devices.")
(license license:expat))))
"Command line utility for programming foot switches sold by PCsensor.
It works for both single pedal devices and three pedal devices. All supported
devices have vendorId:productId = 0c45:7403 or 0c45:7404.")
(license license:expat))))
(define-public xmagnify
(package
@@ -340,39 +348,4 @@ CONFIG_SPEAKUP=m
@item
CONFIG_SPEAKUP_SOFT=m
@end itemize")
(home-page "https://github.com/linux-speakup/espeakup")))
(define-public mouseloupe
(package
(name "mouseloupe")
(version "0.6")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/" name "/" name "/v" version
"/" name "-v" version ".tar.gz"))
(sha256 (base32 "0cvdkfakw7cix07j0c4iy10fkbqn6n8l1gr5dd3iy4f2d9bkza43"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; there are no tests
#:phases
(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'strtof
(lambda _
(substitute* "mouseloupe.c"
(("\\bstrtof\\b") "mouseloupe_strtof"))))
(replace 'install
(lambda _
(define out (assoc-ref %outputs "out"))
(install-file "mouseloupe" (string-append out "/bin"))
(install-file "mouseloupe.1.gz" (string-append out "/share/man/man1")))))))
(native-inputs
(list pkg-config))
(inputs
(list libx11 libxext libxcomposite libxdamage libxrender))
(synopsis "Screen magnifier tool for people with low vision")
(description "MouseLoupe is a kind of magnifying glass combined with the mouse pointer
which allows an easy and pleasant web navigation.")
(home-page "https://sourceforge.net/projects/mouseloupe/")
(license license:gpl2+)))
(home-page "ttps://github.com/linux-speakup/espeakup")))
+4 -4
View File
@@ -5,7 +5,7 @@
;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Lars-Dominik Braun <ldb@leibniz-psychology.org>
;;;
;;; This file is part of GNU Guix.
@@ -28,14 +28,14 @@
#:use-module (gnu packages attr)
#:use-module (gnu packages base)
#:use-module (gnu packages check)
#:use-module (gnu packages hurd)
#:use-module (gnu packages gettext)
#:use-module (gnu packages perl)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (gnu packages)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python)
#:use-module (guix utils))
#:use-module (guix build-system python))
(define-public acl
(package
@@ -55,7 +55,7 @@
,@%gnu-build-system-modules)
#:configure-flags '("--disable-static")
#:tests? ,(not (or (%current-target-system)
(target-hurd?)))
(hurd-target?)))
#:phases
(modify-phases %standard-phases
;; XXX After repacking the sources the timestamps are reset to the
+6
View File
@@ -21,10 +21,16 @@
(define-module (gnu packages ada)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (gnu packages)
#:use-module (gnu packages base)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
#:use-module (ice-9 match))
(define-public ada/ed
+311 -573
View File
File diff suppressed because it is too large Load Diff
+11 -63
View File
@@ -3,7 +3,6 @@
;;; Copyright © 2015, 2016, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019, 2021 Marius Bakke <marius@gnu.org>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,11 +20,9 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages adns)
#:use-module (guix gexp)
#:use-module (guix licenses)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix utils)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module (gnu packages m4)
@@ -68,7 +65,7 @@ scripts.")
(define-public c-ares
(package
(name "c-ares")
(version "1.18.1")
(version "1.17.2")
(source (origin
(method url-fetch)
(uri (string-append
@@ -76,72 +73,23 @@ scripts.")
".tar.gz"))
(sha256
(base32
"1kxviskwsaa7dcgscvssxa8ps88pdq7kq4z93gxvz7sam2l54z8s"))))
"0gcincjvpll2qmlc906jx6mfq97s87mgi0zby0753ki0rr2ch0s8"))))
(build-system gnu-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-before 'check 'filter-live-tests
(lambda _
;; Filter tests that require internet access.
(setenv "GTEST_FILTER" "-*.Live*:*.FamilyV4*")))
#$@(if (system-hurd?)
#~((add-after 'unpack 'skip-tests
(lambda _
(substitute* "test/ares-test-main.cc"
(("(^| )main *\\(.*" all)
(string-append all " exit (77);\n")))))
(add-after 'filter-live-tests 'filter-hurd-tests
(lambda _
(setenv "GTEST_FILTER"
(string-append
(getenv "GTEST_FILTER")
":.*Basic/2"
":.*CancelImmediate/2"
":.*CancelImmediateGetHostByAddr/2"
":.*CancelLater/1"
":.*FamilyUnspecified/2"
":.*FamilyV6/2"
":.*GetAddrInfoParallelLookups/1"
":.*GetHostByAddrDestroy/2"
":.*GetHostByNameCNAMENoData/2"
":.*GetHostByNameDestroyAbsolute/2"
":.*GetHostByNameDestroyRelative/2"
":.*GetHostByNameParallelLookups/1"
":.*HostAlias/2"
":.*HostAliasMissing/2"
":.*HostAliasMissingFile/2"
":.*NotImplResponse/2"
":.*RefusedResponse/2"
":.*Resend/1"
":.*RetryWithoutEDNS/2"
":.*SearchDomains/2"
":.*SearchDomainsBare/2"
":.*SearchDomainsServFailOnAAAA/2"
":.*SearchDomainsWithResentReply/1"
":.*SearchHighNdots/2"
":.*SearchNoDataThenFail/2"
":.*SearchNoDataThenNoDataBare/2"
":.*SearchNoDataThenSuccess/2"
":.*ServFailResponse/2"
":.*SimpleQuery/2"
":.*SockCallback/2"
":.*SockConfigureCallback/2"
":.*SortListV4/2"
":.*SortListV6/2"
":.*ThirdServer/2"
":.*TruncationRetry/1"
":.*UnspecifiedFamilyCname6A4/2"
":.*UnspecifiedFamilyV4/2"
":.*UnspecifiedFamilyV6/2")))))
#~()))))
'(;; FIXME: Some tests require network access
#:tests? #f
#:phases
(modify-phases %standard-phases
(add-before 'check 'filter-live-tests
(lambda _
;; Filter tests that require internet access.
(setenv "GTEST_FILTER" "-*.Live*:*.FamilyV4*"))))))
(native-inputs
(list pkg-config))
(home-page "https://c-ares.haxx.se/")
(synopsis "C library for asynchronous DNS requests")
(description
"C-ares is a C library that performs DNS requests and name resolution
"C-ares is a C library that performs DNS requests and name resolution
asynchronously. It is intended for applications which need to perform DNS
queries without blocking, or need to perform multiple DNS queries in parallel.
The primary examples of such applications are servers which communicate with
+49 -202
View File
@@ -5,7 +5,6 @@
;;; Copyright © 2018, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 John Soo <jsoo1@asu.edu>
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2023 Josselin Poiret <dev@jpoiret.xyz>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -23,18 +22,13 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages agda)
#:use-module (gnu packages)
#:use-module (gnu packages haskell-check)
#:use-module (gnu packages haskell-web)
#:use-module (gnu packages haskell-xyz)
#:use-module (gnu packages imagemagick)
#:use-module (gnu packages python)
#:use-module (gnu packages sphinx)
#:use-module (gnu packages texinfo)
#:use-module (guix build-system agda)
#:use-module (guix build-system emacs)
#:use-module (guix build-system gnu)
#:use-module (guix build-system haskell)
#:use-module (guix build-system trivial)
#:use-module (guix gexp)
#:use-module (guix download)
#:use-module (guix git-download)
@@ -44,17 +38,15 @@
(define-public agda
(package
(name "agda")
(version "2.6.3")
(version "2.6.2.2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/agda/agda.git")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(method url-fetch)
(uri (string-append
"https://hackage.haskell.org/package/Agda/Agda-"
version ".tar.gz"))
(sha256
(base32 "1s7zd01i8pmvi90ywx497kc07z50nah7h0fc2dn6jzb132k5sh1q"))
(patches (search-patches "agda-libdirs-env-variable.patch"))))
(base32 "0yjjbhc593ylrm4mq4j01nkdvh7xqsg5in30wxj4y53vf5hkggp5"))))
(build-system haskell-build-system)
(inputs
(list ghc-aeson
@@ -78,14 +70,7 @@
ghc-strict
ghc-unordered-containers
ghc-uri-encode
ghc-vector-hashtables
ghc-zlib))
(native-inputs
(list python
python-sphinx
python-sphinx-rtd-theme
texinfo
imagemagick))
(arguments
(list #:modules `((guix build haskell-build-system)
(guix build utils)
@@ -102,22 +87,7 @@
(let ((agda-compiler (string-append #$output "/bin/agda")))
(for-each (cut invoke agda-compiler <>)
(find-files (string-append #$output "/share")
"\\.agda$")))))
(add-after 'agda-compile 'install-info
(lambda _
(with-directory-excursion "doc/user-manual"
(invoke "sphinx-build" "-b" "texinfo"
"." "_build_texinfo")
(with-directory-excursion "_build_texinfo"
(setenv "infodir" (string-append #$output
"/share/info"))
(invoke "make" "install-info"))))))))
(search-paths
(list (search-path-specification
(variable "AGDA_LIBDIRS")
(files (list "lib/agda")))))
(native-search-paths
search-paths)
"\\.agda$"))))))))
(home-page "https://wiki.portal.chalmers.se/agda/")
(synopsis
"Dependently typed functional programming language and proof assistant")
@@ -138,181 +108,58 @@ such as Coq, Epigram and NuPRL.")
(define-public emacs-agda2-mode
(package
(inherit agda)
(name "emacs-agda2-mode")
(version (package-version agda))
(source (package-source agda))
(build-system emacs-build-system)
(inputs '())
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'enter-elisp-dir
(lambda _ (chdir "src/data/emacs-mode"))))))
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'enter-elisp-dir
(lambda _ (chdir "src/data/emacs-mode") #t)))))
(home-page "https://agda.readthedocs.io/en/latest/tools/emacs-mode.html")
(synopsis "Emacs mode for Agda")
(description "This Emacs mode enables interactive development with
Agda. It also aids the input of Unicode characters.")
(license (package-license agda))))
Agda. It also aids the input of Unicode characters.")))
(define-public agda-ial
(let ((revision "1")
;; There hasn't been a release in a long time, and the last one
;; doesn't build with Agda 2.6.
(commit "ded30c410d5d40142249686572aa1acd1b2f8cc7"))
(package
(name "agda-ial")
(version (git-version "1.5.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference (url "https://github.com/cedille/ial")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0xn6zvp1wnm0i84pz1rfbzfmayd15ch4i5s11ycd88d22pxd55dc"))))
(build-system agda-build-system)
(arguments
(list
#:gnu-and-haskell? #t
(package
(name "agda-ial")
(version "1.5.0")
(home-page "https://github.com/cedille/ial")
(source (origin
(method git-fetch)
(uri (git-reference (url home-page)
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0dlis6v6nzbscf713cmwlx8h9n2gxghci8y21qak3hp18gkxdp0g"))))
(build-system gnu-build-system)
(inputs
(list agda))
(arguments
`(#:parallel-build? #f
#:phases
#~(modify-phases %standard-phases
(add-before 'build 'patch-dependencies
(lambda _ (patch-shebang "find-deps.sh")))
(replace 'build
(lambda _
(invoke "make"))))))
(home-page "https://github.com/cedille/ial")
(synopsis "The Iowa Agda Library")
(description
"The goal is to provide a concrete library focused on verification
(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'patch-dependencies
(lambda _ (patch-shebang "find-deps.sh") #t))
(delete 'check)
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(include (string-append out "/include/agda/ial")))
(for-each (lambda (file)
(make-file-writable file)
(install-file file include))
(find-files "." "\\.agdai?(-lib)?$"))
#t))))))
(synopsis "The Iowa Agda Library")
(description
"The goal is to provide a concrete library focused on verification
examples, as opposed to mathematics. The library has a good number
of theorems for booleans, natural numbers, and lists. It also has
trees, tries, vectors, and rudimentary IO. A number of good ideas
come from Agda's standard library.")
(license license:expat))))
(define-public agda-stdlib
(package
(name "agda-stdlib")
(version "1.7.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/agda/agda-stdlib")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"065hf24xjpciwdrvk4isslgcgi01q0k93ql0y1sjqqvy5ryg5xmy"))))
(build-system agda-build-system)
(arguments
(list
#:plan '(("^\\./README.agda$" "-i."))
#:gnu-and-haskell? #t
#:phases
#~(modify-phases %standard-phases
(add-before 'build 'generate-everything
(lambda* (#:key inputs native-inputs #:allow-other-keys)
(invoke
(search-input-file (or native-inputs inputs) "/bin/runhaskell")
"GenerateEverything.hs"))))))
(native-inputs (list ghc-filemanip))
(synopsis "The Agda Standard Library")
(description
"The standard library aims to contain all the tools needed to write
both programs and proofs easily. While we always try and write efficient
code, we prioritize ease of proof over type-checking and normalization
performance. If computational performance is important to you, then perhaps
try agda-prelude instead.")
(home-page "https://wiki.portal.chalmers.se/agda/pmwiki.php")
(license license:expat)))
(define-public agda-categories
(package
(name "agda-categories")
(version "0.1.7.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/agda/agda-categories.git")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0xwgm2mfl2pxipsv31bin8p14y1yhd9n27lv3clvsxd4z9yc034m"))
(patches (search-patches "agda-categories-remove-incompatible-flags.patch"
"agda-categories-use-find.patch"))))
(build-system agda-build-system)
(arguments
(list
#:gnu-and-haskell? #t
#:phases
#~(modify-phases %standard-phases
(replace 'build
(lambda _
(invoke "make"))))))
(propagated-inputs
(list agda-stdlib))
(synopsis "New Categories library for Agda")
(description "A new Categories library for Agda")
(home-page "https://github.com/agda/agda-categories")
(license license:expat)))
(define-public agda-cubical
;; Upstream's HEAD follows the latest Agda release, but they don't release
;; until a newer Agda release comes up, so their releases are always one
;; version late.
(package
(name "agda-cubical")
(version "0.5")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/agda/cubical.git")
(commit (string-append "v" version))))
(sha256
(base32
"0yfg7gr55n08ly1qgzpcp16s15k1abycppbcdi9lzg1hjryqxcg3"))))
(build-system agda-build-system)
(arguments
(list
#:gnu-and-haskell? #t
#:phases
#~(modify-phases %standard-phases
(replace 'build
(lambda _
(invoke "make"))))))
(synopsis "Standard library for Cubical Agda")
(description "A standard library for Cubical Agda, comparable to
agda-stdlib but using cubical methods.")
(home-page "https://github.com/agda/cubical")
(license license:expat)))
(define-public agda-1lab
;; Upstream doesn't do releases (yet). Use a commit that builds with 2.6.3,
;; since they use Agda HEAD.
(let* ((revision "1")
(commit "47ca1d23640a6f49a3abe3c2fe27738bcc10c9c6"))
(package
(name "agda-1lab")
(version (git-version "0.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/plt-amy/1lab.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"0j7mp6c0xd0849skdxzncklkxynxnyfrbpcjv4qp5p1xfn0dnfqx"))))
(build-system agda-build-system)
(arguments
(list #:plan '(("src/index\\.lagda\\.md$"))))
(synopsis "Reference resource for mathematics done in Homotopy Type Theory")
(description "A formalised, cross-linked reference resource for
mathematics done in Homotopy Type Theory. Unlike the HoTT book, the 1lab is
not a linear resource: Concepts are presented as a directed graph, with
links indicating dependencies.")
(home-page "https://1lab.dev")
(license license:agpl3))))
+99 -173
View File
@@ -1,9 +1,9 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2022 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013, 2015, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2016-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016, 2018, 2019, 2021, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017, 2020-2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 20172021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -12,7 +12,7 @@
;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2020, 2021, 2023 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2021 Lars-Dominik Braun <ldb@leibniz-psychology.org>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
@@ -34,7 +34,6 @@
(define-module (gnu packages algebra)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
#:use-module (gnu packages bison)
#:use-module (gnu packages boost)
#:use-module (gnu packages check)
@@ -59,7 +58,6 @@
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages readline)
#:use-module (gnu packages ruby)
#:use-module (gnu packages shells)
#:use-module (gnu packages tex)
#:use-module (gnu packages texinfo)
@@ -105,7 +103,7 @@ implement the floating point approach to complex multiplication are
implemented. On the other hand, these comprise asymptotically fast
multiplication routines such as ToomCook and the FFT.")
(license license:lgpl3+)
(home-page "https://www.multiprecision.org/mpfrcx/")))
(home-page "http://www.multiprecision.org/mpfrcx/")))
(define-public gf2x
(package
@@ -133,7 +131,7 @@ greatest common divisor operations.")
(define-public cm
(package
(name "cm")
(version "0.4.2")
(version "0.4.0")
(source (origin
(method url-fetch)
(uri (string-append
@@ -141,7 +139,7 @@ greatest common divisor operations.")
version ".tar.gz"))
(sha256
(base32
"1c6m00wiw3rs5f0lq6c80rdr3dzklsvh69l8w3s7bj2r6yha6qbw"))))
"04l3inafql40n0r5rq8rmp21zplgdrzblil2kgkpx5s0jbs9i8rr"))))
(build-system gnu-build-system)
(propagated-inputs
(list mpfrcx zlib)) ; Header files included from cm_common.h.
@@ -155,7 +153,7 @@ multiplication via floating point approximations. It consists of libraries
that can be called from within a C program and of executable command
line applications.")
(license license:gpl3+)
(home-page "https://www.multiprecision.org/cm/")))
(home-page "http://www.multiprecision.org/cm/")))
(define-public fplll
(package
@@ -226,7 +224,7 @@ the real span of the lattice.")
(define-public pari-gp
(package
(name "pari-gp")
(version "2.15.4")
(version "2.15.1")
(source (origin
(method url-fetch)
(uri (string-append
@@ -234,9 +232,10 @@ the real span of the lattice.")
version ".tar.gz"))
(sha256
(base32
"03swii601kxnphl6v7wv0rh2xn4rz6xbljzvfw5v9py6w3z5nm63"))))
"0gcyj0p0z5s1i9y67z5awwmmdvqrisvyrq22gvkbx1b6gjvrsha5"))))
(build-system gnu-build-system)
(native-inputs (list (texlive-updmap.cfg)))
(native-inputs (list (texlive-updmap.cfg
(list texlive-amsfonts))))
(inputs (list gmp libx11 perl readline))
(arguments
'(#:make-flags '("all")
@@ -328,7 +327,7 @@ precision.")
(define-public giac
(package
(name "giac")
(version "1.9.0-45")
(version "1.9.0-29")
(source
(origin
(method url-fetch)
@@ -340,7 +339,7 @@ precision.")
"~parisse/debian/dists/stable/main/source/"
"giac_" version ".tar.gz"))
(sha256
(base32 "0yxsl1vvwcbpwcmzp9v9rfm9djmapab0nhb3gs7zmjv5yvzbgj4d"))))
(base32 "03hbg5b0xmdfp919mxn5lsard1mwg1kcm9xrm8gk7wnmr9r1adgn"))))
(build-system gnu-build-system)
(arguments
(list
@@ -359,8 +358,8 @@ precision.")
;; FIXME: Tests failing. Not sure why.
(lambda _
(substitute* "check/Makefile.in"
(("chk_fhan(4|11)") "")
(("chk_fhan(14|21)") "")))) ;fail specifically on i686
(("chk_fhan4") "")
(("chk_fhan11") ""))))
(add-after 'install 'fix-doc
(lambda _
;; Most French documentation has a non-commercial license, so we
@@ -405,7 +404,7 @@ precision.")
hevea
python-wrapper
readline
(texlive-updmap.cfg)))
texlive-tiny))
(home-page "https://www-fourier.ujf-grenoble.fr/~parisse/giac.html")
(synopsis "Computer algebra system")
(description
@@ -465,9 +464,7 @@ GCDs, factoring, solving linear systems, and evaluating special
functions. In addition, FLINT provides various low-level routines for
fast arithmetic.")
(license license:lgpl2.1+)
(home-page "https://flintlib.org/")
(properties
'((release-monitoring-url . "http://flintlib.org/downloads.html")))))
(home-page "http://flintlib.org/")))
(define-public arb
(package
@@ -686,7 +683,7 @@ binary.")
(patches (search-patches "bc-fix-cross-compilation.patch"))))
(build-system gnu-build-system)
(native-inputs
(list automake autoconf ed flex readline texinfo))
(list automake autoconf ed flex texinfo))
(inputs
(list readline))
(arguments
@@ -769,7 +766,7 @@ a C program.")
;; different machine.
"ax_cv_c_flags__mtune_native=no")))
(native-inputs (list perl))
(home-page "https://fftw.org")
(home-page "http://fftw.org")
(synopsis "Computing the discrete Fourier transform")
(description
"FFTW is a C subroutine library for computing the discrete Fourier
@@ -936,7 +933,7 @@ algorithms from the FORTRAN library MINPACK.")
(define-public symengine
(package
(name "symengine")
(version "0.10.1")
(version "0.9.0")
(source
(origin
(method git-fetch)
@@ -945,7 +942,7 @@ algorithms from the FORTRAN library MINPACK.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0qy5w5msq0zy7drbhdy0vx451zglha8jm5s4zzmvmsja5yyv8fx9"))))
(base32 "17b6byrhk0bgvarqmg92nrrqhzll9as6x1smghmyq2h9xc373ap4"))))
(build-system cmake-build-system)
(arguments
'(#:configure-flags
@@ -1147,12 +1144,9 @@ features, and more.")
(substitute-keyword-arguments (package-arguments eigen)
((#:phases phases)
`(modify-phases ,phases
(delete 'disable-some-tests)
;; This test cannot be compiled
(add-after 'unpack 'gcc-compatibility
(lambda _
(substitute* "test/CMakeLists.txt"
(("ei_add_test\\(stddeque") "#")))))))))))
(delete 'disable-some-tests)))))
(native-inputs
(list gcc-7)))))
(define-public eigen-for-tensorflow-lite
;; This commit was taken from
@@ -1189,7 +1183,7 @@ features, and more.")
(define-public xtensor
(package
(name "xtensor")
(version "0.24.6")
(version "0.24.0")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -1197,7 +1191,7 @@ features, and more.")
(commit version)))
(sha256
(base32
"0gf5m5p61981pv7yh5425lcv8dci948ri37hn1zlli7xg54x0g3i"))
"14fpzwdq26p2fqdrmc78hny9pp09k9c53jnwlh7f8x54ikzm23c2"))
(file-name (git-file-name name version))))
(build-system cmake-build-system)
(native-inputs
@@ -1261,7 +1255,7 @@ xtensor provides:
(define-public gap
(package
(name "gap")
(version "4.12.2")
(version "4.11.1")
(source
(origin
(method url-fetch)
@@ -1271,13 +1265,14 @@ xtensor provides:
version
".tar.gz"))
(sha256
(base32 "1a47slldnjq6mib69k3g8lqw6nyxdrwdd3gfjhj252mpbrs0h8v7"))
(base32 "01535s81h254zcs84zi95xqmhvvn6fn9qss8761myxc2gpdcadb6"))
(modules '((guix build utils) (ice-9 ftw) (srfi srfi-1)))
(snippet
'(begin
;; Delete bundled external libraries.
;; Delete the external gmp and zlib libraries
;; and a subdirectory not needed for our build.
(for-each delete-file-recursively
'("extern" "hpcgap/extern"))
'("extern" "hpcgap"))
;; Delete a failing test.
;; FIXME: This might be fixed in the next release, see
;; https://github.com/gap-system/gap/issues/3292
@@ -1291,69 +1286,47 @@ xtensor provides:
(scandir ".")
'("." ".."
;; Necessary packages.
"gapdoc"
"primgrp"
"smallgrp" ; artistic2.0
"transgrp" ; artistic2.0 for data,
; gpl2 or gpl3 for code
"GAPDoc-"
"primgrp-"
"SmallGrp-" ; artistic2.0
"transgrp" ; artistic2.0 for data,
; gpl2 or gpl3 for code
;; Optional packages.
"4ti2interface"
"alnuth"
"autodoc"
"automata"
"autpgrp"
"cap"
"crime"
"crisp" ; bsd-2
"ctbllib" ; gpl3+
"alnuth-"
"AutoDoc-"
"automata-"
"autpgrp-"
"crime-"
"crisp-" ; bsd-2
"ctbllib" ; gpl3+
"datastructures"
"examplesforhomalg"
"factint"
"FactInt-"
"fga"
"format"
"gauss"
"gaussforhomalg"
"generalizedmorphismsforcap"
"gradedmodules"
"gradedringforhomalg"
"groupoids"
"groupoids-"
"guarana"
"homalg"
"homalgtocas"
"idrel"
"images" ; mpl2.0
"intpic"
"io" ; gpl3+
"ioforhomalg"
"irredsol" ; bsd-2
"laguna"
"liering"
"linearalgebraforcap"
"localizeringforhomalg"
"mapclass"
"matricesforhomalg"
"modulepresentationsforcap"
"modules"
"monoidalcategories"
"nconvex"
"nilmat"
"numericalsgps"
"openmath"
"orb" ; gpl3+
"polenta"
"polycyclic"
"radiroot"
"recog" ; gpl3+
"repsn"
"resclasses"
"ringsforhomalg"
"sco"
"idrel-"
"images-" ; mpl2.0
"IntPic-"
"io-" ; gpl3+
"irredsol-" ; bsd-2
"laguna-"
"liering-"
"MapClass-"
"nilmat-"
"NumericalSgps-"
"OpenMath-"
"orb-" ; gpl3+
"polenta-"
"polycyclic-"
"radiroot-"
"repsn-"
"resclasses-"
"simpcomp"
"sophus"
"tomlib"
"toolsforhomalg"
"unipot"
"utils"))))))))
"sophus-"
"tomlib-"
"unipot-"
"utils-"))))))))
(build-system gnu-build-system)
(inputs
(list gmp readline zlib))
@@ -1376,10 +1349,41 @@ xtensor provides:
(lambda _
(with-directory-excursion "doc"
(invoke "./make_doc"))))
(add-after 'install 'install-packages
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(prog (string-append bin "/gap"))
(prog-real (string-append bin "/.gap-real"))
(share (string-append out "/share/gap")))
;; Install only the gap binary; the gac compiler is left
;; for maybe later. "Wrap" it in a shell script that calls
;; the binary with the correct parameter.
;; The make target install-bin is supposed to do that, but
;; is not currently working.
(mkdir-p bin)
(copy-file "gap" prog-real)
(call-with-output-file prog
(lambda (port)
(format port
"#!~a~%exec ~a -l ~a \"$@\"~%"
(which "bash")
prog-real
share)))
(chmod prog #o755)
;; Install the headers and library, which are needed by Sage.
(invoke "make" "install-headers")
(install-file "gen/config.h"
(string-append out "/include/gap"))
(invoke "make" "install-libgap")
;; Remove information on the build directory from sysinfo.gap.
(substitute* "sysinfo.gap"
(("GAP_BIN_DIR=\".*\"") "GAP_BIN_DIR=\"\"")
(("GAP_LIB_DIR=\".*\"") "GAP_LIB_DIR=\"\"")
(("GAP_CPPFLAGS=\".*\"") "GAP_CPPFLAGS=\"\""))
(invoke "make" "install-gaproot")
;; Copy the directory of compiled packages; the make target
;; install-pkg is currently empty.
(copy-recursively "pkg" (string-append share "/pkg"))))))))
(home-page "https://www.gap-system.org/")
(synopsis
@@ -1770,7 +1774,7 @@ no more than about 20 bits long).")
"0n8gj5iylfagdbaqirpykb01a9difsy4zl6qq55f0ghvazxqdvmn"))))
(properties `((upstream-name . "dtt")))
(build-system r-build-system)
(home-page "https://www.r-project.org")
(home-page "http://www.r-project.org")
(synopsis "Discrete Trigonometric Transforms")
(description
"This package provides functions for 1D and 2D Discrete Cosine Transform
@@ -1822,81 +1826,3 @@ mathematical floating-point libraries (libm). Amongst other features,
it offers a certified infinity norm, an automatic polynomial
implementer, and a fast Remez algorithm.")
(license license:cecill-c)))
(define-public form
;; using this commit as it removes some invalid/ambiguous license info
(let ((commit "e7c52d3b07abe21f21718f5e70ee138e856f15ac")
(revision "0"))
(package
(name "form")
(version (git-version "4.3.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/vermaseren/form")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"15pjpn5s8d3sva18syhyymh5v1dijchk0xkf6d0m7cl2sj3qxxxq"))))
(build-system gnu-build-system)
(arguments
(list #:configure-flags #~'("--enable-native=no")
#:phases #~(modify-phases %standard-phases
(add-after 'unpack 'patch-src
(lambda _
(substitute* "check/examples.frm"
;; skip test that causes memory leak and fails
(("#pend_if valgrind\\?")
"#pend_if 0"))
(substitute* "sources/extcmd.c"
(("/bin/sh")
(string-append
#$(this-package-input "bash-minimal")
"/bin/sh")))))
(add-after 'build 'build-doxygen
(lambda _
(with-directory-excursion "doc/doxygen"
(invoke "make" "html"))))
(add-after 'install 'install-docs
(lambda _
(let ((doc (string-append
#$output "/share/doc/" #$name "-"
#$version "/html")))
(mkdir-p doc)
(copy-recursively "doc/doxygen/html" doc)))))))
(native-inputs (list autoconf automake doxygen ruby))
(inputs (list bash-minimal))
(home-page "https://www.nikhef.nl/~form/")
(synopsis "Symbolic manipulation system for very big expressions")
(description
"FORM is a symbolic manipulation system. It reads symbolic expressions
from files and executes symbolic/algebraic transformations upon them. The
answers are returned in a textual mathematical representation. The size of
the considered expressions in FORM is only limited by the available disk space
and not by the available RAM.")
;; XXX: Ignore this CVE to work around a name clash with the unrelated
;; "neos/forms" package.
(properties '((lint-hidden-cve . ("CVE-2021-32697"))))
;; x86_64 only due to test failures on other platforms.
;; Developers say other platforms are not "tier 1" supported:
;; https://github.com/vermaseren/form/issues/426
(supported-systems '("x86_64-linux"))
(license license:gpl3+))))
(define-public parform
(package
(inherit form)
(name "parform")
(arguments
(substitute-keyword-arguments (package-arguments form)
((#:configure-flags flags)
#~(cons* "--enable-parform=yes" #$flags))
((#:phases phases)
#~(modify-phases #$phases
(add-before 'check 'mpi-setup
#$%openmpi-setup)))))
(inputs (list bash-minimal openmpi))
(description (string-append (package-description form)
" This package also includes
@code{parform}, a version of FORM parallelized using OpenMPI."))))
+41 -43
View File
@@ -7,12 +7,11 @@
;;; Copyright © 2017, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 20182021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2019, 2020, 2023 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2019, 2020 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Sergey Trofimov <sarg@sarg.org.ru>
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
;;; Copyright © 2023 Camilo Q.S. (Distopico) <distopico@riseup.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -39,7 +38,6 @@
#:use-module (guix build-system gnu)
#:use-module (guix build-system go)
#:use-module (guix build-system python)
#:use-module (guix build-system pyproject)
#:use-module (guix build-system trivial)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
@@ -723,35 +721,6 @@ file system.")
"This package provides @command{fastboot}, a tool to upload file system images to Android devices.")
(license license:asl2.0)))
(define-public sdkmanager
(package
(name "sdkmanager")
(version "0.6.5")
(source (origin
(method url-fetch)
(uri (pypi-uri "sdkmanager" version ".tar.gz"))
(sha256
(base32
"11as7n2mj3nbqsqb3ivyv9985n73i022s748qvjg36cs8ig50afx"))))
(build-system pyproject-build-system)
(inputs (list python-requests python-argcomplete python-urllib3 gnupg))
(arguments
(list #:phases #~(modify-phases %standard-phases
(add-before 'build 'patch-gnupg
(lambda _
(substitute* "sdkmanager.py"
(("gpgv")
(string-append #$(this-package-input "gnupg")
"/bin/gpgv"))))))))
(home-page "https://gitlab.com/fdroid/sdkmanager")
(synopsis "Replacement for Android sdkmanager written in Python")
(description
"This package provides a drop-in replacement for sdkmanager from
the Android SDK. It is written in Python and part of the F-Droid
project. It implements the exact API of the Android sdkmanager command
line. The project also attempts to maintain the same terminal output.")
(license license:agpl3+)))
(define-public android-udev-rules
(package
(name "android-udev-rules")
@@ -1090,17 +1059,36 @@ safest way, on a file image.")
useful for reverse engineering, analysis of Android applications and more.")
(license license:asl2.0)))
(define-public python-android-backup
(package
(name "python-android-backup")
(version "0.2.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "android_backup" version))
(sha256
(base32
"15wb2lyjj2fpf7bhvmgpqn0mglsjj11zfvbjycx7mnidisgnljw6"))))
(build-system python-build-system)
(propagated-inputs (list python-pycrypto))
(home-page "https://github.com/bluec0re/android-backup-tools")
(synopsis "Unpack and repack android backups")
(description "This package allows you to unpack and repack Android
backups. It supports encrypted archives.")
(license license:asl2.0)))
(define-public python-miio
(package
(name "python-miio")
(version "0.5.12")
(version "0.5.11")
(source
(origin
(method url-fetch)
(uri (pypi-uri "python-miio" version))
(sha256
(base32
"05kc0icap3a4iw4910zfqi61zphcf6x958v2b5x68fy51ld3b704"))))
"1dyzzywfa5h6q8clmzxsqmszlby8757ajmvkhdyvq6719z4bn46n"))))
(build-system python-build-system)
(arguments
`(#:phases
@@ -1110,6 +1098,12 @@ useful for reverse engineering, analysis of Android applications and more.")
(substitute* "setup.py"
(("cryptography>=35")
"cryptography"))))
(add-after 'unpack 'adjust-for-click-8
(lambda _
(substitute* '("miio/integrations/vacuum/roborock/vacuum.py"
"miio/integrations/vacuum/roborock/vacuum_cli.py")
(("resultcallback")
"result_callback"))))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
@@ -1122,7 +1116,8 @@ useful for reverse engineering, analysis of Android applications and more.")
python-sphinx-rtd-theme
python-sphinxcontrib-apidoc))
(propagated-inputs
(list python-appdirs
(list python-android-backup
python-appdirs
python-attrs
python-click
python-construct
@@ -1200,22 +1195,25 @@ main repository.")
(define-public fdroidcl
(package
(name "fdroidcl")
(version "0.7.0")
(version "0.5.0")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/mvdan/fdroidcl")
(commit (string-append "v" version))))
(url "https://github.com/mvdan/fdroidcl")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1s3fszlyyab9gbdrg52zcbafsb1mgb770skg7b3gj7f3pzfnra5n"))))
(base32 "1rxcdyy2j34z0ql9d62w7ivsch9xihjnpb1z9kgy9q46vl8zhhy0"))))
(build-system go-build-system)
(arguments
`(#:import-path "mvdan.cc/fdroidcl"
#:tests? #f ;requires internet access
#:tests? #f ; TODO: Inputs missing.
#:install-source? #f))
(inputs (list go-github-com-kr-pretty go-github-com-schollz-progressbar-v3))
(inputs
(list go-github-com-kr-pretty))
;(native-inputs
; `(("go-github-com-rogpeppe-go-internal-testscript"
; ,go-github-com-rogpeppe-go-internal-testscript)))
(synopsis "F-Droid desktop client")
(description
"While the Android client integrates with the system with regular update
@@ -1291,7 +1289,7 @@ Java bytecode, which simplifies the analysis of Android applications.")
(build-system cmake-build-system)
(arguments
(list #:tests? #f)) ;there are no tests
(inputs (list qtbase-5 fuse libxkbcommon))
(inputs (list qtbase-5 fuse-3 libxkbcommon))
(native-inputs (list qttools-5 openssl readline))
(home-page "https://whoozle.github.io/android-file-transfer-linux/")
(synopsis "MTP client for Android devices")
+102 -72
View File
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2017, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 20182021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 Pkill -9 <pkill9@runbox.com>
;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
@@ -23,7 +23,6 @@
(define-module (gnu packages animation)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix utils)
#:use-module ((guix licenses) #:prefix license:)
@@ -83,8 +82,7 @@
`(#:configure-flags
(list
"-Dlog=true"
"-Dtest=true"
"-Dcpp_std=gnu++17")))
"-Dtest=true")))
(native-inputs
(list googletest pkg-config))
(synopsis "Lottie Animation Library")
@@ -94,7 +92,7 @@ rendering vector based animations and art in realtime.")
(license license:expat)))
;; ETL, synfig, and Synfig Studio are updated in tandem.
(define synfig-version "1.4.4")
(define synfig-version "1.2.2")
(define-public etl
(package
@@ -102,15 +100,12 @@ rendering vector based animations and art in realtime.")
(version synfig-version)
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/synfig/synfig"
"/releases/download/v" version
"/ETL-" version ".tar.gz"))
(uri (string-append "mirror://sourceforge/synfig/releases/"
version "/source/ETL-" version ".tar.gz"))
(sha256
(base32
"1jnahpxvrdxrll7b7av3zxabm5j3nlz6m3vg4sib2278v1wf91yc"))))
"12sd8pz8l5xcxcmapkvih3brihdhdb6xmxisr9a415lydid9rh8d"))))
(build-system gnu-build-system)
(inputs (list glibmm-2.64))
(native-inputs (list pkg-config))
(home-page "https://www.synfig.org")
(synopsis "Extended C++ template library")
(description
@@ -125,37 +120,68 @@ C++ @dfn{Standard Template Library} (STL).")
(version synfig-version)
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/synfig/synfig"
"/releases/download/v" version
"/synfig-" version ".tar.gz"))
(uri (string-append "mirror://sourceforge/synfig/releases/"
version "/source/synfig-" version
".tar.gz"))
(sha256
(base32
"01kgfmjfjk5y0v9ldmxzc8zzvbiaakz7nzg4hkj24gj3j6h8566d"))))
"1vy27kl68sbg41sfasa58k3p2nc1xfalvzk3k9gich9h90rpnpsz"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
;; The Boost library path is taken from the value of BOOST_LDFLAGS.
(list (string-append "BOOST_LDFLAGS=-L"
(assoc-ref %build-inputs "boost")
"/lib"))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-boost-build-error
;; A chain of Boost headers leads to this error: "make_array" is
;; not a member of "boost::serialization". This can be avoided by
;; loading the "array_wrapper" header first.
(lambda _
(substitute* "src/synfig/valuenodes/valuenode_dynamic.cpp"
(("#include <boost/numeric/odeint/integrate/integrate.hpp>" match)
(string-append
"#include <boost/serialization/array_wrapper.hpp>\n" match)))
#t))
(add-after 'unpack 'adapt-to-libxml++-changes
(lambda _
(substitute* "configure"
(("libxml\\+\\+-2\\.6") "libxml++-3.0"))
(substitute* (append (find-files "src/modules/" "\\.cpp$")
(find-files "src/synfig/" "\\.(cpp|h)$"))
(("add_child\\(") "add_child_element(")
(("get_child_text\\(") "get_first_child_text(")
(("set_child_text\\(") "set_first_child_text(")
(("remove_child\\(") "remove_node("))
(substitute* "src/modules/mod_svg/svg_parser.cpp"
(("xmlpp::Node::NodeList") "xmlpp::Node::const_NodeList"))
#t)))))
(inputs
(list boost
libdv
libjpeg-turbo
libpng
libmng
zlib))
;; synfig.pc lists the following as required: Magick++ libavcodec
;; libavformat libswscale freetype2 fontconfig OpenEXR ETL glibmm-2.4
;; giomm-2.4 libxml++-2.6 sigc++-2.0 cairo fftw3 pango pangocairo mlt++
`(("boost" ,boost)
("ffmpeg" ,ffmpeg)
("libdv" ,libdv)
("libjpeg" ,libjpeg-turbo)
("libpng" ,libpng)
("libmng" ,libmng)
("zlib" ,zlib)))
;; synfig.pc lists the following as required: Magick++ freetype2
;; fontconfig fftw OpenEXR ETL glibmm-2.4 giomm-2.4 libxml++-3.0 sigc++-2.0
;; cairo pango pangocairo mlt++
(propagated-inputs
(list cairo
etl
ffmpeg-4
fftw
fontconfig
freetype
glibmm-2.64
imagemagick
libxml++-2
libsigc++
mlt-6
openexr-2
pango))
`(("cairo" ,cairo)
("etl" ,etl)
("fftw" ,fftw)
("fontconfig" ,fontconfig)
("freetype" ,freetype)
("glibmm" ,glibmm)
("imagemagick" ,imagemagick)
("libxml++" ,libxml++)
("libsigc++" ,libsigc++)
("mlt" ,mlt-6)
("openexr" ,openexr-2)
("pango" ,pango)))
(native-inputs
(list intltool pkg-config))
(home-page "https://www.synfig.org")
@@ -172,24 +198,32 @@ for tweening, preventing the need to hand-draw each frame.")
(version synfig-version)
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/synfig/synfig"
"/releases/download/v" version
"/synfigstudio-" version ".tar.gz"))
(uri (string-append "mirror://sourceforge/synfig/releases/"
version "/source/synfigstudio-" version
".tar.gz"))
(sha256
(base32
"07xjgs1qw0rwpihpcspj92rzwy5zizi86l9x2x7w6sysrj0wd4w8"))))
"1ql92kh9z8w2j9yi3pr7hn7wh2r2j35xynwv9xlwyd7niackgykn"))
(modules '((guix build utils)))
(snippet
'(begin
(substitute* "src/synfigapp/pluginmanager.cpp"
(("xmlpp::Node\\* n =") "const xmlpp::Node* n =")
(("xmlpp::Node::NodeList") "xmlpp::Node::const_NodeList"))
#t))))
(build-system gnu-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
;; This fixes the file chooser crash that happens with GTK 3.
(add-after 'install 'wrap-program
(lambda* (#:key inputs #:allow-other-keys)
(let* ((gtk (assoc-ref inputs "gtk+"))
(gtk-share (string-append gtk "/share")))
(wrap-program (string-append #$output "/bin/synfigstudio")
`("XDG_DATA_DIRS" ":" prefix (,gtk-share)))))))))
`(#:phases
(modify-phases %standard-phases
;; This fixes the file chooser crash that happens with GTK 3.
(add-after 'install 'wrap-program
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(gtk (assoc-ref inputs "gtk+"))
(gtk-share (string-append gtk "/share")))
(wrap-program (string-append out "/bin/synfigstudio")
`("XDG_DATA_DIRS" ":" prefix (,gtk-share)))
#t))))))
(inputs
(list gtkmm-3 gtk+ libsigc++ synfig))
(native-inputs
@@ -261,7 +295,7 @@ contains the graphical user interface for synfig.")
("python" ,python-wrapper)))
(inputs
`(("agg" ,agg)
("at-spi2-core" ,at-spi2-core)
("atk" ,atk)
("boost" ,boost)
("curl" ,curl)
("ffmpeg" ,ffmpeg-2.8)
@@ -291,7 +325,7 @@ audio or video backends, ensuring good performance.")
(define-public lightspark
(package
(name "lightspark")
(version "0.8.7")
(version "0.8.6")
(source
(origin
(method git-fetch)
@@ -300,7 +334,7 @@ audio or video backends, ensuring good performance.")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "156yd79dbs6lzp5jc2zd0knw6bk0g8qdm8icp7pkcn95vfvxyzx9"))))
(base32 "0v7d7vwb0xqkk3v8dyks0wyk52ga57v5lg93y74v1d2wh7spmmzw"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ;requires Adobe Flex SDK, see README.tests
@@ -340,6 +374,7 @@ audio or video backends, ensuring good performance.")
pcre2
rtmpdump
sdl2
sdl2-mixer
zlib))
(home-page "https://lightspark.github.io/")
(synopsis "Flash player implementation")
@@ -442,24 +477,19 @@ waveform until they line up with the proper sounds.")
(inputs
(list qtbase-5 qtxmlpatterns qtmultimedia-5 qtsvg-5))
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-tests
(lambda _
;; Its bundled catch2-2.5.0 fails to build with glibc-2.35.
(copy-file #$(file-append catch2 "/include/catch2/catch.hpp")
"tests/src/catch.hpp")))
(replace 'configure
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(invoke "qmake" (string-append "PREFIX=" out)))))
(add-after 'install 'wrap-executable
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
(plugin-path (getenv "QT_PLUGIN_PATH")))
(wrap-program (string-append out "/bin/pencil2d")
`("QT_PLUGIN_PATH" ":" prefix (,plugin-path)))))))))
`(#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(invoke "qmake" (string-append "PREFIX=" out)))))
(add-after 'install 'wrap-executable
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
(plugin-path (getenv "QT_PLUGIN_PATH")))
(wrap-program (string-append out "/bin/pencil2d")
`("QT_PLUGIN_PATH" ":" prefix (,plugin-path)))
#t))))))
(home-page "https://www.pencil2d.org")
(synopsis "Make 2D hand-drawn animations")
(description
+10 -12
View File
@@ -27,17 +27,15 @@
(package
(name "anthy")
(version "9100h")
(source
(origin
(method url-fetch)
;; The URI does not appear to be easily guessable. For
;; example, you cannot download version "9100g" simply
;; by replacing "9100h" in the URI.
(uri (list (string-append "https://ftp.jaist.ac.jp/pub/Linux/Gentoo/"
"distfiles/31/anthy-9100h.tar.gz")
"https://osdn.dl.osdn.net/anthy/37536/anthy-9100h.tar.gz"))
(sha256
(base32 "0ism4zibcsa5nl77wwi12vdsfjys3waxcphn1p5s7d0qy1sz0mnj"))))
(source (origin
(method url-fetch)
;; The URI does not appear to be easily guessable. For
;; example, you cannot download version "9100g" simply
;; by replacing "9100h" in the URI.
(uri "http://dl.osdn.jp/anthy/37536/anthy-9100h.tar.gz")
(sha256
(base32
"0ism4zibcsa5nl77wwi12vdsfjys3waxcphn1p5s7d0qy1sz0mnj"))))
(build-system gnu-build-system)
;; Anthy also contains elisp modules for using anthy within Emacs.
;; However, these modules are incompatible with the latest version
@@ -57,7 +55,7 @@
hiragana text to mixed kana and kanji. It is written in the C
programming language. Anthy stores personal customizations (words it
has learned from the user's input, words the user has explicitly
added, etc.) in the @file{~/.anthy/} directory. This package contains the
added, etc.) in the ~/.anthy/ directory. This package contains the
anthy C libraries, the cannadic and alt-cannadic kana dictionaries, as
well as command-line tools for using anthy and managing
dictionaries.")
+2 -2
View File
@@ -45,14 +45,14 @@
(define-public clamav
(package
(name "clamav")
(version "0.103.8")
(version "0.103.6")
(source (origin
(method url-fetch)
(uri (string-append "https://www.clamav.net/downloads/production/"
"clamav-" version ".tar.gz"))
(sha256
(base32
"0gwcikzfdswrdh5vhh3x4lx8w92476fmb7im7phnv4r7x5pdljbg"))
"0cxsv5m9pqxxb56qd7hlj11pwmdgm07s3msh3hxk47czq4yjx8da"))
(modules '((guix build utils)))
(snippet
'(begin
-44
View File
@@ -3,7 +3,6 @@
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
;;; Copyright © 2023 B. Wilson <elaexuotee@wilsonb.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -27,8 +26,6 @@
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gettext)
#:use-module (gnu packages maths)
#:use-module (gnu packages pcre)
@@ -79,44 +76,3 @@
"GNU APL is a free interpreter for the programming language APL. It is
an implementation of the ISO standard 13751.")
(license license:gpl3+))))
(define-public font-apl2741-unicode
(let ((commit "1e11efae38e5095bfe49a786b111d563e83dad03"))
(package
(name "font-apl2741-unicode")
(version "1668049300")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/abrudz/APL2741.git")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "0i1yk1x99lr2swlbq9r7dny5w70zwiwi8lpfcw4n7k7pfbw0xh7y"))))
(build-system trivial-build-system)
(native-inputs (list fontforge))
(arguments
`(#:modules ((guix build utils))
#:builder
(begin
(use-modules (guix build utils))
(let* ((source (assoc-ref %build-inputs "source"))
(out (assoc-ref %outputs "out"))
(dest (string-append out "/share/fonts/truetype"))
(fontforge (string-append
(assoc-ref %build-inputs "fontforge")
"/bin/fontforge")))
(mkdir-p dest)
(invoke fontforge "-lang=ff" "-c" "Open($1); Generate($2)"
(string-append source "/APL2741.sfd")
(string-append dest "/APL2741.ttf"))))))
(synopsis "APL2741 Unicode font")
(home-page "https://abrudz.github.io/APL2741/")
(description "APL font based on Adrian Smith's IBM Selectric APL2741
golf-ball font. It supports most special characters used by popular APL
implementations, some additional mathematical and typographical symbols,
single line drawing characters, as well as the full Unicode APL range,
including both uppercase and lowercase underscored alphabets, as-of-yet unused
symbols, and almost all Latin-1 accented letters.")
(license license:unlicense))))
-202
View File
@@ -1,202 +0,0 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Hilton Chain <hako@ultrarare.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 packages apparmor)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bison)
#:use-module (gnu packages dejagnu)
#:use-module (gnu packages flex)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gettext)
#:use-module (gnu packages linux)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages ruby)
#:use-module (gnu packages swig)
#:use-module (guix build-system gnu)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils))
(define-public libapparmor
(package
(name "libapparmor")
(version "3.1.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.com/apparmor/apparmor")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1h77a7ww0rxfv5nsi1iy4fffklxdr2vq6r7kdsqm15yysglhbjyi"))))
(build-system gnu-build-system)
(arguments
(list #:configure-flags
#~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
"--with-perl" "--with-python" "--with-ruby")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-paths
(lambda* (#:key inputs #:allow-other-keys)
(for-each patch-shebang
'("common/list_af_names.sh"
"common/list_capabilities.sh"))
(for-each (lambda (file)
(substitute* file
(("/usr") "")
(("/bin/\\<(pod2man|pod2html|podchecker|prove)\\>" path)
(search-input-file inputs path))
(("/include/linux/capability.h" path)
(search-input-file inputs path))))
'("common/Make-po.rules"
"common/Make.rules"
"binutils/Makefile"
"parser/Makefile"
"parser/tst/Makefile"
"profiles/Makefile"
"utils/Makefile"
"utils/python-tools-setup.py"
"utils/vim/Makefile"))))
(add-after 'fix-paths 'change-directory
(lambda _
(chdir "libraries/libapparmor"))))))
(native-inputs
(list autoconf
automake
bison
dejagnu
flex
libtool
perl
python-minimal
ruby
swig
which))
(home-page "https://apparmor.net")
(synopsis "Linux kernel security module")
(description
"AppArmor is an effective and easy-to-use Linux application security
system.
AppArmor proactively protects the operating system and applications from
external or internal threats, even zero-day attacks, by enforcing good
behavior and preventing both known and unknown application flaws from being
exploited.
AppArmor supplements the traditional Unix discretionary access control (DAC)
model by providing mandatory access control (MAC). It has been included in
the mainline Linux kernel since version 2.6.36 and its development has been
supported by Canonical since 2009.")
(license license:lgpl2.1)
(supported-systems (filter (lambda (system)
(string-suffix? "-linux" system))
%supported-systems))))
(define-public apparmor
(let ((base libapparmor))
(package
(inherit base)
(name "apparmor")
(arguments
(append
(list #:make-flags
#~(list (string-append "CC=" #$(cc-for-target))
(string-append "DESTDIR=" #$output)
"USE_SYSTEM=1"
;; No need to run the linter
"PYFLAKES=true"))
(substitute-keyword-arguments (package-arguments base)
((#:phases phases)
#~(modify-phases #$phases
(delete 'configure)
;; apparmor-binutils
(replace 'change-directory
(lambda _
(chdir "binutils")))
;; apparmor-parser
(add-after 'install 'chdir-parser
(lambda _
(chdir "../parser")))
(add-after 'chdir-parser 'patch-source-shebangs-parser
(assoc-ref %standard-phases 'patch-source-shebangs))
(add-after 'patch-source-shebangs-parser 'build-parser
(assoc-ref %standard-phases 'build))
(add-after 'build-parser 'check-parser
(assoc-ref %standard-phases 'check))
(add-after 'check-parser 'install-parser
(assoc-ref %standard-phases 'install))
;; apparmor-utils
;; FIXME: Tests required Python library from this package
;; (itself).
(add-after 'install-parser 'chdir-utils
(lambda _
(chdir "../utils")
;; Fix paths to installed policygroups and templates for
;; easyprof.
(substitute* "easyprof/easyprof.conf"
(("/usr") #$output))))
(add-after 'chdir-utils 'build-utils
(assoc-ref %standard-phases 'build))
(add-after 'build-utils 'install-utils
(assoc-ref %standard-phases 'install))
;; apparmor-profiles
;; FIXME: Tests need an AppArmor-enabled system.
(add-after 'install-utils 'chdir-profiles
(lambda _
(chdir "../profiles")))
(add-after 'chdir-profiles 'build-profiles
(assoc-ref %standard-phases 'build))
(add-after 'check-build 'install-profiles
(assoc-ref %standard-phases 'install)))))))
(propagated-inputs
(list libapparmor))
;; Python module `readline' needed
(native-inputs
(list bison flex gettext-minimal perl python which))
(license license:gpl2))))
(define-public pam-apparmor
(let ((base apparmor))
(package
(inherit base)
(name "pam-apparmor")
(arguments
(append
(list #:tests? #f) ;no tests
(substitute-keyword-arguments (package-arguments base)
((#:phases phases)
#~(modify-phases #$phases
(delete 'chdir-parser)
(delete 'chdir-utils)
(delete 'chdir-profiles)
(replace 'change-directory
(lambda _
(chdir "changehat/pam_apparmor"))))))))
(native-inputs (list pkg-config perl which))
(inputs (list libapparmor linux-pam))
(license license:bsd-3))))
+4 -21
View File
@@ -1,7 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,8 +21,6 @@
#:use-module ((guix licenses) #:prefix l:)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (gnu packages)
#:use-module (gnu packages perl)
@@ -49,24 +46,10 @@
;; Sometimes we end up with two processes concurrently trying to make
;; 'libmod_test.la': <http://hydra.gnu.org/build/60266/nixlog/2/raw>.
;; Thus, build sequentially.
`(#:parallel-build? #f
#:parallel-tests? #f
,@(if (target-ppc32?)
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-sources
(lambda* (#:key inputs native-inputs #:allow-other-keys)
(invoke "patch" "-p1" "--force" "--input"
(assoc-ref (or native-inputs inputs)
"atomics-patch"))))))
'())))
'(#:parallel-build? #f
#:parallel-tests? #f))
(inputs (list perl libltdl))
(native-inputs
`(,@(if (target-ppc32?)
`(("atomics-patch"
,(local-file (search-patch "apr-fix-atomics.patch"))))
'())))
(home-page "https://apr.apache.org/")
(home-page "http://apr.apache.org/")
(synopsis "The Apache Portable Runtime Library")
(description
"The mission of the Apache Portable Runtime (APR) project is to create and
@@ -113,7 +96,7 @@ around or take advantage of platform-specific deficiencies or features.")
;; to run it. See
;; <http://lists.gnu.org/archive/html/guix-devel/2014-03/msg00261.html>.
#:parallel-tests? #f))
(home-page "https://apr.apache.org/")
(home-page "http://apr.apache.org/")
(synopsis "One of the Apache Portable Runtime Library companions")
(description
"APR-util provides a number of helpful abstractions on top of APR.")
+196 -172
View File
@@ -1,7 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 L p R n d n <guix@lprndn.info>
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2023 Ahmad Draidi <a.r.draidi@redscript.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,149 +19,151 @@
(define-module (gnu packages arcan)
#:use-module (guix build-system cmake)
#:use-module (guix build-system meson)
#:use-module (guix build-system gnu)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (gnu packages apr)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
#:use-module (gnu packages compression)
#:use-module (gnu packages databases)
#:use-module (gnu packages fonts)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
#:use-module (gnu packages gtk)
#:use-module (gnu packages image)
#:use-module (gnu packages libusb)
#:use-module (gnu packages linux)
#:use-module (gnu packages lua)
#:use-module (gnu packages ocr)
#:use-module (gnu packages onc-rpc)
#:use-module (gnu packages pcre)
#:use-module (gnu packages pdf)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages ruby)
#:use-module (gnu packages sdl)
#:use-module (gnu packages speech)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages tls)
#:use-module (gnu packages video)
#:use-module (gnu packages vnc)
#:use-module (gnu packages web)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xorg)
#:use-module (srfi srfi-1))
(define-public arcan
(package
(name "arcan")
(version "0.6.2.1")
(source (origin
(method git-fetch)
(file-name (git-file-name name version))
(uri (git-reference
(url "https://github.com/letoram/arcan")
(commit version)))
(sha256
(base32
"14wwb7mgq8ab39dfprps7hzdz7a37r3cl8dc5q6m1r8n5daxyzgc"))
(modules '((guix build utils)))
(snippet
;; Remove some bundled packages.
#~(begin
(delete-file-recursively "external/git")
(delete-file-recursively "external/lua")
(delete-file-recursively "external/sqlite")))))
(build-system cmake-build-system)
(arguments
(list #:configure-flags #~'("-DBUILD_PRESET=everything"
"-DDISTR_TAG='Guix'")
#:phases #~(modify-phases %standard-phases
(add-after 'unpack 'patch-paths
(lambda* (#:key outputs #:allow-other-keys)
(substitute* "src/platform/posix/paths.c"
(("/usr/local")
(assoc-ref outputs "out")))))
;; Normally, it tries to fetch patched openal with git
;; but copying files manually in the right place seems
;; to work too.
(add-after 'unpack 'prepare-static-openal
(lambda* (#:key inputs #:allow-other-keys)
(let ((arcan-openal (assoc-ref inputs
"arcan-openal")))
(copy-recursively arcan-openal
"external/git/openal")) #t))
(add-after 'prepare-static-openal 'generate-man
(lambda _
(with-directory-excursion "doc"
(invoke "ruby" "docgen.rb" "mangen")) #t))
(add-before 'configure 'chdir
(lambda _
(chdir "src") #t)))
#:tests? #f))
(inputs `(("bash-minimal" ,bash-minimal)
("espeak" ,espeak)
("ffmpeg" ,ffmpeg)
("freetype" ,freetype)
("gumbo-parser" ,gumbo-parser)
("harfbuzz" ,harfbuzz)
("jbig2dec" ,jbig2dec)
("leptonica" ,leptonica)
("libdrm" ,libdrm)
("libjpeg-turbo" ,libjpeg-turbo)
("libseccomp" ,libseccomp)
("libusb" ,libusb)
("libvnc" ,libvnc)
("libxkbcommon" ,libxkbcommon)
("luajit" ,luajit)
("mupdf" ,mupdf)
("openal" ,openal)
("openjpeg" ,openjpeg)
("sdl2" ,sdl2)
("sqlite" ,sqlite)
("tesseract-ocr" ,tesseract-ocr)
("vlc" ,vlc)
("wayland" ,wayland)
("wayland-protocols" ,wayland-protocols)
("xcb-util" ,xcb-util)
("xcb-util-wm" ,xcb-util-wm)
("zlib" ,zlib)
;; To build arcan_lwa, we need a patched version of openal.
;; https://github.com/letoram/arcan/wiki/packaging
("arcan-openal"
,(origin
(method git-fetch)
(file-name "arcan-openal-0.6.2")
(uri (git-reference (url
"https://github.com/letoram/openal")
(commit "0.6.2")))
(sha256
(base32
"0vg3fda47q2dk1n43ijcc64q39z044pa8h6scmfyi22g6r6bfw2z"))))))
(native-inputs (list pkg-config ruby)) ;For documentation and testing
(home-page "https://arcan-fe.com")
(synopsis "Display server, multimedia framework and game engine")
(description
"Arcan is a development framework for creating virtually
(let ((commit "b4dd1fbd1938492ff4b269189d3c8524be7450a9")
(revision "1"))
(package
(name "arcan")
(version (git-version "0.5.5.2" revision commit))
(source (origin
(method git-fetch)
(file-name (git-file-name name version))
(uri (git-reference
(url "https://github.com/letoram/arcan")
(commit commit)))
(sha256
(base32 "1pd0avlzc2rig1hd37zbhc7r2s6fjzdhshfg9l9cfzibl7caclyw"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon"
"-DVIDEO_PLATFORM=egl-dri" "-DBUILTIN_LUA=off"
"-DSTATIC_OPENAL=off""-DENABLE_LWA=on"
"-DSTATIC_SQLITE3=off" "-DSTATIC_FREETYPE=off"
"-DSHMIF_TUI_ACCEL=on")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-cmake-paths
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "src/platform/cmake/modules/FindGBMKMS.cmake"
(("/usr/local/include/libdrm")
(search-input-directory inputs "include/libdrm")))
(substitute* "src/platform/cmake/modules/FindAPR.cmake"
(("/usr/local/apr/include/apr-1")
(search-input-directory inputs "include/apr-1")))
#t))
;; Normally, it tries to fetch patched openal with git
;; but copying files manually in the right place seems to work too.
(add-after 'unpack 'prepare-static-openal
(lambda* (#:key inputs #:allow-other-keys)
(let ((arcan-openal (assoc-ref inputs "arcan-openal")))
(copy-recursively arcan-openal "external/git/openal"))
#t))
(add-after 'prepare-static-openal 'generate-man
(lambda _
(with-directory-excursion "doc"
(invoke "ruby" "docgen.rb" "mangen"))
#t))
(add-before 'configure 'chdir
(lambda _
(chdir "src")
#t))
(add-after 'install 'wrap-program
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(wrap-program (string-append out "/bin/arcan")
`("ARCAN_RESOURCEPATH" ":" suffix
(,(string-append out "/share/arcan/resources")))
`("ARCAN_STATEBASEPATH" ":" =
("$HOME/.arcan/resources/savestates"))
`("ARCAN_STATEPATH" ":" =
("$HOME/.arcan/resources/savestates"))
`("ARCAN_BINPATH" ":" =
(,(string-append out "/bin/arcan_frameserver")))))
#t)))
#:tests? #f))
(native-search-paths
(list (search-path-specification
(variable "ARCAN_APPLBASEPATH")
(separator #f)
(files '("share/arcan/appl")))
(search-path-specification
(variable "ARCAN_SCRIPTPATH")
(separator #f)
(files '("share/arcan/scripts")))))
(inputs
`(("apr" ,apr)
("ffmpeg" ,ffmpeg)
("freetype" ,freetype)
("glib" ,glib)
("glu" ,glu)
("harfbuzz" ,harfbuzz)
("libdrm" ,libdrm)
("libusb" ,libusb)
("libxkbcommon" ,libxkbcommon)
("lua" ,luajit)
("lzip" ,lzip)
("openal" ,openal)
("pcre" ,pcre)
("sqlite" ,sqlite)
("tesseract-ocr" ,tesseract-ocr)
("leptonica" ,leptonica)
("vlc" ,vlc)
;; To build arcan_lwa, we need a patched version of openal.
;; https://github.com/letoram/arcan/wiki/packaging
("arcan-openal" ,(origin
(method git-fetch)
(file-name "arcan-openal-0.5.4")
(uri (git-reference
(url "https://github.com/letoram/openal")
(commit "1c7302c580964fee9ee9e1d89ff56d24f934bdef")))
(sha256
(base32
"0dcxcnqjkyyqdr2yk84mprvkncy5g172kfs6vc4zrkklsbkr8yi2"))))))
(native-inputs
(list pkg-config ruby)) ; For documentation and testing
(home-page "https://arcan-fe.com")
(synopsis "Display server, multimedia framework and game engine (egl-dri)")
(description "Arcan is a development framework for creating virtually
anything from user interfaces for specialized embedded applications
all the way to full-blown desktop environments. At its heart lies a multimedia
engine with a Lua scripting interface.")
;; https://github.com/letoram/arcan/blob/master/COPYING
(license (list license:asl2.0
license:bsd-3
license:cc-by3.0
license:expat
license:gpl2+
license:lgpl2.0
license:lgpl2.0+
license:public-domain
license:silofl1.1
license:zlib))))
engine programmable using Lua.")
;; https://github.com/letoram/arcan/blob/master/COPYING
(license (list license:gpl2+
license:lgpl2.0
license:lgpl2.0+
license:public-domain
license:bsd-3)))))
(define-public arcan-sdl
(package
@@ -184,67 +185,90 @@ engine with a Lua scripting interface.")
(synopsis "Combined display server, multimedia framework and game engine (SDL)")))
(define-public xarcan
(package
(name "xarcan")
(version "0.6.1")
(source
(origin
(method git-fetch)
(file-name (git-file-name name version))
(uri (git-reference
(url "https://github.com/letoram/xarcan")
(commit version)))
(sha256
(base32 "1z4sf101i2y6rg2vcxfwmp1nkzfa3rw1pp48ym1ds1ka513vy128"))))
(build-system meson-build-system)
(arguments
(list
#:configure-flags
#~(list
"-Dglamor=true" "-Dint10=false"
"-Dipv6=true"
"-Dsystemd_logind=false"
;; The following arguments were taken from the Xwayland package.
;; The build system insist on providing a default font path; give
;; that of dejavu, the same used for our fontconfig package.
(string-append "-Ddefault_font_path="
#$(this-package-input "font-dejavu") "/share/fonts")
(string-append "-Dxkb_dir=" #$(this-package-input "xkeyboard-config")
"/share/X11/xkb")
(string-append "-Dxkb_bin_dir=" #$(this-package-input "xkbcomp")
"/bin")
(format #f "-Dbuilder_string=\"Build ID: ~a ~a\"" #$name #$version))))
(native-inputs
(list pkg-config autoconf automake libtool util-macros))
(inputs
(list arcan
font-dejavu
font-util
libdrm
libepoxy
libtirpc
libx11
libxfont2
libxkbfile
libxshmfence
mesa
openssl
pixman
xcb-util
xcb-util-wm
xkbcomp
xkeyboard-config
xorgproto
xtrans))
(home-page "https://arcan-fe.com")
(synopsis "Patched Xserver that bridges connections to Arcan")
(description "Patched Xserver with a KDrive backend that uses the arcan-shmif
(let ((commit "8e6ee029388326cfe5cddeffe482eb3702e9b7f3")
(revision "1" ))
(package
(name "xarcan")
(version (git-version "0.5.4" revision commit))
(source
(origin
(method git-fetch)
(file-name (git-file-name name version))
(uri (git-reference
(url "https://github.com/letoram/xarcan")
(commit commit)))
(sha256
(base32 "0zng7cs6733mnf0p6g5wv02981f2sf567n56csax6cmzb8fpamym"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
`("--enable-kdrive" "--enable-xarcan"
"--disable-xorg" "--disable-xwayland"
"--disable-xnest" "--disable-xvfb"
"--enable-glamor" "--enable-glx"
"--disable-int10-module" "--enable-ipv6"
"--enable-record" "--without-systemd-daemon"
"--enable-xcsecurity" "--disable-static"
,(string-append "--with-xkb-path="
(assoc-ref %build-inputs "xkeyboard-config")
"/share/X11/xkb")
,(string-append "--with-xkb-bin-directory="
(assoc-ref %build-inputs "xkbcomp")
"/bin")
,(string-append "--with-xkb-output="
"/tmp")))) ; FIXME: Copied from xorg
(native-inputs
(list pkg-config autoconf automake libtool util-macros))
(inputs
`(("arcan" ,arcan)
("font-util" ,font-util)
("libdrm" ,libdrm)
("libepoxy" ,libepoxy)
("libkbfile" ,libxkbfile)
("libressl" ,libressl)
("libx11" ,libx11)
("libxfont2" ,libxfont2)
("mesa" ,mesa)
("pixman" ,pixman)
("xkeyboard-config" ,xkeyboard-config)
("xkbcomp" ,xkbcomp)
("xorgproto" ,xorgproto)
("xtrans" ,xtrans)))
(home-page "https://arcan-fe.com")
(synopsis "Patched Xserver that bridges connections to Arcan")
(description "Patched Xserver with a KDrive backend that uses the arcan-shmif
to map Xlib/Xcb/X clients to a running arcan instance. It allows running an X session
as a window under Arcan.")
(license (list license:bsd-3 license:expat))))
(license license:expat))))
;; Package was merged into arcan in upstream.
(define-public arcan-wayland
(deprecated-package "arcan-wayland" arcan))
(package
(inherit arcan)
(name "arcan-wayland")
(native-inputs
(list pkg-config))
(inputs
(list arcan
libseccomp
libxkbcommon
mesa
wayland
wayland-protocols))
(arguments
`(#:tests? #f
#:phases
(modify-phases %standard-phases
(add-before 'configure 'chdir
(lambda _
(chdir "src/tools/waybridge")
#t))
(add-after 'unpack 'fix-cmake-find-shmif
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "src/platform/cmake/modules/Findarcan_shmif.cmake"
(("/usr/local") (assoc-ref inputs "arcan")))
#t)))))
(synopsis "Wayland protocol service for Arcan")
(description "Arcan-wayland (waybridge) bridges Wayland connections
with an Arcan connection point. It allows Wayland compatible clients
to connect and render using Arcan.")
(license license:bsd-3)))
+132 -29
View File
@@ -13,8 +13,6 @@
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2020 Noah Landis <noahlandis@posteo.net>
;;; Copyright © 2021 Sergiu Ivanov <sivanov@colimite.fr>
;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -49,6 +47,7 @@
(package
(name "aspell")
(version "0.60.8")
(replacement aspell/replacement)
(source
(origin
(method url-fetch)
@@ -57,8 +56,7 @@
(sha256
(base32
"1wi60ankalmh8ds7nplz434jd7j94gdvbahdwsr539rlad8pxdzr"))
(patches (search-patches "aspell-default-dict-dir.patch"
"aspell-CVE-2019-25051.patch"))))
(patches (search-patches "aspell-default-dict-dir.patch"))))
(build-system gnu-build-system)
(arguments
`(#:phases
@@ -76,7 +74,7 @@
(string-append "\"filter-path" middle
"\"" libdir "\"")))
#t))))))
(native-inputs (list perl))
(inputs (list perl))
(native-search-paths
;; This is a Guix-specific environment variable that takes a single
@@ -95,6 +93,16 @@ documents written in the UTF-8 encoding and its ability to use multiple
dictionaries, including personal ones.")
(license lgpl2.1+)))
;; Replacement package with security fixes.
(define aspell/replacement
(package
(inherit aspell)
(source
(origin
(inherit (package-source aspell))
(patches (append (origin-patches (package-source aspell))
(search-patches "aspell-CVE-2019-25051.patch")))))))
;;;
;;; Dictionaries.
;;;
@@ -163,21 +171,6 @@ dictionaries, including personal ones.")
(base32
"1svls9p7rsfi3hs0afh0cssj006qb4v1ik2yzqgj8hm10c6as2sm")))
(define-public aspell-dict-bg
(aspell-dictionary "bg" "Bulgarian"
#:version "4.1-0"
#:prefix "aspell6-"
#:sha256
(base32
"1alacmgpfk0yrgq83y23d16fhav1bxmb98kg8d2a5r9bvh2h0mvl")))
(define-public aspell-dict-bn
(aspell-dictionary "bn" "Bengali"
#:version "0.01.1-1"
#:sha256
(base32
"1nc02jd67iggirwxnhdvlvaqm0xfyks35c4psszzj3dhzv29qgxh")))
(define-public aspell-dict-ca
(let ((version "2.5.0")
(sha256
@@ -301,7 +294,7 @@ dictionaries, including personal ones.")
"aspell6-it-" version ".tar.bz2"))
(hash (content-hash sha256))))
(home-page
"https://linguistico.sourceforge.net/pages/dizionario_italiano.html"))))
"http://linguistico.sourceforge.net/pages/dizionario_italiano.html"))))
(define-public aspell-dict-mi
(aspell-dictionary "mi" "Maori"
@@ -327,14 +320,6 @@ dictionaries, including personal ones.")
(base32
"0w2k5l5rbqpliripgqwiqixz5ghnjf7i9ggbrc4ly4vy1ia10rmc")))
(define-public aspell-dict-nb
(aspell-dictionary "nb" "Norwegian Bokmål"
#:version "0.50-2"
#:prefix "aspell-"
#:sha256
(base32
"1xvns7dwx2sc0msldj7r2hv0426913rg3dpnkxlrvnsyrxzjpbpc")))
(define-public aspell-dict-pl
(aspell-dictionary "pl" "Polish"
#:version "0.51-0"
@@ -395,6 +380,124 @@ dictionaries, including personal ones.")
(base32
"0gb8j9iy1acdl11jq76idgc2lbc1rq3w04favn8cyh55d1v8phsk")))
;;;
;;; Hunspell packages made from the Aspell word lists.
;;;
(define* (aspell-word-list language synopsis
#:optional
(nick (string-map (lambda (chr)
(if (char=? #\_ chr)
#\-
chr))
(string-downcase language))))
(package
(name (string-append "hunspell-dict-" nick))
(version "2018.04.16")
(source (origin
(method url-fetch)
(uri (string-append
"mirror://sourceforge/wordlist/SCOWL/"
version "/scowl-" version ".tar.gz"))
(sha256
(base32
"11lkrnhwrf5mvrrq45k4mads3n9aswgac8dc25ba61c75alxb5rs"))))
(native-inputs
(list tar gzip perl aspell))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'make-reproducible
(lambda _
(substitute* "speller/README_en.txt.sh"
(("\\bdate\\b") ""))))
(delete 'configure)
(delete 'check)
(replace 'build
(lambda _
(substitute* "speller/make-hunspell-dict"
(("zip -9 .*$")
"return\n"))
(mkdir "speller/hunspell")
;; XXX: This actually builds all the dictionary variants.
(invoke "make" "-C" "speller" "hunspell")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref %outputs "out"))
(hunspell (string-append out "/share/hunspell"))
(myspell (string-append out "/share/myspell"))
(doc (string-append out "/share/doc/"
,name))
(dot-dic ,(string-append "speller/" language ".dic")))
(mkdir-p myspell)
;; Usually there's only a 'LANGUAGE.dic' file, but for the "en"
;; dictionary, there no 'en.dic'. Instead, there's a set of
;; 'en*.dic' files, hence the 'find-files' call below.
(if (file-exists? dot-dic)
(install-file dot-dic hunspell)
(for-each (lambda (dic)
(install-file dic hunspell))
(find-files "speller"
,(string-append language ".*\\.dic$"))))
;; Install affix files corresponding to installed dictionaries
(for-each (lambda (dic)
(install-file (string-append
"speller/" (basename dic ".dic") ".aff")
hunspell))
(find-files hunspell ".*\\.dic$"))
(symlink hunspell (string-append myspell "/dicts"))
(for-each (lambda (file)
(install-file file doc))
(find-files "."
"^(Copyright|.*\\.(txt|org|md))$"))
#t))))))
(synopsis synopsis)
(description
"This package provides a dictionary for the Hunspell spell-checking
library.")
(home-page "http://wordlist.aspell.net/")
(license (non-copyleft "file://Copyright"
"Word lists come from several sources, all
under permissive licensing terms. See the 'Copyright' file."))))
(define-syntax define-word-list-dictionary
(syntax-rules (synopsis)
((_ name language (synopsis text))
(define-public name
(aspell-word-list language text)))
((_ name language nick (synopsis text))
(define-public name
(aspell-word-list language text nick)))))
(define-word-list-dictionary hunspell-dict-en
"en"
(synopsis "Hunspell dictionary for English"))
(define-word-list-dictionary hunspell-dict-en-au
"en_AU"
(synopsis "Hunspell dictionary for Australian English"))
(define-word-list-dictionary hunspell-dict-en-ca
"en_CA"
(synopsis "Hunspell dictionary for Canadian English"))
(define-word-list-dictionary hunspell-dict-en-gb
"en_GB-ise" "en-gb"
(synopsis "Hunspell dictionary for British English, with -ise endings"))
(define-word-list-dictionary hunspell-dict-en-gb-ize
"en_GB-ize"
(synopsis "Hunspell dictionary for British English, with -ize endings"))
(define-word-list-dictionary hunspell-dict-en-us
"en_US"
(synopsis "Hunspell dictionary for United States English"))
(define-public ispell
(package
(name "ispell")
+63 -106
View File
@@ -37,7 +37,6 @@
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix gexp)
#:use-module (gnu packages)
#:use-module (gnu packages admin)
#:use-module (gnu packages autotools)
@@ -134,21 +133,19 @@ debugging information in STABS, DWARF 2, and CodeView 8 formats.")
(define-public lightning
(package
(name "lightning")
(version "2.2.1")
(version "2.2.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/lightning/lightning-"
version ".tar.gz"))
(sha256
(base32
"1aiwx9cl9c7swqcgrsjnvd5laah3iwxzl1van3670iv8sn0icrwq"))))
"03kwvn00qggys203vpzb2kq2asy0ql7x84ajk05a62yg3kzq8faf"))))
(build-system gnu-build-system)
(native-inputs (list zlib))
(arguments
`(#:configure-flags
(list "--disable-static")
;; Some tests fail when run in parallel.
#:parallel-tests? #f))
;; Some tests fail when run in parallel.
`(#:parallel-tests? #f))
(synopsis "Library for generating assembly code at runtime")
(description
"GNU Lightning is a library that generates assembly language code at
@@ -186,14 +183,14 @@ speed on x86, NEON on ARM, etc.).")
(define-public fasm
(package
(name "fasm")
(version "1.73.31")
(version "1.73.30")
(source
(origin
(method url-fetch)
(uri (string-append "https://flatassembler.net/fasm-"
version ".tgz"))
(sha256
(base32 "1qqg1czr9dr73l4gwrwim85mjs65al7vv8b292jipywimhhwnf4g"))))
(base32 "00giqb94z8cxhv20yiyk8axkd2kzjcg1c0841yzbn7c8lm8m06bm"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no tests exist
@@ -346,7 +343,7 @@ package for the Game Boy and Game Boy Color. It consists of:
(define-public wla-dx
(package
(name "wla-dx")
(version "10.5")
(version "10.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -355,21 +352,20 @@ package for the Game Boy and Game Boy Color. It consists of:
(file-name (git-file-name name version))
(sha256
(base32
"1h6apmhaks4772s2cja34ck488p8yhb3nscbxjw5061ml2046zqq"))))
"1nh2k2xn5fj389gq68f3fxgrxakgn8c6dw2ffqay86s3706hac9w"))))
(build-system cmake-build-system)
(native-inputs (list python-sphinx)) ; to generate man pages
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-before 'check 'copy-tests-to-build-directory
(lambda _
(copy-recursively "../source/tests" "tests")))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(let ((sh (which "sh")))
(when tests?
(invoke sh "../source/run_tests.sh"))))))))
`(#:phases
(modify-phases %standard-phases
(add-before 'check 'copy-tests-to-build-directory
(lambda _
(copy-recursively "../source/tests" "tests")))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(let ((sh (which "sh")))
(when tests?
(invoke sh "../source/run_tests.sh"))))))))
(home-page "https://github.com/vhelin/wla-dx")
(synopsis "Assemblers for various processors")
(description "WLA DX is a set of tools to assemble assembly files to
@@ -396,23 +392,21 @@ Supported architectures are:
(define-public xa
(package
(name "xa")
(version "2.3.14")
(version "2.3.12")
(source (origin
(method url-fetch)
(uri (string-append "https://www.floodgap.com/retrotech/xa"
"/dists/xa-" version ".tar.gz"))
(sha256
(base32
"0bph41aglxl07rnggrir2dl1x97f52hm0bl51d0vklyqvfyvm6qv"))))
"0107zdwc2rzlp26pyx7gns4lqmiyg68nmpgwrg36yrrd04v1bzgq"))))
(build-system gnu-build-system)
(arguments
(list
#:tests? #f ; TODO: custom test harness, not sure how it works
#:phases
#~(modify-phases %standard-phases
(delete 'configure)) ; no "configure" script
#:make-flags
#~(list (string-append "DESTDIR=" #$output)))) ; no $prefix support
`(#:tests? #f ; TODO: custom test harness, not sure how it works
#:phases
(modify-phases %standard-phases
(delete 'configure)) ; no "configure" script
#:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
(native-inputs (list perl))
(home-page "https://www.floodgap.com/retrotech/xa/")
(synopsis "Two-pass portable cross-assembler")
@@ -424,64 +418,56 @@ as 6502A, 6504, 6507, 6510, 7501, 8500, 8501, 8502 ...),
(license license:gpl2)))
(define-public armips
(let ((commit "6719edebaae03330ee5441d9b28280672edf00d5")
(revision "1"))
(package
(name "armips")
(version "0.11.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Kingcom/armips")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "1a85h2b3r3hy9hm07v8drvkklp4qfdq3i3zwb3cgk011s0njdfvz"))
(modules '((guix build utils)))
(snippet
#~(begin
(substitute* "Core/Types.h"
(("#include <string>" all)
(string-append all "\n"
"#include <string_view>")))))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-DARMIPS_USE_STD_FILESYSTEM=ON")
#:phases
(modify-phases %standard-phases
(replace 'check
(lambda* (#:key inputs #:allow-other-keys)
(invoke "./armipstests" "../source/Tests")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(install-file "armips" (string-append (assoc-ref outputs "out")
"/bin"))
#t)))))
(home-page "https://github.com/Kingcom/armips")
(synopsis "Assembler for various ARM and MIPS platforms")
(description
"armips is an assembler with full support for the MIPS R3000, MIPS R4000,
(package
(name "armips")
(version "0.11.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Kingcom/armips")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1c4dhjkvynqn9xm2vcvwzymk7yg8h25alnawkz4z1dnn1z1k3r9g"))))
(build-system cmake-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(replace 'check
(lambda* (#:key inputs #:allow-other-keys)
(invoke "./armipstests" "../source/Tests")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(install-file "armips" (string-append (assoc-ref outputs "out")
"/bin"))
#t)))))
(home-page "https://github.com/Kingcom/armips")
(synopsis "Assembler for various ARM and MIPS platforms")
(description
"armips is an assembler with full support for the MIPS R3000, MIPS R4000,
Allegrex and RSP instruction sets, partial support for the EmotionEngine
instruction set, as well as complete support for the ARM7 and ARM9 instruction
sets, both THUMB and ARM mode.")
(license license:expat))))
(license license:expat)))
(define-public intel-xed
(package
(name "intel-xed")
(version "2023.08.21")
(version "12.0.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/intelxed/xed")
(commit (string-append "v" version))))
(sha256 (base32 "1zv99m5h3n3w6jcpplznq030s5mlwg5llz3vgfwpfl5l8laz1032"))
(file-name (git-file-name name version))))
(commit version)))
(sha256 (base32 "07zfff8zf29c2n0wal87hiqfq3cwcjn80zz78mz0nyjfj09nd39f"))
(file-name (git-file-name name version))
(patches (search-patches "intel-xed-fix-nondeterminism.patch"))))
(build-system gnu-build-system)
(native-inputs
`(("python" ,python-wrapper)
("tcsh" ,tcsh)
;; As of the time of writing this comment, mbuild does not exist in the
;; Python Package Index and seems to only be used by intel-xed, so we
;; opt to include it here instead of packaging separately. Note also
@@ -489,15 +475,15 @@ sets, both THUMB and ARM mode.")
;; reference the "version" variable from setup.py instead.
("mbuild"
,(let ((name "mbuild")
(version "2022.07.28"))
(version "0.2496"))
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/intelxed/mbuild")
(commit (string-append "v" version))))
(commit "3de3f0d753c11dbe634bec611d4cc13f74768e4f")))
(sha256
(base32
"0rc9xp202yqw42bwgylwxvfvjr1crdl50qvv8vzfczyvlf4wflcx"))
"0z8hdhpmk8y5c9429p2yns9daswnffbprni9czkq3vij8f58lkg4"))
(file-name (git-file-name name version)))))))
(outputs '("out" "lib"))
(arguments
@@ -554,32 +540,3 @@ family of command line utility wrappers in the default output. Each of the cli
tools is named like @code{xed*}. Documentation for the cli tools is sparse, so
this is a case where ``the code is the documentation.''")
(license license:asl2.0)))
(define-public neon2sse
(let ((commit "097a5ecacd527d5b5c3006e360fb9cb1c1c48a1f")
(version "0")
(revision "1"))
(package
(name "neon2sse")
(version (git-version version revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/intel/ARM_NEON_2_x86_SSE")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"17mf788b8asrvjl6dnyzrm5xrz20wx9j5f8n6drgc6qgwqxpx4hv"))))
(build-system cmake-build-system)
(arguments
(list #:tests? #f)) ;no tests
(home-page "https://github.com/intel/ARM_NEON_2_x86_SSE")
(synopsis "Header file to simplify ARM->IA32 porting")
(description
"The @file{NEON_2_SSE.h} file is intended to simplify ARM-to-IA32
porting. It makes the correspondence (or a real porting) of ARM NEON
intrinsics as defined in the @file{arm_neon.h} header and x86 SSE (up to
SSE4.2) intrinsic functions as defined in corresponding x86 compilers headers
files.")
(license license:bsd-2))))
+501 -1918
View File
File diff suppressed because it is too large Load Diff
+3 -4
View File
@@ -3,7 +3,6 @@
;;; Copyright © 2012, 2013, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,10 +23,10 @@
#:use-module (guix licenses)
#:use-module (gnu packages perl)
#:use-module (gnu packages gettext)
#:use-module (gnu packages hurd)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system gnu)
#:use-module (guix utils))
#:use-module (guix build-system gnu))
(define-public attr
(package
@@ -44,7 +43,7 @@
(arguments
`(#:phases
(modify-phases %standard-phases
,@(if (target-hurd?)
,@(if (hurd-target?)
`((add-before 'configure 'skip-linux-syscalls
(lambda _
;; Starting from 2.5.1, libattr includes Linux-specific
+360 -713
View File
File diff suppressed because it is too large Load Diff
+10 -33
View File
@@ -22,13 +22,11 @@
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages documentation)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages linux)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages security-token)
#:use-module (gnu packages tls)
#:use-module (gnu packages xml)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module (guix build-system go)
#:use-module (guix download)
@@ -36,40 +34,18 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages))
(define-public libcotp
(package
(name "libcotp")
(version "2.0.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/paolostivanin/libcotp")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "12ps2msclcbv53gjf936cny10an8sc70b9frp6xxjirfn5jg2h63"))))
(build-system cmake-build-system)
(inputs (list libgcrypt))
(native-inputs (list pkg-config))
(home-page "https://github.com/paolostivanin/libcotp")
(synopsis "One-Time Passwords")
(description "This package provides a library to generate
@acronym{HOTP, HMAC-base One-Time Password}s as specified in RFC 4226 and
@acronym{TOTP, Time-based One-Time Password}s as specified in RFC 6238.")
(license license:asl2.0)))
(define-public oath-toolkit
(package
(name "oath-toolkit")
(version "2.6.9")
(version "2.6.7")
(source
(origin
(method url-fetch)
(uri (string-append "https://download.savannah.nongnu.org/releases/"
name "/" name "-" version ".tar.gz"))
(patches (search-patches "oath-toolkit-xmlsec-compat.patch"))
(sha256
(base32 "11g9r1avl3d2nnkglk0g7d6z6gs5padk75xqzvbxp9pir0qwhfik"))))
(base32 "1aa620k05lsw3l3slkp2mzma40q3p9wginspn9zk8digiz7dzv9n"))))
(build-system gnu-build-system)
(arguments
;; TODO --enable-pskc causes xmlsec-related test suite failures.
@@ -92,16 +68,16 @@
(inputs
(list linux-pam openssl xmlsec-openssl))
(home-page "https://www.nongnu.org/oath-toolkit/")
(synopsis "@acronym{OTP, one-time password} components")
(synopsis "One-time password (OTP) components")
(description
"The @acronym{OATH, Open AuTHentication} Toolkit provides various
components for building @acronym{OTP, One-Time Password} authentication systems:
"The @dfn{OATH} (Open AuTHentication) Toolkit provides various components
for building one-time password (@dfn{OTP}) authentication systems:
@itemize
@item @command{oathtool}, a command-line tool for generating & validating OTPs.
@item @code{liboath}, a C library for OATH handling.
@item @command{pskctool}, a command-line tool for manipulating secret key
files in the @acronym{PSKC, Portable Symmetric Key Container} format
files in the Portable Symmetric Key Container (@dfn{PSKC}) format
described in RFC6030.
@item @code{libpskc}, a shared and static C library for PSKC handling.
@item @code{pam_oath}, a PAM module for pluggable login authentication.
@@ -110,7 +86,8 @@ described in RFC6030.
Supported technologies include the event-based @acronym{HOTP, Hash-based Message
Authentication Code One-Time Password} algorithm (RFC4226), the time-based
@acronym{TOTP, Time-based One-Time Password} algorithm (RFC6238), and
PSKC (RFC6030) to manage secret key data.")
@acronym{PSKC, Portable Symmetric Key Container} (RFC6030) to manage secret key
data.")
(license (list license:lgpl2.1+ ; the libraries (liboath/ & libpskc/)
license:gpl3+)))) ; the tools (everything else)
@@ -184,7 +161,7 @@ YubiKey into your existing user authentication infrastructure.")
(list pkg-config))
(inputs
(list linux-pam))
(home-page "https://pamtester.sourceforge.net/")
(home-page "http://pamtester.sourceforge.net/")
(synopsis "Utility for testing pluggable authentication modules (PAM) facility")
(description
"Pamtester is a tiny utility program to test the pluggable authentication
+4 -10
View File
@@ -3,7 +3,6 @@
;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2023 Kaelyn Takata <kaelyn.alexi@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -44,15 +43,10 @@
(base32 "16mlbdys8q4ckxlvxyhwkdnh1ay9f6g0cyp1kylkpalgnik398gq"))
(modules '((guix build utils)))
(snippet
'(begin
;; Address '-Werror=format-overflow' error.
(substitute* "getdefs/getdefs.c"
(("def_bf\\[[[:space:]]*MAXNAMELEN[[:space:]]*\\]")
"def_bf[MAXNAMELEN + 10]"))
;; Address '-Werror=format-truncation' error on i686.
(substitute* "autoopts/usage.c"
(("vfmt\\[sizeof\\(vfmtfmt\\)\\]")
"vfmt[sizeof(vfmtfmt) + 6]"))))))
;; Address '-Werror=format-overflow' error.
'(substitute* "getdefs/getdefs.c"
(("def_bf\\[[[:space:]]*MAXNAMELEN[[:space:]]*\\]")
"def_bf[MAXNAMELEN + 10]")))))
(build-system gnu-build-system)
(native-inputs (list pkg-config which))
(inputs (list guile-3.0 perl)) ; for doc generator mdoc
+243 -211
View File
@@ -6,13 +6,12 @@
;;; Copyright © 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 David Thompson <davet@gnu.org>
;;; Copyright © 2017 Nikita <nikita@n0.is>
;;; Copyright © 2017, 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com>
;;; Copyright © 2020, 2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -41,7 +40,6 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix gexp)
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (ice-9 match)
@@ -53,55 +51,55 @@
(version "2.69")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://gnu/autoconf/autoconf-"
version ".tar.xz"))
(sha256
(base32
"113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
(method url-fetch)
(uri (string-append "mirror://gnu/autoconf/autoconf-"
version ".tar.xz"))
(sha256
(base32
"113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
(build-system gnu-build-system)
(inputs
(list bash-minimal m4 perl))
`(("bash" ,bash-minimal)
("perl" ,perl)
("m4" ,m4)))
(native-inputs
(list perl m4))
(arguments
(list
;; XXX: testsuite: 209 and 279 failed. The latter is an impurity. It
;; should use our own "cpp" instead of "/lib/cpp".
#:tests? #f
#:phases
#~(modify-phases %standard-phases
#$@(if (%current-target-system)
#~((add-after 'install 'patch-non-shebang-references
(lambda* (#:key build inputs #:allow-other-keys)
;; `patch-shebangs' patches shebangs only, and the Perl
;; scripts use a re-exec feature that references the
;; build hosts' perl. Also, BASH and M4 store references
;; hide in the scripts.
(let ((bash (dirname (dirname
(search-input-file inputs "bin/bash"))))
(m4 (dirname (dirname
(search-input-file inputs "bin/m4"))))
(perl (dirname (dirname
(search-input-file inputs "bin/perl"))))
(store-directory (%store-directory)))
(substitute* (find-files (string-append #$output "/bin"))
(((string-append store-directory "/[^/]*-bash-[^/]*"))
bash)
(((string-append store-directory "/[^/]*-m4-[^/]*"))
m4)
(((string-append store-directory "/[^/]*-perl-[^/]*"))
perl))))))
'())
(add-after 'install 'unpatch-shebangs
(lambda _
;; Scripts that "autoconf -i" installs (config.guess,
;; config.sub, and install-sh) must use a regular shebang
;; rather than a reference to the store. Restore it.
(let ((build-aux (string-append #$output
"/share/autoconf/build-aux")))
(substitute* (find-files build-aux)
(("^#!.*/bin/sh") "#!/bin/sh"))))))))
`(;; XXX: testsuite: 209 and 279 failed. The latter is an impurity. It
;; should use our own "cpp" instead of "/lib/cpp".
#:tests? #f
#:phases
(modify-phases %standard-phases
,@(if (%current-target-system)
'((add-after 'install 'patch-non-shebang-references
(lambda* (#:key build inputs outputs #:allow-other-keys)
;; `patch-shebangs' patches shebangs only, and the Perl
;; scripts use a re-exec feature that references the
;; build hosts' perl. Also, BASH and M4 store references
;; hide in the scripts.
(let ((bash (assoc-ref inputs "bash"))
(m4 (assoc-ref inputs "m4"))
(perl (assoc-ref inputs "perl"))
(out (assoc-ref outputs "out"))
(store-directory (%store-directory)))
(substitute* (find-files (string-append out "/bin"))
(((string-append store-directory "/[^/]*-bash-[^/]*"))
bash)
(((string-append store-directory "/[^/]*-m4-[^/]*"))
m4)
(((string-append store-directory "/[^/]*-perl-[^/]*"))
perl))))))
'())
(add-after 'install 'unpatch-shebangs
(lambda* (#:key outputs #:allow-other-keys)
;; Scripts that "autoconf -i" installs (config.guess,
;; config.sub, and install-sh) must use a regular shebang
;; rather than a reference to the store. Restore it.
(let* ((out (assoc-ref outputs "out"))
(build-aux (string-append
out "/share/autoconf/build-aux")))
(substitute* (find-files build-aux)
(("^#!.*/bin/sh") "#!/bin/sh"))))))))
(home-page "https://www.gnu.org/software/autoconf/")
(synopsis "Create source code configuration scripts")
(description
@@ -131,17 +129,17 @@ know anything about Autoconf or M4.")
;; FIXME: To run the test suite, fix all the instances where scripts
;; generates "#! /bin/sh" shebangs.
#f)
((#:phases phases #~%standard-phases)
#~(modify-phases #$phases
(add-before 'check 'prepare-tests
(lambda _
(for-each patch-shebang
(append (find-files "tests"
(lambda (file stat)
(executable-file? file)))
(find-files "bin"
(lambda (file stat)
(executable-file? file)))))))))))))
((#:phases phases '%standard-phases)
`(modify-phases ,phases
(add-before 'check 'prepare-tests
(lambda _
(for-each patch-shebang
(append (find-files "tests"
(lambda (file stat)
(executable-file? file)))
(find-files "bin"
(lambda (file stat)
(executable-file? file)))))))))))))
(define-public autoconf autoconf-2.69)
@@ -158,6 +156,7 @@ know anything about Autoconf or M4.")
"1fjm21k2na07f3vasf288a0zx66lbv0hd3l9bvv3q8p62s3pg569"))))))
(define-public autoconf-2.64
;; As of GDB 7.8, GDB is still developed using this version of Autoconf.
(package (inherit autoconf)
(version "2.64")
(source
@@ -204,65 +203,70 @@ know anything about Autoconf or M4.")
use our own Bash instead of /bin/sh in shebangs. For that reason, it should
only be used internally---users should not end up distributing `configure'
files with a system-specific shebang."
(package
(inherit autoconf)
(package (inherit autoconf)
(name (string-append (package-name autoconf) "-wrapper"))
(build-system trivial-build-system)
(inputs
(list
;; XXX: Kludge to hide the circular dependency.
(module-ref (resolve-interface '(gnu packages guile))
'guile-3.0/pinned)
autoconf
bash-minimal))
(inputs `(("guile"
;; XXX: Kludge to hide the circular dependency.
,(module-ref (resolve-interface '(gnu packages guile))
'guile-3.0/fixed))
("autoconf" ,autoconf)
("bash" ,bash-minimal)))
(arguments
(list
#:modules '((guix build utils))
#:builder
#~(begin
(use-modules (guix build utils))
(let ((bin (string-append #$output "/bin"))
(autoconf (search-input-file %build-inputs "/bin/autoconf"))
(guile (search-input-file %build-inputs "/bin/guile"))
(sh (search-input-file %build-inputs "/bin/sh"))
'(#:modules ((guix build utils))
#:builder
(begin
(use-modules (guix build utils))
(let* ((out (assoc-ref %outputs "out"))
(bin (string-append out "/bin"))
(autoconf (string-append
(assoc-ref %build-inputs "autoconf")
"/bin/autoconf"))
(guile (string-append
(assoc-ref %build-inputs "guile")
"/bin/guile"))
(sh (string-append
(assoc-ref %build-inputs "bash")
"/bin/sh"))
(modules ((compose dirname dirname dirname)
(search-path %load-path
"guix/build/utils.scm"))))
(mkdir-p bin)
(mkdir-p bin)
;; Symlink all the binaries but `autoconf'.
(with-directory-excursion bin
(for-each (lambda (file)
(unless (string=? (basename file) "autoconf")
(symlink file (basename file))))
(find-files (dirname autoconf) ".*")))
;; Symlink all the binaries but `autoconf'.
(with-directory-excursion bin
(for-each (lambda (file)
(unless (string=? (basename file) "autoconf")
(symlink file (basename file))))
(find-files (dirname autoconf) ".*")))
;; Add an `autoconf' binary that wraps the real one.
(call-with-output-file (string-append bin "/autoconf")
(lambda (port)
;; Shamefully, Guile can be used in shebangs only if a
;; single argument is passed (-ds); otherwise it gets
;; them all as a single argument and fails to parse them.
(format port "#!~a
;; Add an `autoconf' binary that wraps the real one.
(call-with-output-file (string-append bin "/autoconf")
(lambda (port)
;; Shamefully, Guile can be used in shebangs only if a
;; single argument is passed (-ds); otherwise it gets
;; them all as a single argument and fails to parse them.
(format port "#!~a
export GUILE_LOAD_PATH=\"~a\"
export GUILE_LOAD_COMPILED_PATH=\"~a\"
exec ~a --no-auto-compile \"$0\" \"$@\"
!#~%"
sh modules modules guile)
(write
`(begin
(use-modules (guix build utils))
(let ((result (apply system* ,autoconf
(cdr (command-line)))))
(when (and (file-exists? "configure")
(not (file-exists? "/bin/sh")))
;; Patch regardless of RESULT, because `autoconf
;; -Werror' can both create a `configure' file and
;; return a non-zero exit code.
(patch-shebang "configure"))
(exit (status:exit-val result))))
port)))
(chmod (string-append bin "/autoconf") #o555)))))
sh modules modules guile)
(write
`(begin
(use-modules (guix build utils))
(let ((result (apply system* ,autoconf
(cdr (command-line)))))
(when (and (file-exists? "configure")
(not (file-exists? "/bin/sh")))
;; Patch regardless of RESULT, because `autoconf
;; -Werror' can both create a `configure' file and
;; return a non-zero exit code.
(patch-shebang "configure"))
(exit (status:exit-val result))))
port)))
(chmod (string-append bin "/autoconf") #o555)
#t))))
;; Do not show it in the UI since it's meant for internal use.
(properties '((hidden? . #t)))))
@@ -275,7 +279,7 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
(define-public autoconf-archive
(package
(name "autoconf-archive")
(version "2023.02.20")
(version "2021.02.19")
(source
(origin
(method url-fetch)
@@ -283,7 +287,7 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
version ".tar.xz"))
(sha256
(base32
"0cqsqdnmjdyybzw8wqhwkgs1vh7r5pbw66a6g7sz2a5fg6209m3i"))))
"1gcwqspcxiygnyk02smsk8ivzs9r69ji38izxzzsijyx52fyp9p8"))))
(build-system gnu-build-system)
(home-page "https://www.gnu.org/software/autoconf-archive/")
(synopsis "Collection of freely reusable Autoconf macros")
@@ -320,104 +324,107 @@ output is indexed in many ways to simplify browsing.")
(define-public automake
(package
(name "automake")
(version "1.16.5")
(version "1.16.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/automake/automake-"
version ".tar.xz"))
(sha256
(base32
"0sdl32qxdy7m06iggmkkvf7j520rmmgbsjzbm7fgnxwxdp6mh7gh"))
(patches
(search-patches "automake-skip-amhello-tests.patch"))))
(method url-fetch)
(uri (string-append "mirror://gnu/automake/automake-"
version ".tar.xz"))
(sha256
(base32
"0fmz2fhmzcpacnprl5msphvaflwiy0hvpgmqlgfny72ddijzfazz"))
(patches
(search-patches "automake-skip-amhello-tests.patch"))))
(build-system gnu-build-system)
(inputs
(list autoconf-wrapper bash-minimal perl))
`(("autoconf" ,autoconf-wrapper)
("bash" ,bash-minimal)
("perl" ,perl)))
(native-inputs
(list autoconf-wrapper perl))
`(("autoconf" ,autoconf-wrapper)
("perl" ,perl)))
(native-search-paths
(list (search-path-specification
(variable "ACLOCAL_PATH")
(files '("share/aclocal")))))
(arguments
(list
#:modules '((guix build gnu-build-system)
`(#:modules ((guix build gnu-build-system)
(guix build utils)
(srfi srfi-1)
(srfi srfi-26)
(rnrs io ports))
#:phases
#~(modify-phases %standard-phases
(add-before 'patch-source-shebangs 'patch-tests-shebangs
(lambda* (#:key native-inputs inputs #:allow-other-keys)
(let ((sh (search-input-file (or native-inputs inputs) "bin/sh")))
(substitute* (find-files "t" "\\.(sh|tap)$")
(("#![[:blank:]]?/bin/sh")
(string-append "#!" sh)))
#:phases
(modify-phases %standard-phases
(add-before 'patch-source-shebangs 'patch-tests-shebangs
(lambda _
(let ((sh (which "sh")))
(substitute* (find-files "t" "\\.(sh|tap)$")
(("#![[:blank:]]?/bin/sh")
(string-append "#!" sh)))
;; Set these variables for all the `configure' runs
;; that occur during the test suite.
(setenv "SHELL" sh)
(setenv "CONFIG_SHELL" sh))))
(add-before 'check 'skip-test
(lambda _
;; This test requires 'etags' and fails if it's missing.
;; Skip it.
(substitute* "t/tags-lisp-space.sh"
(("^required.*" all)
(string-append "exit 77\n" all "\n")))))
;; Set these variables for all the `configure' runs
;; that occur during the test suite.
(setenv "SHELL" sh)
(setenv "CONFIG_SHELL" sh)
#t)))
#$@(if (%current-target-system)
#~((add-after 'install 'patch-non-shebang-references
(lambda* (#:key inputs #:allow-other-keys)
;; `patch-shebangs' patches shebangs only, and the Perl
;; scripts use a re-exec feature that references the
;; build hosts' perl. Also, AUTOCONF and BASH store
;; references hide in the scripts.
(let ((autoconf
(dirname (dirname
(search-input-file inputs "bin/autoconf"))))
(bash
(dirname (dirname
(search-input-file inputs "bin/bash"))))
(perl
(dirname (dirname
(search-input-file inputs "bin/perl"))))
(store-directory (%store-directory)))
(substitute* (find-files (string-append #$output "/bin"))
(((string-append store-directory "/[^/]*-autoconf-[^/]*"))
autoconf)
(((string-append store-directory "/[^/]*-bash-[^/]*"))
bash)
(((string-append store-directory "/[^/]*-perl-[^/]*"))
perl))))))
(add-before 'check 'skip-test
(lambda _
;; This test requires 'etags' and fails if it's missing.
;; Skip it.
(substitute* "t/tags-lisp-space.sh"
(("^required.*" all)
(string-append "exit 77\n" all "\n")))
#t))
,@(if (%current-target-system)
`((add-after 'install 'patch-non-shebang-references
(lambda* (#:key build inputs outputs #:allow-other-keys)
;; `patch-shebangs' patches shebangs only, and the Perl
;; scripts use a re-exec feature that references the
;; build hosts' perl. Also, AUTOCONF and BASH store
;; references hide in the scripts.
(let ((autoconf (assoc-ref inputs "autoconf"))
(bash (assoc-ref inputs "bash"))
(perl (assoc-ref inputs "perl"))
(out (assoc-ref outputs "out"))
(store-directory (%store-directory)))
(substitute* (find-files (string-append out "/bin"))
(((string-append store-directory "/[^/]*-autoconf-[^/]*"))
autoconf)
(((string-append store-directory "/[^/]*-bash-[^/]*"))
bash)
(((string-append store-directory "/[^/]*-perl-[^/]*"))
perl))
#t))))
'())
;; Files like `install-sh', `mdate.sh', etc. must use
;; #!/bin/sh, otherwise users could leak erroneous shebangs
;; in the wild. See <http://bugs.gnu.org/14201> for an
;; example.
(add-after 'install 'unpatch-shebangs
(lambda _
(let ((dir (string-append #$output "/share")))
(define (starts-with-shebang? file)
(equal? (call-with-input-file file
(lambda (p)
(list (get-u8 p) (get-u8 p))))
(map char->integer '(#\# #\!))))
;; Files like `install-sh', `mdate.sh', etc. must use
;; #!/bin/sh, otherwise users could leak erroneous shebangs
;; in the wild. See <http://bugs.gnu.org/14201> for an
;; example.
(add-after 'install 'unpatch-shebangs
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(dir (string-append out "/share")))
(define (starts-with-shebang? file)
(equal? (call-with-input-file file
(lambda (p)
(list (get-u8 p) (get-u8 p))))
(map char->integer '(#\# #\!))))
(for-each (lambda (file)
(when (and (starts-with-shebang? file)
(executable-file? file))
(format #t "restoring shebang on `~a'~%"
file)
(substitute* file
(("^#!.*/bin/sh")
"#!/bin/sh")
(("^#!.*/bin/env(.*)$" _ args)
(string-append "#!/usr/bin/env"
args)))))
(find-files dir ".*"))))))))
(for-each (lambda (file)
(when (and (starts-with-shebang? file)
(executable-file? file))
(format #t "restoring shebang on `~a'~%"
file)
(substitute* file
(("^#!.*/bin/sh")
"#!/bin/sh")
(("^#!.*/bin/env(.*)$" _ args)
(string-append "#!/usr/bin/env"
args)))))
(find-files dir ".*"))
#t))))))
(home-page "https://www.gnu.org/software/automake/")
(synopsis "Making GNU standards-compliant Makefiles")
(description
@@ -427,30 +434,42 @@ intuitive format and then Automake works with Autoconf to produce a robust
Makefile, simplifying the entire process for the developer.")
(license gpl2+))) ; some files are under GPLv3+
(define-public automake-1.16.5
(package
(inherit automake)
(version "1.16.5")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/automake/automake-"
version ".tar.xz"))
(sha256
(base32
"0sdl32qxdy7m06iggmkkvf7j520rmmgbsjzbm7fgnxwxdp6mh7gh"))
(patches
(search-patches "automake-skip-amhello-tests.patch"))))))
(define-public libtool
(package
(name "libtool")
(version "2.4.7")
(version "2.4.6")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/libtool/libtool-"
version ".tar.xz"))
(sha256
(base32
"0pb3l4x37k6fj1lwnpzws55gi3pxl0hx56jm4bzmbrkw0mzj2zsg"))
(patches (search-patches "libtool-skip-tests2.patch"
"libtool-grep-compat.patch"))))
"0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))
(patches (search-patches "libtool-skip-tests2.patch"))))
(build-system gnu-build-system)
(propagated-inputs (list m4))
(native-inputs
(list m4
perl
;; XXX: this shouldn't be necessary, but without it test
;; 102 fails because it cannot find ltdl/libltdl.la.
libltdl
help2man ; because we modify ltmain.sh
automake ; some tests rely on 'aclocal'
autoconf-wrapper)) ; others on 'autom4te'
(native-inputs `(("m4" ,m4)
("perl" ,perl)
;; XXX: this shouldn't be necessary, but without it test
;; 102 fails because it cannot find ltdl/libltdl.la.
("libltdl" ,libltdl)
("help2man" ,help2man) ;because we modify ltmain.sh
("automake" ,automake) ;some tests rely on 'aclocal'
("autoconf" ,autoconf-wrapper))) ;others on 'autom4te'
(arguments
`(;; Libltdl is provided as a separate package, so don't install it here.
@@ -466,18 +485,18 @@ Makefile, simplifying the entire process for the developer.")
#:phases
(modify-phases %standard-phases
(add-before 'check 'pre-check
(lambda* (#:key inputs native-inputs parallel-tests? #:allow-other-keys)
(lambda* (#:key inputs native-inputs #:allow-other-keys)
;; Run the test suite in parallel, if possible.
(setenv "TESTSUITEFLAGS"
(string-append
"-j"
(if parallel-tests?
(number->string (parallel-job-count))
"1")))
(number->string (parallel-job-count))))
;; Patch references to /bin/sh.
(let ((/bin/sh (search-input-file (or native-inputs inputs) "bin/sh")))
(let ((bash (assoc-ref (or native-inputs inputs) "bash")))
(substitute* "tests/testsuite"
(("/bin/sh") /bin/sh)))))
(("/bin/sh")
(string-append bash "/bin/sh")))
#t)))
;; These files may be copied into source trees by libtoolize,
;; therefore they must not point to store file names that would be
;; leaked with tarballs generated by make dist.
@@ -489,7 +508,8 @@ Makefile, simplifying the entire process for the developer.")
(format #t "restoring shebang on `~a'~%" file)
(substitute* file
(("^#!.*/bin/sh") "#!/bin/sh")))
(find-files dir))))))))
(find-files dir ".*"))
#t))))))
(synopsis "Generic shared library support tools")
(description
@@ -499,6 +519,18 @@ complexity of working with shared libraries across platforms.")
(license gpl3+)
(home-page "https://www.gnu.org/software/libtool/")))
(define-public libtool-2.4.7
(package
(inherit libtool)
(version "2.4.7")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/libtool/libtool-"
version ".tar.xz"))
(sha256
(base32
"0pb3l4x37k6fj1lwnpzws55gi3pxl0hx56jm4bzmbrkw0mzj2zsg"))))))
(define-public config
(let ((revision "1")
(commit "c8ddc8472f8efcadafc1ef53ca1d863415fddd5f"))
@@ -553,20 +585,20 @@ configuration in nearly all GNU packages (and many others).")
;; Libtool's extensive test suite isn't run.
(package
(name "libltdl")
(version "2.4.7")
(version "2.4.6")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/libtool/libtool-"
version ".tar.xz"))
(sha256
(base32
"0pb3l4x37k6fj1lwnpzws55gi3pxl0hx56jm4bzmbrkw0mzj2zsg"))))
"0vxj52zm709125gwv9qqlw02silj8bnjnh4y07arrz60r31ai1vw"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags '("--enable-ltdl-install") ;really install it
#:phases (modify-phases %standard-phases
(add-before 'configure 'change-directory
(lambda _ (chdir "libltdl"))))))
(lambda _ (chdir "libltdl") #t)))))
(synopsis "System-independent dlopen wrapper of GNU libtool")
(description (package-description libtool))
@@ -76,13 +76,6 @@ The files in the list do not have extensions (.el, .elc)."
(when (file-directory-p pkg-dir)
(package-load-descriptor pkg-dir)))))))))))
;; If emacs built with tree-sitter, read the value of the environment variable
;; to make tree-sitter grammars available in emacs out-of-the-box.
(with-eval-after-load 'treesit
(when-let ((grammar-path (getenv "TREE_SITTER_GRAMMAR_PATH")))
(mapcar (lambda (x) (add-to-list 'treesit-extra-load-path x))
(split-string grammar-path ":"))))
(provide 'guix-emacs)
;;; guix-emacs.el ends here
@@ -1645,7 +1645,7 @@ CONFIG_NET_FLOW_LIMIT=y
#
CONFIG_NET_PKTGEN=m
CONFIG_NET_TCPPROBE=m
CONFIG_NET_DROP_MONITOR=m
# CONFIG_NET_DROP_MONITOR is not set
CONFIG_HAMRADIO=y
#
@@ -1639,7 +1639,7 @@ CONFIG_NET_FLOW_LIMIT=y
#
CONFIG_NET_PKTGEN=m
CONFIG_NET_TCPPROBE=m
CONFIG_NET_DROP_MONITOR=m
# CONFIG_NET_DROP_MONITOR is not set
CONFIG_HAMRADIO=y
#
@@ -1747,7 +1747,7 @@ CONFIG_NET_FLOW_LIMIT=y
# Network testing
#
CONFIG_NET_PKTGEN=m
CONFIG_NET_DROP_MONITOR=m
# CONFIG_NET_DROP_MONITOR is not set
CONFIG_HAMRADIO=y
#
@@ -1753,7 +1753,7 @@ CONFIG_NET_FLOW_LIMIT=y
# Network testing
#
CONFIG_NET_PKTGEN=m
CONFIG_NET_DROP_MONITOR=m
# CONFIG_NET_DROP_MONITOR is not set
CONFIG_HAMRADIO=y
#
@@ -1745,7 +1745,7 @@ CONFIG_NET_FLOW_LIMIT=y
# Network testing
#
CONFIG_NET_PKTGEN=m
CONFIG_NET_DROP_MONITOR=m
CONFIG_NET_DROP_MONITOR=y
# end of Network testing
# end of Networking options

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