From d7e6c3cae0762d6a299162f2d7d8c44ca1390dd7 Mon Sep 17 00:00:00 2001 From: Troy Figiel Date: Fri, 8 Mar 2024 15:10:53 +0100 Subject: gnu: Add go-github-com-klauspost-pgzip. * gnu/packages/golang-compression.scm (go-github-com-klauspost-pgzip): New variable. Signed-off-by: Sharlatan Hellseher --- gnu/packages/golang-compression.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'gnu/packages/golang-compression.scm') diff --git a/gnu/packages/golang-compression.scm b/gnu/packages/golang-compression.scm index b999c063ee..504491e8e0 100644 --- a/gnu/packages/golang-compression.scm +++ b/gnu/packages/golang-compression.scm @@ -140,6 +140,33 @@ library included in the stdlib, and supports GIF, TIFF and PDF.") (description "@code{compress} provides various compression algorithms.") (license license:bsd-3))) +(define-public go-github-com-klauspost-pgzip + (package + (name "go-github-com-klauspost-pgzip") + (version "1.2.6") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/klauspost/pgzip") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1j29wr6nd9ncdbkjphyziv0h8p5s2mj222cgcfqxmzjnfn7623d8")))) + (build-system go-build-system) + (arguments + (list + #:import-path "github.com/klauspost/pgzip")) + (propagated-inputs (list go-github-com-klauspost-compress)) + (home-page "https://github.com/klauspost/pgzip") + (synopsis "Parallel (de)compression of gzip files in Go") + (description + "This package implements parallel gzip compression and decompression in +Golang and is fully compatible with @code{compress/gzip} from the standard +library. This is beneficial for large amounts of data, say more than 1MB at a +time, as otherwise the internal gzip library will likely be faster.") + (license (list license:bsd-3 license:expat)))) + (define-public go-github-com-nwaples-rardecode-v2 (package (name "go-github-com-nwaples-rardecode-v2") -- cgit v1.2.3 abel'>context:space:mode:
-rw-r--r--.dir-locals.el5
-rw-r--r--CODE-OF-CONDUCT155
-rw-r--r--Makefile.am11
-rw-r--r--doc/build.scm2
-rw-r--r--doc/contributing.texi84
-rw-r--r--doc/guix-cookbook.texi9
-rw-r--r--doc/guix.texi1511
-rw-r--r--doc/local.mk4
-rw-r--r--etc/guix-daemon.cil.in5
-rw-r--r--etc/news.scm163
-rw-r--r--gnu/build/activation.scm4
-rw-r--r--gnu/build/hurd-boot.scm12
-rw-r--r--gnu/build/image.scm8
-rw-r--r--gnu/build/linux-boot.scm85
-rw-r--r--gnu/home/services.scm60
-rw-r--r--gnu/home/services/desktop.scm174
-rw-r--r--gnu/home/services/fontutils.scm4
-rw-r--r--gnu/home/services/shells.scm126
-rw-r--r--gnu/home/services/shepherd.scm21
-rw-r--r--gnu/home/services/symlink-manager.scm387
-rw-r--r--gnu/home/services/xdg.scm33
-rw-r--r--gnu/installer.scm100
-rw-r--r--gnu/installer/connman.scm2
-rw-r--r--gnu/installer/dump.scm118
-rw-r--r--gnu/installer/final.scm25
-rw-r--r--gnu/installer/newt.scm122
-rw-r--r--gnu/installer/newt/ethernet.scm8
-rw-r--r--gnu/installer/newt/final.scm12
-rw-r--r--gnu/installer/newt/keymap.scm8
-rw-r--r--gnu/installer/newt/locale.scm25
-rw-r--r--gnu/installer/newt/network.scm16
-rw-r--r--gnu/installer/newt/page.scm170
-rw-r--r--gnu/installer/newt/partition.scm10
-rw-r--r--gnu/installer/newt/services.scm16
-rw-r--r--gnu/installer/newt/timezone.scm4
-rw-r--r--gnu/installer/newt/user.scm11
-rw-r--r--gnu/installer/newt/welcome.scm2
-rw-r--r--gnu/installer/newt/wifi.scm4
-rw-r--r--gnu/installer/parted.scm106
-rw-r--r--gnu/installer/record.scm15
-rw-r--r--gnu/installer/steps.scm130
-rw-r--r--gnu/installer/user.scm19
-rw-r--r--gnu/installer/utils.scm159
-rw-r--r--gnu/local.mk103
-rw-r--r--gnu/machine.scm2
-rw-r--r--gnu/machine/ssh.scm5
-rw-r--r--gnu/packages/accessibility.scm2
-rw-r--r--gnu/packages/admin.scm110
-rw-r--r--gnu/packages/algebra.scm89
-rw-r--r--gnu/packages/astronomy.scm258
-rw-r--r--gnu/packages/audio.scm102
-rw-r--r--gnu/packages/autogen.scm8
-rw-r--r--gnu/packages/aux-files/guix.vim8
-rw-r--r--gnu/packages/aux-files/linux-libre/4.14-arm.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/4.14-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.14-x86_64.conf14
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-arm.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-arm64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-x86_64.conf14
-rw-r--r--gnu/packages/aux-files/linux-libre/4.4-i686.conf10
-rw-r--r--gnu/packages/aux-files/linux-libre/4.4-x86_64.conf14
-rw-r--r--gnu/packages/aux-files/linux-libre/4.9-x86_64.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-arm.conf3
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-arm64.conf3
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-i686.conf17
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-x86_64.conf17
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-arm.conf3
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-arm64.conf3
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-i686.conf19
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-x86_64.conf19
-rw-r--r--gnu/packages/aux-files/linux-libre/5.16-arm.conf10216
-rw-r--r--gnu/packages/aux-files/linux-libre/5.16-arm64.conf10661
-rw-r--r--gnu/packages/aux-files/linux-libre/5.16-i686.conf11100
-rw-r--r--gnu/packages/aux-files/linux-libre/5.16-x86_64.conf11186
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-arm.conf5
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-arm64.conf5
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-i686.conf13
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-x86_64.conf17
-rw-r--r--gnu/packages/backup.scm71
-rw-r--r--gnu/packages/barrier.scm68
-rw-r--r--gnu/packages/base.scm10
-rw-r--r--gnu/packages/benchmark.scm188
-rw-r--r--gnu/packages/bioconductor.scm113
-rw-r--r--gnu/packages/bioinformatics.scm256
-rw-r--r--gnu/packages/bittorrent.scm5
-rw-r--r--gnu/packages/bootloaders.scm26
-rw-r--r--gnu/packages/browser-extensions.scm6
-rw-r--r--gnu/packages/c.scm119
-rw-r--r--gnu/packages/cdrom.scm54
-rw-r--r--gnu/packages/check.scm186
-rw-r--r--gnu/packages/chez.scm1264
-rw-r--r--gnu/packages/chromium.scm99
-rw-r--r--gnu/packages/clojure.scm10
-rw-r--r--gnu/packages/commencement.scm4
-rw-r--r--gnu/packages/compression.scm11
-rw-r--r--gnu/packages/compton.scm5
-rw-r--r--gnu/packages/connman.scm11
-rw-r--r--gnu/packages/coq.scm32
-rw-r--r--gnu/packages/cpp.scm456
-rw-r--r--gnu/packages/cran.scm1543
-rw-r--r--gnu/packages/crates-graphics.scm28
-rw-r--r--gnu/packages/crates-io.scm2548
-rw-r--r--gnu/packages/cross-base.scm43
-rw-r--r--gnu/packages/crypto.scm68
-rw-r--r--gnu/packages/curl.scm5
-rw-r--r--gnu/packages/databases.scm408
-rw-r--r--gnu/packages/debian.scm4
-rw-r--r--gnu/packages/debug.scm36
-rw-r--r--gnu/packages/diffoscope.scm6
-rw-r--r--gnu/packages/disk.scm60
-rw-r--r--gnu/packages/django.scm12
-rw-r--r--gnu/packages/dns.scm8
-rw-r--r--gnu/packages/docbook.scm2
-rw-r--r--gnu/packages/dunst.scm6
-rw-r--r--gnu/packages/ebook.scm384
-rw-r--r--gnu/packages/education.scm6
-rw-r--r--gnu/packages/electronics.scm113
-rw-r--r--gnu/packages/elf.scm14
-rw-r--r--gnu/packages/elixir.scm102
-rw-r--r--gnu/packages/emacs-xyz.scm2297
-rw-r--r--gnu/packages/embedded.scm59
-rw-r--r--gnu/packages/emulators.scm235
-rw-r--r--gnu/packages/engineering.scm463
-rw-r--r--gnu/packages/enlightenment.scm27
-rw-r--r--gnu/packages/erlang.scm84
-rw-r--r--gnu/packages/fcitx5.scm118
-rw-r--r--gnu/packages/file-systems.scm6
-rw-r--r--gnu/packages/finance.scm38
-rw-r--r--gnu/packages/firmware.scm2
-rw-r--r--gnu/packages/fonts.scm107
-rw-r--r--gnu/packages/fontutils.scm7
-rw-r--r--gnu/packages/freedesktop.scm62
-rw-r--r--gnu/packages/ftp.scm9
-rw-r--r--gnu/packages/game-development.scm5
-rw-r--r--gnu/packages/games.scm537
-rw-r--r--gnu/packages/gcc.scm207
-rw-r--r--gnu/packages/geo.scm49
-rw-r--r--gnu/packages/gl.scm57
-rw-r--r--gnu/packages/gnome-xyz.scm16
-rw-r--r--gnu/packages/gnome.scm347
-rw-r--r--gnu/packages/gnunet.scm58
-rw-r--r--gnu/packages/gnuzilla.scm35
-rw-r--r--gnu/packages/golang.scm455
-rw-r--r--gnu/packages/gps.scm4
-rw-r--r--gnu/packages/graph.scm35
-rw-r--r--gnu/packages/graphics.scm244
-rw-r--r--gnu/packages/gtk.scm58
-rw-r--r--gnu/packages/guile-xyz.scm294
-rw-r--r--gnu/packages/guile.scm55
-rw-r--r--gnu/packages/hardware.scm140
-rw-r--r--gnu/packages/haskell-apps.scm6
-rw-r--r--gnu/packages/haskell-web.scm5
-rw-r--r--gnu/packages/haskell-xyz.scm21
-rw-r--r--gnu/packages/haskell.scm278
-rw-r--r--gnu/packages/hurd.scm11
-rw-r--r--gnu/packages/i2p.scm6
-rw-r--r--gnu/packages/icu4c.scm8
-rw-r--r--gnu/packages/image-viewers.scm112
-rw-r--r--gnu/packages/image.scm20
-rw-r--r--gnu/packages/installers.scm10
-rw-r--r--gnu/packages/irc.scm9
-rw-r--r--gnu/packages/jami.scm10
-rw-r--r--gnu/packages/java.scm414
-rw-r--r--gnu/packages/javascript.scm110
-rw-r--r--gnu/packages/julia-xyz.scm1240
-rw-r--r--gnu/packages/kde-frameworks.scm3
-rw-r--r--gnu/packages/kde-internet.scm2
-rw-r--r--gnu/packages/kde-multimedia.scm3
-rw-r--r--gnu/packages/kde.scm155
-rw-r--r--gnu/packages/lean.scm65
-rw-r--r--gnu/packages/less.scm66
-rw-r--r--gnu/packages/linphone.scm51
-rw-r--r--gnu/packages/linux.scm706
-rw-r--r--gnu/packages/lisp-check.scm84
-rw-r--r--gnu/packages/lisp-xyz.scm1059
-rw-r--r--gnu/packages/lisp.scm32
-rw-r--r--gnu/packages/llvm.scm123
-rw-r--r--gnu/packages/loko.scm2
-rw-r--r--gnu/packages/lua.scm116
-rw-r--r--gnu/packages/machine-learning.scm70
-rw-r--r--gnu/packages/mail.scm225
-rw-r--r--gnu/packages/man.scm92
-rw-r--r--gnu/packages/markup.scm22
-rw-r--r--gnu/packages/maths.scm464
-rw-r--r--gnu/packages/maven-parent-pom.scm111
-rw-r--r--gnu/packages/maven.scm383
-rw-r--r--gnu/packages/mes.scm31
-rw-r--r--gnu/packages/messaging.scm308
-rw-r--r--gnu/packages/monitoring.scm75
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/music.scm192
-rw-r--r--gnu/packages/nano.scm5
-rw-r--r--gnu/packages/ncdu.scm42
-rw-r--r--gnu/packages/networking.scm262
-rw-r--r--gnu/packages/nicotine.scm31
-rw-r--r--gnu/packages/ntp.scm4
-rw-r--r--gnu/packages/ocaml.scm260
-rw-r--r--gnu/packages/ocr.scm49
-rw-r--r--gnu/packages/opencl.scm7
-rw-r--r--gnu/packages/orange.scm2
-rw-r--r--gnu/packages/package-management.scm65
-rw-r--r--gnu/packages/parallel.scm173
-rw-r--r--gnu/packages/password-utils.scm38
-rw-r--r--gnu/packages/patches/audacity-ffmpeg-fallback.patch66
-rw-r--r--gnu/packages/patches/bash-reproducible-linux-pgrp-pipe.patch34
-rw-r--r--gnu/packages/patches/bloomberg-bde-cmake-module-path.patch16
-rw-r--r--gnu/packages/patches/bloomberg-bde-tools-fix-install-path.patch95
-rw-r--r--gnu/packages/patches/calibre-fix-zeroconf.patch38
-rw-r--r--gnu/packages/patches/coq-fix-envvars.patch148
-rw-r--r--gnu/packages/patches/cpulimit-with-glib-2.32.patch35
-rw-r--r--gnu/packages/patches/crawl-upgrade-saves.patch14
-rw-r--r--gnu/packages/patches/efivar-gcc-compat.patch177
-rw-r--r--gnu/packages/patches/evilwm-lost-focus-bug.patch18
-rw-r--r--gnu/packages/patches/fenics-dolfin-algorithm.patch37
-rw-r--r--gnu/packages/patches/fenics-dolfin-boost.patch45
-rw-r--r--gnu/packages/patches/fenics-dolfin-config-slepc.patch48
-rw-r--r--gnu/packages/patches/fenics-dolfin-demo-init.patch39
-rw-r--r--gnu/packages/patches/freecad-boost-serialization.patch27
-rw-r--r--gnu/packages/patches/freecad-vtk9.patch827
-rw-r--r--gnu/packages/patches/ghc-4.patch708
-rw-r--r--gnu/packages/patches/ghc-monad-par-fix-tests.patch45
-rw-r--r--gnu/packages/patches/glibc-CVE-2018-11236.patch149
-rw-r--r--gnu/packages/patches/glibc-CVE-2018-11237.patch55
-rw-r--r--gnu/packages/patches/glibc-hurd-magic-pid.patch190
-rw-r--r--gnu/packages/patches/grocsvs-dont-use-admiral.patch69
-rw-r--r--gnu/packages/patches/guile-cross-compilation.patch55
-rw-r--r--gnu/packages/patches/guile-fibers-wait-for-io-readiness.patch346
-rw-r--r--gnu/packages/patches/guile-ssh-fix-test-suite.patch217
-rw-r--r--gnu/packages/patches/guile-ssh-read-error.patch18
-rw-r--r--gnu/packages/patches/hydra-disable-darcs-test.patch25
-rw-r--r--gnu/packages/patches/inkscape-poppler-0.76.patch36
-rw-r--r--gnu/packages/patches/jami-images-loading.patch152
-rw-r--r--gnu/packages/patches/jami-libclient-audio-managers.patch23
-rw-r--r--gnu/packages/patches/jami-memory-usage.patch70
-rw-r--r--gnu/packages/patches/librecad-support-for-boost-1.76.patch17
-rw-r--r--gnu/packages/patches/libvirt-create-machine-cgroup.patch48
-rw-r--r--gnu/packages/patches/linux-libre-arm64-generic-pinebook-lcd.patch40
-rw-r--r--gnu/packages/patches/marble-qt-add-qt-headers.patch189
-rw-r--r--gnu/packages/patches/mariadb-link-libatomic.patch83
-rw-r--r--gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch177
-rw-r--r--gnu/packages/patches/mescc-tools-boot.patch222
-rw-r--r--gnu/packages/patches/mozjs60-riscv64-support.patch122
-rw-r--r--gnu/packages/patches/nettle-3.5-CVE-2021-3580-pt1.patch276
-rw-r--r--gnu/packages/patches/nettle-3.5-CVE-2021-3580-pt2.patch163
-rw-r--r--gnu/packages/patches/nettle-3.5-check-_pkcs1_sec_decrypt-msg-len.patch78
-rw-r--r--gnu/packages/patches/nhc98-c-update.patch42
-rw-r--r--gnu/packages/patches/ocaml-Add-a-.file-directive.patch96
-rw-r--r--gnu/packages/patches/ocaml-CVE-2015-8869.patch72
-rw-r--r--gnu/packages/patches/ocaml-bitstring-fix-configure.patch53
-rw-r--r--gnu/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch149
-rw-r--r--gnu/packages/patches/ocaml-qcheck-fix-test-whitespace.patch24
-rw-r--r--gnu/packages/patches/openbabel-fix-crash-on-nwchem-output.patch34
-rw-r--r--gnu/packages/patches/openboardview-use-system-imgui.patch170
-rw-r--r--gnu/packages/patches/openboardview-use-system-utf8.patch48
-rw-r--r--gnu/packages/patches/openjdk-14-builtins.patch11
-rw-r--r--gnu/packages/patches/openssl-3.0-c-rehash-in.patch (renamed from gnu/packages/patches/openssl-c-rehash-in.patch)13
-rw-r--r--gnu/packages/patches/openssl-CVE-2019-1559.patch60
-rw-r--r--gnu/packages/patches/openssl-runpath.patch15
-rw-r--r--gnu/packages/patches/passwordsafe-meson-remove-extra-argument.patch20
-rw-r--r--gnu/packages/patches/patchutils-test-perms.patch14
-rw-r--r--gnu/packages/patches/perl-5.14-autosplit-default-time.patch15
-rw-r--r--gnu/packages/patches/perl-5.14-module-pluggable-search.patch25
-rw-r--r--gnu/packages/patches/perl-5.14-no-sys-dirs.patch156
-rw-r--r--gnu/packages/patches/polkit-CVE-2021-4034.patch82
-rw-r--r--gnu/packages/patches/postgresql-riscv-spinlocks.patch41
-rw-r--r--gnu/packages/patches/python-CVE-2018-14647.patch61
-rw-r--r--gnu/packages/patches/python-CVE-2020-26116.patch47
-rw-r--r--gnu/packages/patches/python-axolotl-AES-fix.patch24
-rw-r--r--gnu/packages/patches/python-babel-fix-parse-future-test.patch68
-rw-r--r--gnu/packages/patches/python-matplotlib-run-under-wayland-gtk3.patch31
-rw-r--r--gnu/packages/patches/python-mypy-12332.patch68
-rw-r--r--gnu/packages/patches/python-pytest-asyncio-python-3.8.patch238
-rw-r--r--gnu/packages/patches/python-pytorch-1.9.0-system-libraries.patch139
-rw-r--r--gnu/packages/patches/python-robotframework-source-date-epoch.patch104
-rw-r--r--gnu/packages/patches/python-robotframework-sshlibrary-rf5-compat.patch19
-rw-r--r--gnu/packages/patches/python-robotframework-ug2html.patch57
-rw-r--r--gnu/packages/patches/python-seaborn-2690.patch268
-rw-r--r--gnu/packages/patches/python2-larch-coverage-4.0a6-compatibility.patch29
-rw-r--r--gnu/packages/patches/python2-pyopenssl-openssl-compat.patch51
-rw-r--r--gnu/packages/patches/qt4-ldflags.patch18
-rw-r--r--gnu/packages/patches/racket-enable-scheme-backport.patch465
-rw-r--r--gnu/packages/patches/racket-gui-tethered-launcher-backport.patch26
-rw-r--r--gnu/packages/patches/rcs-5.10.0-no-stdin.patch57
-rw-r--r--gnu/packages/patches/ruby-mustache-1.1.1-fix-race-condition-tests.patch38
-rw-r--r--gnu/packages/patches/rust-coresimd-doctest.patch21
-rw-r--r--gnu/packages/patches/screen-CVE-2021-26937.patch66
-rw-r--r--gnu/packages/patches/sdcc-disable-non-free-code.patch363
-rw-r--r--gnu/packages/patches/streamlink-update-test.patch70
-rw-r--r--gnu/packages/patches/tbb-fix-test-on-aarch64.patch35
-rw-r--r--gnu/packages/patches/tcc-boot-0.9.27.patch26
-rw-r--r--gnu/packages/patches/transfig-gcc10-fno-common.patch33
-rw-r--r--gnu/packages/patches/ungoogled-chromium-accelerated-video-decode.patch18
-rw-r--r--gnu/packages/patches/upower-builddir.patch34
-rw-r--r--gnu/packages/patches/util-linux-CVE-2021-3995.patch146
-rw-r--r--gnu/packages/patches/util-linux-CVE-2021-3996.patch233
-rw-r--r--gnu/packages/patches/vtk-8-fix-freetypetools-build-failure.patch36
-rw-r--r--gnu/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch38
-rw-r--r--gnu/packages/patches/webkitgtk-bind-all-fonts.patch17
-rw-r--r--gnu/packages/patches/webkitgtk-canonicalize-paths.patch66
-rw-r--r--gnu/packages/patches/webkitgtk-share-store.patch19
-rw-r--r--gnu/packages/patches/webrtc-audio-processing-big-endian.patch93
-rw-r--r--gnu/packages/pciutils.scm43
-rw-r--r--gnu/packages/pcre.scm9
-rw-r--r--gnu/packages/pdf.scm55
-rw-r--r--gnu/packages/pep.scm13
-rw-r--r--gnu/packages/perl.scm100
-rw-r--r--gnu/packages/photo.scm8
-rw-r--r--gnu/packages/plotutils.scm130
-rw-r--r--gnu/packages/polkit.scm13
-rw-r--r--gnu/packages/prolog.scm76
-rw-r--r--gnu/packages/purescript.scm21
-rw-r--r--gnu/packages/python-check.scm6
-rw-r--r--gnu/packages/python-crypto.scm201
-rw-r--r--gnu/packages/python-science.scm131
-rw-r--r--gnu/packages/python-web.scm196
-rw-r--r--gnu/packages/python-xyz.scm928
-rw-r--r--gnu/packages/qt.scm104
-rw-r--r--gnu/packages/racket.scm1404
-rw-r--r--gnu/packages/radio.scm335
-rw-r--r--gnu/packages/regex.scm42
-rw-r--r--gnu/packages/robotics.scm29
-rw-r--r--gnu/packages/ruby.scm76
-rw-r--r--gnu/packages/rust-apps.scm75
-rw-r--r--gnu/packages/rust.scm4
-rw-r--r--gnu/packages/samba.scm4
-rw-r--r--gnu/packages/scheme.scm13
-rw-r--r--gnu/packages/screen.scm12
-rw-r--r--gnu/packages/scsi.scm36
-rw-r--r--gnu/packages/search.scm24
-rw-r--r--gnu/packages/security-token.scm79
-rw-r--r--gnu/packages/shells.scm584
-rw-r--r--gnu/packages/shellutils.scm9
-rw-r--r--gnu/packages/simulation.scm14
-rw-r--r--gnu/packages/sphinx.scm23
-rw-r--r--gnu/packages/ssh.scm48
-rw-r--r--gnu/packages/statistics.scm420
-rw-r--r--gnu/packages/stenography.scm8
-rw-r--r--gnu/packages/suckless.scm13
-rw-r--r--gnu/packages/sync.scm57
-rw-r--r--gnu/packages/syncthing.scm12
-rw-r--r--gnu/packages/syndication.scm56
-rw-r--r--gnu/packages/tbb.scm8
-rw-r--r--gnu/packages/telegram.scm2
-rw-r--r--gnu/packages/telephony.scm155
-rw-r--r--gnu/packages/terminals.scm11
-rw-r--r--gnu/packages/tex.scm823
-rw-r--r--gnu/packages/text-editors.scm174
-rw-r--r--gnu/packages/textutils.scm6
-rw-r--r--gnu/packages/time.scm21
-rw-r--r--gnu/packages/tls.scm154
-rw-r--r--gnu/packages/toolkits.scm143
-rw-r--r--gnu/packages/tor.scm4
-rw-r--r--gnu/packages/valgrind.scm21
-rw-r--r--gnu/packages/version-control.scm36
-rw-r--r--gnu/packages/video.scm235
-rw-r--r--gnu/packages/vim.scm8
-rw-r--r--gnu/packages/virtualization.scm54
-rw-r--r--gnu/packages/vpn.scm56
-rw-r--r--gnu/packages/weather.scm55
-rw-r--r--gnu/packages/web-browsers.scm138
-rw-r--r--gnu/packages/web.scm143
-rw-r--r--gnu/packages/webkit.scm41
-rw-r--r--gnu/packages/wget.scm18
-rw-r--r--gnu/packages/wm.scm192
-rw-r--r--gnu/packages/wxwidgets.scm4
-rw-r--r--gnu/packages/xdisorg.scm60
-rw-r--r--gnu/packages/xfce.scm12
-rw-r--r--gnu/packages/xfig.scm14
-rw-r--r--gnu/packages/xml.scm7
-rw-r--r--gnu/packages/xorg.scm22
-rw-r--r--gnu/packages/zig.scm4
-rw-r--r--gnu/services.scm6
-rw-r--r--gnu/services/base.scm233
-rw-r--r--gnu/services/cuirass.scm3
-rw-r--r--gnu/services/databases.scm1
-rw-r--r--gnu/services/dbus.scm4
-rw-r--r--gnu/services/desktop.scm376
-rw-r--r--gnu/services/guix.scm161
-rw-r--r--gnu/services/monitoring.scm189
-rw-r--r--gnu/services/pm.scm21
-rw-r--r--gnu/services/sound.scm90
-rw-r--r--gnu/services/ssh.scm22
-rw-r--r--gnu/services/virtualization.scm56
-rw-r--r--gnu/services/vpn.scm4
-rw-r--r--gnu/services/web.scm24
-rw-r--r--gnu/services/xorg.scm2
-rw-r--r--gnu/system.scm111
-rw-r--r--gnu/system/file-systems.scm7
-rw-r--r--gnu/system/hurd.scm9
-rw-r--r--gnu/system/images/novena.scm4
-rw-r--r--gnu/system/linux-container.scm15
-rw-r--r--gnu/system/linux-initrd.scm7
-rw-r--r--gnu/tests/base.scm6
-rw-r--r--gnu/tests/databases.scm141
-rw-r--r--gnu/tests/guix.scm81
-rw-r--r--gnu/tests/install.scm400
-rw-r--r--gnu/tests/package-management.scm23
-rw-r--r--guix/build-system/julia.scm7
-rw-r--r--guix/build-system/meson.scm4
-rw-r--r--guix/build-system/ocaml.scm12
-rw-r--r--guix/build-system/texlive.scm13
-rw-r--r--guix/build/download.scm49
-rw-r--r--guix/build/emacs-build-system.scm77
-rw-r--r--guix/build/julia-build-system.scm22
-rw-r--r--guix/build/maven/java.scm9
-rw-r--r--guix/build/store-copy.scm2
-rw-r--r--guix/colors.scm4
-rw-r--r--guix/cpu.scm115
-rw-r--r--guix/deprecation.scm8
-rw-r--r--guix/derivations.scm14
-rw-r--r--guix/gexp.scm98
-rw-r--r--guix/git-authenticate.scm17
-rw-r--r--guix/git.scm24
-rw-r--r--guix/graph.scm14
-rw-r--r--guix/http-client.scm48
-rw-r--r--guix/import/cran.scm5
-rw-r--r--guix/import/elpa.scm7
-rw-r--r--guix/import/github.scm122
-rw-r--r--guix/import/hackage.scm54
-rw-r--r--guix/import/opam.scm8
-rw-r--r--guix/import/pypi.scm80
-rw-r--r--guix/import/utils.scm7
-rw-r--r--guix/inferior.scm275
-rw-r--r--guix/lint.scm11
-rw-r--r--guix/man-db.scm7
-rw-r--r--guix/packages.scm21
-rw-r--r--guix/profiles.scm154
-rw-r--r--guix/scripts/build.scm22
-rw-r--r--guix/scripts/deploy.scm111
-rw-r--r--guix/scripts/graph.scm9
-rw-r--r--guix/scripts/home.scm390
-rw-r--r--guix/scripts/home/import.scm33
-rw-r--r--guix/scripts/import/gem.scm33
-rw-r--r--guix/scripts/import/pypi.scm37
-rw-r--r--guix/scripts/publish.scm29
-rw-r--r--guix/scripts/pull.scm158
-rw-r--r--guix/scripts/shell.scm4
-rw-r--r--guix/scripts/system.scm32
-rw-r--r--guix/status.scm23
-rw-r--r--guix/store.scm6
-rw-r--r--guix/tests.scm14
-rw-r--r--guix/transformations.scm28
-rw-r--r--guix/ui.scm122
-rw-r--r--guix/utils.scm46
-rw-r--r--po/doc/guix-cookbook.es.po9
-rw-r--r--po/doc/guix-cookbook.fr.po94
-rw-r--r--po/doc/guix-cookbook.ko.po48
-rw-r--r--po/doc/guix-cookbook.pt_BR.po4478
-rw-r--r--po/doc/guix-cookbook.sk.po505
-rw-r--r--po/doc/guix-cookbook.uk.po4503
-rw-r--r--po/doc/guix-manual.de.po26867
-rw-r--r--po/doc/guix-manual.es.po26888
-rw-r--r--po/doc/guix-manual.fa.po26057
-rw-r--r--po/doc/guix-manual.fi.po26081
-rw-r--r--po/doc/guix-manual.fr.po27224
-rw-r--r--po/doc/guix-manual.it.po26060
-rw-r--r--po/doc/guix-manual.ko.po26129
-rw-r--r--po/doc/guix-manual.pt_BR.po26410
-rw-r--r--po/doc/guix-manual.ru.po26503
-rw-r--r--po/doc/guix-manual.sk.po26574
-rw-r--r--po/doc/guix-manual.zh_CN.po26248
-rw-r--r--po/doc/local.mk2
-rw-r--r--po/guix/LINGUAS2
-rw-r--r--po/guix/POTFILES.in1
-rw-r--r--po/guix/cs.po1617
-rw-r--r--po/guix/da.po1645
-rw-r--r--po/guix/de.po1846
-rw-r--r--po/guix/eo.po1632
-rw-r--r--po/guix/es.po2398
-rw-r--r--po/guix/fa.po8246
-rw-r--r--po/guix/fi.po1616
-rw-r--r--po/guix/fr.po1804
-rw-r--r--po/guix/hu.po1634
-rw-r--r--po/guix/it.po1623
-rw-r--r--po/guix/ko.po1620
-rw-r--r--po/guix/nl.po1786
-rw-r--r--po/guix/oc.po1606
-rw-r--r--po/guix/pl.po1628
-rw-r--r--po/guix/pt_BR.po1718
-rw-r--r--po/guix/ru.po1633
-rw-r--r--po/guix/si.po1601
-rw-r--r--po/guix/sk.po1895
-rw-r--r--po/guix/sr.po1625
-rw-r--r--po/guix/sv.po2827
-rw-r--r--po/guix/ta.po1638
-rw-r--r--po/guix/uk.po8248
-rw-r--r--po/guix/vi.po1629
-rw-r--r--po/guix/zh_CN.po1626
-rw-r--r--po/packages/da.po5322
-rw-r--r--po/packages/de.po5312
-rw-r--r--po/packages/eo.po5316
-rw-r--r--po/packages/es.po5344
-rw-r--r--po/packages/fr.po5371
-rw-r--r--po/packages/hu.po5315
-rw-r--r--po/packages/it.po5324
-rw-r--r--po/packages/ko.po5321
-rw-r--r--po/packages/nl.po5324
-rw-r--r--po/packages/oc.po5324
-rw-r--r--po/packages/pl.po5294
-rw-r--r--po/packages/pt_BR.po5294
-rw-r--r--po/packages/sk.po5388
-rw-r--r--po/packages/sr.po5294
-rw-r--r--po/packages/zh_CN.po5321
-rw-r--r--tests/boot-parameters.scm23
-rw-r--r--tests/channels.scm60
-rw-r--r--tests/derivations.scm50
-rw-r--r--tests/gexp.scm81
-rw-r--r--tests/git-authenticate.scm150
-rw-r--r--tests/git.scm52
-rw-r--r--tests/graph.scm28
-rw-r--r--tests/guix-build.sh12
-rw-r--r--tests/guix-git-authenticate.sh17
-rw-r--r--tests/guix-home.sh97
-rw-r--r--tests/guix-pack.sh5
-rw-r--r--tests/guix-package.sh13
-rw-r--r--tests/guix-shell.sh5
-rw-r--r--tests/guix-system.sh12
-rw-r--r--tests/home-import.scm31
-rw-r--r--tests/http-client.scm84
-rw-r--r--tests/import-github.scm43
-rw-r--r--tests/lint.scm21
-rw-r--r--tests/packages.scm56
-rw-r--r--tests/profiles.scm5
-rw-r--r--tests/publish.scm61
-rw-r--r--tests/pypi.scm119
-rw-r--r--tests/substitute.scm25
527 files changed, 319750 insertions, 209043 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index 12a6f08739..09e19223d5 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -52,6 +52,7 @@
(eval . (put 'test-equal 'scheme-indent-function 1))
(eval . (put 'test-eq 'scheme-indent-function 1))
(eval . (put 'call-with-input-string 'scheme-indent-function 1))
+ (eval . (put 'call-with-port 'scheme-indent-function 1))
(eval . (put 'guard 'scheme-indent-function 1))
(eval . (put 'lambda* 'scheme-indent-function 1))
(eval . (put 'substitute* 'scheme-indent-function 1))
@@ -60,8 +61,6 @@
;; 'modify-inputs' and its keywords.
(eval . (put 'modify-inputs 'scheme-indent-function 1))
(eval . (put 'replace 'scheme-indent-function 1))
- (eval . (put 'prepend 'scheme-indent-function 2))
- (eval . (put 'append 'scheme-indent-function 2))
;; 'modify-phases' and its keywords.
(eval . (put 'modify-phases 'scheme-indent-function 1))
@@ -150,6 +149,8 @@
(eval . (put 'with-shepherd-action 'scheme-indent-function 3))
+ (eval . (put 'with-http-server 'scheme-indent-function 1))
+
;; This notably allows '(' in Paredit to not insert a space when the
;; preceding symbol is one of these.
(eval . (modify-syntax-entry ?~ "'"))
diff --git a/CODE-OF-CONDUCT b/CODE-OF-CONDUCT
index ef90330cda..0b1f03624a 100644
--- a/CODE-OF-CONDUCT
+++ b/CODE-OF-CONDUCT
@@ -1,78 +1,103 @@
-Contributor Covenant Code of Conduct
+Important: to avoid polarizing/hurtful discussions in our public spaces, any
+matter pertaining to our use of this Code of Conduct should be brought
+privately to the Guix maintainers at guix-maintainers@gnu.org. Failure to do
+so will be considered as a violation of this Code of Conduct.
- Note: In the sequel, "project" refers to GNU Guix, and "project
- maintainer(s)" refers to maintainer(s) of GNU Guix.
+Contributor Covenant Code of Conduct
Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, gender identity and expression, level of experience,
-education, socio-economic status, nationality, personal appearance, race,
-religion, or sexual identity and orientation.
-
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
Our Standards
-
-Examples of behavior that contributes to creating a positive environment
-include:
-
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-
-Examples of unacceptable behavior by participants include:
-
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
-advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the overall
+community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or advances of
+any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
-* Publishing others’ private information, such as a physical or electronic
-address, without explicit permission
+* Publishing others’ private information, such as a physical or email address,
+without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
-
-Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
-
+Enforcement Responsibilities
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
Scope
-
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an appointed
-representative at an online or offline event. Representation of a project may be
-further defined and clarified by project maintainers.
-
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
Enforcement
-
Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at guix-maintainers@gnu.org. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project’s leadership.
-
+reported to the community leaders responsible for enforcement at
+guix-maintainers@gnu.org.
+All complaints will be reviewed and investigated promptly and fairly.
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+Enforcement Guidelines
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+1. Correction
+Community Impact: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+Consequence: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+2. Warning
+Community Impact: A violation through a single incident or series of
+actions.
+Consequence: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or permanent
+ban.
+3. Temporary Ban
+Community Impact: A serious violation of community standards, including
+sustained inappropriate behavior.
+Consequence: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+4. Permanent Ban
+Community Impact: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+Consequence: A permanent ban from any sort of public interaction within the
+community.
Attribution
+This Code of Conduct is adapted from the Contributor Covenant,
+version 2.1, available at
+https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
+Community Impact Guidelines were inspired by
+Mozilla’s code of conduct enforcement ladder.
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
-This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
diff --git a/Makefile.am b/Makefile.am
index 0c4ee3f01e..6d59e53081 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU
-# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 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>
@@ -380,6 +380,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/5.16-arm.conf \
+ gnu/packages/aux-files/linux-libre/5.16-arm64.conf \
+ gnu/packages/aux-files/linux-libre/5.16-i686.conf \
+ gnu/packages/aux-files/linux-libre/5.16-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 \
@@ -483,6 +487,7 @@ SCM_TESTS = \
tests/gremlin.scm \
tests/hackage.scm \
tests/home-import.scm \
+ tests/http-client.scm \
tests/import-git.scm \
tests/import-github.scm \
tests/import-utils.scm \
@@ -1023,10 +1028,12 @@ assert-no-store-file-names:
exit 1 ; \
fi
-# Make sure important substitutes are available.
+# Make sure important substitutes are available. Check only the primary
+# server so that '--display-missing' doesn't print two lists.
assert-binaries-available: $(GOBJECTS)
$(AM_V_at)$(top_builddir)/pre-inst-env \
guix weather -m "$(top_srcdir)/etc/release-manifest.scm" \
+ --substitute-urls="https://ci.guix.gnu.org" \
--display-missing
# Make sure the final inputs don't refer to bootstrap tools.
diff --git a/doc/build.scm b/doc/build.scm
index 47cff15985..9d79215b98 100644
--- a/doc/build.scm
+++ b/doc/build.scm
@@ -65,7 +65,7 @@
(define %languages
;; The cookbook is not translated in the same languages as the manual
(if (string=? %manual "guix-cookbook")
- '("de" "en" "fr")
+ '("de" "en" "fr" "sk")
'("de" "en" "es" "fr" "ru" "zh_CN")))
(define (texinfo-manual-images source)
diff --git a/doc/contributing.texi b/doc/contributing.texi
index 9f97788c0b..207efc4ee6 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -98,8 +98,14 @@ shell}:
guix shell -D guix help2man git strace --pure
@end example
-Run @command{./bootstrap} to generate the build system infrastructure
-using Autoconf and Automake. If you get an error like this one:
+From there you can generate the build system infrastructure
+using Autoconf and Automake:
+
+@example
+./bootstrap
+@end example
+
+If you get an error like this one:
@example
configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES
@@ -120,17 +126,30 @@ export ACLOCAL_PATH=/usr/share/aclocal
@xref{Macro Search Path,,, automake, The GNU Automake Manual}, for
more information.
-Then, run @command{./configure --localstatedir=@var{directory}}, where
-@var{directory} is the @code{localstatedir} value used by your current
-installation (@pxref{The Store}, for information about this), usually
-@file{/var}. 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}.
+Then, run:
+
+@example
+./configure --localstatedir=/var
+@end example
+
+@noindent
+... where @file{/var} is the normal @code{localstatedir} value
+(@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}):
-Finally, you have to invoke @code{make && make check} to build Guix and
-run the tests (@pxref{Running the Test Suite}). If anything fails, take
-a look at installation instructions (@pxref{Installation}) or send a
-message to the @email{guix-devel@@gnu.org, mailing list}.
+@example
+make
+make check
+@end example
+
+@noindent
+If anything fails, take a look at installation instructions
+(@pxref{Installation}) or send a message to the
+@email{guix-devel@@gnu.org, mailing list}.
From there on, you can authenticate all the commits included in your
checkout by running:
@@ -157,6 +176,18 @@ You are advised to run @command{make authenticate} after every
changes to the repository.
@end quotation
+After updating the repository, @command{make} might fail with an error
+similar to the following example:
+
+@example
+error: failed to load 'gnu/packages/dunst.scm':
+ice-9/eval.scm:293:34: In procedure abi-check: #<record-type <origin>>: record ABI mismatch; recompilation needed
+@end example
+
+This means that one of the record types that Guix defines (in this
+example, the @code{origin} record) has changed, and all of guix needs
+to be recompiled to take that change into account. To do so, run
+@command{make clean-go} followed by @command{make}.
@node Running Guix Before It Is Installed
@section Running Guix Before It Is Installed
@@ -231,6 +262,24 @@ local source tree; it simply updates the @file{~/.config/guix/current}
symlink (@pxref{Invoking guix pull}). Run @command{git pull} instead if
you want to upgrade your local source tree.
+Sometimes, especially if you have recently updated your repository,
+running @command{./pre-inst-env} will print a message similar to the
+following example:
+
+@example
+;;; note: source file /home/user/projects/guix/guix/progress.scm
+;;; newer than compiled /home/user/projects/guix/guix/progress.go
+@end example
+
+This is only a note and you can safely ignore it. You can get rid of
+the message by running @command{make -j4}. Until you do, Guile will run
+slightly slower because it will interpret the code instead of using
+prepared Guile object (@file{.go}) files.
+
+You can run @command{make} automatically as you work using
+@command{watchexec} from the @code{watchexec} package. For example,
+to build again each time you update a package file, you can run
+@samp{watchexec -w gnu/packages make -j4}.
@node The Perfect Setup
@section The Perfect Setup
@@ -1386,9 +1435,14 @@ what your usertag means.
@cindex commit access, for developers
Everyone can contribute to Guix without having commit access
(@pxref{Submitting Patches}). However, for frequent contributors,
-having write access to the repository can be convenient. 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.
+having write access to the repository can be convenient. As a rule of
+thumb, a contributor should have accumulated fifty (50) reviewed commits
+to be considered as a committer and have sustained their activity in the
+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.
The following sections explain how to get commit access, how to be ready
to push commits, and the policies and community expectations for commits
diff --git a/doc/guix-cookbook.texi b/doc/guix-cookbook.texi
index d2ce525998..d89ce66017 100644
--- a/doc/guix-cookbook.texi
+++ b/doc/guix-cookbook.texi
@@ -7,6 +7,9 @@
@settitle GNU Guix Cookbook
@c %**end of header
+@c Onion service for ci.guix.gnu.org.
+@set SUBSTITUTE-TOR-URL https://4zwzi66wwdaalbhgnix55ea3ab4pvvw66ll2ow53kjub6se4q2bclcyd.onion
+
@copying
Copyright @copyright{} 2019 Ricardo Wurmus@*
Copyright @copyright{} 2019 Efraim Flashner@*
@@ -2354,7 +2357,8 @@ follow:
config => (guix-configuration
(inherit config)
;; ci.guix.gnu.org's Onion service
- (substitute-urls "https://bp7o7ckwlewr4slm.onion")
+ (substitute-urls
+ "@value{SUBSTITUTE-TOR-URL}")
(http-proxy "http://localhost:9250")))))))
@end lisp
@@ -2372,7 +2376,8 @@ want to get a substitute from the Tor tunnel run:
@example
sudo herd set-http-proxy guix-daemon http://localhost:9250
-guix build --substitute-urls=https://bp7o7ckwlewr4slm.onion …
+guix build \
+ --substitute-urls=@value{SUBSTITUTE-TOR-URL} @dots{}
@end example
@node Setting up NGINX with Lua
diff --git a/doc/guix.texi b/doc/guix.texi
index 8ab86b1181..7bd80a1592 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -47,7 +47,7 @@ Copyright @copyright{} 2017, 2018 Carlo Zancanaro@*
Copyright @copyright{} 2017 Thomas Danckaert@*
Copyright @copyright{} 2017 humanitiesNerd@*
Copyright @copyright{} 2017, 2021 Christine Lemmer-Webber@*
-Copyright @copyright{} 2017, 2018, 2019, 2020, 2021 Marius Bakke@*
+Copyright @copyright{} 2017, 2018, 2019, 2020, 2021, 2022 Marius Bakke@*
Copyright @copyright{} 2017, 2019, 2020 Hartmut Goebel@*
Copyright @copyright{} 2017, 2019, 2020, 2021 Maxim Cournoyer@*
Copyright @copyright{} 2017–2022 Tobias Geerinckx-Rice@*
@@ -175,6 +175,7 @@ Weblate} (@pxref{Translating Guix}).
* Home Configuration:: Configuring the home environment.
* Documentation:: Browsing software user manuals.
* Installing Debugging Files:: Feeding the debugger.
+* Using TeX and LaTeX:: Typesetting.
* Security Updates:: Deploying security fixes quickly.
* Bootstrapping:: GNU/Linux built from scratch.
* Porting:: Targeting another platform or kernel.
@@ -1867,8 +1868,24 @@ $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
Note that the @code{glibc-locales} package contains data for all the
locales supported by the GNU@tie{}libc and weighs in at around
-917@tie{}MiB@. Alternatively, the @code{glibc-utf8-locales} is smaller but
-limited to a few UTF-8 locales.
+930@tie{}MiB@footnote{The size of the @code{glibc-locales} package is
+reduced down to about 213@tie{}MiB with store deduplication and further
+down to about 67@tie{}MiB when using a zstd-compressed Btrfs file
+system.}. If you only need a few locales, you can define your custom
+locales package via the @code{make-glibc-utf8-locales} procedure from
+the @code{(gnu packages base)} module. The following example defines a
+package containing the various Canadian UTF-8 locales known to the
+GNU@tie{}libc, that weighs around 14@tie{}MiB:
+
+@lisp
+(use-modules (gnu packages base))
+
+(define my-glibc-locales
+ (make-glibc-utf8-locales
+ glibc
+ #:locales (list "en_CA" "fr_CA" "ik_CA" "iu_CA" "shs_CA")
+ #:name "glibc-canadian-utf8-locales"))
+@end lisp
The @env{GUIX_LOCPATH} variable plays a role similar to @env{LOCPATH}
(@pxref{Locale Names, @env{LOCPATH},, libc, The GNU C Library Reference
@@ -4426,18 +4443,12 @@ Generation 2 Jun 11 2018 11:02:49
repository URL: https://git.savannah.gnu.org/git/guix.git
branch: origin/master
commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
- 2 new packages: keepalived, libnfnetlink
- 6 packages upgraded: emacs-nix-mode@@2.0.4,
- guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
- heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
Generation 3 Jun 13 2018 23:31:07 (current)
guix 844cc1c
repository URL: https://git.savannah.gnu.org/git/guix.git
branch: origin/master
commit: 844cc1c8f394f03b404c5bb3aee086922373490c
- 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
- 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
@end example
@xref{Invoking guix describe, @command{guix describe}}, for other ways to
@@ -4492,13 +4503,13 @@ information.
@cindex channel news
@item --news
@itemx -N
-Display the list of packages added or upgraded since the previous
-generation, as well as, occasionally, news written by channel authors
-for their users (@pxref{Channels, Writing Channel News}).
+Display news written by channel authors for their users for changes made
+since the previous generation (@pxref{Channels, Writing Channel News}).
+When @option{--details} is passed, additionally display new and upgraded
+packages.
-The package information is the same as displayed upon @command{guix
-pull} completion, but without ellipses; it is also similar to the output
-of @command{guix pull -l} for the last generation (see below).
+You can view that information for previous generations with
+@command{guix pull -l}.
@item --list-generations[=@var{pattern}]
@itemx -l [@var{pattern}]
@@ -4507,6 +4518,16 @@ is provided, the subset of generations that match @var{pattern}.
The syntax of @var{pattern} is the same as with @code{guix package
--list-generations} (@pxref{Invoking guix package}).
+By default, this prints information about the channels used in each
+revision as well as the corresponding news entries. If you pass
+@option{--details}, it will also print the list of packages added and
+upgraded in each generation compared to the previous one.
+
+@item --details
+Instruct @option{--list-generations} or @option{--news} to display more
+information about the differences between subsequent generations---see
+above.
+
@item --roll-back
@cindex rolling back
@cindex undoing transactions
@@ -5448,7 +5469,9 @@ commit of a channel that should be authenticated. The first time a
channel is fetched with @command{guix pull} or @command{guix
time-machine}, the command looks up the introductory commit and verifies
that it is signed by the specified OpenPGP key. From then on, it
-authenticates commits according to the rule above.
+authenticates commits according to the rule above. Authentication fails
+if the target commit is neither a descendant nor an ancestor of the
+introductory commit.
Additionally, your channel must provide all the OpenPGP keys that were
ever mentioned in @file{.guix-authorizations}, stored as @file{.key}
@@ -5824,6 +5847,12 @@ This is similar to the same-named option in @command{guix package}
(@pxref{profile-manifest, @option{--manifest}}) and uses the same
manifest files.
+@item --profile=@var{profile}
+@itemx -p @var{profile}
+Create an environment containing the packages installed in @var{profile}.
+Use @command{guix package} (@pxref{Invoking guix package}) to create
+and manage profiles.
+
@item --pure
Unset existing environment variables when building the new environment, except
those specified with @option{--preserve} (see below). This has the effect of
@@ -6231,6 +6260,12 @@ interpreted as packages whose dependencies will be added to the
environment, the default behavior. Packages appearing after are
interpreted as packages that will be added to the environment directly.
+@item --profile=@var{profile}
+@itemx -p @var{profile}
+Create an environment containing the packages installed in @var{profile}.
+Use @command{guix package} (@pxref{Invoking guix package}) to create
+and manage profiles.
+
@item --pure
Unset existing environment variables when building the new environment, except
those specified with @option{--preserve} (see below). This has the effect of
@@ -9472,8 +9507,7 @@ scripts so that they refer to @code{grep} by its absolute file name:
(substitute* (list (string-append bin "/egrep")
(string-append bin "/fgrep"))
(("^exec grep")
- (string-append "exec " bin "/grep")))
- #t))))
+ (string-append "exec " bin "/grep")))))))
@end lisp
In the example below, phases are modified in two ways: the standard
@@ -9492,12 +9526,95 @@ executable files to be installed:
(let ((bin (string-append (assoc-ref outputs "out")
"/bin")))
(install-file "footswitch" bin)
- (install-file "scythe" bin)
- #t))))
+ (install-file "scythe" bin)))))
@end lisp
@c TODO: Add more examples.
+@subsection Wrappers
+
+@cindex program wrappers
+@cindex wrapping programs
+It is not unusual for a command to require certain environment variables
+to be set for proper functioning, typically search paths (@pxref{Search
+Paths}). Failing to do that, the command might fail to find files or
+other commands it relies on, or it might pick the ``wrong''
+ones---depending on the environment in which it runs. Examples include:
+
+@itemize
+@item
+a shell script that assumes all the commands it uses are in @env{PATH};
+
+@item
+a Guile program that assumes all its modules are in @env{GUILE_LOAD_PATH}
+and @env{GUILE_LOAD_COMPILED_PATH};
+
+@item
+a Qt application that expects to find certain plugins in
+@env{QT_PLUGIN_PATH}.
+@end itemize
+
+For a package writer, the goal is to make sure commands always work the
+same rather than depend on some external settings. One way to achieve
+that is to @dfn{wrap} commands in a thin script that sets those
+environment variables, thereby ensuring that those run-time dependencies
+are always found. The wrapper would be used to set @env{PATH},
+@env{GUILE_LOAD_PATH}, or @env{QT_PLUGIN_PATH} in the examples above.
+
+To ease that task, the @code{(guix build utils)} module provides a
+couple of helpers to wrap commands.
+
+@deffn {Scheme Procedure} wrap-program @var{program} @
+ [#:sh @var{sh}] [#:rest @var{variables}]
+Make a wrapper for @var{program}. @var{variables} should look like this:
+
+@lisp
+'(@var{variable} @var{delimiter} @var{position} @var{list-of-directories})
+@end lisp
+
+where @var{delimiter} is optional. @code{:} will be used if
+@var{delimiter} is not given.
+
+For example, this call:
+
+@lisp
+(wrap-program "foo"
+ '("PATH" ":" = ("/gnu/.../bar/bin"))
+ '("CERT_PATH" suffix ("/gnu/.../baz/certs"
+ "/qux/certs")))
+@end lisp
+
+will copy @file{foo} to @file{.foo-real} and create the file @file{foo}
+with the following contents:
+
+@example
+#!location/of/bin/bash
+export PATH="/gnu/.../bar/bin"
+export CERT_PATH="$CERT_PATH$@{CERT_PATH:+:@}/gnu/.../baz/certs:/qux/certs"
+exec -a $0 location/of/.foo-real "$@@"
+@end example
+
+If @var{program} has previously been wrapped by @code{wrap-program}, the
+wrapper is extended with definitions for @var{variables}. If it is not,
+@var{sh} will be used as the interpreter.
+@end deffn
+
+@deffn {Scheme Procedure} wrap-script @var{program} @
+ [#:guile @var{guile}] [#:rest @var{variables}]
+Wrap the script @var{program} such that @var{variables} are set first.
+The format of @var{variables} is the same as in the @code{wrap-program}
+procedure. This procedure differs from @code{wrap-program} in that it
+does not create a separate shell script. Instead, @var{program} is
+modified directly by prepending a Guile script, which is interpreted as
+a comment in the script's language.
+
+Special encoding comments as supported by Python are recreated on the
+second line.
+
+Note that this procedure can only be used once per file as Guile scripts are
+not supported.
+@end deffn
+
@node Search Paths
@section Search Paths
@@ -15734,22 +15851,39 @@ Linux swap partition by running @command{swaplabel @var{device}}, where
@lisp
(swap-space
(target (file-system-label "swap"))
- (dependencies (list lvm-device)))
+ (dependencies mapped-devices))
@end lisp
-Use the partition with label @code{swap}, which can be found after the
-@var{lvm-device} mapped device has been opened. Again, the
+Use the partition with label @code{swap}, which can be found after all
+the @var{mapped-devices} mapped devices have been opened. Again, the
@command{swaplabel} command allows you to view and change the label of a
Linux swap partition.
+Here's a more involved example with the corresponding @code{file-systems} part
+of an @code{operating-system} declaration.
+
@lisp
-(swap-space
- (target "/btrfs/swapfile")
- (dependencies (list btrfs-fs)))
+(file-systems
+ (list (file-system
+ (device (file-system-label "root"))
+ (mount-point "/")
+ (type "ext4"))
+ (file-system
+ (device (file-system-label "btrfs"))
+ (mount-point "/btrfs")
+ (type "btrfs"))))
+
+(swap-devices
+ (list
+ (swap-space
+ (target "/btrfs/swapfile")
+ (dependencies (filter (file-system-mount-point-predicate "/btrfs")
+ file-systems)))))
@end lisp
-Use the file @file{/btrfs/swapfile} as swap space, which is present on the
-@var{btrfs-fs} filesystem.
+Use the file @file{/btrfs/swapfile} as swap space, which depends on the
+file system mounted at @file{/btrfs}. Note how we use Guile's filter to
+select the file system in an elegant fashion!
@node User Accounts
@section User Accounts
@@ -16631,6 +16765,10 @@ This option accepts, as an integer, the nice value with which to run the
This option provides an ``escape hatch'' for the user to provide arbitrary
command-line arguments to @command{agetty} as a list of strings.
+@item @code{shepherd-requirement} (default: @code{'()})
+The option can be used to provides extra shepherd requirements (for example
+@code{'syslogd}) to the respective @code{'term-}* shepherd service.
+
@end table
@end deftp
@@ -16901,6 +17039,18 @@ This example assumes that the file @file{./guix.example.org-key.pub}
contains the public key that @code{guix.example.org} uses to sign
substitutes.
+@item @code{generate-substitute-key?} (default: @code{#t})
+Whether to generate a @dfn{substitute key pair} under
+@file{/etc/guix/signing-key.pub} and @file{/etc/guix/signing-key.sec} if
+there is not already one.
+
+This key pair is used when exporting store items, for instance with
+@command{guix publish} (@pxref{Invoking guix publish}) or @command{guix
+archive} (@pxref{Invoking guix archive}). Generating a key pair takes a
+few seconds when enough entropy is available and is only done once; you
+might want to turn it off for instance in a virtual machine that does
+not need it and where the extra boot time is a problem.
+
@item @code{max-silent-time} (default: @code{0})
@itemx @code{timeout} (default: @code{0})
The number of seconds of silence and the number of seconds of activity,
@@ -18716,7 +18866,7 @@ This is the configuration record for OpenSSH's @command{sshd}.
@table @asis
@item @code{openssh} (default @var{openssh})
-The Openssh package to use.
+The OpenSSH package to use.
@item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
Name of the file where @command{sshd} writes its PID.
@@ -18837,6 +18987,16 @@ Additional authorized keys can be specified @i{via}
Note that this does @emph{not} interfere with the use of
@file{~/.ssh/authorized_keys}.
+@item @code{generate-host-keys?} (default: @code{#t})
+Whether to generate host key pairs with @command{ssh-keygen -A} under
+@file{/etc/ssh} if there are none.
+
+Generating key pairs takes a few seconds when enough entropy is
+available and is only done once. You might want to turn it off for
+instance in a virtual machine that does not need it because host keys
+are provided in some other way, and where the extra boot time is a
+problem.
+
@item @code{log-level} (default: @code{'info})
This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
@code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
@@ -21249,6 +21409,448 @@ bluetooth keyboard or mouse.
Users need to be in the @code{lp} group to access the D-Bus service.
@end deffn
+@deffn {Scheme Variable} bluetooth-service-type
+This is the type for the @uref{https://bluez.org/, Linux Bluetooth Protocol
+Stack} (BlueZ) system, which generates the @file{/etc/bluetooth/main.conf}
+configuration file. The value for this type is a @command{bluetooth-configuration}
+record as in this example:
+
+@lisp
+(service bluetooth-service-type)
+@end lisp
+
+See below for details about @code{bluetooth-configuration}.
+@end deffn
+
+@deftp {Data Type} bluetooth-configuration
+Data type representing the configuration for @code{bluetooth-service}.
+
+@table @asis
+@item @code{bluez} (default: @code{bluez})
+@code{bluez} package to use.
+
+@item @code{name} (default: @code{"BlueZ"})
+Default adapter name.
+
+@item @code{class} (default: @code{#x000000})
+Default device class. Only the major and minor device class bits are considered.
+
+@item @code{discoverable-timeout} (default: @code{180})
+How long to stay in discoverable mode before going back to non-discoverable. The
+value is in seconds.
+
+@item @code{always-pairable?} (default: @code{#f})
+Always allow pairing even if there are no agents registered.
+
+@item @code{pairable-timeout} (default: @code{0})
+How long to stay in pairable mode before going back to non-discoverable. The
+value is in seconds.
+
+@item @code{device-id} (default: @code{#f})
+Use vendor id source (assigner), vendor, product and version information for
+DID profile support. The values are separated by ":" and @var{assigner}, @var{VID},
+@var{PID} and @var{version}.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{#f} to disable it,
+
+@item
+@code{"assigner:1234:5678:abcd"}, where @var{assigner} is either @code{usb} (default)
+or @code{bluetooth}.
+
+@end itemize
+
+@item @code{reverse-service-discovery?} (default: @code{#t})
+Do reverse service discovery for previously unknown devices that connect to
+us. For BR/EDR this option is really only needed for qualification since the
+BITE tester doesn't like us doing reverse SDP for some test cases, for LE
+this disables the GATT client functionally so it can be used in system which
+can only operate as peripheral.
+
+@item @code{name-resolving?} (default: @code{#t})
+Enable name resolving after inquiry. Set it to @code{#f} if you don't need
+remote devices name and want shorter discovery cycle.
+
+@item @code{debug-keys?} (default: @code{#f})
+Enable runtime persistency of debug link keys. Default is false which makes
+debug link keys valid only for the duration of the connection that they were
+created for.
+
+@item @code{controller-mode} (default: @code{'dual})
+Restricts all controllers to the specified transport. @code{'dual} means both
+BR/EDR and LE are enabled (if supported by the hardware).
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{'dual}
+
+@item
+@code{'bredr}
+
+@item
+@code{'le}
+
+@end itemize
+
+@item @code{multi-profile} (default: @code{'off})
+Enables Multi Profile Specification support. This allows to specify if system
+supports only Multiple Profiles Single Device (MPSD) configuration or both
+Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple Devices
+(MPMD) configurations.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{'off}
+
+@item
+@code{'single}
+
+@item
+@code{'multiple}
+
+@end itemize
+
+@item @code{fast-connectable?} (default: @code{#f})
+Permanently enables the Fast Connectable setting for adapters that support
+it. When enabled other devices can connect faster to us, however the
+tradeoff is increased power consumptions. This feature will fully work only
+on kernel version 4.1 and newer.
+
+@item @code{privacy} (default: @code{'off})
+Default privacy settings.
+
+@itemize @bullet
+@item
+@code{'off}: Disable local privacy
+
+@item
+@code{'network/on}: A device will only accept advertising packets from peer
+devices that contain private addresses. It may not be compatible with some
+legacy devices since it requires the use of RPA(s) all the time
+
+@item
+@code{'device}: A device in device privacy mode is only concerned about the
+privacy of the device and will accept advertising packets from peer devices
+that contain their Identity Address as well as ones that contain a private
+address, even if the peer device has distributed its IRK in the past
+
+@end itemize
+
+and additionally, if @var{controller-mode} is set to @code{'dual}:
+
+@itemize @bullet
+@item
+@code{'limited-network}: Apply Limited Discoverable Mode to advertising, which
+follows the same policy as to BR/EDR that publishes the identity address when
+discoverable, and Network Privacy Mode for scanning
+
+@item
+@code{'limited-device}: Apply Limited Discoverable Mode to advertising, which
+follows the same policy as to BR/EDR that publishes the identity address when
+discoverable, and Device Privacy Mode for scanning.
+
+@end itemize
+
+@item @code{just-works-repairing} (default: @code{'never})
+Specify the policy to the JUST-WORKS repairing initiated by peer.
+
+Possible values:
+@itemize @bullet
+@item
+@code{'never}
+
+@item
+@code{'confirm}
+
+@item
+@code{'always}
+
+@end itemize
+
+@item @code{temporary-timeout} (default: @code{30})
+How long to keep temporary devices around. The value is in seconds. @code{0}
+disables the timer completely.
+
+@item @code{refresh-discovery?} (default: @code{#t})
+Enables the device to issue an SDP request to update known services when
+profile is connected.
+
+@item @code{experimental} (default: @code{#f})
+Enables experimental features and interfaces, alternatively a list of UUIDs
+can be given.
+
+Possible values:
+
+@itemize @bullet
+@item
+@code{#t}
+
+@item
+@code{#f}
+
+@item
+@code{(list (uuid <uuid-1>) (uuid <uuid-2>) ...)}.
+@end itemize
+
+List of possible UUIDs:
+@itemize @bullet
+@item
+@code{d4992530-b9ec-469f-ab01-6c481c47da1c}: BlueZ Experimental Debug,
+
+@item
+@code{671b10b5-42c0-4696-9227-eb28d1b049d6}: BlueZ Experimental Simultaneous Central and Peripheral,
+
+@item
+@code{"15c0a148-c273-11ea-b3de-0242ac130004}: BlueZ Experimental LL privacy,
+
+@item
+@code{330859bc-7506-492d-9370-9a6f0614037f}: BlueZ Experimental Bluetooth Quality Report,
+
+@item
+@code{a6695ace-ee7f-4fb9-881a-5fac66c629af}: BlueZ Experimental Offload Codecs.
+@end itemize
+
+@item @code{remote-name-request-retry-delay} (default: @code{300})
+The duration to avoid retrying to resolve a peer's name, if the previous
+try failed.
+
+@item @code{page-scan-type} (default: @code{#f})
+BR/EDR Page scan activity type.
+
+@item @code{page-scan-interval} (default: @code{#f})
+BR/EDR Page scan activity interval.
+
+@item @code{page-scan-window} (default: @code{#f})
+BR/EDR Page scan activity window.
+
+@item @code{inquiry-scan-type} (default: @code{#f})
+BR/EDR Inquiry scan activity type.
+
+@item @code{inquiry-scan-interval} (default: @code{#f})
+BR/EDR Inquiry scan activity interval.
+
+@item @code{inquiry-scan-window} (default: @code{#f})
+BR/EDR Inquiry scan activity window.
+
+@item @code{link-supervision-timeout} (default: @code{#f})
+BR/EDR Link supervision timeout.
+
+@item @code{page-timeout} (default: @code{#f})
+BR/EDR Page timeout.
+
+@item @code{min-sniff-interval} (default: @code{#f})
+BR/EDR minimum sniff interval.
+
+@item @code{max-sniff-interval} (default: @code{#f})
+BR/EDR maximum sniff interval.
+
+@item @code{min-advertisement-interval} (default: @code{#f})
+LE minimum advertisement interval (used for legacy advertisement only).
+
+@item @code{max-advertisement-interval} (default: @code{#f})
+LE maximum advertisement interval (used for legacy advertisement only).
+
+@item @code{multi-advertisement-rotation-interval} (default: @code{#f})
+LE multiple advertisement rotation interval.
+
+@item @code{scan-interval-auto-connect} (default: @code{#f})
+LE scanning interval used for passive scanning supporting auto connect.
+
+@item @code{scan-window-auto-connect} (default: @code{#f})
+LE scanning window used for passive scanning supporting auto connect.
+
+@item @code{scan-interval-suspend} (default: @code{#f})
+LE scanning interval used for active scanning supporting wake from suspend.
+
+@item @code{scan-window-suspend} (default: @code{#f})
+LE scanning window used for active scanning supporting wake from suspend.
+
+@item @code{scan-interval-discovery} (default: @code{#f})
+LE scanning interval used for active scanning supporting discovery.
+
+@item @code{scan-window-discovery} (default: @code{#f})
+LE scanning window used for active scanning supporting discovery.
+
+@item @code{scan-interval-adv-monitor} (default: @code{#f})
+LE scanning interval used for passive scanning supporting the advertisement monitor APIs.
+
+@item @code{scan-window-adv-monitor} (default: @code{#f})
+LE scanning window used for passive scanning supporting the advertisement monitor APIs.
+
+@item @code{scan-interval-connect} (default: @code{#f})
+LE scanning interval used for connection establishment.
+
+@item @code{scan-window-connect} (default: @code{#f})
+LE scanning window used for connection establishment.
+
+@item @code{min-connection-interval} (default: @code{#f})
+LE default minimum connection interval. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{max-connection-interval} (default: @code{#f})
+LE default maximum connection interval. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{connection-latency} (default: @code{#f})
+LE default connection latency. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{connection-supervision-timeout} (default: @code{#f})
+LE default connection supervision timeout. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{autoconnect-timeout} (default: @code{#f})
+LE default autoconnect timeout. This value is superceeded by any specific
+value provided via the Load Connection Parameters interface.
+
+@item @code{adv-mon-allowlist-scan-duration} (default: @code{300})
+Allowlist scan duration during interleaving scan. Only used when scanning for ADV
+monitors. The units are msec.
+
+@item @code{adv-mon-no-filter-scan-duration} (default: @code{500})
+No filter scan duration during interleaving scan. Only used when scanning for ADV
+monitors. The units are msec.
+
+@item @code{enable-adv-mon-interleave-scan?} (default: @code{#t})
+Enable/Disable Advertisement Monitor interleave scan for power saving.
+
+@item @code{cache} (default: @code{'always})
+GATT attribute cache.
+
+Possible values are:
+@itemize @bullet
+@item
+@code{'always}: Always cache attributes even for devices not paired, this is
+recommended as it is best for interoperability, with more consistent
+reconnection times and enables proper tracking of notifications for all
+devices
+
+@item
+@code{'yes}: Only cache attributes of paired devices
+
+@item
+@code{'no}: Never cache attributes.
+@end itemize
+
+@item @code{key-size} (default: @code{0})
+Minimum required Encryption Key Size for accessing secured characteristics.
+
+Possible values are:
+@itemize @bullet
+@item
+@code{0}: Don't care
+
+@item
+@code{7 <= N <= 16}
+@end itemize
+
+@item @code{exchange-mtu} (default: @code{517})
+Exchange MTU size. Possible values are:
+
+@itemize @bullet
+@item
+@code{23 <= N <= 517}
+@end itemize
+
+@item @code{att-channels} (default: @code{3})
+Number of ATT channels. Possible values are:
+
+@itemize @bullet
+@item
+@code{1}: Disables EATT
+
+@item
+@code{2 <= N <= 5}
+@end itemize
+
+@item @code{session-mode} (default: @code{'basic})
+AVDTP L2CAP signalling channel mode.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{'basic}: Use L2CAP basic mode
+
+@item
+@code{'ertm}: Use L2CAP enhanced retransmission mode.
+@end itemize
+
+@item @code{stream-mode} (default: @code{'basic})
+AVDTP L2CAP transport channel mode.
+
+Possible values are:
+
+@itemize @bullet
+@item
+@code{'basic}: Use L2CAP basic mode
+
+@item
+@code{'streaming}: Use L2CAP streaming mode.
+@end itemize
+
+@item @code{reconnect-uuids} (default: @code{'()})
+The ReconnectUUIDs defines the set of remote services that should try
+to be reconnected to in case of a link loss (link supervision
+timeout). The policy plugin should contain a sane set of values by
+default, but this list can be overridden here. By setting the list to
+empty the reconnection feature gets disabled.
+
+Possible values:
+
+@itemize @bullet
+@item
+@code{'()}
+
+@item
+@code{(list (uuid <uuid-1>) (uuid <uuid-2>) ...)}.
+@end itemize
+
+@item @code{reconnect-attempts} (default: @code{7})
+Defines the number of attempts to reconnect after a link lost. Setting
+the value to 0 disables reconnecting feature.
+
+@item @code{reconnect-intervals} (default: @code{'(1 2 4 8 16 32 64)})
+Defines a list of intervals in seconds to use in between attempts. If
+the number of attempts defined in @var{reconnect-attempts} is bigger than
+the list of intervals the last interval is repeated until the last attempt.
+
+@item @code{auto-enable?} (default: @code{#f})
+Defines option to enable all controllers when they are found. This includes
+adapters present on start as well as adapters that are plugged in later on.
+
+@item @code{resume-delay} (default: @code{2})
+Audio devices that were disconnected due to suspend will be reconnected on
+resume. @var{resume-delay} determines the delay between when the controller
+resumes from suspend and a connection attempt is made. A longer delay is
+better for better co-existence with Wi-Fi. The value is in seconds.
+
+@item @code{rssi-sampling-period} (default: @code{#xFF})
+Default RSSI Sampling Period. This is used when a client registers an
+advertisement monitor and leaves the RSSISamplingPeriod unset.
+
+Possible values are:
+@itemize @bullet
+@item
+@code{#x0}: Report all advertisements
+
+@item
+@code{N = #xXX}: Report advertisements every N x 100 msec (range: #x01 to #xFE)
+
+@item
+@code{#xFF}: Report only one advertisement per device during monitoring period.
+@end itemize
+
+@end table
+@end deftp
+
@defvr {Scheme Variable} gnome-keyring-service-type
This is the type of the service that adds the
@uref{https://wiki.gnome.org/Projects/GnomeKeyring, GNOME Keyring}. Its
@@ -21283,7 +21885,6 @@ and ``passwd'' is with the value @code{passwd}.
@end table
@end deftp
-
@node Sound Services
@subsection Sound Services
@@ -21391,7 +21992,7 @@ Data type representing the configuration for @code{pulseaudio-service}.
@table @asis
@item @code{client-conf} (default: @code{'()})
List of settings to set in @file{client.conf}.
-Accepts a list of strings or a symbol-value pairs. A string will be
+Accepts a list of strings or symbol-value pairs. A string will be
inserted as-is with a newline added. A pair will be formatted as
``key = value'', again with a newline added.
@@ -21400,11 +22001,44 @@ List of settings to set in @file{daemon.conf}, formatted just like
@var{client-conf}.
@item @code{script-file} (default: @code{(file-append pulseaudio "/etc/pulse/default.pa")})
-Script file to use as @file{default.pa}.
+Script file to use as @file{default.pa}. In case the
+@code{extra-script-files} field below is used, an @code{.include}
+directive pointing to @file{/etc/pulse/default.pa.d} is appended to the
+provided script.
+
+@item @code{extra-script-files} (default: @code{'())})
+A list of file-like objects defining extra PulseAudio scripts to run at
+the initialization of the @command{pulseaudio} daemon, after the main
+@code{script-file}. The scripts are deployed to the
+@file{/etc/pulse/default.pa.d} directory; they should have the
+@samp{.pa} file name extension. For a reference of the available
+commands, refer to @command{man pulse-cli-syntax}.
@item @code{system-script-file} (default: @code{(file-append pulseaudio "/etc/pulse/system.pa")})
Script file to use as @file{system.pa}.
@end table
+
+The example below sets the default PulseAudio card profile, the default
+sink and the default source to use for a old SoundBlaster Audigy sound
+card:
+@lisp
+(pulseaudio-configuration
+ (extra-script-files
+ (list (plain-file "audigy.pa"
+ (string-append "\
+set-card-profile alsa_card.pci-0000_01_01.0 \
+ output:analog-surround-40+input:analog-mono
+set-default-source alsa_input.pci-0000_01_01.0.analog-mono
+set-default-sink alsa_output.pci-0000_01_01.0.analog-surround-40\n")))))
+@end lisp
+
+Note that @code{pulseaudio-service-type} is part of
+@code{%desktop-services}; if your operating system declaration was
+derived from one of the desktop templates, you'll want to adjust the
+above example to modify the existing @code{pulseaudio-service-type} via
+@code{modify-services} (@pxref{Service Reference,
+@code{modify-services}}), instead of defining a new one.
+
@end deftp
@deffn {Scheme Variable} ladspa-service-type
@@ -23197,7 +23831,7 @@ Data type representing the configuration of opensmtpd.
@item @code{package} (default: @var{opensmtpd})
Package object of the OpenSMTPD SMTP server.
-@item @code{config-file} (default: @code{%default-opensmtpd-file})
+@item @code{config-file} (default: @code{%default-opensmtpd-config-file})
File-like object of the OpenSMTPD configuration file to use. By default
it listens on the loopback network interface, and allows for mail from
users and daemons on the local machine, as well as permitting email to
@@ -25504,9 +26138,10 @@ Specify the path of the base URL@. This can be useful if
@end table
@end deftp
+@anchor{prometheus-node-exporter}
@subsubheading Prometheus Node Exporter Service
-
@cindex prometheus-node-exporter
+
The Prometheus ``node exporter'' makes hardware and operating system statistics
provided by the Linux kernel available for the Prometheus monitoring system.
This service should be deployed on all physical nodes and virtual machines,
@@ -25545,320 +26180,229 @@ Extra options to pass to the Prometheus node exporter.
@subsubheading Zabbix server
@cindex zabbix zabbix-server
-Zabbix provides monitoring metrics, among others network utilization, CPU load
-and disk space consumption:
-
-@itemize
-@item High performance, high capacity (able to monitor hundreds of thousands of devices).
-@item Auto-discovery of servers and network devices and interfaces.
-@item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others.
-@item Distributed monitoring with centralized web administration.
-@item Native high performance agents.
-@item SLA, and ITIL KPI metrics on reporting.
-@item High-level (business) view of monitored resources through user-defined visual console screens and dashboards.
-@item Remote command execution through Zabbix proxies.
-@end itemize
+Zabbix is a high performance monitoring system that can collect data from a
+variety of sources and provide the results in a web-based interface. Alerting
+and reporting is built-in, as well as @dfn{templates} for common operating
+system metrics such as network utilization, CPU load, and disk space consumption.
+
+This service provides the central Zabbix monitoring service; you also need
+@ref{zabbix-front-end,@code{zabbix-front-end-service-type}} to configure Zabbix
+and display results, and optionally @ref{zabbix-agent,
+@code{zabbix-agent-service-type}} on machines that should be monitored (other
+data sources are supported, such as @ref{prometheus-node-exporter,
+Prometheus Node Exporter}).
+
+@defvar {Scheme variable} zabbix-server-service-type
+This is the service type for the Zabbix server service. Its value must be a
+@code{zabbix-server-configuration} record, shown below.
+@end defvar
@c %start of fragment
+@deftp {Data Type} zabbix-server-configuration
Available @code{zabbix-server-configuration} fields are:
-@deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server
+@table @asis
+@item @code{zabbix-server} (default: @code{zabbix-server}) (type: file-like)
The zabbix-server package.
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string user
+@item @code{user} (default: @code{"zabbix"}) (type: string)
User who will run the Zabbix server.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} group group
+@item @code{group} (default: @code{"zabbix"}) (type: group)
Group who will run the Zabbix server.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string db-host
+@item @code{db-host} (default: @code{"127.0.0.1"}) (type: string)
Database host name.
-Defaults to @samp{"127.0.0.1"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string db-name
+@item @code{db-name} (default: @code{"zabbix"}) (type: string)
Database name.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string db-user
+@item @code{db-user} (default: @code{"zabbix"}) (type: string)
Database user.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string db-password
+@item @code{db-password} (default: @code{""}) (type: string)
Database password. Please, use @code{include-files} with
@code{DBPassword=SECRET} inside a specified file instead.
-Defaults to @samp{""}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} number db-port
+@item @code{db-port} (default: @code{5432}) (type: number)
Database port.
-Defaults to @samp{5432}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string log-type
+@item @code{log-type} (default: @code{""}) (type: string)
Specifies where log messages are written to:
@itemize @bullet
-@item
-@code{system} - syslog.
-@item
-@code{file} - file specified with @code{log-file} parameter.
+@item @code{system} - syslog.
-@item
-@code{console} - standard output.
+@item @code{file} - file specified with @code{log-file} parameter.
-@end itemize
-
-Defaults to @samp{""}.
+@item @code{console} - standard output.
-@end deftypevr
+@end itemize
-@deftypevr {@code{zabbix-server-configuration} parameter} string log-file
+@item @code{log-file} (default: @code{"/var/log/zabbix/server.log"}) (type: string)
Log file name for @code{log-type} @code{file} parameter.
-Defaults to @samp{"/var/log/zabbix/server.log"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string pid-file
+@item @code{pid-file} (default: @code{"/var/run/zabbix/zabbix_server.pid"}) (type: string)
Name of PID file.
-Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location
+@item @code{ssl-ca-location} (default: @code{"/etc/ssl/certs/ca-certificates.crt"}) (type: string)
The location of certificate authority (CA) files for SSL server
certificate verification.
-Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location
+@item @code{ssl-cert-location} (default: @code{"/etc/ssl/certs"}) (type: string)
Location of SSL client certificates.
-Defaults to @samp{"/etc/ssl/certs"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} string extra-options
+@item @code{extra-options} (default: @code{""}) (type: extra-options)
Extra options will be appended to Zabbix server configuration file.
-Defaults to @samp{""}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files
+@item @code{include-files} (default: @code{()}) (type: include-files)
You may include individual files or all files in a directory in the
configuration file.
-Defaults to @samp{()}.
+@end table
+
+@end deftp
-@end deftypevr
@c %end of fragment
+@anchor{zabbix-agent}
@subsubheading Zabbix agent
@cindex zabbix zabbix-agent
-Zabbix agent gathers information for Zabbix server.
+The Zabbix agent gathers information about the running system for the Zabbix
+monitoring server. It has a variety of built-in checks, and can be extended
+with custom
+@uref{https://www.zabbix.com/documentation/current/en/manual/config/items/userparameters,
+@dfn{user parameters}}.
+
+@defvar {Scheme variable} zabbix-agent-service-type
+This is the service type for the Zabbix agent service. Its value must be a
+@code{zabbix-agent-configuration} record, shown below.
+@end defvar
@c %start of fragment
+@deftp {Data Type} zabbix-agent-configuration
Available @code{zabbix-agent-configuration} fields are:
-@deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent
+@table @asis
+@item @code{zabbix-agent} (default: @code{zabbix-agentd}) (type: file-like)
The zabbix-agent package.
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} string user
+@item @code{user} (default: @code{"zabbix"}) (type: string)
User who will run the Zabbix agent.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} group group
+@item @code{group} (default: @code{"zabbix"}) (type: group)
Group who will run the Zabbix agent.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} string hostname
+@item @code{hostname} (default: @code{""}) (type: string)
Unique, case sensitive hostname which is required for active checks and
must match hostname as configured on the server.
-Defaults to @samp{""}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} string log-type
+@item @code{log-type} (default: @code{""}) (type: string)
Specifies where log messages are written to:
@itemize @bullet
@item
@code{system} - syslog.
-@item
-@code{file} - file specified with @code{log-file} parameter.
+@item @code{file} - file specified with
+@code{log-file} parameter.
-@item
-@code{console} - standard output.
+@item @code{console} - standard output.
@end itemize
-Defaults to @samp{""}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} string log-file
+@item @code{log-file} (default: @code{"/var/log/zabbix/agent.log"}) (type: string)
Log file name for @code{log-type} @code{file} parameter.
-Defaults to @samp{"/var/log/zabbix/agent.log"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file
+@item @code{pid-file} (default: @code{"/var/run/zabbix/zabbix_agent.pid"}) (type: string)
Name of PID file.
-Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} list server
+@item @code{server} (default: @code{("127.0.0.1")}) (type: list)
List of IP addresses, optionally in CIDR notation, or hostnames of
Zabbix servers and Zabbix proxies. Incoming connections will be
accepted only from the hosts listed here.
-Defaults to @samp{("127.0.0.1")}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} list server-active
+@item @code{server-active} (default: @code{("127.0.0.1")}) (type: list)
List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix
proxies for active checks. If port is not specified, default port is
used. If this parameter is not specified, active checks are disabled.
-Defaults to @samp{("127.0.0.1")}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options
+@item @code{extra-options} (default: @code{""}) (type: extra-options)
Extra options will be appended to Zabbix server configuration file.
-Defaults to @samp{""}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files
+@item @code{include-files} (default: @code{()}) (type: include-files)
You may include individual files or all files in a directory in the
configuration file.
-Defaults to @samp{()}.
+@end table
+
+@end deftp
-@end deftypevr
@c %end of fragment
+@anchor{zabbix-front-end}
@subsubheading Zabbix front-end
@cindex zabbix zabbix-front-end
-This service provides a WEB interface to Zabbix server.
+The Zabbix front-end provides a web interface to Zabbix. It does not need
+to run on the same machine as the Zabbix server. This service works by
+extending the @ref{PHP-FPM} and @ref{NGINX} services with the configuration
+necessary for loading the Zabbix user interface.
+
+@defvar {Scheme variable} zabbix-front-end-service-type
+This is the service type for the Zabbix web frontend. Its value must be a
+@code{zabbix-front-end-configuration} record, shown below.
+@end defvar
@c %start of fragment
+@deftp {Data Type} zabbix-front-end-configuration
Available @code{zabbix-front-end-configuration} fields are:
-@deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx
-NGINX configuration.
+@table @asis
+@item @code{zabbix-server} (default: @code{zabbix-server}) (type: file-like)
+The Zabbix server package to use.
-@end deftypevr
+@item @code{nginx} (default: @code{()}) (type: list)
+List of @ref{nginx-server-configuration,@code{nginx-server-configuration}}
+blocks for the Zabbix front-end. When empty, a default that listens on
+port 80 is used.
-@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host
+@item @code{db-host} (default: @code{"localhost"}) (type: string)
Database host name.
-Defaults to @samp{"localhost"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port
+@item @code{db-port} (default: @code{5432}) (type: number)
Database port.
-Defaults to @samp{5432}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name
+@item @code{db-name} (default: @code{"zabbix"}) (type: string)
Database name.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user
+@item @code{db-user} (default: @code{"zabbix"}) (type: string)
Database user.
-Defaults to @samp{"zabbix"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password
+@item @code{db-password} (default: @code{""}) (type: string)
Database password. Please, use @code{db-secret-file} instead.
-Defaults to @samp{""}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file
-Secret file containing the credentials for the Zabbix front-end. The value
-must be a local file name, not a G-expression. You are expected to create
-this file manually. Its contents will be copied into @file{zabbix.conf.php}
-as the value of @code{$DB['PASSWORD']}.
-
-Defaults to @samp{""}.
-
-@end deftypevr
+@item @code{db-secret-file} (default: @code{""}) (type: string)
+Secret file which will be appended to @file{zabbix.conf.php} file. This
+file contains credentials for use by Zabbix front-end. You are expected
+to create it manually.
-@deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host
+@item @code{zabbix-host} (default: @code{"localhost"}) (type: string)
Zabbix server hostname.
-Defaults to @samp{"localhost"}.
-
-@end deftypevr
-
-@deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port
+@item @code{zabbix-port} (default: @code{10051}) (type: number)
Zabbix server port.
-Defaults to @samp{10051}.
+@end table
-@end deftypevr
+@end deftp
@c %end of fragment
@@ -26832,6 +27376,7 @@ valued G-expression.
@end table
@end deffn
+@anchor{nginx-server-configuration}
@deftp {Data Type} nginx-server-configuration
Data type representing the configuration of an nginx server block.
This type has the following parameters:
@@ -27282,6 +27827,8 @@ capability also has to be configured on the front-end as well.
@end table
@end deftp
+@anchor{PHP-FPM}
+@subsubheading PHP-FPM
@cindex php-fpm
PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
with some additional features useful for sites of any size.
@@ -29920,6 +30467,34 @@ Defaults to @samp{"powersave"}.
@end deftypevr
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer start-charge-thresh-bat0
+Percentage when battery 0 should begin charging. Only supported on some laptops.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer stop-charge-thresh-bat0
+Percentage when battery 0 should stop charging. Only supported on some laptops.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer start-charge-thresh-bat1
+Percentage when battery 1 should begin charging. Only supported on some laptops.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer stop-charge-thresh-bat1
+Percentage when battery 1 should stop charging. Only supported on some laptops.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
Radeon graphics clock speed level. Alternatives are low, mid, high,
auto, default.
@@ -30121,6 +30696,10 @@ of processors and preventing overheating.
Data type representing the configuration of @code{thermald-service-type}.
@table @asis
+@item @code{adaptive?} (default: @code{#f})
+Use @acronym{DPTF, Dynamic Power and Thermal Framework} adaptive tables
+when present.
+
@item @code{ignore-cpuid-check?} (default: @code{#f})
Ignore cpuid check for supported CPU models.
@@ -30840,6 +31419,10 @@ Its value must be a @code{virtlog-configuration}.
@end lisp
@end deffn
+@deftypevar {@code{libvirt} parameter} package libvirt
+Libvirt package.
+@end deftypevar
+
@deftypevr {@code{virtlog-configuration} parameter} integer log-level
Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
@@ -33646,6 +34229,92 @@ Extra command line options for @code{guix-data-service-process-jobs}.
@end table
@end deftp
+@subsubheading Nar Herder
+The @uref{https://git.cbaines.net/guix/nar-herder/about/,Nar Herder} is
+a utility for managing a collection of nars.
+
+@defvar {Scheme Variable} nar-herder-type
+Service type for the Guix Data Service. Its value must be a
+@code{nar-herder-configuration} object. The service optionally
+extends the getmail service, as the guix-commits mailing list is used to
+find out about changes in the Guix git repository.
+@end defvar
+
+@deftp {Data Type} nar-herder-configuration
+Data type representing the configuration of the Guix Data Service.
+
+@table @asis
+@item @code{package} (default: @code{nar-herder})
+The Nar Herder package to use.
+
+@item @code{user} (default: @code{"nar-herder"})
+The system user to run the service as.
+
+@item @code{group} (default: @code{"nar-herder"})
+The system group to run the service as.
+
+@item @code{port} (default: @code{8734})
+The port to bind the server to.
+
+@item @code{host} (default: @code{"127.0.0.1"})
+The host to bind the server to.
+
+@item @code{mirror} (default: @code{#f})
+Optional URL of the other Nar Herder instance which should be mirrored.
+This means that this Nar Herder instance will download it's database,
+and keep it up to date.
+
+@item @code{database} (default: @code{"/var/lib/nar-herder/nar_herder.db"})
+Location for the database. If this Nar Herder instance is mirroring
+another, the database will be downloaded if it doesn't exist. If this
+Nar Herder instance isn't mirroring another, an empty database will be
+created.
+
+@item @code{database-dump} (default: @code{"/var/lib/nar-herder/nar_herder_dump.db"})
+Location of the database dump. This is created and regularly updated by
+taking a copy of the database. This is the version of the database that
+is available to download.
+
+@item @code{storage} (default: @code{#f})
+Optional location in which to store nars.
+
+@item @code{storage-limit} (default: @code{"none"})
+Limit in bytes for the nars stored in the storage location. This can
+also be set to ``none'' so that there is no limit.
+
+When the storage location exceeds this size, nars are removed according
+to the nar removal criteria.
+
+@item @code{storage-nar-removal-criteria} (default: @code{'()})
+Criteria used to remove nars from the storage location. These are used
+in conjunction with the storage limit.
+
+When the storage location exceeds the storage limit size, nars will be
+checked against the nar removal criteria and if any of the criteria
+match, they will be removed. This will continue until the storage
+location is below the storage limit size.
+
+Each criteria is specified by a string, then an equals sign, then
+another string. Currently, only one criteria is supported, checking if a
+nar is stored on another Nar Herder instance.
+
+@item @code{ttl} (default: @code{#f})
+Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
+(TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
+days, @code{1m} means 1 month, and so on.
+
+This allows the user's Guix to keep substitute information in cache for
+@var{ttl}.
+
+@item @code{negative-ttl} (default: @code{#f})
+Similarly produce @code{Cache-Control} HTTP headers to advertise the
+time-to-live (TTL) of @emph{negative} lookups---missing store items, for
+which the HTTP 404 code is returned. By default, no negative TTL is
+advertised.
+
+@end table
+@end deftp
+
@node Linux Services
@subsection Linux Services
@@ -34454,8 +35123,8 @@ previous example to your operating system declaration by appending it to
;; Some fields omitted...
(setuid-programs
(append (list (setuid-program
- (program (file-append nfs-utils "/sbin/mount.nfs")))
- %setuid-programs))))
+ (program (file-append nfs-utils "/sbin/mount.nfs"))))
+ %setuid-programs)))
@end lisp
@deftp {Data Type} setuid-program
@@ -34767,7 +35436,7 @@ honors several options passed on the Linux kernel command line
@code{-append} option of QEMU), notably:
@table @code
-@item --load=@var{boot}
+@item gnu.load=@var{boot}
Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
program, once it has mounted the root file system.
@@ -34775,12 +35444,22 @@ Guix uses this option to yield control to a boot program that runs the
service activation programs and then spawns the GNU@tie{}Shepherd, the
initialization system.
-@item --root=@var{root}
+@item root=@var{root}
Mount @var{root} as the root file system. @var{root} can be a device
name like @code{/dev/sda1}, a file system label, or a file system UUID.
When unspecified, the device name from the root file system of the
operating system declaration is used.
+@item rootfstype=@var{type}
+Set the type of the root file system. It overrides the @code{type}
+field of the root file system specified via the @code{operating-system}
+declaration, if any.
+
+@item rootflags=@var{options}
+Set the mount @emph{options} of the root file system. It overrides the
+@code{options} field of the root file system specified via the
+@code{operating-system} declaration, if any.
+
@item fsck.mode=@var{mode}
Whether to check the @var{root} file system for errors before mounting
it. @var{mode} is one of @code{skip} (never check), @code{force} (always
@@ -34800,7 +35479,7 @@ or @code{preen} to repair problems considered safe to repair automatically.
@code{preen} is the default if this option is not present or if @var{level}
is not one of the above.
-@item --system=@var{system}
+@item gnu.system=@var{system}
Have @file{/run/booted-system} and @file{/run/current-system} point to
@var{system}.
@@ -34812,7 +35491,7 @@ Instruct the initial RAM disk as well as the @command{modprobe} command
must be a comma-separated list of module names---e.g.,
@code{usbkbd,9pnet}.
-@item --repl
+@item gnu.repl
Start a read-eval-print loop (REPL) from the initial RAM disk before it
tries to load kernel modules and to mount the root file system. Our
marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
@@ -34833,7 +35512,7 @@ here is how to use it and customize it further.
[#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
Return a derivation that builds a raw initrd. @var{file-systems} is
a list of file systems to be mounted by the initrd, possibly in addition to
-the root file system specified on the kernel command line via @option{--root}.
+the root file system specified on the kernel command line via @option{root}.
@var{linux-modules} is a list of kernel modules to be loaded at boot time.
@var{mapped-devices} is a list of device mappings to realize before
@var{file-systems} are mounted (@pxref{Mapped Devices}).
@@ -34863,7 +35542,7 @@ to it are lost.
Return as a file-like object a generic initrd, with kernel
modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
mounted by the initrd, possibly in addition to the root file system specified
-on the kernel command line via @option{--root}. @var{mapped-devices} is a list of device
+on the kernel command line via @option{root}. @var{mapped-devices} is a list of device
mappings to realize before @var{file-systems} are mounted.
When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
@@ -35733,9 +36412,21 @@ bootloader boot menu:
@table @code
@item describe
-Describe the current system generation: its file name, the kernel and
+Describe the running system generation: its file name, the kernel and
bootloader used, etc., as well as provenance information when available.
+@quotation Note
+The @emph{running} system generation---referred to by
+@file{/run/current-system}---is not necessarily the @emph{current}
+system generation---referred to by @file{/var/guix/profiles/system}: it
+differs when, for instance, you chose from the bootloader menu to boot
+an older generation.
+
+It can also differ from the @emph{booted} system generation---referred
+to by @file{/run/booted-system}---for instance because you reconfigured
+the system in the meantime.
+@end quotation
+
@item list-generations
List a summary of each generation of the operating system available on
disk, in a human-readable way. This is similar to the
@@ -35911,6 +36602,30 @@ be accomplished with the following operating system configuration snippet:
For more information regarding the format of the @file{sudoers} file,
consult @command{man sudoers}.
+Once you've deployed a system on a set of machines, you may find it
+useful to run a command on all of them. The @option{--execute} or
+@option{-x} option lets you do that; the example below runs
+@command{uname -a} on all the machines listed in the deployment file:
+
+@example
+guix deploy @var{file} -x -- uname -a
+@end example
+
+One thing you may often need to do after deployment is restart specific
+services on all the machines, which you can do like so:
+
+@example
+guix deploy @var{file} -x -- herd restart @var{service}
+@end example
+
+The @command{guix deploy -x} command returns zero if and only if the
+command succeeded on all the machines.
+
+@c FIXME/TODO: Separate the API doc from the CLI doc.
+
+Below are the data types you need to know about when writing a
+deployment file.
+
@deftp {Data Type} machine
This is the data type representing a single machine in a heterogeneous Guix
deployment.
@@ -37369,6 +38084,21 @@ be confused with Shepherd services (@pxref{Shepherd Services}). Using this exte
mechanism and some Scheme code that glues things together gives the user
the freedom to declare their own, very custom, home environments.
+@cindex container, for @command{guix home}
+Once the configuration looks good, you can first test it in a throw-away
+``container'':
+
+@example
+guix home container config.scm
+@end example
+
+The command above spawns a shell where your home environment is running.
+The shell runs in a container, meaning it's isolated from the rest of
+the system, so it's a good way to try out your configuration---you can
+see if configuration bits are missing or misbehaving, if daemons get
+started, and so on. Once you exit that shell, you're back to the prompt
+of your original shell ``in the real world''.
+
Once you have a configuration file that suits your needs, you can
reconfigure your home by running:
@@ -37470,6 +38200,7 @@ services)}.
* Shells: Shells Home Services. POSIX shells, Bash, Zsh.
* Mcron: Mcron Home Service. Scheduled User's Job Execution.
* Shepherd: Shepherd Home Service. Managing User's Daemons.
+* Desktop: Desktop Home Services. Services for graphical environments.
@end menu
@c In addition to that Home Services can provide
@@ -37646,7 +38377,7 @@ The Bash package to use.
@item @code{guix-defaults?} (default: @code{#t}) (type: boolean)
Add sane defaults like reading @file{/etc/bashrc} and coloring the output of
-@command{ls} to the end of the @file{.bashrc} file.
+@command{ls} to the top of the @file{.bashrc} file.
@item @code{environment-variables} (default: @code{()}) (type: alist)
Association list of environment variables to set for the Bash session. The
@@ -37661,13 +38392,13 @@ put in the @file{.bashrc} file. The alias will automatically be quoted,
so something line this:
@lisp
-'((\"ls\" . \"ls -alF\"))
+'(("ls" . "ls -alF"))
@end lisp
turns into
@example
-alias ls=\"ls -alF\"
+alias ls="ls -alF"
@end example
@item @code{bash-profile} (default: @code{()}) (type: text-config)
@@ -37857,6 +38588,85 @@ mechanism instead (@pxref{Shepherd Services}).
@end table
@end deftp
+@node Desktop Home Services
+@subsection Desktop Home Services
+
+The @code{(gnu home services desktop)} module provides services that you
+may find useful on ``desktop'' systems running a graphical user
+environment such as Xorg.
+
+@defvr {Scheme Variable} home-redshift-service-type
+This is the service type for @uref{https://github.com/jonls/redshift,
+Redshift}, a program that adjusts the display color temperature
+according to the time of day. Its associated value must be a
+@code{home-redshift-configuration} record, as shown below.
+
+A typical configuration, where we manually specify the latitude and
+longitude, might look like this:
+
+@lisp
+(service home-redshift-service-type
+ (home-redshift-configuration
+ (location-provider 'manual)
+ (latitude 35.81) ;northern hemisphere
+ (longitude -0.80))) ;west of Greenwich
+@end lisp
+@end defvr
+
+@deftp {Data Type} home-redshift-configuration
+Available @code{home-redshift-configuration} fields are:
+
+@table @asis
+@item @code{redshift} (default: @code{redshift}) (type: file-like)
+Redshift package to use.
+
+@item @code{location-provider} (default: @code{geoclue2}) (type: symbol)
+Geolocation provider---@code{'manual} or @code{'geoclue2}. In the
+former case, you must also specify the @code{latitude} and
+@code{longitude} fields so Redshift can determine daytime at your place.
+In the latter case, the Geoclue system service must be running; it will
+be queried for location information.
+
+@item @code{adjustment-method} (default: @code{randr}) (type: symbol)
+Color adjustment method.
+
+@item @code{daytime-temperature} (default: @code{6500}) (type: integer)
+Daytime color temperature (kelvins).
+
+@item @code{nighttime-temperature} (default: @code{4500}) (type: integer)
+Nighttime color temperature (kelvins).
+
+@item @code{daytime-brightness} (default: @code{disabled}) (type: maybe-inexact-number)
+Daytime screen brightness, between 0.1 and 1.0.
+
+@item @code{nighttime-brightness} (default: @code{disabled}) (type: maybe-inexact-number)
+Nighttime screen brightness, between 0.1 and 1.0.
+
+@item @code{latitude} (default: @code{disabled}) (type: maybe-inexact-number)
+Latitude, when @code{location-provider} is @code{'manual}.
+
+@item @code{longitude} (default: @code{disabled}) (type: maybe-inexact-number)
+Longitude, when @code{location-provider} is @code{'manual}.
+
+@item @code{dawn-time} (default: @code{disabled}) (type: maybe-string)
+Custom time for the transition from night to day in the
+morning---@code{"HH:MM"} format. When specified, solar elevation is not
+used to determine the daytime/nighttime period.
+
+@item @code{dusk-time} (default: @code{disabled}) (type: maybe-string)
+Likewise, custom time for the transition from day to night in the
+evening.
+
+@item @code{extra-content} (default: @code{""}) (type: raw-configuration-string)
+Extra content appended as-is to the Redshift configuration file. Run
+@command{man redshift} for more information about the configuration file
+format.
+
+@end table
+
+@end deftp
+
+
@node Invoking guix home
@section Invoking @code{guix home}
@@ -37917,6 +38727,49 @@ As for @command{guix search}, the result is written in
@code{recutils} format, which makes it easy to filter the output
(@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
+@cindex container, for @command{guix home}
+@item container
+Spawn a shell in an isolated environment---a
+@dfn{container}---containing your home as specified by @var{file}.
+
+For example, this is how you would start an interactive shell in a
+container with your home:
+
+@example
+guix home container config.scm
+@end example
+
+This is a throw-away container where you can lightheartedly fiddle with
+files; any changes made within the container, any process started---all
+this disappears as soon as you exit that shell.
+
+As with @command{guix shell}, several options control that container:
+
+@table @option
+@item --network
+@itemx -N
+Enable networking within the container (it is disabled by default).
+
+@item --expose=@var{source}[=@var{target}]
+@itemx --share=@var{source}[=@var{target}]
+As with @command{guix shell}, make directory @var{source} of the host
+system available as @var{target} inside the container---read-only if you
+pass @option{--expose}, and writable if you pass @option{--share}
+(@pxref{Invoking guix shell, @option{--expose} and @option{--share}}).
+@end table
+
+Additionally, you can run a command in that container, instead of
+spawning an interactive shell. For instance, here is how you would
+check which Shepherd services are started in a throw-away home
+container:
+
+@example
+guix home container config.scm -- herd status
+@end example
+
+The command to run in the container must come after @code{--} (double
+hyphen).
+
@item reconfigure
Build the home environment described in @var{file}, and switch to it.
Switching means that the activation script will be evaluated and (in
@@ -38066,7 +38919,38 @@ environment. Note that not every home service that exists is supported
$ guix home import ~/guix-config
guix home: '/home/alice/guix-config' populated with all the Home configuration files
@end example
+@end table
+
+And there's more! @command{guix home} also provides the following
+sub-commands to visualize how the services of your home environment
+relate to one another:
+
+@table @code
+@cindex service extension graph, of a home environment
+@item extension-graph
+Emit to standard output the @dfn{service extension graph} of the home
+environment defined in @var{file} (@pxref{Service Composition}, for more
+information on service extensions). By default the output is in
+Dot/Graphviz format, but you can choose a different format with
+@option{--graph-backend}, as with @command{guix graph} (@pxref{Invoking
+guix graph, @option{--backend}}):
+
+The command:
+
+@example
+guix home extension-graph @var{file} | xdot -
+@end example
+
+shows the extension relations among services.
+
+@cindex Shepherd dependency graph, for a home environment
+@item shepherd-graph
+Emit to standard output the @dfn{dependency graph} of shepherd services
+of the home environment defined in @var{file}. @xref{Shepherd
+Services}, for more information and for an example graph.
+Again, the default output format is Dot/Graphviz, but you can pass
+@option{--graph-backend} to select a different one.
@end table
@var{options} can contain any of the common build options (@pxref{Common
@@ -38081,6 +38965,16 @@ Consider the home-environment @var{expr} evaluates to.
This is an alternative to specifying a file which evaluates to a home
environment.
+@item --allow-downgrades
+Instruct @command{guix home reconfigure} to allow system downgrades.
+
+Just like @command{guix system}, @command{guix home reconfigure}, by
+default, prevents you from downgrading your home to older or unrelated
+revisions compared to the channel revisions that were used to deploy
+it---those shown by @command{guix home describe}. Using
+@option{--allow-downgrades} allows you to bypass that check, at the risk
+of downgrading your home---be careful!
+
@end table
@node Documentation
@@ -38304,6 +39198,147 @@ Note that there can be packages for which @option{--with-debug-info}
will not have the desired effect. @xref{Package Transformation Options,
@option{--with-debug-info}}, for more information.
+@node Using TeX and LaTeX
+@chapter Using @TeX{} and @LaTeX{}
+
+@cindex @TeX{} packages
+@cindex @LaTeX{} packages
+Guix provides packages for the @TeX{}, @LaTeX{}, ConTeXt, LuaTeX, and
+related typesetting systems, taken from the
+@uref{https://www.tug.org/texlive/, @TeX{} Live distribution}. However,
+because @TeX{} Live is so huge and because finding your way in this maze
+is tricky, we thought that you, dear user, would welcome guidance on how
+to deploy the relevant packages so you can compile your @TeX{} and
+@LaTeX{} documents.
+
+@TeX{} Live currently comes in two flavors in Guix:
+
+@itemize
+@item
+The ``monolithic'' @code{texlive} package: it comes with @emph{every
+single @TeX{} Live package} (more than 7,000 of them), but it is huge
+(more than 4@tie{}GiB for a single package!).
+
+@item
+The ``modular'' @code{texlive-} packages: you install
+@code{texlive-base}, which provides core functionality and the main
+commands---@command{pdflatex}, @command{dvips}, @command{luatex},
+@command{mf}, etc.---together with individual packages that provide just
+the features you need---@code{texlive-listings} for the
+@code{listings} package, @code{texlive-hyperref} for @code{hyperref},
+@code{texlive-beamer} for Beamer, @code{texlive-pgf} for PGF/TikZ,
+and so on.
+@end itemize
+
+We recommend using the modular package set because it is much less
+resource-hungry. To build your documents, you would use commands such
+as:
+
+@example
+guix shell texlive-base texlive-wrapfig \
+ texlive-hyperref texlive-cm-super -- pdflatex doc.tex
+@end example
+
+You can quickly end up with unreasonably long command lines though. The
+solution is to instead write a manifest, for example like this one:
+
+@lisp
+(specifications->manifest
+ '("rubber"
+
+ "texlive-base"
+ "texlive-wrapfig"
+
+ "texlive-microtype"
+ "texlive-listings" "texlive-hyperref"
+
+ ;; PGF/TikZ
+ "texlive-pgf"
+
+ ;; Additional fonts.
+ "texlive-cm-super" "texlive-amsfonts"
+ "texlive-times" "texlive-helvetic" "texlive-courier"))
+@end lisp
+
+You can then pass it to any command with the @option{-m} option:
+
+@example
+guix shell -m manifest.scm -- pdflatex doc.tex
+@end example
+
+@xref{Invoking guix package, @option{--manifest}}, for more on
+manifests. In the future, we plan to provide packages for @TeX{} Live
+@dfn{collections}---``meta-packages'' such as @code{fontsrecommended},
+@code{humanities}, or @code{langarabic} that provide the set of packages
+needed in this particular domain. That will allow you to list fewer
+packages.
+
+The main difficulty here is that using the modular package set forces
+you to select precisely the packages that you need. You can use
+@command{guix search}, but finding the right package can prove to be
+tedious. When a package is missing, @command{pdflatex} and similar
+commands fail with an obscure message along the lines of:
+
+@example
+doc.tex: File `tikz.sty' not found.
+doc.tex:7: Emergency stop.
+@end example
+
+@noindent
+or, for a missing font:
+
+@example
+kpathsea: Running mktexmf phvr7t
+! I can't find file `phvr7t'.
+@end example
+
+How do you determine what the missing package is? In the first case,
+you'll find the answer by running:
+
+@example
+$ guix search texlive tikz
+name: texlive-pgf
+version: 59745
+@dots{}
+@end example
+
+In the second case, @command{guix search} turns up nothing. Instead,
+you can search the @TeX{} Live package database using the @command{tlmgr}
+command:
+
+@example
+$ guix shell texlive-base -- tlmgr info phvr7t
+tlmgr: cannot find package phvr7t, searching for other matches:
+
+Packages containing `phvr7t' in their title/description:
+
+Packages containing files matching `phvr7t':
+helvetic:
+ texmf-dist/fonts/tfm/adobe/helvetic/phvr7t.tfm
+ texmf-dist/fonts/tfm/adobe/helvetic/phvr7tn.tfm
+ texmf-dist/fonts/vf/adobe/helvetic/phvr7t.vf
+ texmf-dist/fonts/vf/adobe/helvetic/phvr7tn.vf
+tex4ht:
+ texmf-dist/tex4ht/ht-fonts/alias/adobe/helvetic/phvr7t.htf
+@end example
+
+The file is available in the @TeX{} Live @code{helvetic} package, which is
+known in Guix as @code{texlive-helvetic}. Quite a ride, but we found
+it!
+
+There is one important limitation though: Guix currently provides a
+subset of the @TeX{} Live packages. If you stumble upon a missing
+package, you can try and import it (@pxref{Invoking guix import}):
+
+@example
+guix import texlive @var{package}
+@end example
+
+@quotation Note
+@TeX{} Live packaging is still very much work in progress, but you can
+help! @xref{Contributing}, for more information.
+@end quotation
+
@node Security Updates
@chapter Security Updates
diff --git a/doc/local.mk b/doc/local.mk
index 9619971296..c9a8391993 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -23,7 +23,7 @@
# If adding a language, update the following variables, and info_TEXINFOS.
MANUAL_LANGUAGES = de es fa fi fr it ko pt_BR ru sk zh_CN
-COOKBOOK_LANGUAGES = de es fa fi fr ko ru sk zh_Hans
+COOKBOOK_LANGUAGES = de es fa fi fr ko pt_BR ru sk uk zh_Hans
# Arg1: A list of languages codes.
# Arg2: The file name stem.
@@ -50,8 +50,10 @@ info_TEXINFOS = %D%/guix.texi \
%D%/guix-cookbook.fi.texi \
%D%/guix-cookbook.fr.texi \
%D%/guix-cookbook.ko.texi \
+ %D%/guix-cookbook.pt_BR.texi \
%D%/guix-cookbook.ru.texi \
%D%/guix-cookbook.sk.texi \
+ %D%/guix-cookbook.uk.texi \
%D%/guix-cookbook.zh_Hans.texi
%C%_guix_TEXINFOS = \
diff --git a/etc/guix-daemon.cil.in b/etc/guix-daemon.cil.in
index 2ba02d1655..f4767ff666 100644
--- a/etc/guix-daemon.cil.in
+++ b/etc/guix-daemon.cil.in
@@ -302,9 +302,6 @@
(allow guix_daemon_t
guix_daemon_conf_t
(lnk_file (create getattr rename unlink read)))
- (allow guix_daemon_t
- guix_daemon_conf_t
- (sock_file (write)))
(allow guix_daemon_t net_conf_t
(file (getattr open read)))
(allow guix_daemon_t net_conf_t
@@ -358,7 +355,7 @@
(unix_stream_socket (listen)))
(allow guix_daemon_t
guix_daemon_conf_t
- (sock_file (create unlink)))
+ (sock_file (create unlink write)))
(allow guix_daemon_t
self
(unix_stream_socket (create
diff --git a/etc/news.scm b/etc/news.scm
index 7e6da61c71..56b90501ae 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -9,7 +9,7 @@
;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;; 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>
@@ -25,6 +25,139 @@
(channel-news
(version 0)
+ (entry (commit "094a2cfbe45c104d0da30ff9d975d052ca0c118c")
+ (title
+ (en "New @command{guix home container} command")
+ (de "Neuer Befehl @command{guix home container}")
+ (fr "Nouvelle commande @command{guix home container}"))
+ (body
+ (en "The new @command{guix home} tool, which lets you to manage
+entire \"home environments\" in a declarative fashion, has gained a
+@command{container} sub-command. The new @command{guix home container}
+command allows you to test your configuration in an isolated @dfn{container},
+without touching your home directory:
+
+@example
+guix home container config.scm
+@end example
+
+This provides a simple and safe way to test your configuration before
+deploying it with @command{guix home reconfigure}. Run @code{info \"(guix)
+Invoking guix home\"} for more information.")
+ (de "Das neue Werkzeug @command{guix home}, womit Sie vollständige
+„Persönliche Umgebungen“ deklarativ verwalten können, hat einen neuen
+Unterbefehl @command{container} hinzubekommen. Mit dem neuen Befehl
+@command{guix home container} können Sie Ihre Konfiguration in einem isolierten
+@dfn{Container} ausprobieren, ohne Ihr Persönliches Verzeichnis anzutasten.
+
+@example
+guix home container config.scm
+@end example
+
+So ist es ein Leichtes, Ihre Konfiguration in einer sicheren Umgebung zu testen,
+bevor Sie mit @command{guix home reconfigure} auf sie umsteigen. Führen Sie
+@code{info \"(guix.de) Aufruf von guix home\"} aus, um mehr zu erfahren.")
+ (fr "La nouvelle commande @command{guix home}, qui sert à gérer son
+« environnement d'accueil » de manière déclarative, dispose maintenant d'une
+sous-commande @command{container}. La nouvelle commande @command{guix home
+container} permet de tester sa configuration dans un @dfn{conteneur} isolé,
+sans toucher à son répertoire d'accueil :
+
+@example
+guix home container config.scm
+@end example
+
+C'est un moyen simple et sûr de tester sa configuration avant de la déployer
+avec @command{guix home reconfigure}. Lancer @code{info \"(guix.fr) Invoquer
+guix home\"} pour plus d'informations.")))
+
+ (entry (commit "f1d18adbed39a3bacae93be29346fd4c86b480ef")
+ (title
+ (en "More compact @samp{guix pull --news}")
+ (de "@samp{guix pull --news} wird knapper")
+ (nl "Meer beknopte @samp{guix pull --news}"))
+ (body
+ (en "The output of @samp{guix pull --news} has been shortened to
+display only fresh news items such as this one. It no longer includes the
+partial selection of new and updated packages, which was often long enough to
+be distracting whilst being too short to be useful.
+
+The complete list of new and updated packages can now be obtained separately
+using @samp{guix pull --news --details}.")
+ (de "Die Ausgabe von @samp{guix pull --news} wurde gekürzt
+und informiert nur mehr über ungezeigte Neuigkeiten wie diese. Es
+fehlt der unvollständige Bericht über neue und aktualisierte Pakete,
+der oft so lang war, dass er gestört hat, doch zu kurz war, um
+nützlich zu sein.
+
+Die vollständige Liste neuer und aktualisierter Pakete bekommen Sie
+jetzt mit @samp{guix pull --news --details}.")
+ (nl "De uitvoer van @samp{guix pull --news} is vanaf nu beperkt tot
+verse nieuwsberichten zoals dit, zonder de onvolledige bloemlezing van nieuwe
+en bijgewerkte pakketten. Die was vaak lang genoeg om de lezer af te leiden
+maar te kort om nuttig te zijn.
+
+De volledige list van nieuwe en bijgewerkte pakketten is nu afzonderlijk
+beschikbaar met @samp{guix pull --news --details}.")))
+
+ (entry (commit "96d7535b030c65b2d8cb0bea52c4bd96cbdefaf0")
+ (title
+ (en "ci.guix.gnu.org to stop offering Gzip substitutes")
+ (de "ci.guix.gnu.org wird keine Substitute mit Gzip mehr anbieten"))
+ (body
+ (en "This is a notice to let you know that starting next
+month (2022/03/01), Gzip-compressed substitutes will no longer be available,
+which means that Guix daemons from a revision older than commit
+@samp{3092f1b835d79655eecb2f8a79dda20ad9ba6bd6} (2019/06/02) will loose the
+ability to download binary substitutes. Starting next month, only lzip and
+zstd substitutes will be offered. Dropping Gzip substitutes will free about
+6.5 TiB of storage space from the build farm.")
+ (de "Hiermit weisen wir Sie darauf hin, dass ab nächstem
+Monat (2022/03/01) keine Gzip-komprimierten Substitute mehr zur Verfügung
+stehen. Dadurch können Guix-Daemons, deren Version älter ist als Commit
+@samp{3092f1b835d79655eecb2f8a79dda20ad9ba6bd6} (2019/06/02), keine binären
+Substitute mehr beziehen. Ab kommendem Monat werden nur Substitute mit lzip
+und zstd angeboten. Indem wir auf Gzip-Substitute verzichten, sparen wir 6.5
+TiB Speicherplatz auf der Erstellungsfarm.")))
+
+ (entry (commit "5c13484646069064c834bbd3cd02c3bc80d94cb6")
+ (title
+ (en "New @option{--execute} option to @command{guix deploy}")
+ (de "Neue Option @option{--execute} für @command{guix deploy}")
+ (fr "Nouvelle option @option{--execute} pour @command{guix deploy}"))
+ (body
+ (en "The @command{guix deploy} command has a new @option{--execute}
+or @option{-x} option, which allows you to execute a command on all the
+machines that your configuration file specifies, as in this example:
+
+@example
+guix deploy deploy.scm -x -- herd restart guix-daemon
+@end example
+
+This is no substitute for full-featured tools such as pdsh but it is a useful
+helper.")
+ (de "Der Befehl @command{guix deploy} verfügt über eine neue Option
+@option{--execute} oder @option{-x}, mit der Sie einen Befehl auf allen in der
+Konfigurationsdatei angegebenen Maschinen ausführen können. Zum Beispiel:
+
+@example
+guix deploy deploy.scm -x -- herd restart guix-daemon
+@end example
+
+Dies ist kein Ersatz für vollumfängliche Werkzeuge wie pdsh, aber es kann doch
+von Nutzen sein.")
+ (fr "La commande @command{guix deploy} a une nouvelle option
+@option{--execute} ou @option{-x} qui permet d'exécuter une commande sur
+toutes les machines spécifiées dans son fichier de configuration, comme dans
+cet exemple :
+
+@example
+guix deploy deploy.scm -x -- herd restart guix-daemon
+@end example
+
+Ça ne remplace pas les outils sophistiqués comme pdsh mais c'est bien
+pratique.")))
+
(entry (commit "c4fe13c294cc1e31dd8a49ce3981f603fb169e0a")
(title
(en "@command{guix style} can format package definitions")
@@ -229,14 +362,14 @@ d'informations.")))
(entry (commit "52cb5cf5b852117b5151a67af187d80764849ad3")
(title
- (en "Icedove 91: profile folder moved to @file{~/.thunderbird}")
- (de "Icedove 91: Profilordner jetzt unter @file{~/.thunderbird}"))
+ (en "Icedove 91: profile folder moved to @file{~/.thunderbird}")
+ (de "Icedove 91: Profilordner jetzt unter @file{~/.thunderbird}"))
(body
- (en "Icedove 91 expects your profile folder under @file{~/.thunderbird}.
+ (en "Icedove 91 expects your profile folder under @file{~/.thunderbird}.
You need to manually copy your Icedove profiles from @file{~/.icedove} to
@file{~./thunderbird}. It may be required to start Icedove with
@option{--ProfileManager} for the first time after the migration.")
- (de "Icedove 91 erwartet Ihren Profilordner unter @file{~/.thunderbird}.
+ (de "Icedove 91 erwartet Ihren Profilordner unter @file{~/.thunderbird}.
Dafür müssen sie Ihre Icedove-Profile von @file{~/.icedove} nach
@file{~/.thunderbird} kopieren. Eventuell muss Icedove das erste Mal nach der
Migration mit @option{--ProfileManager} gestartet werden.")))
@@ -831,7 +964,7 @@ Nous conseillons de mettre à jour @command{guix-daemon}. Lancer @command{info
\"(guix.fr) Mettre à niveau Guix\"} pour voir comment faire. Voir
@uref{https://issues.guix.gnu.org/47229} pour plus d'informations sur cette
faille.")
- (nl "In @command{guix-daemon} werd een beveiligingsprobleem
+ (nl "In @command{guix-daemon} werd een beveiligingsprobleem
gevonden dat kan leiden tot de escalatie van lokale bevoegdheden. Het
probleem doet zich voor bij installaties met meerdere gebruikers waarop een
lokale @command{guix-daemon} draait.
@@ -921,7 +1054,7 @@ guix import go golang.org/x/sys
@end example
Lancez @command{info \"(guix.fr) Invoquer guix import\"} pour en savoir plus.")
- (nl "Met de nieuwe @command{guix import go}-opdracht kunnen
+ (nl "Met de nieuwe @command{guix import go}-opdracht kunnen
pakketschrijvers een pakketdefinitie of -sjabloon aanmaken, op basis van de
naam van een Go-pakket te vinden op @url{https://proxy.golang.org}:
@@ -934,28 +1067,28 @@ informatie.")))
(entry (commit "1b5b882120daf7d111aa351a919a90e818324347")
(title
- (en "The @code{linux-libre} kernel is updated to 5.11.2")
- (de "Der Kernel @code{linux-libre} wird auf 5.11.2 aktualisiert")
- (fr "Le noyau @code{linux-libre} est mis à jour vers la 5.11.2")
- (nl "De @code{linux-libre}-kernel werd bijgewertk naar 5.11.2"))
+ (en "The @code{linux-libre} kernel is updated to 5.11.2")
+ (de "Der Kernel @code{linux-libre} wird auf 5.11.2 aktualisiert")
+ (fr "Le noyau @code{linux-libre} est mis à jour vers la 5.11.2")
+ (nl "De @code{linux-libre}-kernel werd bijgewertk naar 5.11.2"))
(body
- (en "The default @code{linux-libre} kernel is now based on the 5.11
+ (en "The default @code{linux-libre} kernel is now based on the 5.11
stable kernel series, beginning with version 5.11.2. Promiment features include
improved Wine performance, unprivileged Overlayfs mounts, support for Intel SGX,
support for new graphics hardware, and improved performance of the Btrfs
file system.")
- (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
+ (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
jetzt auf der 5.11-„stable“-Versionsreihe, angefangen mit Version 5.11.2. Zu
den markanten Neuerungen gehören bessere Wine-Unterstützung, Einbinden per
Overlayfs für Nutzer ohne erweiterte Rechte, Unterstützung für Intel SGX, für
neue Grafikhardware und bessere Leistung beim Btrfs-Dateisystem.")
- (fr "Le noyau @code{linux-libre} par défaut est maintenant basé sur la
+ (fr "Le noyau @code{linux-libre} par défaut est maintenant basé sur la
lignée stable 5.11 du noyau, à commencer par la version 5.11.2. Parmi les
fonctionnalités notables on trouve des performances améliorées pour Wine, le
montage Overlayfs non privilégié, la prise en charge d'Intel SGX, celle des
nouveaux périphériques graphiques et de meilleures performances du système de
fichiers Btrfs.")
- (nl "De standaard @code{linux-libre}-kernel is nu geëent op de
+ (nl "De standaard @code{linux-libre}-kernel is nu geëent op de
stabiele 5.11-reeks, te beginnen met versie 5.11.2. Deze update biedt onder
andere verbeterde prestaties voor Wine en het Btfrs-bestandssysteem, laat
gewone gebruikers toe om met Overlayfs bestandssystemen te combineren, en
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index 9f6126023c..10c9045740 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -389,8 +389,8 @@ improvement."
"/run/current-system")
(define (boot-time-system)
- "Return the '--system' argument passed on the kernel command line."
- (find-long-option "--system" (if (string-contains %host-type "linux-gnu")
+ "Return the 'gnu.system' argument passed on the kernel command line."
+ (find-long-option "gnu.system" (if (string-contains %host-type "linux-gnu")
(linux-command-line)
(command-line))))
diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm
index ac36bd17d4..ad3c50d61e 100644
--- a/gnu/build/hurd-boot.scm
+++ b/gnu/build/hurd-boot.scm
@@ -254,7 +254,7 @@ set."
"This procedure is meant to be called from an early RC script.
Install the relevant passive translators on the first boot. Then, run system
-activation by using the kernel command-line options '--system' and '--load';
+activation by using the kernel command-line options 'gnu.system' and 'gnu.load';
starting the Shepherd.
XXX TODO: see linux-boot.scm:boot-system.
@@ -265,14 +265,14 @@ XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM
"
(display "Welcome, this is GNU's early boot Guile.\n")
- (display "Use '--repl' for an initrd REPL.\n\n")
+ (display "Use 'gnu.repl' for an initrd REPL.\n\n")
(call-with-error-handling
(lambda ()
(let* ((args (command-line))
- (system (find-long-option "--system" args))
- (to-load (find-long-option "--load" args)))
+ (system (find-long-option "gnu.system" args))
+ (to-load (find-long-option "gnu.load" args)))
(format #t "Setting-up essential translators...\n")
(setenv "PATH" (string-append system "/profile/bin"))
@@ -286,7 +286,7 @@ XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM
(unless (zero? (system* "/hurd/mach-defpager"))
(format #t "FAILED...Good luck!\n"))
- (cond ((member "--repl" args)
+ (cond ((member "gnu.repl" args)
(format #t "Starting repl...\n")
(start-repl))
(to-load
@@ -298,7 +298,7 @@ XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM
(sleep 2)
(reboot))
(else
- (display "no boot file passed via '--load'\n")
+ (display "no boot file passed via 'gnu.load'\n")
(display "entering a warm and cozy REPL\n")
(start-repl)))))
#:on-error on-error))
diff --git a/gnu/build/image.scm b/gnu/build/image.scm
index bdd5ec25a9..81caa424f8 100644
--- a/gnu/build/image.scm
+++ b/gnu/build/image.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;;
;;; This file is part of GNU Guix.
@@ -62,8 +62,10 @@
(define (estimate-partition-size root)
"Given the ROOT directory, evaluate and return its size. As this doesn't
-take the partition metadata size into account, take a 25% margin."
- (* 1.25 (file-size root)))
+take the partition metadata size into account, take a 25% margin. As this in
+turn doesn't take any constant overhead into account, force a 1-MiB minimum."
+ (max (ash 1 20)
+ (* 1.25 (file-size root))))
(define* (make-ext-image partition target root
#:key
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index 8efe6e5f9c..7d41537652 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2016, 2017, 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -93,7 +94,7 @@
get-string-all)))
(define (find-long-option option arguments)
- "Find OPTION among ARGUMENTS, where OPTION is something like \"--load\".
+ "Find OPTION among ARGUMENTS, where OPTION is something like \"gnu.load\".
Return the value associated with OPTION, or #f on failure."
(let ((opt (string-append option "=")))
(and=> (find (cut string-prefix? opt <>)
@@ -499,10 +500,12 @@ LINUX-MODULE-DIRECTORY, then installing KEYMAP-FILE with 'loadkeys' (if
KEYMAP-FILE is true), then setting up QEMU guest networking if
QEMU-GUEST-NETWORKING? is true, calling PRE-MOUNT, mounting the file systems
specified in MOUNTS, and finally booting into the new root if any. The initrd
-supports kernel command-line options '--load', '--root', and '--repl'.
+supports the kernel command-line options 'gnu.load' and 'gnu.repl'. It also
+honors a subset of the Linux kernel command-line parameters such as
+'fsck.mode', 'resume', 'rootdelay', rootflags and rootfstype.
-Mount the root file system, specified by the '--root' command-line argument,
-if any.
+Mount the root file system, specified by the 'root' command-line argument, if
+any.
MOUNTS must be a list of <file-system> objects.
@@ -515,33 +518,50 @@ upon error."
(string=? (file-system-mount-point fs) "/"))
(define (device-string->file-system-device device-string)
- ;; The "--root=SPEC" kernel command-line option always provides a
- ;; string, but the string can represent a device, an nfs-root, a UUID, or a
- ;; label. So check for all four.
+ ;; The "root=SPEC" kernel command-line option always provides a string,
+ ;; but the string can represent a device, an nfs-root, a UUID, or a label.
+ ;; So check for all four.
(cond ((string-prefix? "/" device-string) device-string)
((string-contains device-string ":/") device-string) ; nfs-root
((uuid device-string) => identity)
(else (file-system-label device-string))))
(display "Welcome, this is GNU's early boot Guile.\n")
- (display "Use '--repl' for an initrd REPL.\n\n")
+ (display "Use 'gnu.repl' for an initrd REPL.\n\n")
(call-with-error-handling
(lambda ()
(mount-essential-file-systems)
(let* ((args (linux-command-line))
- (to-load (find-long-option "--load" args))
- ;; If present, ‘--root’ on the kernel command line takes precedence
+ (to-load (find-long-option "gnu.load" args))
+ ;; If present, ‘root’ on the kernel command line takes precedence
;; over the ‘device’ field of the root <file-system> record.
- (root-device (and=> (find-long-option "--root" args)
+ (root-device (and=> (find-long-option "root" args)
device-string->file-system-device))
- (root-fs (or (find root-mount-point? mounts)
- ;; Fall back to fictitious defaults.
- (file-system (device (or root-device "/dev/root"))
- (mount-point "/")
- (type "ext4"))))
+ (rootfstype (find-long-option "rootfstype" args))
+ (rootflags (find-long-option "rootflags" args))
+ (root-fs* (find root-mount-point? mounts))
(fsck.mode (find-long-option "fsck.mode" args)))
+ (unless (or root-fs* (and root-device rootfstype))
+ (error "no root file system or 'root' and 'rootfstype' parameters"))
+
+ ;; If present, ‘root’ on the kernel command line takes precedence over
+ ;; the ‘device’ field of the root <file-system> record; likewise for
+ ;; the 'rootfstype' and 'rootflags' arguments.
+ (define root-fs
+ (if root-fs*
+ (file-system
+ (inherit root-fs*)
+ (device (or root-device (file-system-device root-fs*)))
+ (type (or rootfstype (file-system-type root-fs*)))
+ (options (or rootflags (file-system-options root-fs*))))
+ (file-system
+ (device root-device)
+ (mount-point "/")
+ (type rootfstype)
+ (options rootflags))))
+
(define (check? fs)
(match fsck.mode
("skip" #f)
@@ -562,7 +582,7 @@ upon error."
(_ 'preen))
(file-system-repair fs))))
- (when (member "--repl" args)
+ (when (member "gnu.repl" args)
(start-repl))
(display "loading kernel modules...\n")
@@ -596,9 +616,8 @@ upon error."
(let ((root-delay (and=> (find-long-option "rootdelay" args)
string->number)))
(when root-delay
- (format #t
- "Pausing for rootdelay=~a seconds before mounting the root file system...\n"
- root-delay)
+ (format #t "Pausing for rootdelay=~a seconds before mounting \
+the root file system...\n" root-delay)
(sleep root-delay)))
;; Prepare the real root file system under /root.
@@ -614,18 +633,18 @@ upon error."
(setenv "EXT2FS_NO_MTAB_OK" "1")
- (if root-device
- (mount-root-file-system (canonicalize-device-spec root-device)
- (file-system-type root-fs)
- #:volatile-root? volatile-root?
- #:flags (mount-flags->bit-mask
- (file-system-flags root-fs))
- #:options (file-system-options root-fs)
- #:check? (check? root-fs)
- #:skip-check-if-clean?
- (skip-check-if-clean? root-fs)
- #:repair (repair root-fs))
- (mount "none" "/root" "tmpfs"))
+ ;; Mount the root file system.
+ (mount-root-file-system (canonicalize-device-spec
+ (file-system-device root-fs))
+ (file-system-type root-fs)
+ #:volatile-root? volatile-root?
+ #:flags (mount-flags->bit-mask
+ (file-system-flags root-fs))
+ #:options (file-system-options root-fs)
+ #:check? (check? root-fs)
+ #:skip-check-if-clean?
+ (skip-check-if-clean? root-fs)
+ #:repair (repair root-fs))
;; Mount the specified non-root file systems.
(for-each (lambda (fs)
@@ -651,7 +670,7 @@ upon error."
(sleep 2)
(reboot))
(begin
- (display "no boot file passed via '--load'\n")
+ (display "no boot file passed via 'gnu.load'\n")
(display "entering a warm and cozy REPL\n")
(start-repl)))))
#:on-error on-error))
diff --git a/gnu/home/services.scm b/gnu/home/services.scm
index 2a3cb44952..254663c6bb 100644
--- a/gnu/home/services.scm
+++ b/gnu/home/services.scm
@@ -30,6 +30,7 @@
#:use-module (guix discovery)
#:use-module (guix diagnostics)
#:use-module (guix i18n)
+ #:use-module (guix modules)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
@@ -37,12 +38,17 @@
home-profile-service-type
home-environment-variables-service-type
home-files-service-type
+ home-xdg-configuration-files-service-type
home-run-on-first-login-service-type
home-activation-service-type
home-run-on-change-service-type
home-provenance-service-type
+ home-files-directory
+ xdg-configuration-files-directory
+
fold-home-service-types
+ home-provenance
%initialize-gettext)
@@ -72,12 +78,11 @@
;;; file (details described in the manual).
;;;
;;; home-files-service-type is similar to etc-service-type, but doesn't extend
-;;; home-activation, because deploy mechanism for config files is pluggable and
-;;; can be different for different home environments: The default one is called
-;;; symlink-manager (will be introudced in a separate patch series), which creates
-;;; links for various dotfiles (like $XDG_CONFIG_HOME/$APP/...) to store, but is
-;;; possible to implement alternative approaches like read-only home from Julien's
-;;; guix-home-manager.
+;;; home-activation, because deploy mechanism for config files is pluggable
+;;; and can be different for different home environments: The default one is
+;;; called symlink-manager, which creates links for various dotfiles and xdg
+;;; configuration files to store, but is possible to implement alternative
+;;; approaches like read-only home from Julien's guix-home-manager.
;;;
;;; home-run-on-first-login-service-type provides an @file{on-first-login} guile
;;; script, which runs provided gexps once, when user makes first login. It can
@@ -260,11 +265,14 @@ esac
(file-union "files" files))
+;; Used by symlink-manager
+(define home-files-directory "files")
+
(define (files-entry files)
"Return an entry for the @file{~/.guix-home/files}
directory containing FILES."
(with-monad %store-monad
- (return `(("files" ,(files->files-directory files))))))
+ (return `((,home-files-directory ,(files->files-directory files))))))
(define home-files-service-type
(service-type (name 'home-files)
@@ -274,20 +282,41 @@ directory containing FILES."
(compose concatenate)
(extend append)
(default-value '())
- (description "Configuration files for programs that
-will be put in @file{~/.guix-home/files}.")))
+ (description "Files that will be put in
+@file{~~/.guix-home/files}, and further processed during activation.")))
+
+(define xdg-configuration-files-directory "config")
+
+(define (xdg-configuration-files files)
+ "Add config/ prefix to each file-path in FILES."
+ (map (match-lambda
+ ((file-path . rest)
+ (cons (string-append xdg-configuration-files-directory "/" file-path)
+ rest)))
+ files))
+
+(define home-xdg-configuration-files-service-type
+ (service-type (name 'home-files)
+ (extensions
+ (list (service-extension home-files-service-type
+ xdg-configuration-files)))
+ (compose concatenate)
+ (extend append)
+ (default-value '())
+ (description "Files that will be put in
+@file{~~/.guix-home/files/config}, and further processed during activation.")))
(define %initialize-gettext
#~(begin
(bindtextdomain %gettext-domain
(string-append #$guix "/share/locale"))
- (textdomain %gettext-domain)
- (setlocale LC_ALL "")))
+ (textdomain %gettext-domain)))
(define (compute-on-first-login-script _ gexps)
(program-file
"on-first-login"
- #~(begin
+ (with-imported-modules (source-module-closure '((guix i18n)))
+ #~(begin
(use-modules (guix i18n))
#$%initialize-gettext
@@ -308,7 +337,7 @@ will be put in @file{~/.guix-home/files}.")))
(display (G_ "XDG_RUNTIME_DIR doesn't exists, on-first-login script
won't execute anything. You can check if xdg runtime directory exists,
XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the
-script by running '$HOME/.guix-home/on-first-login'")))))))
+script by running '$HOME/.guix-home/on-first-login'"))))))))
(define (on-first-login-script-entry on-first-login)
"Return, as a monadic value, an entry for the on-first-login script
@@ -400,7 +429,8 @@ with one gexp, but many times, and all gexps must be idempotent.")))
;;;
(define (compute-on-change-gexp eval-gexps? pattern-gexp-tuples)
- #~(begin
+ (with-imported-modules (source-module-closure '((guix i18n)))
+ #~(begin
(use-modules (guix i18n))
#$%initialize-gettext
@@ -485,7 +515,7 @@ with one gexp, but many times, and all gexps must be idempotent.")))
(display (G_ "On-change gexps evaluation finished.\n\n")))
(display "\
On-change gexps won't be evaluated; evaluation has been disabled in the
-service configuration"))))
+service configuration")))))
(define home-run-on-change-service-type
(service-type (name 'home-run-on-change)
diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm
new file mode 100644
index 0000000000..cbb9cf76da
--- /dev/null
+++ b/gnu/home/services/desktop.scm
@@ -0,0 +1,174 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 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 desktop)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (gnu services configuration)
+ #:autoload (gnu packages xdisorg) (redshift)
+ #:use-module (guix records)
+ #:use-module (guix gexp)
+ #:use-module (srfi srfi-1)
+ #:use-module (ice-9 match)
+ #:export (home-redshift-configuration
+ home-redshift-configuration?
+
+ home-redshift-service-type))
+
+
+;;;
+;;; Redshift.
+;;;
+
+(define (serialize-integer field value)
+ (string-append (match field
+ ('daytime-temperature "temp-day")
+ ('nighttime-temperature "temp-night")
+ ('daytime-brightness "brightness-day")
+ ('nighttime-brightness "brightness-night")
+ ('latitude "lat")
+ ('longitude "lon")
+ (_ (symbol->string field)))
+ "=" (number->string value) "\n"))
+
+(define (serialize-symbol field value)
+ (string-append (symbol->string field)
+ "=" (symbol->string value) "\n"))
+
+(define (serialize-string field value)
+ (string-append (symbol->string field)
+ "=" value "\n"))
+
+(define serialize-inexact-number serialize-integer)
+
+(define (inexact-number? n)
+ (and (number? n) (inexact? n)))
+(define-maybe inexact-number)
+(define-maybe string)
+
+(define (serialize-raw-configuration-string field value)
+ value)
+(define raw-configuration-string? string?)
+
+(define-configuration home-redshift-configuration
+ (redshift
+ (file-like redshift)
+ "Redshift package to use.")
+
+ (location-provider
+ (symbol 'geoclue2)
+ "Geolocation provider---@code{'manual} or @code{'geoclue2}.
+
+In the former case, you must also specify the @code{latitude} and
+@code{longitude} fields so Redshift can determine daytime at your place. In
+the latter case, the Geoclue system service must be running; it will be
+queried for location information.")
+ (adjustment-method
+ (symbol 'randr)
+ "Color adjustment method.")
+
+ ;; Default values from redshift(1).
+ (daytime-temperature
+ (integer 6500)
+ "Daytime color temperature (kelvins).")
+ (nighttime-temperature
+ (integer 4500)
+ "Nighttime color temperature (kelvins).")
+
+ (daytime-brightness
+ (maybe-inexact-number 'disabled)
+ "Daytime screen brightness, between 0.1 and 1.0.")
+ (nighttime-brightness
+ (maybe-inexact-number 'disabled)
+ "Nighttime screen brightness, between 0.1 and 1.0.")
+
+ (latitude
+ (maybe-inexact-number 'disabled)
+ "Latitude, when @code{location-provider} is @code{'manual}.")
+ (longitude
+ (maybe-inexact-number 'disabled)
+ "Longitude, when @code{location-provider} is @code{'manual}.")
+
+ (dawn-time
+ (maybe-string 'disabled)
+ "Custom time for the transition from night to day in the
+morning---@code{\"HH:MM\"} format. When specified, solar elevation is not
+used to determine the daytime/nighttime period.")
+ (dusk-time
+ (maybe-string 'disabled)
+ "Likewise, custom time for the transition from day to night in the
+evening.")
+
+ (extra-content
+ (raw-configuration-string "")
+ "Extra content appended as-is to the Redshift configuration file. Run
+@command{man redshift} for more information about the configuration file
+format."))
+
+(define (serialize-redshift-configuration config)
+ (define location-fields
+ '(latitude longitude))
+
+ (define (location-field? field)
+ (memq (configuration-field-name field) location-fields))
+
+ (define (secondary-field? field)
+ (or (location-field? field)
+ (memq (configuration-field-name field)
+ '(redshift extra-content))))
+
+ #~(string-append
+ "[redshift]\n"
+ #$(serialize-configuration config
+ (remove secondary-field?
+ home-redshift-configuration-fields))
+
+ #$(home-redshift-configuration-extra-content config)
+
+ "\n[manual]\n"
+ #$(serialize-configuration config
+ (filter location-field?
+ home-redshift-configuration-fields))))
+
+(define (redshift-shepherd-service config)
+ (define config-file
+ (computed-file "redshift.conf"
+ #~(call-with-output-file #$output
+ (lambda (port)
+ (display #$(serialize-redshift-configuration config)
+ port)))))
+
+ (list (shepherd-service
+ (documentation "Redshift program.")
+ (provision '(redshift))
+ ;; FIXME: This fails to start if Home is first activated from a
+ ;; non-X11 session.
+ (start #~(make-forkexec-constructor
+ (list #$(file-append redshift "/bin/redshift")
+ "-c" #$config-file)))
+ (stop #~(make-kill-destructor)))))
+
+(define home-redshift-service-type
+ (service-type
+ (name 'home-redshift)
+ (extensions (list (service-extension home-shepherd-service-type
+ redshift-shepherd-service)))
+ (default-value (home-redshift-configuration))
+ (description
+ "Run Redshift, a program that adjusts the color temperature of display
+according to time of day.")))
diff --git a/gnu/home/services/fontutils.scm b/gnu/home/services/fontutils.scm
index 772904367d..6062eaed6a 100644
--- a/gnu/home/services/fontutils.scm
+++ b/gnu/home/services/fontutils.scm
@@ -34,7 +34,7 @@
;;; Code:
(define (add-fontconfig-config-file he-symlink-path)
- `(("config/fontconfig/fonts.conf"
+ `(("fontconfig/fonts.conf"
,(mixed-text-file
"fonts.conf"
"<?xml version='1.0'?>
@@ -51,7 +51,7 @@
(service-type (name 'home-fontconfig)
(extensions
(list (service-extension
- home-files-service-type
+ home-xdg-configuration-files-service-type
add-fontconfig-config-file)
(service-extension
home-run-on-change-service-type
diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm
index ca7f4ac0ad..7b9769bcf3 100644
--- a/gnu/home/services/shells.scm
+++ b/gnu/home/services/shells.scm
@@ -171,56 +171,27 @@ 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)."))
-(define (add-zsh-configuration config)
- (let* ((xdg-flavor? (home-zsh-configuration-xdg-flavor? config)))
-
- (define prefix-file
- (cut string-append
- (if xdg-flavor?
- "config/zsh/."
- "") <>))
-
- (define (filter-fields field)
- (filter-configuration-fields home-zsh-configuration-fields
- (list field)))
-
- (define (serialize-field field)
- (serialize-configuration
- config
- (filter-fields field)))
-
- (define (file-if-not-empty field)
- (let ((file-name (symbol->string field))
- (field-obj (car (filter-fields field))))
- (if (not (null? ((configuration-field-getter field-obj) config)))
- `(,(prefix-file file-name)
- ,(mixed-text-file
- file-name
- (serialize-field field)))
- '())))
-
- (filter
- (compose not null?)
- `(,(if xdg-flavor?
- `("zshenv"
- ,(mixed-text-file
- "auxiliary-zshenv"
- (if xdg-flavor?
- "source ${XDG_CONFIG_HOME:-$HOME/.config}/zsh/.zshenv\n"
- "")))
- '())
- (,(prefix-file "zshenv")
- ,(mixed-text-file
- "zshenv"
- (if xdg-flavor?
- "export ZDOTDIR=${XDG_CONFIG_HOME:-$HOME/.config}/zsh\n"
- "")
- (serialize-field 'zshenv)
- (serialize-field 'environment-variables)))
- (,(prefix-file "zprofile")
- ,(mixed-text-file
- "zprofile"
- "\
+(define (zsh-filter-fields field)
+ (filter-configuration-fields home-zsh-configuration-fields (list field)))
+
+(define (zsh-serialize-field config field)
+ (serialize-configuration config (zsh-filter-fields field)))
+
+(define* (zsh-field-not-empty? config field)
+ (let ((file-name (symbol->string field))
+ (field-obj (car (zsh-filter-fields field))))
+ (not (null? ((configuration-field-getter field-obj) config)))))
+
+(define (zsh-file-zshenv config)
+ (mixed-text-file
+ "zshenv"
+ (zsh-serialize-field config 'zshenv)
+ (zsh-serialize-field config 'environment-variables)))
+
+(define (zsh-file-zprofile config)
+ (mixed-text-file
+ "zprofile"
+ "\
# Setups system and user profiles and related variables
source /etc/profile
# Setups home environment profile
@@ -229,11 +200,47 @@ source ~/.profile
# It's only necessary if zsh is a login shell, otherwise profiles will
# be already sourced by bash
"
- (serialize-field 'zprofile)))
-
- ,@(list (file-if-not-empty 'zshrc)
- (file-if-not-empty 'zlogin)
- (file-if-not-empty 'zlogout))))))
+ (zsh-serialize-field config 'zprofile)))
+
+(define (zsh-file-by-field config field)
+ (match field
+ ('zshenv (zsh-file-zshenv config))
+ ('zprofile (zsh-file-zprofile config))
+ (e (mixed-text-file
+ (symbol->string field)
+ (zsh-serialize-field config field)))))
+
+(define (zsh-get-configuration-files config)
+ `(("zprofile" ,(zsh-file-by-field config 'zprofile)) ;; Always non-empty
+ ,@(if (and (zsh-field-not-empty? config 'zshenv)
+ (zsh-field-not-empty? config 'environment-variables))
+ `(("zshenv" ,(zsh-file-by-field config 'zshenv))) '())
+ ,@(if (zsh-field-not-empty? config 'zshrc)
+ `(("zshrc" ,(zsh-file-by-field config 'zshrc))) '())
+ ,@(if (zsh-field-not-empty? config 'zlogin)
+ `(("zlogin" ,(zsh-file-by-field config 'zlogin))) '())
+ ,@(if (zsh-field-not-empty? config 'zlogout)
+ `(("zlogout" ,(zsh-file-by-field config 'zlogout))) '())))
+
+(define (zsh-home-files config)
+ (define zshenv-auxiliary-file
+ (mixed-text-file
+ "zshenv-auxiliary"
+ "export ZDOTDIR=${XDG_CONFIG_HOME:-$HOME/.config}/zsh\n"
+ "[[ -f $ZDOTDIR/.zshenv ]] && source $ZDOTDIR/.zshenv\n"))
+
+ (if (home-zsh-configuration-xdg-flavor? config)
+ `(("zshenv" ,zshenv-auxiliary-file))
+ (zsh-get-configuration-files config)))
+
+(define (zsh-xdg-configuration-files config)
+ (if (home-zsh-configuration-xdg-flavor? config)
+ (map
+ (lambda (lst)
+ (cons (string-append "zsh/." (car lst))
+ (cdr lst)))
+ (zsh-get-configuration-files config))
+ '()))
(define (add-zsh-packages config)
(list (home-zsh-configuration-package config)))
@@ -291,7 +298,10 @@ source ~/.profile
(extensions
(list (service-extension
home-files-service-type
- add-zsh-configuration)
+ zsh-home-files)
+ (service-extension
+ home-xdg-configuration-files-service-type
+ zsh-xdg-configuration-files)
(service-extension
home-profile-service-type
add-zsh-packages)))
@@ -324,7 +334,7 @@ source ~/.profile
(guix-defaults?
(boolean #t)
"Add sane defaults like reading @file{/etc/bashrc} and coloring the output of
-@command{ls} to the end of the @file{.bashrc} file.")
+@command{ls} to the top of the @file{.bashrc} file.")
(environment-variables
(alist '())
"Association list of environment variables to set for the Bash session. The
@@ -448,7 +458,7 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
'bashrc
(if (home-bash-configuration-guix-defaults? config)
(list (serialize-field 'aliases) guix-bashrc)
- (list (serialize-field 'alises))))
+ (list (serialize-field 'aliases))))
(file-if-not-empty 'bash-logout)))))
(define (add-bash-packages config)
diff --git a/gnu/home/services/shepherd.scm b/gnu/home/services/shepherd.scm
index 7a9cc064bb..feff130259 100644
--- a/gnu/home/services/shepherd.scm
+++ b/gnu/home/services/shepherd.scm
@@ -24,12 +24,27 @@
#:use-module (guix sets)
#:use-module (guix gexp)
#:use-module (guix records)
-
#:use-module (srfi srfi-1)
-
#:export (home-shepherd-service-type
- home-shepherd-configuration)
+
+ home-shepherd-configuration
+ home-shepherd-configuration?
+ home-shepherd-configuration-shepherd
+ home-shepherd-configuration-auto-start?
+ home-shepherd-configuration-services)
#:re-export (shepherd-service
+ shepherd-service?
+ shepherd-service-documentation
+ shepherd-service-provision
+ shepherd-service-canonical-name
+ shepherd-service-requirement
+ shepherd-service-one-shot?
+ shepherd-service-respawn?
+ shepherd-service-start
+ shepherd-service-stop
+ shepherd-service-auto-start?
+ shepherd-service-modules
+
shepherd-action))
(define-record-type* <home-shepherd-configuration>
diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm
index 314da3ba3e..3b851229f3 100644
--- a/gnu/home/services/symlink-manager.scm
+++ b/gnu/home/services/symlink-manager.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,219 +21,199 @@
(define-module (gnu home services symlink-manager)
#:use-module (gnu home services)
#:use-module (guix gexp)
-
+ #:use-module (guix modules)
#:export (home-symlink-manager-service-type))
;;; Comment:
;;;
-;;; symlink-manager cares about configuration files: it backs up files
-;;; created by user, removes symlinks and directories created by a
-;;; previous generation, and creates new directories and symlinks to
-;;; configuration files according to the content of files/ directory
-;;; (created by home-files-service) of the current home environment
-;;; generation.
+;;; symlink-manager cares about xdg configurations and other files: it backs
+;;; up files created by user, removes symlinks and directories created by a
+;;; previous generation, and creates new directories and symlinks to files
+;;; according to the content of directories (created by home-files-service) of
+;;; the current home environment generation.
;;;
;;; Code:
(define (update-symlinks-script)
(program-file
"update-symlinks"
- #~(begin
- (use-modules (ice-9 ftw)
- (ice-9 curried-definitions)
- (ice-9 match)
- (srfi srfi-1)
- (guix i18n))
- #$%initialize-gettext
- (define ((simplify-file-tree parent) file)
- "Convert the result produced by `file-system-tree' to less
-verbose and more suitable for further processing format.
-
-Extract dir/file info from stat and compose a relative path to the
-root of the file tree.
-
-Sample output:
-
-((dir . \".\")
- ((dir . \"config\")
- ((dir . \"config/fontconfig\")
- (file . \"config/fontconfig/fonts.conf\"))
- ((dir . \"config/isync\")
- (file . \"config/isync/mbsyncrc\"))))
-"
- (match file
- ((name stat) `(file . ,(string-append parent name)))
- ((name stat children ...)
- (cons `(dir . ,(string-append parent name))
- (map (simplify-file-tree
- (if (equal? name ".")
- ""
- (string-append parent name "/")))
- children)))))
-
- (define ((file-tree-traverse preordering) node)
- "Traverses the file tree in different orders, depending on PREORDERING.
-
-if PREORDERING is @code{#t} resulting list will contain directories
-before files located in those directories, otherwise directory will
-appear only after all nested items already listed."
- (let ((prepend (lambda (a b) (append b a))))
- (match node
- (('file . path) (list node))
- ((('dir . path) . rest)
- ((if preordering append prepend)
- (list (cons 'dir path))
- (append-map (file-tree-traverse preordering) rest))))))
-
- (use-modules (guix build utils))
-
- (let* ((config-home (or (getenv "XDG_CONFIG_HOME")
- (string-append (getenv "HOME") "/.config")))
-
- (he-path (string-append (getenv "HOME") "/.guix-home"))
- (new-he-path (string-append he-path ".new"))
- (new-home (getenv "GUIX_NEW_HOME"))
- (old-home (getenv "GUIX_OLD_HOME"))
-
- (new-files-path (string-append new-home "/files"))
- ;; Trailing dot is required, because files itself is symlink and
- ;; to make file-system-tree works it should be a directory.
- (new-files-dir-path (string-append new-files-path "/."))
-
- (home-path (getenv "HOME"))
- (backup-dir (string-append home-path "/"
- (number->string (current-time))
- "-guix-home-legacy-configs-backup"))
-
- (old-tree (if old-home
- ((simplify-file-tree "")
- (file-system-tree
- (string-append old-home "/files/.")))
- #f))
- (new-tree ((simplify-file-tree "")
- (file-system-tree new-files-dir-path)))
-
- (get-source-path
- (lambda (path)
- (readlink (string-append new-files-path "/" path))))
-
- (get-target-path
- (lambda (path)
- (string-append home-path "/." path)))
-
- (get-backup-path
- (lambda (path)
- (string-append backup-dir "/." path)))
-
- (directory?
- (lambda (path)
- (equal? (stat:type (stat path)) 'directory)))
-
- (empty-directory?
- (lambda (dir)
- (equal? (scandir dir) '("." ".."))))
-
- (symlink-to-store?
- (lambda (path)
- (and
- (equal? (stat:type (lstat path)) 'symlink)
- (store-file-name? (readlink path)))))
-
- (backup-file
- (lambda (path)
- (mkdir-p backup-dir)
- (format #t (G_ "Backing up ~a...") (get-target-path path))
- (mkdir-p (dirname (get-backup-path path)))
- (rename-file (get-target-path path) (get-backup-path path))
- (display (G_ " done\n"))))
-
- (cleanup-symlinks
- (lambda ()
- (let ((to-delete ((file-tree-traverse #f) old-tree)))
- (display
- (G_
- "Cleaning up symlinks from previous home-environment.\n\n"))
- (map
- (match-lambda
- (('dir . ".")
- (display (G_ "Cleanup finished.\n\n")))
-
- (('dir . path)
- (if (and
- (file-exists? (get-target-path path))
- (directory? (get-target-path path))
- (empty-directory? (get-target-path path)))
- (begin
- (format #t (G_ "Removing ~a...")
- (get-target-path path))
- (rmdir (get-target-path path))
- (display (G_ " done\n")))
- (format
- #t
- (G_ "Skipping ~a (not an empty directory)... done\n")
- (get-target-path path))))
-
- (('file . path)
- (when (file-exists? (get-target-path path))
- ;; DO NOT remove the file if it is no longer
- ;; a symlink to the store, it will be backed
- ;; up later during create-symlinks phase.
- (if (symlink-to-store? (get-target-path path))
- (begin
- (format #t (G_ "Removing ~a...") (get-target-path path))
- (delete-file (get-target-path path))
- (display (G_ " done\n")))
- (format
- #t
- (G_ "Skipping ~a (not a symlink to store)... done\n")
- (get-target-path path))))))
- to-delete))))
-
- (create-symlinks
- (lambda ()
- (let ((to-create ((file-tree-traverse #t) new-tree)))
- (map
- (match-lambda
- (('dir . ".")
- (display
- (G_ "New symlinks to home-environment will be created soon.\n"))
- (format
- #t (G_ "All conflicting files will go to ~a.\n\n") backup-dir))
-
- (('dir . path)
- (let ((target-path (get-target-path path)))
- (when (and (file-exists? target-path)
- (not (directory? target-path)))
- (backup-file path))
-
- (if (file-exists? target-path)
- (format
- #t (G_ "Skipping ~a (directory already exists)... done\n")
- target-path)
- (begin
- (format #t (G_ "Creating ~a...") target-path)
- (mkdir target-path)
- (display (G_ " done\n"))))))
-
- (('file . path)
- (when (file-exists? (get-target-path path))
- (backup-file path))
- (format #t (G_ "Symlinking ~a -> ~a...")
- (get-target-path path) (get-source-path path))
- (symlink (get-source-path path) (get-target-path path))
- (display (G_ " done\n"))))
- to-create)))))
-
- (when old-tree
- (cleanup-symlinks))
-
- (create-symlinks)
-
- (symlink new-home new-he-path)
- (rename-file new-he-path he-path)
-
- (display (G_" done\nFinished updating symlinks.\n\n"))))))
-
+ (with-imported-modules (source-module-closure
+ '((guix build utils)
+ (guix i18n)))
+ #~(begin
+ (use-modules (ice-9 ftw)
+ (ice-9 match)
+ (srfi srfi-1)
+ (guix i18n)
+ (guix build utils))
+
+ (define home-directory
+ (getenv "HOME"))
+
+ (define xdg-config-home
+ (or (getenv "XDG_CONFIG_HOME")
+ (string-append (getenv "HOME") "/.config")))
+
+ (define backup-directory
+ (string-append home-directory "/" (number->string (current-time))
+ "-guix-home-legacy-configs-backup"))
+
+ (define (preprocess-file file)
+ "If file is in XDG-CONFIGURATION-FILES-DIRECTORY use
+subdirectory from XDG_CONFIG_HOME to generate a target path."
+ (if (string-prefix? #$xdg-configuration-files-directory file)
+ (string-append
+ (substring xdg-config-home
+ (1+ (string-length home-directory)))
+ (substring file
+ (string-length #$xdg-configuration-files-directory)))
+ (string-append "." file)))
+
+ (define (target-file file)
+ ;; Return the target of FILE, a config file name sans leading dot
+ ;; such as "config/fontconfig/fonts.conf" or "bashrc".
+ (string-append home-directory "/" (preprocess-file file)))
+
+ (define (symlink-to-store? file)
+ (catch 'system-error
+ (lambda ()
+ (store-file-name? (readlink file)))
+ (lambda args
+ (if (= EINVAL (system-error-errno args))
+ #f
+ (apply throw args)))))
+
+ (define (backup-file file)
+ (define backup
+ (string-append backup-directory "/" (preprocess-file file)))
+
+ (mkdir-p backup-directory)
+ (format #t (G_ "Backing up ~a...") (target-file file))
+ (mkdir-p (dirname backup))
+ (rename-file (target-file file) backup)
+ (display (G_ " done\n")))
+
+ (define (cleanup-symlinks home-generation)
+ ;; Delete from $HOME files that originate in HOME-GENERATION, the
+ ;; store item containing a home generation.
+ (define config-file-directory
+ ;; Note: Trailing slash is needed because "files" is a symlink.
+ (string-append home-generation "/" #$home-files-directory "/"))
+
+ (define (strip file)
+ (string-drop file
+ (+ 1 (string-length config-file-directory))))
+
+ (format #t (G_ "Cleaning up symlinks from previous home at ~a.~%")
+ home-generation)
+ (newline)
+
+ (file-system-fold
+ (const #t)
+ (lambda (file stat _) ;leaf
+ (let ((file (target-file (strip file))))
+ (when (file-exists? file)
+ ;; DO NOT remove the file if it is no longer a symlink to
+ ;; the store, it will be backed up later during
+ ;; create-symlinks phase.
+ (if (symlink-to-store? file)
+ (begin
+ (format #t (G_ "Removing ~a...") file)
+ (delete-file file)
+ (display (G_ " done\n")))
+ (format
+ #t
+ (G_ "Skipping ~a (not a symlink to store)... done\n")
+ file)))))
+
+ (const #t) ;down
+ (lambda (directory stat _) ;up
+ (unless (string=? directory config-file-directory)
+ (let ((directory (target-file (strip directory))))
+ (catch 'system-error
+ (lambda ()
+ (rmdir directory)
+ (format #t (G_ "Removed ~a.\n") directory))
+ (lambda args
+ (let ((errno (system-error-errno args)))
+ (cond
+ ((= ENOTEMPTY errno)
+ (format
+ #t
+ (G_ "Skipping ~a (not an empty directory)... done\n")
+ directory))
+ ((= ENOTDIR errno) #t)
+ (else
+ (apply throw args)))))))))
+ (const #t) ;skip
+ (const #t) ;error
+ #t ;init
+ config-file-directory
+ lstat)
+
+ (display (G_ "Cleanup finished.\n\n")))
+
+ (define (create-symlinks home-generation)
+ ;; Create in $HOME symlinks for the files in HOME-GENERATION.
+ (define config-file-directory
+ ;; Note: Trailing slash is needed because "files" is a symlink.
+ (string-append home-generation "/" #$home-files-directory "/"))
+
+ (define (strip file)
+ (string-drop file
+ (+ 1 (string-length config-file-directory))))
+
+ (define (source-file file)
+ (readlink (string-append config-file-directory file)))
+
+ (file-system-fold
+ (const #t) ;enter?
+ (lambda (file stat result) ;leaf
+ (let ((source (source-file (strip file)))
+ (target (target-file (strip file))))
+ (when (file-exists? target)
+ (backup-file (strip file)))
+ (format #t (G_ "Symlinking ~a -> ~a...")
+ target source)
+ (symlink source target)
+ (display (G_ " done\n"))))
+ (lambda (directory stat result) ;down
+ (unless (string=? directory config-file-directory)
+ (let ((target (target-file (strip directory))))
+ (when (and (file-exists? target)
+ (not (file-is-directory? target)))
+ (backup-file (strip directory)))
+
+ (catch 'system-error
+ (lambda ()
+ (mkdir target))
+ (lambda args
+ (let ((errno (system-error-errno args)))
+ (unless (= EEXIST errno)
+ (format #t (G_ "failed to create directory ~a: ~s~%")
+ target (strerror errno))
+ (apply throw args))))))))
+ (const #t) ;up
+ (const #t) ;skip
+ (const #t) ;error
+ #t ;init
+ config-file-directory))
+
+ #$%initialize-gettext
+
+ (let* ((home (string-append home-directory "/.guix-home"))
+ (pivot (string-append home ".new"))
+ (new-home (getenv "GUIX_NEW_HOME"))
+ (old-home (getenv "GUIX_OLD_HOME")))
+ (when old-home
+ (cleanup-symlinks old-home))
+
+ (create-symlinks new-home)
+
+ (symlink new-home pivot)
+ (rename-file pivot home)
+
+ (display (G_" done\nFinished updating symlinks.\n\n")))))))
(define (update-symlinks-gexp _)
#~(primitive-load #$(update-symlinks-script)))
diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
index d230dd7665..361a2a6148 100644
--- a/gnu/home/services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -190,11 +190,11 @@ pre-populated content.")
"Default directory for videos."))
(define (home-xdg-user-directories-files-service config)
- `(("config/user-dirs.conf"
+ `(("user-dirs.conf"
,(mixed-text-file
"user-dirs.conf"
"enabled=False\n"))
- ("config/user-dirs.dirs"
+ ("user-dirs.dirs"
,(mixed-text-file
"user-dirs.dirs"
(serialize-configuration
@@ -218,7 +218,7 @@ pre-populated content.")
(service-type (name 'home-xdg-user-directories)
(extensions
(list (service-extension
- home-files-service-type
+ home-xdg-configuration-files-service-type
home-xdg-user-directories-files-service)
(service-extension
home-activation-service-type
@@ -374,7 +374,7 @@ configuration."
"=" val "\n")))
(define (serialize-alist config)
- (generic-serialize-alist identity format-config config))
+ (generic-serialize-alist append format-config config))
(define (serialize-xdg-desktop-action action)
(match action
@@ -417,7 +417,7 @@ that the application cannot open the specified MIME type.")
"A list of XDG desktop entries to create. See
@code{xdg-desktop-entry}."))
-(define (home-xdg-mime-applications-files-service config)
+(define (home-xdg-mime-applications-files config)
(define (add-xdg-desktop-entry-file entry)
(let ((file (first entry))
(config (second entry)))
@@ -425,16 +425,16 @@ that the application cannot open the specified MIME type.")
(apply mixed-text-file
(format #f "xdg-desktop-~a-entry" file)
config))))
+ (map (compose add-xdg-desktop-entry-file serialize-xdg-desktop-entry)
+ (home-xdg-mime-applications-configuration-desktop-entries config)))
- (append
- `(("config/mimeapps.list"
- ,(mixed-text-file
- "xdg-mime-appplications"
- (serialize-configuration
- config
- home-xdg-mime-applications-configuration-fields))))
- (map (compose add-xdg-desktop-entry-file serialize-xdg-desktop-entry)
- (home-xdg-mime-applications-configuration-desktop-entries config))))
+(define (home-xdg-mime-applications-xdg-files config)
+ `(("mimeapps.list"
+ ,(mixed-text-file
+ "xdg-mime-appplications"
+ (serialize-configuration
+ config
+ home-xdg-mime-applications-configuration-fields)))))
(define (home-xdg-mime-applications-extension old-config extension-configs)
(define (extract-fields config)
@@ -469,7 +469,10 @@ that the application cannot open the specified MIME type.")
(extensions
(list (service-extension
home-files-service-type
- home-xdg-mime-applications-files-service)))
+ home-xdg-mime-applications-files)
+ (service-extension
+ home-xdg-configuration-files-service-type
+ home-xdg-mime-applications-xdg-files)))
(compose identity)
(extend home-xdg-mime-applications-extension)
(default-value (home-xdg-mime-applications-configuration))
diff --git a/gnu/installer.scm b/gnu/installer.scm
index c8b7a66cfc..415f5a7af7 100644
--- a/gnu/installer.scm
+++ b/gnu/installer.scm
@@ -33,6 +33,7 @@
#:use-module (gnu packages admin)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
+ #:use-module (gnu packages compression)
#:use-module (gnu packages connman)
#:use-module (gnu packages cryptsetup)
#:use-module (gnu packages disk)
@@ -42,6 +43,7 @@
#:autoload (gnu packages gnupg) (guile-gcrypt)
#:use-module (gnu packages iso-codes)
#:use-module (gnu packages linux)
+ #:use-module (gnu packages nano)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages package-management)
#:use-module (gnu packages tls)
@@ -333,9 +335,11 @@ selected keymap."
ntfs-3g ;mkfs.ntfs
xfsprogs ;mkfs.xfs
kbd ;chvt
- guix ;guix system init call
util-linux ;mkwap
+ nano
shadow
+ tar ;dump
+ gzip ;dump
coreutils)))
(with-output-to-port (%make-void-port "w")
(lambda ()
@@ -352,7 +356,8 @@ selected keymap."
;; packages …), etc. modules.
(with-extensions (list guile-gcrypt guile-newt
guile-parted guile-bytestructures
- guile-json-3 guile-git guix gnutls)
+ guile-json-3 guile-git guile-webutils
+ guix gnutls)
(with-imported-modules `(,@(source-module-closure
`(,@modules
(gnu services herd)
@@ -363,6 +368,7 @@ selected keymap."
(use-modules (gnu installer record)
(gnu installer keymap)
(gnu installer steps)
+ (gnu installer dump)
(gnu installer final)
(gnu installer hostname)
(gnu installer locale)
@@ -379,7 +385,8 @@ selected keymap."
(guix build utils)
((system repl debug)
#:select (terminal-width))
- (ice-9 match))
+ (ice-9 match)
+ (ice-9 textual-ports))
;; Initialize gettext support so that installers can use
;; (guix i18n) module.
@@ -407,43 +414,56 @@ selected keymap."
;; verbose.
(terminal-width 200)
- (let* ((current-installer newt-installer)
- (steps (#$steps current-installer)))
- ((installer-init current-installer))
-
- (catch #t
- (lambda ()
- (define results
- (run-installer-steps
- #:rewind-strategy 'menu
- #:menu-proc (installer-menu-page current-installer)
- #:steps steps))
-
- (match (result-step results 'final)
- ('success
- ;; We did it! Let's reboot!
- (sync)
- (stop-service 'root))
- (_
- ;; The installation failed, exit so that it is restarted
- ;; by login.
- #f)))
- (const #f)
- (lambda (key . args)
- (syslog "crashing due to uncaught exception: ~s ~s~%"
- key args)
- (let ((error-file "/tmp/last-installer-error"))
- (call-with-output-file error-file
- (lambda (port)
- (display-backtrace (make-stack #t) port)
- (print-exception port
- (stack-ref (make-stack #t) 1)
- key args)))
- ((installer-exit-error current-installer)
- error-file key args))
- (primitive-exit 1)))
-
- ((installer-exit current-installer)))))))
+ (define current-installer newt-installer)
+ (define steps (#$steps current-installer))
+
+ (dynamic-wind
+ (installer-init current-installer)
+ (lambda ()
+ (parameterize
+ ((run-command-in-installer
+ (installer-run-command current-installer)))
+ (catch #t
+ (lambda ()
+ (define results
+ (run-installer-steps
+ #:rewind-strategy 'menu
+ #:menu-proc (installer-menu-page current-installer)
+ #:steps steps))
+
+ (match (result-step results 'final)
+ ('success
+ ;; We did it! Let's reboot!
+ (sync)
+ (stop-service 'root))
+ (_
+ ;; The installation failed, exit so that it is
+ ;; restarted by login.
+ #f)))
+ (const #f)
+ (lambda (key . args)
+ (installer-log-line "crashing due to uncaught exception: ~s ~s"
+ key args)
+ (define dump-dir
+ (prepare-dump key args #:result %current-result))
+ (define action
+ ((installer-exit-error current-installer)
+ (get-string-all
+ (open-input-file
+ (string-append dump-dir "/installer-backtrace")))))
+ (match action
+ ('dump
+ (let* ((dump-files
+ ((installer-dump-page current-installer)
+ dump-dir))
+ (dump-archive
+ (make-dump dump-dir dump-files)))
+ ((installer-report-page current-installer)
+ dump-archive)))
+ (_ #f))
+ (exit 1)))))
+
+ (installer-exit current-installer))))))
(program-file
"installer"
diff --git a/gnu/installer/connman.scm b/gnu/installer/connman.scm
index 2f33b58453..d21272036f 100644
--- a/gnu/installer/connman.scm
+++ b/gnu/installer/connman.scm
@@ -287,7 +287,7 @@ list so that each keys of a given technology are gathered in a separate list."
(define (connman-online?)
(let ((state (connman-state)))
- (eq? state 'online)))
+ (memq state '(ready online))))
(define (connman-connect-with-auth service password-proc)
"Connect to the given SERVICE with the password returned by calling
diff --git a/gnu/installer/dump.scm b/gnu/installer/dump.scm
new file mode 100644
index 0000000000..daa02f205a
--- /dev/null
+++ b/gnu/installer/dump.scm
@@ -0,0 +1,118 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@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 installer dump)
+ #:use-module (gnu installer utils)
+ #:use-module (guix build utils)
+ #:use-module (srfi srfi-11)
+ #:use-module (ice-9 iconv)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 popen)
+ #:use-module (ice-9 textual-ports)
+ #:use-module (web client)
+ #:use-module (web http)
+ #:use-module (web response)
+ #:use-module (webutils multipart)
+ #:export (prepare-dump
+ make-dump
+ send-dump-report))
+
+;; The installer crash dump type.
+(define %dump-type "installer-dump")
+
+(define (result->list result)
+ "Return the alist for the given RESULT."
+ (hash-map->list (lambda (k v)
+ (cons k v))
+ result))
+
+(define* (prepare-dump key args #:key result)
+ "Create a crash dump directory. KEY and ARGS represent the thrown error.
+RESULT is the installer result hash table. Returns the created directory path."
+ (define now (localtime (current-time)))
+ (define dump-dir
+ (format #f "/tmp/dump.~a"
+ (strftime "%F.%H.%M.%S" now)))
+ (mkdir-p dump-dir)
+ (with-directory-excursion dump-dir
+ ;; backtrace
+ (call-with-output-file "installer-backtrace"
+ (lambda (port)
+ (display-backtrace (make-stack #t) port)
+ (print-exception port
+ (stack-ref (make-stack #t) 1)
+ key args)))
+
+ ;; installer result
+ (call-with-output-file "installer-result"
+ (lambda (port)
+ (write (result->list result) port)))
+
+ ;; syslog
+ (copy-file "/var/log/messages" "syslog")
+
+ ;; dmesg
+ (let ((pipe (open-pipe* OPEN_READ "dmesg")))
+ (call-with-output-file "dmesg"
+ (lambda (port)
+ (dump-port pipe port)
+ (close-pipe pipe)))))
+ dump-dir)
+
+(define* (make-dump dump-dir file-choices)
+ "Create a crash dump archive from DUMP-DIR containing FILE-CHOICES.
+Returns the archive path."
+ (define output (string-append (basename dump-dir) ".tar.gz"))
+ (with-directory-excursion (dirname dump-dir)
+ (apply system* "tar" "-zcf" output
+ (map (lambda (f)
+ (string-append (basename dump-dir) "/" f))
+ file-choices)))
+ (canonicalize-path (string-append (dirname dump-dir) "/" output)))
+
+(define* (send-dump-report dump
+ #:key
+ (url "https://dump.guix.gnu.org"))
+ "Turn the DUMP archive into a multipart body and send it to the Guix crash
+dump server at URL."
+ (define (match-boundary kont)
+ (match-lambda
+ (('boundary . (? string? b))
+ (kont b))
+ (x #f)))
+
+ (define (response->string response)
+ (bytevector->string
+ (read-response-body response)
+ "UTF-8"))
+
+ (let-values (((body boundary)
+ (call-with-input-file dump
+ (lambda (port)
+ (format-multipart-body
+ `((,%dump-type . ,port)))))))
+ (false-if-exception
+ (response->string
+ (http-post
+ (string-append url "/upload")
+ #:keep-alive? #t
+ #:streaming? #t
+ #:headers `((content-type
+ . (multipart/form-data
+ (boundary . ,boundary))))
+ #:body body)))))
diff --git a/gnu/installer/final.scm b/gnu/installer/final.scm
index 276af908f7..3f6dacc490 100644
--- a/gnu/installer/final.scm
+++ b/gnu/installer/final.scm
@@ -85,8 +85,9 @@ USERS."
(uid (if root? 0 #f))
(home-directory
(user-home-directory user))
- (password (crypt (user-password user)
- (salt)))
+ (password (crypt
+ (secret-content (user-password user))
+ (salt)))
;; We need a string here, not a file-like, hence
;; this choice.
@@ -125,15 +126,15 @@ it can interact with the rest of the system."
(setlocale LC_ALL locale))))
(if supported?
(begin
- (syslog "install supported locale ~a~%." locale)
+ (installer-log-line "install supported locale ~a." locale)
(setenv "LC_ALL" locale))
(begin
;; If the selected locale is not supported, install a default UTF-8
;; locale. This is required to copy some files with UTF-8
;; characters, in the nss-certs package notably. Set LANGUAGE
;; anyways, to have translated messages if possible.
- (syslog "~a locale is not supported, installating en_US.utf8 \
-locale instead.~%" locale)
+ (installer-log-line "~a locale is not supported, installing \
+en_US.utf8 locale instead." locale)
(setlocale LC_ALL "en_US.utf8")
(setenv "LC_ALL" "en_US.utf8")
(setenv "LANGUAGE"
@@ -208,17 +209,9 @@ or #f. Return #t on success and #f on failure."
(setvbuf (current-output-port) 'none)
(setvbuf (current-error-port) 'none)
- ;; If there are any connected clients, assume that we are running
- ;; installation tests. In that case, dump the standard and error
- ;; outputs to syslog.
- (set! ret
- (if (not (null? (current-clients)))
- (with-output-to-file "/dev/console"
- (lambda ()
- (with-error-to-file "/dev/console"
- (lambda ()
- (run-command install-command)))))
- (run-command install-command))))
+ (setenv "PATH" "/run/current-system/profile/bin/")
+
+ (set! ret (run-command install-command)))
(lambda ()
;; Restart guix-daemon so that it does no keep the MNT namespace
;; alive.
diff --git a/gnu/installer/newt.scm b/gnu/installer/newt.scm
index 4f7fc6f4dc..1db78e6f0d 100644
--- a/gnu/installer/newt.scm
+++ b/gnu/installer/newt.scm
@@ -19,6 +19,7 @@
(define-module (gnu installer newt)
#:use-module (gnu installer record)
#:use-module (gnu installer utils)
+ #:use-module (gnu installer dump)
#:use-module (gnu installer newt ethernet)
#:use-module (gnu installer newt final)
#:use-module (gnu installer newt parameters)
@@ -39,7 +40,12 @@
#:use-module (guix config)
#:use-module (guix discovery)
#:use-module (guix i18n)
+ #:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-34)
+ #:use-module (srfi srfi-35)
+ #:use-module (ice-9 ftw)
+ #:use-module (ice-9 match)
#:use-module (newt)
#:export (newt-installer))
@@ -47,7 +53,7 @@
(newt-init)
(clear-screen)
(set-screen-size!)
- (syslog "Display is ~ax~a.~%" (screen-columns) (screen-rows))
+ (installer-log-line "Display is ~ax~a." (screen-columns) (screen-rows))
(push-help-line
(format #f (G_ "Press <F1> for installation parameters."))))
@@ -55,25 +61,102 @@
(newt-finish)
(clear-screen))
-(define (exit-error file key args)
+(define (exit-error error)
(newt-set-color COLORSET-ROOT "white" "red")
- (let ((width (nearest-exact-integer
- (* (screen-columns) 0.8)))
- (height (nearest-exact-integer
- (* (screen-rows) 0.7))))
- (run-file-textbox-page
- #:info-text (format #f (G_ "The installer has encountered an unexpected \
-problem. The backtrace is displayed below. Please report it by email to \
-<~a>.") %guix-bug-report-address)
+ (define action
+ (run-textbox-page
+ #:info-text (G_ "The installer has encountered an unexpected problem. \
+The backtrace is displayed below. You may choose to exit or create a dump \
+archive.")
#:title (G_ "Unexpected problem")
- #:file file
- #:exit-button? #f
- #:info-textbox-width width
- #:file-textbox-width width
- #:file-textbox-height height))
+ #:content error
+ #:buttons-spec
+ (list
+ (cons (G_ "Dump") (const 'dump))
+ (cons (G_ "Exit") (const 'exit)))))
(newt-set-color COLORSET-ROOT "white" "blue")
- (newt-finish)
- (clear-screen))
+ action)
+
+(define (report-page dump-archive)
+ (define text
+ (format #f (G_ "The dump archive was created as ~a. Would you like to \
+send this archive to the Guix servers?") dump-archive))
+ (define title (G_ "Dump archive created"))
+ (when (run-confirmation-page text title)
+ (let* ((uploaded-name (send-dump-report dump-archive))
+ (text (if uploaded-name
+ (format #f (G_ "The dump was uploaded as ~a. Please \
+report it by email to ~a.") uploaded-name %guix-bug-report-address)
+ (G_ "The dump could not be uploaded."))))
+ (run-error-page
+ text
+ (G_ "Dump upload result")))))
+
+(define (dump-page dump-dir)
+ (define files
+ (scandir dump-dir (lambda (x)
+ (not (or (string=? x ".")
+ (string=? x ".."))))))
+ (fold (match-lambda*
+ (((file . enable?) acc)
+ (if enable?
+ (cons file acc)
+ acc)))
+ '()
+ (run-dump-page
+ dump-dir
+ (map (lambda (x)
+ (cons x #f))
+ files))))
+
+(define (newt-run-command . args)
+ (define command-output "")
+ (define (line-accumulator line)
+ (set! command-output
+ (string-append/shared command-output line "\n")))
+ (define displayed-command
+ (string-join
+ (map (lambda (s) (string-append "\"" s "\"")) args)
+ " "))
+ (define result (run-external-command-with-line-hooks (list line-accumulator)
+ args))
+ (define exit-val (status:exit-val result))
+ (define term-sig (status:term-sig result))
+ (define stop-sig (status:stop-sig result))
+
+ (if (and exit-val (zero? exit-val))
+ #t
+ (let ((info-text
+ (cond
+ (exit-val
+ (format #f (G_ "External command ~s exited with code ~a")
+ args exit-val))
+ (term-sig
+ (format #f (G_ "External command ~s terminated by signal ~a")
+ args term-sig))
+ (stop-sig
+ (format #f (G_ "External command ~s stopped by signal ~a")
+ args stop-sig)))))
+ (run-textbox-page #:title (G_ "External command error")
+ #:info-text info-text
+ #:content command-output
+ #:buttons-spec
+ (list
+ (cons "Ignore" (const #t))
+ (cons "Abort"
+ (lambda ()
+ (abort-to-prompt 'installer-step 'abort)))
+ (cons "Report"
+ (lambda ()
+ (raise
+ (condition
+ ((@@ (guix build utils)
+ &invoke-error)
+ (program (car args))
+ (arguments (cdr args))
+ (exit-status exit-val)
+ (term-signal term-sig)
+ (stop-signal stop-sig)))))))))))
(define (final-page result prev-steps)
(run-final-page result prev-steps))
@@ -142,4 +225,7 @@ problem. The backtrace is displayed below. Please report it by email to \
(services-page services-page)
(welcome-page welcome-page)
(parameters-menu parameters-menu)
- (parameters-page parameters-page)))
+ (parameters-page parameters-page)
+ (dump-page dump-page)
+ (run-command newt-run-command)
+ (report-page report-page)))
diff --git a/gnu/installer/newt/ethernet.scm b/gnu/installer/newt/ethernet.scm
index ecd22efbb2..d75a640519 100644
--- a/gnu/installer/newt/ethernet.scm
+++ b/gnu/installer/newt/ethernet.scm
@@ -65,9 +65,7 @@ connection is pending."
(run-error-page
(G_ "No ethernet service available, please try again.")
(G_ "No service"))
- (raise
- (condition
- (&installer-step-abort))))
+ (abort-to-prompt 'installer-step 'abort))
((service)
;; Only one service is available so return it directly.
service)
@@ -81,7 +79,5 @@ connection is pending."
#:button-text (G_ "Exit")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort))))
+ (abort-to-prompt 'installer-step 'abort))
#:listbox-callback-procedure connect-ethernet-service))))
diff --git a/gnu/installer/newt/final.scm b/gnu/installer/newt/final.scm
index 7f6dd9f075..7c3f73ee82 100644
--- a/gnu/installer/newt/final.scm
+++ b/gnu/installer/newt/final.scm
@@ -59,9 +59,7 @@ This will take a few minutes.")
#:file-textbox-height height
#:exit-button-callback-procedure
(lambda ()
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (run-install-success-page)
(match (current-clients)
@@ -88,9 +86,7 @@ press the button to reboot.")))
(G_ "Restart the installer")
(G_ "The final system installation step failed. You can resume from \
a specific step, or restart the installer."))
- (1 (raise
- (condition
- (&installer-step-abort))))
+ (1 (abort-to-prompt 'installer-step 'abort))
(2
;; Keep going, the installer will be restarted later on.
#t)))
@@ -109,7 +105,7 @@ a specific step, or restart the installer."))
(define (run-final-page result prev-steps)
(define (wait-for-clients)
(unless (null? (current-clients))
- (syslog "waiting with clients before starting final step~%")
+ (installer-log-line "waiting with clients before starting final step")
(send-to-clients '(starting-final-step))
(match (select (current-clients) '() '())
(((port _ ...) _ _)
@@ -119,7 +115,7 @@ a specific step, or restart the installer."))
;; things such as changing the swap partition label.
(wait-for-clients)
- (syslog "proceeding with final step~%")
+ (installer-log-line "proceeding with final step")
(let* ((configuration (format-configuration prev-steps result))
(user-partitions (result-step result 'partition))
(locale (result-step result 'locale))
diff --git a/gnu/installer/newt/keymap.scm b/gnu/installer/newt/keymap.scm
index 92f7f46f34..c5d4be6792 100644
--- a/gnu/installer/newt/keymap.scm
+++ b/gnu/installer/newt/keymap.scm
@@ -59,9 +59,7 @@ different layout at any time from the parameters menu.")))
((param) (const #f))
(else
(lambda _
- (raise
- (condition
- (&installer-step-abort)))))))))
+ (abort-to-prompt 'installer-step 'abort)))))))
(define (run-variant-page variants variant->text)
(let ((title (G_ "Variant")))
@@ -74,9 +72,7 @@ different layout at any time from the parameters menu.")))
#:button-text (G_ "Back")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (sort-layouts layouts)
"Sort LAYOUTS list by putting the US layout ahead and return it."
diff --git a/gnu/installer/newt/locale.scm b/gnu/installer/newt/locale.scm
index bfd89aca2c..01171e253f 100644
--- a/gnu/installer/newt/locale.scm
+++ b/gnu/installer/newt/locale.scm
@@ -43,9 +43,7 @@ installation process and for the installed system.")
#:button-text (G_ "Exit")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort))))))
+ (abort-to-prompt 'installer-step 'abort))))
;; Immediately install the chosen language so that the territory page that
;; comes after (optionally) is displayed in the chosen language.
@@ -63,9 +61,7 @@ installation process and for the installed system.")
#:button-text (G_ "Back")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (run-codeset-page codesets)
(let ((title (G_ "Locale codeset")))
@@ -78,9 +74,7 @@ installation process and for the installed system.")
#:button-text (G_ "Back")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (run-modifier-page modifiers modifier->text)
(let ((title (G_ "Locale modifier")))
@@ -94,9 +88,7 @@ symbol.")
#:button-text (G_ "Back")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define* (run-locale-page #:key
supported-locales
@@ -110,11 +102,10 @@ associating a territory code with a territory name. The formatted locale, under
glibc format is returned."
(define (break-on-locale-found locales)
- "Raise the &installer-step-break condition if LOCALES contains exactly one
+ "Break to the installer step if LOCALES contains exactly one
element."
(and (= (length locales) 1)
- (raise
- (condition (&installer-step-break)))))
+ (abort-to-prompt 'installer-step 'break)))
(define (filter-locales locales result)
"Filter the list of locale records LOCALES using the RESULT returned by
@@ -218,8 +209,8 @@ glibc locale string and return it."
;; If run-installer-steps returns locally, it means that the user had to go
;; through all steps (language, territory, codeset and modifier) to select a
- ;; locale. In that case, like if we exited by raising &installer-step-break
- ;; condition, turn the result into a glibc locale string and return it.
+ ;; locale. In that case, like if we exited by breaking to the installer
+ ;; step, turn the result into a glibc locale string and return it.
(result->locale-string
supported-locales
(run-installer-steps #:steps locale-steps)))
diff --git a/gnu/installer/newt/network.scm b/gnu/installer/newt/network.scm
index fb221483c3..0477a489be 100644
--- a/gnu/installer/newt/network.scm
+++ b/gnu/installer/newt/network.scm
@@ -65,12 +65,8 @@ Internet and return the selected technology. For now, only technologies with
(G_ "Exit")
(G_ "The install process requires Internet access but no \
network devices were found. Do you want to continue anyway?"))
- ((1) (raise
- (condition
- (&installer-step-break))))
- ((2) (raise
- (condition
- (&installer-step-abort))))))
+ ((1) (abort-to-prompt 'installer-step 'break))
+ ((2) (abort-to-prompt 'installer-step 'abort))))
((technology)
;; Since there's only one technology available, skip the selection
;; screen.
@@ -86,9 +82,7 @@ network devices were found. Do you want to continue anyway?"))
#:button-text (G_ "Exit")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort))))))))
+ (abort-to-prompt 'installer-step 'abort))))))
(define (find-technology-by-type technologies type)
"Find and return a technology with the given TYPE in TECHNOLOGIES list."
@@ -156,9 +150,7 @@ FULL-VALUE tentatives, spaced by 1 second."
(G_ "The selected network does not provide access to the \
Internet and the Guix substitute server, please try again.")
(G_ "Connection error"))
- (raise
- (condition
- (&installer-step-abort))))))
+ (abort-to-prompt 'installer-step 'abort))))
(define (run-network-page)
"Run a page to allow the user to configure connman so that it can access the
diff --git a/gnu/installer/newt/page.scm b/gnu/installer/newt/page.scm
index 4209674c28..0f508a31c0 100644
--- a/gnu/installer/newt/page.scm
+++ b/gnu/installer/newt/page.scm
@@ -22,6 +22,7 @@
#:use-module (gnu installer steps)
#:use-module (gnu installer utils)
#:use-module (gnu installer newt utils)
+ #:use-module (guix build utils)
#:use-module (guix i18n)
#:use-module (ice-9 i18n)
#:use-module (ice-9 match)
@@ -43,6 +44,10 @@
run-scale-page
run-checkbox-tree-page
run-file-textbox-page
+ %ok-button
+ %exit-button
+ run-textbox-page
+ run-dump-page
run-form-with-clients))
@@ -93,9 +98,9 @@ disconnect.
Like 'run-form', return two values: the exit reason, and an \"argument\"."
(define* (discard-client! port #:optional errno)
(if errno
- (syslog "removing client ~d due to ~s~%"
+ (installer-log-line "removing client ~d due to ~s"
(fileno port) (strerror errno))
- (syslog "removing client ~d due to EOF~%"
+ (installer-log-line "removing client ~d due to EOF"
(fileno port)))
;; XXX: Watch out! There's no 'form-unwatch-fd' procedure in Newt so we
@@ -124,7 +129,7 @@ Like 'run-form', return two values: the exit reason, and an \"argument\"."
(send-to-clients exp)
(let loop ()
- (syslog "running form ~s (~s) with ~d clients~%"
+ (installer-log-line "running form ~s (~s) with ~d clients"
form title (length (current-clients)))
;; Call 'watch-clients!' within the loop because there might be new
@@ -146,7 +151,7 @@ Like 'run-form', return two values: the exit reason, and an \"argument\"."
(discard-client! port)
(loop))
(obj
- (syslog "form ~s (~s): client ~d replied ~s~%"
+ (installer-log-line "form ~s (~s): client ~d replied ~s"
form title (fileno port) obj)
(values 'exit-fd-ready obj))))
(lambda args
@@ -156,8 +161,9 @@ Like 'run-form', return two values: the exit reason, and an \"argument\"."
;; Accept a new client and send it EXP.
(match (accept port)
((client . _)
- (syslog "accepting new client ~d while on form ~s~%"
- (fileno client) form)
+ (installer-log-line
+ "accepting new client ~d while on form ~s"
+ (fileno client) form)
(catch 'system-error
(lambda ()
(write exp client)
@@ -486,7 +492,7 @@ the current listbox item has to be selected by key."
(string=? str (listbox-item->text item))))
keys)
((key . item) item)
- (#f (raise (condition (&installer-step-abort))))))
+ (#f (abort-to-prompt 'installer-step 'abort))))
;; On every listbox element change, check if we need to skip it. If yes,
;; depending on the 'last-listbox-key', jump forward or backward. If no,
@@ -688,7 +694,7 @@ ITEMS when 'Ok' is pressed."
(string=? str (item->text item))))
keys)
((key . item) item)
- (#f (raise (condition (&installer-step-abort))))))
+ (#f (abort-to-prompt 'installer-step 'abort))))
(add-form-to-grid grid form #t)
(make-wrapped-grid-window grid title)
@@ -726,8 +732,7 @@ ITEMS when 'Ok' is pressed."
(newt-suspend)
;; Use Nano because it syntax-highlights Scheme by default.
;; TODO: Add a menu to choose an editor?
- (run-command (list "/run/current-system/profile/bin/nano" file)
- #:locale locale)
+ (invoke "nano" file)
(newt-resume))
(define* (run-file-textbox-page #:key
@@ -811,6 +816,151 @@ ITEMS when 'Ok' is pressed."
(destroy-form-and-pop form))))
(if (and (eq? exit-reason 'exit-component)
+ edit-button
(components=? argument edit-button))
(loop) ;recurse in tail position
result)))))
+
+(define %ok-button
+ (cons (G_ "Ok") (lambda () #t)))
+
+(define %exit-button
+ (cons (G_ "Exit") (lambda () (abort-to-prompt 'installer-step 'abort))))
+
+(define %default-buttons
+ (list %ok-button %exit-button))
+
+(define (make-newt-buttons buttons-spec)
+ (map
+ (match-lambda ((title . proc)
+ (cons (make-button -1 -1 title) proc)))
+ buttons-spec))
+
+(define* (run-textbox-page #:key
+ title
+ info-text
+ content
+ (buttons-spec %default-buttons))
+ "Run a page to display INFO-TEXT followed by CONTENT to the user, who has to
+choose an action among the buttons specified by BUTTONS-SPEC.
+
+BUTTONS-SPEC is an association list with button labels as keys, and callback
+procedures as values.
+
+This procedure returns the result of the callback procedure of the button
+chosen by the user."
+ (define info-textbox
+ (make-reflowed-textbox -1 -1 info-text
+ 50
+ #:flags FLAG-BORDER))
+ (define content-textbox
+ (make-textbox -1 -1
+ 50
+ 30
+ (logior FLAG-SCROLL FLAG-BORDER)))
+ (define buttons
+ (make-newt-buttons buttons-spec))
+ (define grid
+ (vertically-stacked-grid
+ GRID-ELEMENT-COMPONENT info-textbox
+ GRID-ELEMENT-COMPONENT content-textbox
+ GRID-ELEMENT-SUBGRID
+ (apply
+ horizontal-stacked-grid
+ (append-map (match-lambda ((button . proc)
+ (list GRID-ELEMENT-COMPONENT button)))
+ buttons))))
+ (define form (make-form #:flags FLAG-NOF12))
+ (add-form-to-grid grid form #t)
+ (make-wrapped-grid-window grid title)
+ (set-textbox-text content-textbox
+ (receive (_w _h text)
+ (reflow-text content
+ 50
+ 0 0)
+ text))
+
+ (receive (exit-reason argument)
+ (run-form-with-clients form
+ `(contents-dialog (title ,title)
+ (text ,info-text)
+ (content ,content)))
+ (destroy-form-and-pop form)
+ (match exit-reason
+ ('exit-component
+ (let ((proc (assq-ref buttons argument)))
+ (if proc
+ (proc)
+ (raise
+ (condition
+ (&serious)
+ (&message
+ (message (format #f "Unable to find corresponding PROC for \
+component ~a." argument))))))))
+ ;; TODO
+ ('exit-fd-ready
+ (raise (condition (&serious)))))))
+
+(define* (run-dump-page base-dir file-choices)
+ (define info-textbox
+ (make-reflowed-textbox -1 -1 "Please select files you wish to include in \
+the dump."
+ 50
+ #:flags FLAG-BORDER))
+ (define components
+ (map (match-lambda ((file . enabled)
+ (list
+ (make-compact-button -1 -1 "Edit")
+ (make-checkbox -1 -1 file (if enabled #\x #\ ) " x")
+ file)))
+ file-choices))
+
+ (define sub-grid (make-grid 2 (length components)))
+
+ (for-each
+ (match-lambda* (((button checkbox _) index)
+ (set-grid-field sub-grid 0 index
+ GRID-ELEMENT-COMPONENT checkbox
+ #:anchor ANCHOR-LEFT)
+ (set-grid-field sub-grid 1 index
+ GRID-ELEMENT-COMPONENT button
+ #:anchor ANCHOR-LEFT)))
+ components (iota (length components)))
+
+ (define grid
+ (vertically-stacked-grid
+ GRID-ELEMENT-COMPONENT info-textbox
+ GRID-ELEMENT-SUBGRID sub-grid
+ GRID-ELEMENT-COMPONENT (make-button -1 -1 "Create")))
+
+ (define form (make-form #:flags FLAG-NOF12))
+
+ (add-form-to-grid grid form #t)
+ (make-wrapped-grid-window grid "Installer dump")
+
+ (define prompt-tag (make-prompt-tag))
+
+ (let loop ()
+ (call-with-prompt prompt-tag
+ (lambda ()
+ (receive (exit-reason argument)
+ (run-form-with-clients form
+ `(dump-page))
+ (match exit-reason
+ ('exit-component
+ (let ((result
+ (map (match-lambda
+ ((edit checkbox filename)
+ (if (components=? edit argument)
+ (abort-to-prompt prompt-tag filename)
+ (cons filename (eq? #\x
+ (checkbox-value checkbox))))))
+ components)))
+ (destroy-form-and-pop form)
+ result))
+ ;; TODO
+ ('exit-fd-ready
+ (raise (condition (&serious)))))))
+ (lambda (k file)
+ (edit-file (string-append base-dir "/" file))
+ (loop)))))
diff --git a/gnu/installer/newt/partition.scm b/gnu/installer/newt/partition.scm
index ccc7686906..e7a97810ac 100644
--- a/gnu/installer/newt/partition.scm
+++ b/gnu/installer/newt/partition.scm
@@ -36,10 +36,8 @@
#:export (run-partitioning-page))
(define (button-exit-action)
- "Raise the &installer-step-abort condition."
- (raise
- (condition
- (&installer-step-abort))))
+ "Abort the installer step."
+ (abort-to-prompt 'installer-step 'abort))
(define (run-scheme-page)
"Run a page asking the user for a partitioning scheme."
@@ -801,9 +799,9 @@ by pressing the Exit button.~%~%")))
;; Make sure the disks are not in use before proceeding to formatting.
(free-parted eligible-devices)
(format-user-partitions user-partitions-with-pass)
- (syslog "formatted ~a user partitions~%"
+ (installer-log-line "formatted ~a user partitions"
(length user-partitions-with-pass))
- (syslog "user-partitions: ~a~%" user-partitions)
+ (installer-log-line "user-partitions: ~a" user-partitions)
(destroy-form-and-pop form)
user-partitions))
diff --git a/gnu/installer/newt/services.scm b/gnu/installer/newt/services.scm
index c218825813..9951ad2212 100644
--- a/gnu/installer/newt/services.scm
+++ b/gnu/installer/newt/services.scm
@@ -46,9 +46,7 @@ to choose from them later when you log in.")
#:checkbox-tree-height 9
#:exit-button-callback-procedure
(lambda ()
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (run-networking-cbt-page)
"Run a page allowing the user to select networking services."
@@ -65,9 +63,7 @@ system.")
#:checkbox-tree-height 5
#:exit-button-callback-procedure
(lambda ()
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (run-printing-services-cbt-page)
"Run a page allowing the user to select document services such as CUPS."
@@ -85,9 +81,7 @@ system.")
#:checkbox-tree-height 9
#:exit-button-callback-procedure
(lambda ()
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (run-console-services-cbt-page)
"Run a page to select various system adminstration services for non-graphical
@@ -130,9 +124,7 @@ client may be enough for a server.")
#:button-text (G_ "Exit")
#:button-callback-procedure
(lambda _
- (raise
- (condition
- (&installer-step-abort)))))))
+ (abort-to-prompt 'installer-step 'abort)))))
(define (run-services-page)
(let ((desktop (run-desktop-environments-cbt-page)))
diff --git a/gnu/installer/newt/timezone.scm b/gnu/installer/newt/timezone.scm
index 67bf41ff84..bed9f9d5cb 100644
--- a/gnu/installer/newt/timezone.scm
+++ b/gnu/installer/newt/timezone.scm
@@ -65,9 +65,7 @@ returned."
#:button-callback-procedure
(if (null? path)
(lambda _
- (raise
- (condition
- (&installer-step-abort))))
+ (abort-to-prompt 'installer-step 'abort))
(lambda _
(loop (all-but-last path))))
#:listbox-callback-procedure
diff --git a/gnu/installer/newt/user.scm b/gnu/installer/newt/user.scm
index 58bb86bf96..7c1cc2249d 100644
--- a/gnu/installer/newt/user.scm
+++ b/gnu/installer/newt/user.scm
@@ -20,7 +20,6 @@
(define-module (gnu installer newt user)
#:use-module (gnu installer user)
- #:use-module ((gnu installer steps) #:select (&installer-step-abort))
#:use-module (gnu installer newt page)
#:use-module (gnu installer newt utils)
#:use-module (gnu installer utils)
@@ -144,7 +143,7 @@ REAL-NAME, and HOME-DIRECTORY as the initial values in the form."
(name name)
(real-name real-name)
(home-directory home-directory)
- (password password))
+ (password (make-secret password)))
(run-user-add-page #:name name
#:real-name real-name
#:home-directory
@@ -257,9 +256,7 @@ administrator (\"root\").")
(run users))
(reverse users))
((components=? argument exit-button)
- (raise
- (condition
- (&installer-step-abort))))))
+ (abort-to-prompt 'installer-step 'abort))))
('exit-fd-ready
;; Read the complete user list at once.
(match argument
@@ -269,7 +266,7 @@ administrator (\"root\").")
(map (lambda (name real-name home password)
(user (name name) (real-name real-name)
(home-directory home)
- (password password)))
+ (password (make-secret password))))
names real-names homes passwords))))))
(lambda ()
(destroy-form-and-pop form))))))
@@ -277,5 +274,5 @@ administrator (\"root\").")
;; Add a "root" user simply to convey the root password.
(cons (user (name "root")
(home-directory "/root")
- (password (run-root-password-page)))
+ (password (make-secret (run-root-password-page))))
(run '())))
diff --git a/gnu/installer/newt/welcome.scm b/gnu/installer/newt/welcome.scm
index 5f461279e2..7a7ddfb7bd 100644
--- a/gnu/installer/newt/welcome.scm
+++ b/gnu/installer/newt/welcome.scm
@@ -84,7 +84,7 @@ we want this page to occupy all the screen space available."
(string=? str (listbox-item->text item))))
keys)
((key . item) item)
- (#f (raise (condition (&installer-step-abort))))))
+ (#f (abort-to-prompt 'installer-step 'abort))))
(set-textbox-text logo-textbox (read-all logo))
diff --git a/gnu/installer/newt/wifi.scm b/gnu/installer/newt/wifi.scm
index f5d8f1fdbf..8a87cbdf4b 100644
--- a/gnu/installer/newt/wifi.scm
+++ b/gnu/installer/newt/wifi.scm
@@ -237,9 +237,7 @@ force a wifi scan."
(run-wifi-scan-page)
(run-wifi-page))
((components=? argument exit-button)
- (raise
- (condition
- (&installer-step-abort))))
+ (abort-to-prompt 'installer-step 'abort))
((components=? argument listbox)
(let ((result (connect-wifi-service listbox service-items)))
(unless result
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm
index 66e07574c9..94ef9b42bc 100644
--- a/gnu/installer/parted.scm
+++ b/gnu/installer/parted.scm
@@ -343,13 +343,12 @@ fail. See rereadpt function in wipefs.c of util-linux for an explanation."
(define (remove-logical-devices)
"Remove all active logical devices."
- (with-null-output-ports
- (invoke "dmsetup" "remove_all")))
+ ((run-command-in-installer) "dmsetup" "remove_all"))
(define (installer-root-partition-path)
"Return the root partition path, or #f if it could not be detected."
(let* ((cmdline (linux-command-line))
- (root (find-long-option "--root" cmdline)))
+ (root (find-long-option "root" cmdline)))
(and root
(or (and (access? root F_OK) root)
(find-partition-by-label root)
@@ -371,7 +370,8 @@ which are smaller than %MIN-DEVICE-SIZE."
(let ((length (device-length device))
(sector-size (device-sector-size device)))
(and (< (* length sector-size) %min-device-size)
- (syslog "~a is not eligible because it is smaller than ~a.~%"
+ (installer-log-line "~a is not eligible because it is smaller than \
+~a."
(device-path device)
(unit-format-custom-byte device
%min-device-size
@@ -391,7 +391,8 @@ which are smaller than %MIN-DEVICE-SIZE."
(string=? the-installer-root-partition-path
(partition-get-path partition)))
(disk-partitions disk)))))
- (syslog "~a is not eligible because it is the installation device.~%"
+ (installer-log-line "~a is not eligible because it is the \
+installation device."
(device-path device))))
(remove
@@ -634,8 +635,14 @@ determined by MAX-LENGTH-COLUMN procedure."
(define (mklabel device type-name)
"Create a partition table on DEVICE. TYPE-NAME is the type of the partition
table, \"msdos\" or \"gpt\"."
- (let ((type (disk-type-get type-name)))
- (disk-new-fresh device type)))
+ (let* ((type (disk-type-get type-name))
+ (disk (disk-new-fresh device type)))
+ (or disk
+ (raise
+ (condition
+ (&error)
+ (&message (message (format #f "Cannot create partition table of type
+~a on device ~a." type-name (device-path device)))))))))
;;
@@ -817,24 +824,22 @@ cause them to cross."
(disk-add-partition disk partition no-constraint)))
(partition-ok?
(or partition-constraint-ok? partition-no-contraint-ok?)))
- (syslog "Creating partition:
-~/type: ~a
-~/filesystem-type: ~a
-~/start: ~a
-~/end: ~a
-~/start-range: [~a, ~a]
-~/end-range: [~a, ~a]
-~/constraint: ~a
-~/no-constraint: ~a
-"
- partition-type
- (filesystem-type-name filesystem-type)
- start-sector*
- end-sector
- (geometry-start start-range) (geometry-end start-range)
- (geometry-start end-range) (geometry-end end-range)
- partition-constraint-ok?
- partition-no-contraint-ok?)
+ (installer-log-line "Creating partition:")
+ (installer-log-line "~/type: ~a" partition-type)
+ (installer-log-line "~/filesystem-type: ~a"
+ (filesystem-type-name filesystem-type))
+ (installer-log-line "~/start: ~a" start-sector*)
+ (installer-log-line "~/end: ~a" end-sector)
+ (installer-log-line "~/start-range: [~a, ~a]"
+ (geometry-start start-range)
+ (geometry-end start-range))
+ (installer-log-line "~/end-range: [~a, ~a]"
+ (geometry-start end-range)
+ (geometry-end end-range))
+ (installer-log-line "~/constraint: ~a"
+ partition-constraint-ok?)
+ (installer-log-line "~/no-constraint: ~a"
+ partition-no-contraint-ok?)
;; Set the partition name if supported.
(when (and partition-ok? has-name? name)
(partition-set-name partition name))
@@ -1115,53 +1120,37 @@ list and return the updated list."
(file-name file-name))))
user-partitions))
-(define-syntax-rule (with-null-output-ports exp ...)
- "Evaluate EXP with both the output port and the error port pointing to the
-bit bucket."
- (with-output-to-port (%make-void-port "w")
- (lambda ()
- (with-error-to-port (%make-void-port "w")
- (lambda () exp ...)))))
-
(define (create-btrfs-file-system partition)
"Create a btrfs file-system for PARTITION file-name."
- (with-null-output-ports
- (invoke "mkfs.btrfs" "-f" partition)))
+ ((run-command-in-installer) "mkfs.btrfs" "-f" partition))
(define (create-ext4-file-system partition)
"Create an ext4 file-system for PARTITION file-name."
- (with-null-output-ports
- (invoke "mkfs.ext4" "-F" partition)))
+ ((run-command-in-installer) "mkfs.ext4" "-F" partition))
(define (create-fat16-file-system partition)
"Create a fat16 file-system for PARTITION file-name."
- (with-null-output-ports
- (invoke "mkfs.fat" "-F16" partition)))
+ ((run-command-in-installer) "mkfs.fat" "-F16" partition))
(define (create-fat32-file-system partition)
"Create a fat32 file-system for PARTITION file-name."
- (with-null-output-ports
- (invoke "mkfs.fat" "-F32" partition)))
+ ((run-command-in-installer) "mkfs.fat" "-F32" partition))
(define (create-jfs-file-system partition)
"Create a JFS file-system for PARTITION file-name."
- (with-null-output-ports
- (invoke "jfs_mkfs" "-f" partition)))
+ ((run-command-in-installer) "jfs_mkfs" "-f" partition))
(define (create-ntfs-file-system partition)
"Create a JFS file-system for PARTITION file-name."
- (with-null-output-ports
- (invoke "mkfs.ntfs" "-F" "-f" partition)))
+ ((run-command-in-installer) "mkfs.ntfs" "-F" "-f" partition))
(define (create-xfs-file-system partition)
"Create an XFS file-system for PARTITION file-name."
- (with-null-output-ports
- (invoke "mkfs.xfs" "-f" partition)))
+ ((run-command-in-installer) "mkfs.xfs" "-f" partition))
(define (create-swap-partition partition)
"Set up swap area on PARTITION file-name."
- (with-null-output-ports
- (invoke "mkswap" "-f" partition)))
+ ((run-command-in-installer) "mkswap" "-f" partition))
(define (call-with-luks-key-file password proc)
"Write PASSWORD in a temporary file and pass it to PROC as argument."
@@ -1188,17 +1177,18 @@ USER-PARTITION if it is encrypted, or the plain file-name otherwise."
(call-with-luks-key-file
password
(lambda (key-file)
- (syslog "formatting and opening LUKS entry ~s at ~s~%"
+ (installer-log-line "formatting and opening LUKS entry ~s at ~s"
label file-name)
- (system* "cryptsetup" "-q" "luksFormat" file-name key-file)
- (system* "cryptsetup" "open" "--type" "luks"
- "--key-file" key-file file-name label)))))
+ ((run-command-in-installer) "cryptsetup" "-q" "luksFormat"
+ file-name key-file)
+ ((run-command-in-installer) "cryptsetup" "open" "--type" "luks"
+ "--key-file" key-file file-name label)))))
(define (luks-close user-partition)
"Close the encrypted partition pointed by USER-PARTITION."
(let ((label (user-partition-crypt-label user-partition)))
- (syslog "closing LUKS entry ~s~%" label)
- (system* "cryptsetup" "close" label)))
+ (installer-log-line "closing LUKS entry ~s" label)
+ ((run-command-in-installer) "cryptsetup" "close" label)))
(define (format-user-partitions user-partitions)
"Format the <user-partition> records in USER-PARTITIONS list with
@@ -1279,7 +1269,7 @@ respective mount-points."
(file-name
(user-partition-upper-file-name user-partition)))
(mkdir-p target)
- (syslog "mounting ~s on ~s~%" file-name target)
+ (installer-log-line "mounting ~s on ~s" file-name target)
(mount file-name target mount-type)))
sorted-partitions)))
@@ -1295,7 +1285,7 @@ respective mount-points."
(target
(string-append (%installer-target-dir)
mount-point)))
- (syslog "unmounting ~s~%" target)
+ (installer-log-line "unmounting ~s" target)
(umount target)
(when crypt-label
(luks-close user-partition))))
@@ -1486,6 +1476,6 @@ the devices not to be used before returning."
(error
(format #f (G_ "Device ~a is still in use.")
file-name))
- (syslog "Syncing ~a took ~a seconds.~%"
+ (installer-log-line "Syncing ~a took ~a seconds."
file-name (time-second time)))))
device-file-names)))
diff --git a/gnu/installer/record.scm b/gnu/installer/record.scm
index 0b34318c45..20519a26c3 100644
--- a/gnu/installer/record.scm
+++ b/gnu/installer/record.scm
@@ -41,7 +41,10 @@
installer-services-page
installer-welcome-page
installer-parameters-menu
- installer-parameters-page))
+ installer-parameters-page
+ installer-dump-page
+ installer-run-command
+ installer-report-page))
;;;
@@ -61,7 +64,7 @@
(init installer-init)
;; procedure: void -> void
(exit installer-exit)
- ;; procedure (key arguments) -> void
+ ;; procedure (key arguments) -> (action)
(exit-error installer-exit-error)
;; procedure void -> void
(final-page installer-final-page)
@@ -91,4 +94,10 @@
;; procedure (menu-proc) -> void
(parameters-menu installer-parameters-menu)
;; procedure (keyboard-layout-selection) -> void
- (parameters-page installer-parameters-page))
+ (parameters-page installer-parameters-page)
+ ;; procedure (dump) -> void
+ (dump-page installer-dump-page)
+ ;; procedure command -> bool
+ (run-command installer-run-command)
+ ;; procedure (report) -> void
+ (report-page installer-report-page))
diff --git a/gnu/installer/steps.scm b/gnu/installer/steps.scm
index c05dfa567a..8bc38181a7 100644
--- a/gnu/installer/steps.scm
+++ b/gnu/installer/steps.scm
@@ -28,13 +28,7 @@
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (rnrs io ports)
- #:export (&installer-step-abort
- installer-step-abort?
-
- &installer-step-break
- installer-step-break?
-
- <installer-step>
+ #:export (<installer-step>
installer-step
make-installer-step
installer-step?
@@ -52,15 +46,13 @@
%installer-configuration-file
%installer-target-dir
format-configuration
- configuration->file))
+ configuration->file
-;; This condition may be raised to abort the current step.
-(define-condition-type &installer-step-abort &condition
- installer-step-abort?)
+ %current-result))
-;; This condition may be raised to break out from the steps execution.
-(define-condition-type &installer-step-break &condition
- installer-step-break?)
+;; Hash table storing the step results. Use it only for logging and debug
+;; purposes.
+(define %current-result (make-hash-table))
;; An installer-step record is basically an id associated to a compute
;; procedure. The COMPUTE procedure takes exactly one argument, an association
@@ -88,8 +80,10 @@
(rewind-strategy 'previous)
(menu-proc (const #f)))
"Run the COMPUTE procedure of all <installer-step> records in STEPS
-sequentially. If the &installer-step-abort condition is raised, fallback to a
-previous install-step, accordingly to the specified REWIND-STRATEGY.
+sequentially, inside a the 'installer-step prompt. When aborted to with a
+parameter of 'abort, fallback to a previous install-step, accordingly to the
+specified REWIND-STRATEGY. When aborted to with a parameter of 'break, stop
+the computation and return the accumalated result so far.
REWIND-STRATEGY possible values are 'previous, 'menu and 'start. If 'previous
is selected, the execution will resume at the previous installer-step. If
@@ -106,10 +100,7 @@ the form:
where STEP-ID is the ID field of the installer-step and COMPUTE-RESULT the
result of the associated COMPUTE procedure. This result association list is
passed as argument of every COMPUTE procedure. It is finally returned when the
-computation is over.
-
-If the &installer-step-break condition is raised, stop the computation and
-return the accumalated result so far."
+computation is over."
(define (pop-result list)
(cdr list))
@@ -143,62 +134,61 @@ return the accumalated result so far."
(match todo-steps
(() (reverse result))
((step . rest-steps)
- (guard (c ((installer-step-abort? c)
- (case rewind-strategy
- ((previous)
- (match done-steps
- (()
- ;; We cannot go previous the first step. So re-raise
- ;; the exception. It might be useful in the case of
- ;; nested run-installer-steps. Abort to 'raise-above
- ;; prompt to prevent the condition from being catched
- ;; by one of the previously installed guard.
- (abort-to-prompt 'raise-above c))
- ((prev-done ... last-done)
- (run (pop-result result)
- #:todo-steps (cons last-done todo-steps)
- #:done-steps prev-done))))
- ((menu)
- (let ((goto-step (menu-proc
- (append done-steps (list step)))))
- (if (eq? goto-step step)
- (run result
- #:todo-steps todo-steps
- #:done-steps done-steps)
- (skip-to-step goto-step result
- #:todo-steps todo-steps
- #:done-steps done-steps))))
- ((start)
- (if (null? done-steps)
- ;; Same as above, it makes no sense to jump to start
- ;; when we are at the first installer-step. Abort to
- ;; 'raise-above prompt to re-raise the condition.
- (abort-to-prompt 'raise-above c)
- (run '()
- #:todo-steps steps
- #:done-steps '())))))
- ((installer-step-break? c)
- (reverse result)))
- (syslog "running step '~a'~%" (installer-step-id step))
- (let* ((id (installer-step-id step))
- (compute (installer-step-compute step))
- (res (compute result done-steps)))
- (run (alist-cons id res result)
- #:todo-steps rest-steps
- #:done-steps (append done-steps (list step))))))))
+ (call-with-prompt 'installer-step
+ (lambda ()
+ (installer-log-line "running step '~a'" (installer-step-id step))
+ (let* ((id (installer-step-id step))
+ (compute (installer-step-compute step))
+ (res (compute result done-steps)))
+ (hash-set! %current-result id res)
+ (run (alist-cons id res result)
+ #:todo-steps rest-steps
+ #:done-steps (append done-steps (list step)))))
+ (lambda (k action)
+ (match action
+ ('abort
+ (case rewind-strategy
+ ((previous)
+ (match done-steps
+ (()
+ ;; We cannot go previous the first step. Abort again to
+ ;; 'installer-step prompt. It might be useful in the case
+ ;; of nested run-installer-steps.
+ (abort-to-prompt 'installer-step action))
+ ((prev-done ... last-done)
+ (run (pop-result result)
+ #:todo-steps (cons last-done todo-steps)
+ #:done-steps prev-done))))
+ ((menu)
+ (let ((goto-step (menu-proc
+ (append done-steps (list step)))))
+ (if (eq? goto-step step)
+ (run result
+ #:todo-steps todo-steps
+ #:done-steps done-steps)
+ (skip-to-step goto-step result
+ #:todo-steps todo-steps
+ #:done-steps done-steps))))
+ ((start)
+ (if (null? done-steps)
+ ;; Same as above, it makes no sense to jump to start
+ ;; when we are at the first installer-step. Abort to
+ ;; 'installer-step prompt again.
+ (abort-to-prompt 'installer-step action)
+ (run '()
+ #:todo-steps steps
+ #:done-steps '())))))
+ ('break
+ (reverse result))))))))
;; Ignore SIGPIPE so that we don't die if a client closes the connection
;; prematurely.
(sigaction SIGPIPE SIG_IGN)
(with-server-socket
- (call-with-prompt 'raise-above
- (lambda ()
- (run '()
- #:todo-steps steps
- #:done-steps '()))
- (lambda (k condition)
- (raise condition)))))
+ (run '()
+ #:todo-steps steps
+ #:done-steps '())))
(define (find-step-by-id steps id)
"Find and return the step in STEPS whose id is equal to ID."
diff --git a/gnu/installer/user.scm b/gnu/installer/user.scm
index 4e701e64ce..c894a91dc8 100644
--- a/gnu/installer/user.scm
+++ b/gnu/installer/user.scm
@@ -19,7 +19,14 @@
(define-module (gnu installer user)
#:use-module (guix records)
#:use-module (srfi srfi-1)
- #:export (<user>
+ #:use-module (srfi srfi-9)
+ #:use-module (srfi srfi-9 gnu)
+ #:export (<secret>
+ secret?
+ make-secret
+ secret-content
+
+ <user>
user
make-user
user-name
@@ -30,6 +37,16 @@
users->configuration))
+(define-record-type <secret>
+ (make-secret content)
+ secret?
+ (content secret-content))
+
+(set-record-type-printer!
+ <secret>
+ (lambda (secret port)
+ (format port "<secret>")))
+
(define-record-type* <user>
user make-user
user?
diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm
index 9bd41e2ca0..fb62fb8896 100644
--- a/gnu/installer/utils.scm
+++ b/gnu/installer/utils.scm
@@ -25,7 +25,10 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-34)
+ #:use-module (srfi srfi-35)
+ #:use-module (ice-9 control)
#:use-module (ice-9 match)
+ #:use-module (ice-9 popen)
#:use-module (ice-9 rdelim)
#:use-module (ice-9 regex)
#:use-module (ice-9 format)
@@ -34,10 +37,17 @@
read-all
nearest-exact-integer
read-percentage
+ run-external-command-with-handler
+ run-external-command-with-line-hooks
run-command
+ run-command-in-installer
syslog-port
- syslog
+ %syslog-line-hook
+ installer-log-port
+ %installer-log-line-hook
+ %default-installer-line-hooks
+ installer-log-line
call-with-time
let/time
@@ -74,37 +84,99 @@ number. If no percentage is found, return #f"
(and result
(string->number (match:substring result 1)))))
+(define* (run-external-command-with-handler handler command)
+ "Run command specified by the list COMMAND in a child with output handler
+HANDLER. HANDLER is a procedure taking an input port, to which the command
+will write its standard output and error. Returns the integer status value of
+the child process as returned by waitpid."
+ (match-let (((input . output) (pipe)))
+ ;; Hack to work around Guile bug 52835
+ (define dup-output (duplicate-port output "w"))
+ ;; Void pipe, but holds the pid for close-pipe.
+ (define dummy-pipe
+ (with-input-from-file "/dev/null"
+ (lambda ()
+ (with-output-to-port output
+ (lambda ()
+ (with-error-to-port dup-output
+ (lambda ()
+ (apply open-pipe* (cons "" command)))))))))
+ (close-port output)
+ (close-port dup-output)
+ (handler input)
+ (close-port input)
+ (close-pipe dummy-pipe)))
+
+(define (run-external-command-with-line-hooks line-hooks command)
+ "Run command specified by the list COMMAND in a child, processing each
+output line with the procedures in LINE-HOOKS. Returns the integer status
+value of the child process as returned by waitpid."
+ (define (handler input)
+ (and
+ (and=> (get-line input)
+ (lambda (line)
+ (if (eof-object? line)
+ #f
+ (begin (for-each (lambda (f) (f line))
+ (append line-hooks
+ %default-installer-line-hooks))
+ #t))))
+ (handler input)))
+ (run-external-command-with-handler handler command))
+
(define* (run-command command)
"Run COMMAND, a list of strings. Return true if COMMAND exited
successfully, #f otherwise."
- (define env (environ))
-
(define (pause)
(format #t (G_ "Press Enter to continue.~%"))
(send-to-clients '(pause))
- (environ env) ;restore environment variables
(match (select (cons (current-input-port) (current-clients))
'() '())
(((port _ ...) _ _)
(read-line port))))
- (setenv "PATH" "/run/current-system/profile/bin")
-
- (guard (c ((invoke-error? c)
- (newline)
- (format (current-error-port)
- (G_ "Command failed with exit code ~a.~%")
- (invoke-error-exit-status c))
- (syslog "command ~s failed with exit code ~a"
- command (invoke-error-exit-status c))
- (pause)
- #f))
- (syslog "running command ~s~%" command)
- (apply invoke command)
- (syslog "command ~s succeeded~%" command)
- (newline)
- (pause)
- #t))
+ (installer-log-line "running command ~s" command)
+ (define result (run-external-command-with-line-hooks
+ (list %display-line-hook)
+ command))
+ (define exit-val (status:exit-val result))
+ (define term-sig (status:term-sig result))
+ (define stop-sig (status:stop-sig result))
+ (define succeeded?
+ (cond
+ ((and exit-val (not (zero? exit-val)))
+ (installer-log-line "command ~s exited with value ~a"
+ command exit-val)
+ (format #t (G_ "Command ~s exited with value ~a")
+ command exit-val)
+ #f)
+ (term-sig
+ (installer-log-line "command ~s killed by signal ~a"
+ command term-sig)
+ (format #t (G_ "Command ~s killed by signal ~a")
+ command term-sig)
+ #f)
+ (stop-sig
+ (installer-log-line "command ~s stopped by signal ~a"
+ command stop-sig)
+ (format #t (G_ "Command ~s stopped by signal ~a")
+ command stop-sig)
+ #f)
+ (else
+ (installer-log-line "command ~s succeeded" command)
+ (format #t (G_ "Command ~s succeeded") command)
+ #t)))
+ (newline)
+ (pause)
+ succeeded?)
+
+(define run-command-in-installer
+ (make-parameter
+ (lambda (. args)
+ (raise
+ (condition
+ (&serious)
+ (&message (message "run-command-in-installer not set")))))))
;;;
@@ -142,6 +214,9 @@ values."
(set! port (open-syslog-port)))
(or port (%make-void-port "w")))))
+(define (%syslog-line-hook line)
+ (format (syslog-port) "installer[~d]: ~a~%" (getpid) line))
+
(define-syntax syslog
(lambda (s)
"Like 'format', but write to syslog."
@@ -152,6 +227,43 @@ values."
(syntax->datum #'fmt))))
#'(format (syslog-port) fmt (getpid) args ...))))))
+(define (open-new-log-port)
+ (define now (localtime (time-second (current-time))))
+ (define filename
+ (format #f "/tmp/installer.~a.log"
+ (strftime "%F.%T" now)))
+ (open filename (logior O_RDWR
+ O_CREAT)))
+
+(define installer-log-port
+ (let ((port #f))
+ (lambda ()
+ "Return an input and output port to the installer log."
+ (unless port
+ (set! port (open-new-log-port)))
+ port)))
+
+(define (%installer-log-line-hook line)
+ (format (installer-log-port) "~a~%" line))
+
+(define (%display-line-hook line)
+ (display line)
+ (newline))
+
+(define %default-installer-line-hooks
+ (list %syslog-line-hook
+ %installer-log-line-hook))
+
+(define-syntax installer-log-line
+ (lambda (s)
+ "Like 'format', but uses the default line hooks, and only formats one line."
+ (syntax-case s ()
+ ((_ fmt args ...)
+ (string? (syntax->datum #'fmt))
+ #'(let ((formatted (format #f fmt args ...)))
+ (for-each (lambda (f) (f formatted))
+ %default-installer-line-hooks))))))
+
;;;
;;; Client protocol.
@@ -214,8 +326,9 @@ accepting socket."
(let ((errno (system-error-errno args)))
(if (memv errno (list EPIPE ECONNRESET ECONNABORTED))
(begin
- (syslog "removing client ~s due to ~s while replying~%"
- (fileno client) (strerror errno))
+ (installer-log-line
+ "removing client ~s due to ~s while replying"
+ (fileno client) (strerror errno))
(false-if-exception (close-port client))
remainder)
(cons client remainder))))))
diff --git a/gnu/local.mk b/gnu/local.mk
index 7f6a26b943..0297a9a380 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -7,7 +7,7 @@
# Copyright © 2016, 2017, 2018 Kei Kebreau <kkebreau@posteo.net>
# Copyright © 2016, 2017 Rene Saavedra <rennes@openmailbox.org>
# Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
-# Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+# Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
# Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
# Copyright © 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
# Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -41,7 +41,7 @@
# Copyright © 2020 Vinicius Monego <monego@posteo.net>
# Copyright © 2021 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
# Copyright © 2021 Greg Hogan <code@greghogan.com>
-# Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
+# Copyright © 2021, 2022 Philip McGrath <philip@philipmcgrath.com>
# Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
# Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
# Copyright © 2021 Dmitry Polyakov <polyakov@liltechdude.xyz>
@@ -79,6 +79,7 @@ GNU_SYSTEM_MODULES = \
%D%/ci.scm \
%D%/home.scm \
%D%/home/services.scm \
+ %D%/home/services/desktop.scm \
%D%/home/services/symlink-manager.scm \
%D%/home/services/fontutils.scm \
%D%/home/services/shells.scm \
@@ -121,6 +122,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/axoloti.scm \
%D%/packages/backup.scm \
%D%/packages/base.scm \
+ %D%/packages/barrier.scm \
%D%/packages/bash.scm \
%D%/packages/batik.scm \
%D%/packages/bdw-gc.scm \
@@ -581,6 +583,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/time.scm \
%D%/packages/tls.scm \
%D%/packages/tmux.scm \
+ %D%/packages/toolkits.scm \
%D%/packages/tor.scm \
%D%/packages/tv.scm \
%D%/packages/uglifyjs.scm \
@@ -601,6 +604,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/vulkan.scm \
%D%/packages/w3m.scm \
%D%/packages/wdiff.scm \
+ %D%/packages/weather.scm \
%D%/packages/web.scm \
%D%/packages/web-browsers.scm \
%D%/packages/webkit.scm \
@@ -758,6 +762,7 @@ GNU_SYSTEM_MODULES = \
INSTALLER_MODULES = \
%D%/installer.scm \
%D%/installer/connman.scm \
+ %D%/installer/dump.scm \
%D%/installer/final.scm \
%D%/installer/hostname.scm \
%D%/installer/keymap.scm \
@@ -859,6 +864,7 @@ dist_patch_DATA = \
%D%/packages/patches/ath9k-htc-firmware-gcc-compat.patch \
%D%/packages/patches/ath9k-htc-firmware-objcopy.patch \
%D%/packages/patches/atlas-gfortran-compat.patch \
+ %D%/packages/patches/audacity-ffmpeg-fallback.patch \
%D%/packages/patches/audiofile-fix-datatypes-in-tests.patch \
%D%/packages/patches/audiofile-fix-sign-conversion.patch \
%D%/packages/patches/audiofile-CVE-2015-7747.patch \
@@ -880,7 +886,6 @@ dist_patch_DATA = \
%D%/packages/patches/awesome-4.3-fno-common.patch \
%D%/packages/patches/aws-c-auth-install-private-headers.patch \
%D%/packages/patches/azr3.patch \
- %D%/packages/patches/bash-reproducible-linux-pgrp-pipe.patch \
%D%/packages/patches/bash-completion-directories.patch \
%D%/packages/patches/bash-linux-pgrp-pipe.patch \
%D%/packages/patches/bastet-change-source-of-unordered_set.patch \
@@ -909,6 +914,8 @@ dist_patch_DATA = \
%D%/packages/patches/binutils-mingw-w64-timestamp.patch \
%D%/packages/patches/binutils-mingw-w64-deterministic.patch \
%D%/packages/patches/binutils-CVE-2021-45078.patch \
+ %D%/packages/patches/bloomberg-bde-cmake-module-path.patch \
+ %D%/packages/patches/bloomberg-bde-tools-fix-install-path.patch \
%D%/packages/patches/bpftrace-disable-bfd-disasm.patch \
%D%/packages/patches/byobu-writable-status.patch \
%D%/packages/patches/bubblewrap-fix-locale-in-tests.patch \
@@ -916,7 +923,6 @@ dist_patch_DATA = \
%D%/packages/patches/cabal-install-ghc8.10.patch \
%D%/packages/patches/cairo-CVE-2018-19876.patch \
%D%/packages/patches/cairo-CVE-2020-35492.patch \
- %D%/packages/patches/calibre-fix-zeroconf.patch \
%D%/packages/patches/calibre-no-updates-dialog.patch \
%D%/packages/patches/calibre-remove-test-sqlite.patch \
%D%/packages/patches/calibre-remove-test-unrar.patch \
@@ -965,6 +971,7 @@ dist_patch_DATA = \
%D%/packages/patches/coq-fix-envvars.patch \
%D%/packages/patches/coreutils-ls.patch \
%D%/packages/patches/cpuinfo-system-libraries.patch \
+ %D%/packages/patches/cpulimit-with-glib-2.32.patch \
%D%/packages/patches/crawl-upgrade-saves.patch \
%D%/packages/patches/crda-optional-gcrypt.patch \
%D%/packages/patches/clucene-contribs-lib.patch \
@@ -1008,7 +1015,6 @@ dist_patch_DATA = \
%D%/packages/patches/ecl-16-ignore-stderr-write-error.patch \
%D%/packages/patches/ecl-16-libffi.patch \
%D%/packages/patches/efibootmgr-remove-extra-decl.patch \
- %D%/packages/patches/efivar-gcc-compat.patch \
%D%/packages/patches/eigen-remove-openmp-error-counting.patch \
%D%/packages/patches/eigen-stabilise-sparseqr-test.patch \
%D%/packages/patches/einstein-build.patch \
@@ -1035,7 +1041,6 @@ dist_patch_DATA = \
%D%/packages/patches/erlang-man-path.patch \
%D%/packages/patches/esmtp-add-lesmtp.patch \
%D%/packages/patches/eudev-rules-directory.patch \
- %D%/packages/patches/evilwm-lost-focus-bug.patch \
%D%/packages/patches/exercism-disable-self-update.patch \
%D%/packages/patches/extempore-unbundle-external-dependencies.patch \
%D%/packages/patches/extundelete-e2fsprogs-1.44.patch \
@@ -1049,6 +1054,10 @@ dist_patch_DATA = \
%D%/packages/patches/fasthenry-spSolve.patch \
%D%/packages/patches/fasthenry-spFactor.patch \
%D%/packages/patches/fbreader-curl-7.62.patch \
+ %D%/packages/patches/fenics-dolfin-algorithm.patch \
+ %D%/packages/patches/fenics-dolfin-demo-init.patch \
+ %D%/packages/patches/fenics-dolfin-boost.patch \
+ %D%/packages/patches/fenics-dolfin-config-slepc.patch \
%D%/packages/patches/fifengine-boost-compat.patch \
%D%/packages/patches/fifengine-swig-compat.patch \
%D%/packages/patches/fifo-map-fix-flags-for-gcc.patch \
@@ -1063,8 +1072,6 @@ dist_patch_DATA = \
%D%/packages/patches/fp16-system-libraries.patch \
%D%/packages/patches/fpc-reproducibility.patch \
%D%/packages/patches/fplll-std-fenv.patch \
- %D%/packages/patches/freecad-boost-serialization.patch \
- %D%/packages/patches/freecad-vtk9.patch \
%D%/packages/patches/freedink-engine-fix-sdl-hints.patch \
%D%/packages/patches/freeglut-gcc-compat.patch \
%D%/packages/patches/freeimage-unbundle.patch \
@@ -1130,10 +1137,10 @@ dist_patch_DATA = \
%D%/packages/patches/geeqie-clutter.patch \
%D%/packages/patches/genimage-mke2fs-test.patch \
%D%/packages/patches/geoclue-config.patch \
+ %D%/packages/patches/ghc-4.patch \
%D%/packages/patches/ghc-8.0-fall-back-to-madv_dontneed.patch \
%D%/packages/patches/ghc-testsuite-dlopen-pie.patch \
%D%/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch \
- %D%/packages/patches/ghc-monad-par-fix-tests.patch \
%D%/packages/patches/ghostscript-no-header-id.patch \
%D%/packages/patches/ghostscript-no-header-uuid.patch \
%D%/packages/patches/ghostscript-no-header-creationdate.patch \
@@ -1144,8 +1151,6 @@ dist_patch_DATA = \
%D%/packages/patches/glib-networking-gnutls-binding.patch \
%D%/packages/patches/glib-networking-32-bit-time.patch \
%D%/packages/patches/glib-skip-failing-test.patch \
- %D%/packages/patches/glibc-CVE-2018-11236.patch \
- %D%/packages/patches/glibc-CVE-2018-11237.patch \
%D%/packages/patches/glibc-CVE-2019-7309.patch \
%D%/packages/patches/glibc-CVE-2019-9169.patch \
%D%/packages/patches/glibc-CVE-2019-19126.patch \
@@ -1164,7 +1169,6 @@ dist_patch_DATA = \
%D%/packages/patches/glibc-hurd-clock_t_centiseconds.patch \
%D%/packages/patches/glibc-hurd-gettyent.patch \
%D%/packages/patches/glibc-hurd-mach-print.patch \
- %D%/packages/patches/glibc-hurd-magic-pid.patch \
%D%/packages/patches/glibc-hurd-signal-sa-siginfo.patch \
%D%/packages/patches/glibc-ldd-powerpc.patch \
%D%/packages/patches/glibc-ldd-x86_64.patch \
@@ -1209,7 +1213,6 @@ dist_patch_DATA = \
%D%/packages/patches/grantlee-merge-theme-dirs.patch \
%D%/packages/patches/grep-timing-sensitive-test.patch \
%D%/packages/patches/grfcodec-gcc-compat.patch \
- %D%/packages/patches/grocsvs-dont-use-admiral.patch \
%D%/packages/patches/gromacs-tinyxml2.patch \
%D%/packages/patches/groovy-add-exceptionutilsgenerator.patch \
%D%/packages/patches/grub-efi-fat-serial-number.patch \
@@ -1225,15 +1228,15 @@ dist_patch_DATA = \
%D%/packages/patches/guile-3.0-relocatable.patch \
%D%/packages/patches/guile-linux-syscalls.patch \
%D%/packages/patches/guile-3.0-linux-syscalls.patch \
+ %D%/packages/patches/guile-cross-compilation.patch \
%D%/packages/patches/guile-fibers-destroy-peer-schedulers.patch \
+ %D%/packages/patches/guile-fibers-wait-for-io-readiness.patch \
%D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch \
%D%/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch \
%D%/packages/patches/guile-present-coding.patch \
%D%/packages/patches/guile-rsvg-pkgconfig.patch \
%D%/packages/patches/guile-emacs-fix-configure.patch \
%D%/packages/patches/guile-email-fix-tests.patch \
- %D%/packages/patches/guile-ssh-fix-test-suite.patch \
- %D%/packages/patches/guile-ssh-read-error.patch \
%D%/packages/patches/gtk2-fix-builder-test.patch \
%D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \
%D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
@@ -1267,7 +1270,6 @@ dist_patch_DATA = \
%D%/packages/patches/hueplusplus-mbedtls.patch \
%D%/packages/patches/hurd-cross.patch \
%D%/packages/patches/hurd-xattr.patch \
- %D%/packages/patches/hydra-disable-darcs-test.patch \
%D%/packages/patches/i7z-gcc-10.patch \
%D%/packages/patches/icecat-makeicecat.patch \
%D%/packages/patches/icecat-avoid-bundled-libraries.patch \
@@ -1285,7 +1287,6 @@ dist_patch_DATA = \
%D%/packages/patches/imagemagick-ReadDCMImage-fix.patch \
%D%/packages/patches/imagemagick-ReadDCMPixels-fix.patch \
%D%/packages/patches/imagemagick-WriteTHUMBNAILImage-fix.patch \
- %D%/packages/patches/inkscape-poppler-0.76.patch \
%D%/packages/patches/instead-use-games-path.patch \
%D%/packages/patches/intel-xed-fix-nondeterminism.patch \
%D%/packages/patches/intltool-perl-compatibility.patch \
@@ -1298,6 +1299,9 @@ dist_patch_DATA = \
%D%/packages/patches/json-c-0.12-CVE-2020-12762.patch \
%D%/packages/patches/jsoncpp-pkg-config-version.patch \
%D%/packages/patches/jami-fix-crash-on-quit.patch \
+ %D%/packages/patches/jami-images-loading.patch \
+ %D%/packages/patches/jami-memory-usage.patch \
+ %D%/packages/patches/jami-libclient-audio-managers.patch \
%D%/packages/patches/jamvm-1.5.1-aarch64-support.patch \
%D%/packages/patches/jamvm-1.5.1-armv7-support.patch \
%D%/packages/patches/jamvm-2.0.0-aarch64-support.patch \
@@ -1327,7 +1331,6 @@ dist_patch_DATA = \
%D%/packages/patches/libffi-float128-powerpc64le.patch \
%D%/packages/patches/librime-fix-build-with-gcc10.patch \
%D%/packages/patches/libvirt-add-install-prefix.patch \
- %D%/packages/patches/libvirt-create-machine-cgroup.patch \
%D%/packages/patches/libziparchive-add-includes.patch \
%D%/packages/patches/localed-xorg-keyboard.patch \
%D%/packages/patches/kdiagram-Fix-missing-link-libraries.patch \
@@ -1401,6 +1404,7 @@ dist_patch_DATA = \
%D%/packages/patches/libmygpo-qt-missing-qt5-modules.patch \
%D%/packages/patches/libqalculate-3.8.0-libcurl-ssl-fix.patch \
%D%/packages/patches/libquicktime-ffmpeg.patch \
+ %D%/packages/patches/librecad-support-for-boost-1.76.patch \
%D%/packages/patches/libssh2-CVE-2019-17498.patch \
%D%/packages/patches/libtar-CVE-2013-4420.patch \
%D%/packages/patches/libtgvoip-disable-sse2.patch \
@@ -1430,7 +1434,6 @@ dist_patch_DATA = \
%D%/packages/patches/linbox-fix-pkgconfig.patch \
%D%/packages/patches/linphone-desktop-without-sdk.patch \
%D%/packages/patches/linux-libre-support-for-Pinebook-Pro.patch \
- %D%/packages/patches/linux-libre-arm64-generic-pinebook-lcd.patch \
%D%/packages/patches/linux-pam-no-setfsuid.patch \
%D%/packages/patches/linux-pam-unix_chkpwd.patch \
%D%/packages/patches/linuxdcpp-openssl-1.1.patch \
@@ -1461,13 +1464,12 @@ dist_patch_DATA = \
%D%/packages/patches/lvm2-static-link.patch \
%D%/packages/patches/mailutils-variable-lookup.patch \
%D%/packages/patches/make-impure-dirs.patch \
- %D%/packages/patches/marble-qt-add-qt-headers.patch \
+ %D%/packages/patches/mariadb-link-libatomic.patch \
%D%/packages/patches/mars-install.patch \
%D%/packages/patches/mars-sfml-2.3.patch \
%D%/packages/patches/mathjax-disable-webpack.patch \
%D%/packages/patches/mathjax-no-a11y.patch \
%D%/packages/patches/maxima-defsystem-mkdir.patch \
- %D%/packages/patches/maven-enforcer-api-fix-old-dependencies.patch \
%D%/packages/patches/maven-generate-component-xml.patch \
%D%/packages/patches/maven-generate-javax-inject-named.patch \
%D%/packages/patches/mcrypt-CVE-2012-4409.patch \
@@ -1479,7 +1481,6 @@ dist_patch_DATA = \
%D%/packages/patches/mercurial-hg-extension-path.patch \
%D%/packages/patches/mesa-opencl-all-targets.patch \
%D%/packages/patches/mesa-skip-tests.patch \
- %D%/packages/patches/mescc-tools-boot.patch \
%D%/packages/patches/meson-allow-dirs-outside-of-prefix.patch \
%D%/packages/patches/mhash-keygen-test-segfault.patch \
%D%/packages/patches/minetest-add-MINETEST_MOD_PATH.patch \
@@ -1504,6 +1505,7 @@ dist_patch_DATA = \
%D%/packages/patches/mozjs38-shell-version.patch \
%D%/packages/patches/mozjs38-tracelogger.patch \
%D%/packages/patches/mozjs38-version-detection.patch \
+ %D%/packages/patches/mozjs60-riscv64-support.patch \
%D%/packages/patches/mrrescue-support-love-11.patch \
%D%/packages/patches/mtools-mformat-uninitialized.patch \
%D%/packages/patches/mumps-build-parallelism.patch \
@@ -1524,9 +1526,7 @@ dist_patch_DATA = \
%D%/packages/patches/netsurf-system-utf8proc.patch \
%D%/packages/patches/netsurf-y2038-tests.patch \
%D%/packages/patches/netsurf-longer-test-timeout.patch \
- %D%/packages/patches/nettle-3.5-check-_pkcs1_sec_decrypt-msg-len.patch \
- %D%/packages/patches/nettle-3.5-CVE-2021-3580-pt1.patch \
- %D%/packages/patches/nettle-3.5-CVE-2021-3580-pt2.patch \
+ %D%/packages/patches/nhc98-c-update.patch \
%D%/packages/patches/nix-dont-build-html-doc.diff \
%D%/packages/patches/nfs4-acl-tools-0.3.7-fixpaths.patch \
%D%/packages/patches/ngircd-handle-zombies.patch \
@@ -1545,37 +1545,30 @@ dist_patch_DATA = \
%D%/packages/patches/nvi-db4.patch \
%D%/packages/patches/nyacc-binary-literals.patch \
%D%/packages/patches/obs-modules-location.patch \
- %D%/packages/patches/ocaml-bitstring-fix-configure.patch \
- %D%/packages/patches/ocaml-CVE-2015-8869.patch \
- %D%/packages/patches/ocaml-Add-a-.file-directive.patch \
- %D%/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch \
%D%/packages/patches/ocaml-dose3-add-unix-dependency.patch \
%D%/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch \
%D%/packages/patches/ocaml-dose3-dont-make-printconf.patch \
%D%/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch \
%D%/packages/patches/ocaml-multiple-definitions.patch \
%D%/packages/patches/ocaml-4.09-multiple-definitions.patch \
- %D%/packages/patches/ocaml-qcheck-fix-test-whitespace.patch \
%D%/packages/patches/omake-fix-non-determinism.patch \
%D%/packages/patches/oneko-remove-nonfree-characters.patch \
%D%/packages/patches/onnx-optimizer-system-library.patch \
%D%/packages/patches/onnx-use-system-googletest.patch \
%D%/packages/patches/onnx-shared-libraries.patch \
%D%/packages/patches/onnx-skip-model-downloads.patch \
- %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch \
+ %D%/packages/patches/openboardview-use-system-imgui.patch \
+ %D%/packages/patches/openboardview-use-system-utf8.patch \
%D%/packages/patches/opencascade-oce-glibc-2.26.patch \
%D%/packages/patches/openfoam-4.1-cleanup.patch \
%D%/packages/patches/openjdk-10-idlj-reproducibility.patch \
- %D%/packages/patches/openjdk-14-builtins.patch \
%D%/packages/patches/openmpi-mtl-priorities.patch \
%D%/packages/patches/openssh-hurd.patch \
%D%/packages/patches/openresolv-restartcmd-guix.patch \
%D%/packages/patches/openrgb-unbundle-hueplusplus.patch \
%D%/packages/patches/opensles-add-license-file.patch \
- %D%/packages/patches/openssl-runpath.patch \
%D%/packages/patches/openssl-1.1-c-rehash-in.patch \
- %D%/packages/patches/openssl-c-rehash-in.patch \
- %D%/packages/patches/openssl-CVE-2019-1559.patch \
+ %D%/packages/patches/openssl-3.0-c-rehash-in.patch \
%D%/packages/patches/open-zwave-hidapi.patch \
%D%/packages/patches/orpheus-cast-errors-and-includes.patch \
%D%/packages/patches/osip-CVE-2017-7853.patch \
@@ -1586,7 +1579,6 @@ dist_patch_DATA = \
%D%/packages/patches/p7zip-remove-unused-code.patch \
%D%/packages/patches/pam-krb5-CVE-2020-10595.patch \
%D%/packages/patches/pango-skip-libthai-test.patch \
- %D%/packages/patches/passwordsafe-meson-remove-extra-argument.patch \
%D%/packages/patches/password-store-tree-compat.patch \
%D%/packages/patches/pciutils-hurd-configure.patch \
%D%/packages/patches/pciutils-hurd-fix.patch \
@@ -1612,8 +1604,10 @@ dist_patch_DATA = \
%D%/packages/patches/strace-readlink-tests.patch \
%D%/packages/patches/sunxi-tools-remove-sys-io.patch \
%D%/packages/patches/p11-kit-hurd.patch \
- %D%/packages/patches/patchutils-test-perms.patch \
%D%/packages/patches/patch-hurd-path-max.patch \
+ %D%/packages/patches/perl-5.14-autosplit-default-time.patch \
+ %D%/packages/patches/perl-5.14-module-pluggable-search.patch \
+ %D%/packages/patches/perl-5.14-no-sys-dirs.patch \
%D%/packages/patches/perl-autosplit-default-time.patch \
%D%/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \
%D%/packages/patches/perl-image-exiftool-CVE-2021-22204.patch \
@@ -1645,11 +1639,13 @@ dist_patch_DATA = \
%D%/packages/patches/plib-CVE-2011-4620.patch \
%D%/packages/patches/plib-CVE-2012-4552.patch \
%D%/packages/patches/plotutils-spline-test.patch \
+ %D%/packages/patches/polkit-CVE-2021-4034.patch \
%D%/packages/patches/polkit-configure-elogind.patch \
%D%/packages/patches/polkit-use-duktape.patch \
%D%/packages/patches/portaudio-audacity-compat.patch \
%D%/packages/patches/portmidi-modular-build.patch \
%D%/packages/patches/postgresql-disable-resolve_symlinks.patch \
+ %D%/packages/patches/postgresql-riscv-spinlocks.patch \
%D%/packages/patches/procmail-ambiguous-getline-debian.patch \
%D%/packages/patches/procmail-CVE-2014-3618.patch \
%D%/packages/patches/procmail-CVE-2017-16844.patch \
@@ -1678,14 +1674,9 @@ dist_patch_DATA = \
%D%/packages/patches/python-3-fix-tests.patch \
%D%/packages/patches/python-3-hurd-configure.patch \
%D%/packages/patches/python-3-no-static-lib.patch \
- %D%/packages/patches/python-CVE-2018-14647.patch \
- %D%/packages/patches/python-CVE-2020-26116.patch \
%D%/packages/patches/python-aionotify-0.2.0-py3.8.patch \
%D%/packages/patches/python-argcomplete-1.11.1-fish31.patch \
- %D%/packages/patches/python-axolotl-AES-fix.patch \
- %D%/packages/patches/python-babel-fix-parse-future-test.patch \
%D%/packages/patches/python-cross-compile.patch \
- %D%/packages/patches/python2-larch-coverage-4.0a6-compatibility.patch \
%D%/packages/patches/python-configobj-setuptools.patch \
%D%/packages/patches/python-docopt-pytest6-compat.patch \
%D%/packages/patches/python-execnet-read-only-fix.patch \
@@ -1698,10 +1689,10 @@ dist_patch_DATA = \
%D%/packages/patches/python-piexif-fix-tests-with-pillow-7.2.patch \
%D%/packages/patches/python-pyfakefs-remove-bad-test.patch \
%D%/packages/patches/python-pyflakes-test-location.patch \
+ %D%/packages/patches/python2-pyopenssl-openssl-compat.patch \
%D%/packages/patches/python-flint-includes.patch \
%D%/packages/patches/python-libxml2-utf8.patch \
%D%/packages/patches/python-magic-python-bytecode.patch \
- %D%/packages/patches/python-matplotlib-run-under-wayland-gtk3.patch \
%D%/packages/patches/python-memcached-syntax-warnings.patch \
%D%/packages/patches/python-mox3-python3.6-compat.patch \
%D%/packages/patches/python-typing-inspect-fix.patch \
@@ -1714,24 +1705,27 @@ dist_patch_DATA = \
%D%/packages/patches/python-pyan3-fix-positional-arguments.patch \
%D%/packages/patches/python2-pygobject-2-deprecation.patch \
%D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch \
- %D%/packages/patches/python-pytest-asyncio-python-3.8.patch \
%D%/packages/patches/python-pytorch-runpath.patch \
%D%/packages/patches/python-pytorch-system-libraries.patch \
+ %D%/packages/patches/python-pytorch-1.9.0-system-libraries.patch \
%D%/packages/patches/python-robotframework-source-date-epoch.patch \
+ %D%/packages/patches/python-robotframework-ug2html.patch \
+ %D%/packages/patches/python-robotframework-sshlibrary-rf5-compat.patch \
%D%/packages/patches/python-seaborn-kde-test.patch \
+ %D%/packages/patches/python-seaborn-2690.patch \
%D%/packages/patches/python2-subprocess32-disable-input-test.patch \
%D%/packages/patches/python-unittest2-python3-compat.patch \
%D%/packages/patches/python-unittest2-remove-argparse.patch \
%D%/packages/patches/python-versioneer-guix-support.patch \
%D%/packages/patches/python-waitress-fix-tests.patch \
%D%/packages/patches/python-werkzeug-tests.patch \
+ %D%/packages/patches/python-mypy-12332.patch \
%D%/packages/patches/qemu-build-info-manual.patch \
%D%/packages/patches/qemu-glibc-2.27.patch \
%D%/packages/patches/qemu-glibc-2.30.patch \
%D%/packages/patches/qemu-fix-agent-paths.patch \
%D%/packages/patches/qpdfview-qt515-compat.patch \
%D%/packages/patches/qrcodegen-cpp-make-install.patch \
- %D%/packages/patches/qt4-ldflags.patch \
%D%/packages/patches/qtbase-absolute-runpath.patch \
%D%/packages/patches/qtbase-moc-ignore-gcc-macro.patch \
%D%/packages/patches/qtbase-use-TZDIR.patch \
@@ -1751,7 +1745,6 @@ dist_patch_DATA = \
%D%/packages/patches/raptor2-heap-overflow.patch \
%D%/packages/patches/ratpoints-sturm_and_rp_private.patch \
%D%/packages/patches/ratpoison-shell.patch \
- %D%/packages/patches/rcs-5.10.0-no-stdin.patch \
%D%/packages/patches/rct-add-missing-headers.patch \
%D%/packages/patches/readline-link-ncurses.patch \
%D%/packages/patches/readline-6.2-CVE-2014-2524.patch \
@@ -1762,6 +1755,8 @@ dist_patch_DATA = \
%D%/packages/patches/ripperx-missing-file.patch \
%D%/packages/patches/rpcbind-CVE-2017-8779.patch \
%D%/packages/patches/rtags-separate-rct.patch \
+ %D%/packages/patches/racket-enable-scheme-backport.patch \
+ %D%/packages/patches/racket-gui-tethered-launcher-backport.patch \
%D%/packages/patches/racket-minimal-sh-via-rktio.patch \
%D%/packages/patches/remake-impure-dirs.patch \
%D%/packages/patches/restic-0.9.6-fix-tests-for-go1.15.patch \
@@ -1774,10 +1769,10 @@ dist_patch_DATA = \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-nocltrace.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
+ %D%/packages/patches/ruby-mustache-1.1.1-fix-race-condition-tests.patch \
%D%/packages/patches/ruby-sanitize-system-libxml.patch \
%D%/packages/patches/rustc-1.39.0-src.patch \
%D%/packages/patches/rust-adblock-ignore-live-tests.patch \
- %D%/packages/patches/rust-coresimd-doctest.patch \
%D%/packages/patches/i3status-rust-enable-unstable-features.patch \
%D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch \
%D%/packages/patches/rust-ndarray-0.13-remove-blas-src.patch \
@@ -1796,7 +1791,6 @@ dist_patch_DATA = \
%D%/packages/patches/scheme48-tests.patch \
%D%/packages/patches/scotch-build-parallelism.patch \
%D%/packages/patches/scotch-integer-declarations.patch \
- %D%/packages/patches/screen-CVE-2021-26937.patch \
%D%/packages/patches/screen-hurd-path-max.patch \
%D%/packages/patches/sdl-libx11-1.6.patch \
%D%/packages/patches/seed-webkit.patch \
@@ -1823,7 +1817,6 @@ dist_patch_DATA = \
%D%/packages/patches/spice-vdagent-glib-2.68.patch \
%D%/packages/patches/sssd-fix-samba.patch \
%D%/packages/patches/sssd-system-directories.patch \
- %D%/packages/patches/streamlink-update-test.patch \
%D%/packages/patches/steghide-fixes.patch \
%D%/packages/patches/suitesparse-mongoose-cmake.patch \
%D%/packages/patches/superlu-dist-awpm-grid.patch \
@@ -1843,7 +1836,7 @@ dist_patch_DATA = \
%D%/packages/patches/tao-fix-parser-types.patch \
%D%/packages/patches/tar-remove-wholesparse-check.patch \
%D%/packages/patches/tar-skip-unreliable-tests.patch \
- %D%/packages/patches/tcc-boot-0.9.27.patch \
+ %D%/packages/patches/tbb-fix-test-on-aarch64.patch \
%D%/packages/patches/tclxml-3.2-install.patch \
%D%/packages/patches/tcsh-fix-autotest.patch \
%D%/packages/patches/teensy-loader-cli-help.patch \
@@ -1866,6 +1859,7 @@ dist_patch_DATA = \
gnu/packages/patches/tootle-reason-phrase.patch \
%D%/packages/patches/tor-sandbox-i686.patch \
%D%/packages/patches/transcode-ffmpeg.patch \
+ %D%/packages/patches/transfig-gcc10-fno-common.patch \
%D%/packages/patches/transmission-honor-localedir.patch \
%D%/packages/patches/tremc-fix-decodestring.patch \
%D%/packages/patches/trytond-add-egg-modules-to-path.patch \
@@ -1881,7 +1875,6 @@ dist_patch_DATA = \
%D%/packages/patches/u-boot-riscv64-fix-extlinux.patch \
%D%/packages/patches/u-boot-rk3399-enable-emmc-phy.patch \
%D%/packages/patches/ucx-tcp-iface-ioctl.patch \
- %D%/packages/patches/ungoogled-chromium-accelerated-video-decode.patch \
%D%/packages/patches/ungoogled-chromium-extension-search-path.patch \
%D%/packages/patches/ungoogled-chromium-ffmpeg-compat.patch \
%D%/packages/patches/ungoogled-chromium-RUNPATH.patch \
@@ -1925,7 +1918,8 @@ dist_patch_DATA = \
%D%/packages/patches/upx-CVE-2021-20285.patch \
%D%/packages/patches/ustr-fix-build-with-gcc-5.patch \
%D%/packages/patches/util-linux-tests.patch \
- %D%/packages/patches/upower-builddir.patch \
+ %D%/packages/patches/util-linux-CVE-2021-3995.patch \
+ %D%/packages/patches/util-linux-CVE-2021-3996.patch \
%D%/packages/patches/valgrind-enable-arm.patch \
%D%/packages/patches/vboot-utils-fix-format-load-address.patch \
%D%/packages/patches/vboot-utils-fix-tests-show-contents.patch \
@@ -1937,10 +1931,11 @@ dist_patch_DATA = \
%D%/packages/patches/vte-CVE-2012-2738-pt1.patch \
%D%/packages/patches/vte-CVE-2012-2738-pt2.patch \
%D%/packages/patches/vtk-fix-freetypetools-build-failure.patch \
- %D%/packages/patches/vtk-8-fix-freetypetools-build-failure.patch \
%D%/packages/patches/warsow-qfusion-fix-bool-return-type.patch \
- %D%/packages/patches/webkitgtk-share-store.patch \
%D%/packages/patches/webkitgtk-bind-all-fonts.patch \
+ %D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch \
+ %D%/packages/patches/webkitgtk-canonicalize-paths.patch \
+ %D%/packages/patches/webrtc-audio-processing-big-endian.patch \
%D%/packages/patches/websocketpp-fix-for-cmake-3.15.patch \
%D%/packages/patches/wicd-bitrate-none-fix.patch \
%D%/packages/patches/wicd-get-selected-profile-fix.patch \
diff --git a/gnu/machine.scm b/gnu/machine.scm
index 667a988f99..60be674972 100644
--- a/gnu/machine.scm
+++ b/gnu/machine.scm
@@ -51,7 +51,7 @@
;;; Commentary:
;;;
;;; This module provides the types used to declare individual machines in a
-;;; heterogeneous Guix deployment. The interface allows users of specify system
+;;; heterogeneous Guix deployment. The interface allows users to specify system
;;; configurations and the means by which resources should be provisioned on a
;;; per-host basis.
;;;
diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm
index 0dc8933c82..550c989c34 100644
--- a/gnu/machine/ssh.scm
+++ b/gnu/machine/ssh.scm
@@ -422,7 +422,8 @@ of MACHINE's system profile, ordered from most recent to oldest."
(let* ((params (call-with-input-string serialized-params
read-boot-parameters))
(root (boot-parameters-root-device params))
- (label (boot-parameters-label params)))
+ (label (boot-parameters-label params))
+ (version (boot-parameters-version params)))
(boot-parameters
(inherit params)
(label
@@ -433,7 +434,7 @@ of MACHINE's system profile, ordered from most recent to oldest."
"~Y-~m-~d ~H:~M"))
")"))
(kernel-arguments
- (append (bootable-kernel-arguments system-path root)
+ (append (bootable-kernel-arguments system-path root version)
(boot-parameters-kernel-arguments params))))))))
generations))))
diff --git a/gnu/packages/accessibility.scm b/gnu/packages/accessibility.scm
index b692ec575f..36210d3e52 100644
--- a/gnu/packages/accessibility.scm
+++ b/gnu/packages/accessibility.scm
@@ -30,7 +30,6 @@
#:use-module (guix build-system glib-or-gtk)
#:use-module (gnu packages)
#:use-module (gnu packages lisp)
- #:use-module (gnu packages base)
#:use-module (gnu packages ocaml)
#:use-module (gnu packages pcre)
#:use-module (gnu packages polkit)
@@ -174,7 +173,6 @@ terminals.")
flite
glib
gpm
- libiconv
icu4c
libbraille
pcre2
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index f247cdf41a..e64ea0725a 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1,8 +1,8 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014, 2015, 2016, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2020, 2021 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2020, 2021, 2022 Eric Bavier <bavier@posteo.net>
;;; Copyright © 2015, 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
;;; Copyright © 2015 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
@@ -28,11 +28,11 @@
;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.org>
;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2019, 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2019, 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -876,10 +876,27 @@ hostname.")
"Shadow provides a number of authentication-related tools, including:
login, passwd, su, groupadd, and useradd.")
+ (properties '((hidden? . #t))) ;see below
+
;; The `vipw' program is GPLv2+.
;; libmisc/salt.c is public domain.
(license license:bsd-3)))
+(define-public shadow-with-man-pages
+ ;; TODO: Merge with 'shadow' on the next core-updates cycle.
+ (package/inherit shadow
+ (properties '()) ;not hidden
+ (arguments
+ (substitute-keyword-arguments (package-arguments shadow)
+ ((#:phases phases '%standard-phases)
+ `(modify-phases ,phases
+ (add-after 'install 'install-man-pages
+ (lambda _
+ ;; The top-level Makefile.am wrongfully has "SUBDIRS += man"
+ ;; under "if ENABLE_REGENERATE_MAN", even though prebuilt man
+ ;; pages are available. Thus, install them manually.
+ (invoke "make" "-C" "man" "install")))))))))
+
(define-public mingetty
(package
(name "mingetty")
@@ -1166,7 +1183,7 @@ connection alive.")
(define-public isc-dhcp
(let* ((bind-major-version "9")
(bind-minor-version "11")
- (bind-patch-version "36")
+ (bind-patch-version "37")
(bind-release-type "") ; for patch release, use "-P"
(bind-release-version "") ; for patch release, e.g. "6"
(bind-version (string-append bind-major-version
@@ -1220,6 +1237,21 @@ connection alive.")
;; build system uses the built 'gen' executable.
(setenv "BUILD_CC" "gcc"))))
'())
+ (add-before 'build 'update-config-scripts
+ (lambda* (#:key native-inputs inputs #:allow-other-keys)
+ (for-each (lambda (file)
+ (install-file
+ (search-input-file
+ (or native-inputs inputs)
+ (string-append "/bin/" file)) "."))
+ '("config.guess" "config.sub"))
+ (for-each (lambda (file)
+ (install-file
+ (search-input-file
+ (or native-inputs inputs)
+ (string-append "/bin/" file))
+ (string-append "bind/bind-" ,bind-version)))
+ '("config.guess" "config.sub"))))
(add-after 'configure 'post-configure
(lambda* (#:key outputs #:allow-other-keys)
;; Point to the right client script, which will be
@@ -1282,7 +1314,7 @@ connection alive.")
(list inetutils net-tools coreutils sed))))))))))
(native-inputs
- (list perl file))
+ (list config perl file))
(inputs `(("inetutils" ,inetutils)
("bash" ,bash-minimal)
@@ -1300,7 +1332,7 @@ connection alive.")
"/bind-" bind-version ".tar.gz"))
(sha256
(base32
- "108nh7hha4r0lb5hf1fn7lqaascvhsrghpz6afm5lf9vf2vgqly9"))))
+ "1zsszgxs9043dfpxb6xs1iwk9jg7nxkl5pbawj8dlshnxkkzp3hd"))))
("coreutils*" ,coreutils)
("sed*" ,sed)))
@@ -1692,7 +1724,7 @@ system administrator.")
(define-public sudo
(package
(name "sudo")
- (version "1.9.8p2")
+ (version "1.9.10")
(source (origin
(method url-fetch)
(uri
@@ -1702,7 +1734,7 @@ system administrator.")
version ".tar.gz")))
(sha256
(base32
- "0b8gd15l2g22w4fhhz0gzmq5c8370klanmy2c1p3px6yly6qnfwy"))
+ "1x34k8sd2msfjjsahff1q143gr5j9z19jx2rmkkbiiz7k084d8a4"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -1786,7 +1818,7 @@ commands and their arguments.")
(define-public opendoas
(package
(name "opendoas")
- (version "6.8.1")
+ (version "6.8.2")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -1795,7 +1827,7 @@ commands and their arguments.")
(file-name (git-file-name name version))
(sha256
(base32
- "0gfcssm21vdfg6kcrcc7hz1h4jmhy2zv29rfqyrrj3a6r9b5ah8p"))))
+ "1qrin7x9vcprk5pwjbr3w8z2qj8hk6xbvxicdhlk27xr6vcr1qzn"))))
(build-system gnu-build-system)
(arguments
`(#:phases
@@ -1804,7 +1836,7 @@ commands and their arguments.")
(lambda* (#:key outputs #:allow-other-keys)
(substitute* "GNUmakefile"
(("^\tchown.*$") ""))
- ;; OpenDoas look for binaries in safepath when a rule specify a
+ ;; OpenDoas looks for binaries in safepath when a rule specifies a
;; relative command, such as “permit keepenv :wheel cmd guix”.
(substitute* "doas.c"
(("safepath =" match)
@@ -1812,8 +1844,7 @@ commands and their arguments.")
"/run/setuid-programs:"
"/run/current-system/profile/bin:"
"/run/current-system/profile/sbin:"
- "\" ")))
- #t))
+ "\" ")))))
(replace 'configure
;; The configure script doesn't accept most of the default flags.
(lambda* (#:key configure-flags #:allow-other-keys)
@@ -2327,45 +2358,17 @@ characters (such as \"$\") get replaced with \"_\". ISO 8859-1 (Latin-1)
characters can be replaced as well, as can UTF-8 characters.")
(license license:bsd-3)))
-(define-public testdisk
- (package
- (name "testdisk")
- (version "7.1")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://www.cgsecurity.org/testdisk-"
- version ".tar.bz2"))
- (sha256
- (base32
- "1zlh44w67py416hkvw6nrfmjickc2d43v51vcli5p374d5sw84ql"))))
- (build-system gnu-build-system)
- (inputs
- (list ntfs-3g
- `(,util-linux "lib")
- openssl
- ;; FIXME: add reiserfs.
- zlib
- e2fsprogs
- libjpeg-turbo
- ncurses))
- (home-page "https://www.cgsecurity.org/wiki/TestDisk")
- (synopsis "Data recovery tool")
- (description
- "TestDisk is a program for data recovery, primarily designed to help
-recover lost partitions and/or make non-booting disks bootable again.")
- (license license:gpl2+)))
-
(define-public tree
(package
(name "tree")
- (version "2.0.1")
+ (version "2.0.2")
(source (origin
(method url-fetch)
(uri (string-append
"http://mama.indstate.edu/users/ice/tree/src/tree-"
version ".tgz"))
(sha256
- (base32 "0f92vx6gpz7v29wi9clklzah57v7lgx5kv0m1w4b9xjc35d9qcz3"))))
+ (base32 "1bzfkr3kmn2v5x7ljir691fr9hhjvjxqsfz0fc5fgi6ki0fklsbx"))))
(build-system gnu-build-system)
(arguments
(list
@@ -2858,7 +2861,8 @@ lookup to YAML Mode. You could enable the mode with @code{(add-hook
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "1dz045yhcsw1rdamzpz4bk8mw888in7fyqk1q1b3m1yk4pd1ahkh"))))
+ (base32 "1dz045yhcsw1rdamzpz4bk8mw888in7fyqk1q1b3m1yk4pd1ahkh"))
+ (patches (search-patches "cpulimit-with-glib-2.32.patch"))))
(build-system gnu-build-system)
(arguments
`(#:phases (modify-phases %standard-phases
@@ -3052,13 +3056,13 @@ platform-specific methods.")
(package
(name "audit")
(home-page "https://people.redhat.com/sgrubb/audit/")
- (version "3.0.6")
+ (version "3.0.7")
(source (origin
(method url-fetch)
(uri (string-append home-page "audit-" version ".tar.gz"))
(sha256
(base32
- "0pnc9wzslks9p6kxw0llp1n8h8yg0frcxl3x84fl0hisa5vlvr63"))))
+ "15r5lrrkv2zj3dvpqssd46w61hmrq27y7c2rz33s20ck59iphk4b"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags (list "--with-python=no"
@@ -3881,7 +3885,8 @@ hard-coded.")
(let ((out (assoc-ref %outputs "out")))
(list (string-append "--with-dbus-sys-dir="
out "/etc/dbus-1/system.d")
- "--localstatedir=/var"))
+ "--localstatedir=/var"
+ "--disable-werror"))
#:make-flags
(list "V=1") ; log build commands
#:phases
@@ -4753,7 +4758,7 @@ disk utilization, priority, username, state, and exit code.")
(install-file "novena-eeprom" out-bin)
(install-file "novena-eeprom.8" out-share-man)))))))
(inputs
- (list i2c-tools))
+ (list i2c-tools-3))
(synopsis "Novena EEPROM editor")
(description "This package provides an editor for the Novena EEPROM.
Novena boards contain a device-dependent descriptive EEPROM that defines
@@ -4895,23 +4900,20 @@ exit code reports successful or failed execution to
(define-public udpcast
(package
(name "udpcast")
- (version "20200328")
+ (version "20211207")
(source
(origin
(method url-fetch)
;; XXX: Original server is at https://www.udpcast.linux.lu is not
;; reliable.
(uri (list (string-append
- "http://sources.buildroot.net/udpcast/udpcast-"
- version ".tar.gz")
- (string-append
"https://fossies.org/linux/privat/udpcast-"
version ".tar.gz")
(string-append
"https://www.udpcast.linux.lu/download/udpcast-"
version ".tar.gz")))
(sha256
- (base32 "06pj86nbi9hx7abbb0z2c5ynhfq0rv89b7nmy0kq3xz2lsxfw6cw"))))
+ (base32 "0l6hck694szrrvz85nm48rwb7mzvg2z2bwa50v51pkvym3kvxkm3"))))
(build-system gnu-build-system)
(native-inputs
(list autoconf automake m4 perl))
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index ff6e5189fd..439b3b2946 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1,13 +1,13 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013, 2015, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016–2022 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 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017, 2019, 2021 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2017, 2019, 2021, 2022 Eric Bavier <bavier@posteo.net>
;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
@@ -69,6 +69,7 @@
#:use-module (guix build-system python)
#:use-module (guix build-system r)
#:use-module (guix download)
+ #:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix hg-download)
#:use-module ((guix licenses) #:prefix license:)
@@ -328,7 +329,7 @@ precision.")
(define-public giac
(package
(name "giac")
- (version "1.7.0-45")
+ (version "1.7.0-51")
(source
(origin
(method url-fetch)
@@ -340,42 +341,42 @@ precision.")
"~parisse/debian/dists/stable/main/source/"
"giac_" version ".tar.gz"))
(sha256
- (base32 "19hxbx27n5zby96d4pzhxxqn7mzk29g8sxn08fi638l17lr9x2q2"))))
+ (base32 "0wgqa2nxpv652348fxpchx5zvaj6ssc403jxwsdp5ky9pdpap2zs"))))
(build-system gnu-build-system)
(arguments
- `(#:modules ((ice-9 ftw)
+ (list
+ #:modules '((ice-9 ftw)
(guix build utils)
(guix build gnu-build-system))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'patch-bin-cp
- ;; Some Makefiles contain hard-coded "/bin/cp".
- (lambda _
- (substitute* (cons "micropython-1.12/xcas/Makefile"
- (find-files "doc" "^Makefile"))
- (("/bin/cp") (which "cp")))))
- (add-after 'unpack 'disable-failing-test
- ;; FIXME: Test failing. Not sure why.
- (lambda _
- (substitute* "check/Makefile.in"
- (("chk_fhan11") ""))))
- (add-after 'install 'fix-doc
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- ;; Most French documentation has a non-commercial
- ;; license, so we need to remove it.
- (with-directory-excursion (string-append out "/share/giac/doc/fr")
- (for-each delete-file-recursively
- '("cascas" "casexo" "casgeo" "casrouge" "cassim"
- "castor")))
- ;; Remove duplicate documentation in
- ;; "%out/share/doc/giac/", where Xcas does not expect
- ;; to find it.
- (delete-file-recursively (string-append out "/share/doc/giac")))))
- (add-after 'install 'remove-unnecessary-executable
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (delete-file (string-append out "/bin/xcasnew"))))))))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-bin-cp
+ ;; Some Makefiles contain hard-coded "/bin/cp".
+ (lambda _
+ (substitute* (cons "micropython-1.12/xcas/Makefile"
+ (find-files "doc" "^Makefile"))
+ (("/bin/cp") (which "cp")))))
+ (add-after 'unpack 'disable-failing-test
+ ;; FIXME: Test failing. Not sure why.
+ (lambda _
+ (substitute* "check/Makefile.in"
+ (("chk_fhan11") ""))))
+ (add-after 'install 'fix-doc
+ (lambda _
+ ;; Most French documentation has a non-commercial license, so we
+ ;; need to remove it.
+ (with-directory-excursion
+ (string-append #$output "/share/giac/doc/fr")
+ (for-each delete-file-recursively
+ '("cascas" "casexo" "casgeo" "casrouge" "cassim"
+ "castor")))
+ ;; Remove duplicate documentation in "%out/share/doc/giac/",
+ ;; where Xcas does not expect to find it.
+ (delete-file-recursively
+ (string-append #$output "/share/doc/giac"))))
+ (add-after 'install 'remove-unnecessary-executable
+ (lambda _
+ (delete-file (string-append #$output "/bin/xcasnew")))))))
(inputs
;; TODO: Add libnauty, unbundle "libmicropython.a".
(list ao
@@ -1139,7 +1140,7 @@ features, and more.")
(define-public xtensor
(package
(name "xtensor")
- (version "0.20.10")
+ (version "0.24.0")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -1147,11 +1148,11 @@ features, and more.")
(commit version)))
(sha256
(base32
- "1fmv2hpx610xwhxrndfsfvlbqfyk4l3gi5q5d7pa9m82kblxjj9l"))
+ "14fpzwdq26p2fqdrmc78hny9pp09k9c53jnwlh7f8x54ikzm23c2"))
(file-name (git-file-name name version))))
(build-system cmake-build-system)
(native-inputs
- (list googletest xtl))
+ (list doctest googletest xtl))
(arguments
`(#:configure-flags
'("-DBUILD_TESTS=ON")
@@ -1181,7 +1182,7 @@ xtensor provides:
(add-after 'unpack 'remove-march=native
(lambda _
(substitute* "benchmark/CMakeLists.txt"
- (("-march=native") ""))))
+ (("-march=native\"") "\""))))
(add-after 'unpack 'link-with-googlebenchmark
(lambda _
(substitute* "benchmark/CMakeLists.txt"
@@ -1348,14 +1349,14 @@ objects.")
(define-public gappa
(package
(name "gappa")
- (version "1.3.5")
+ (version "1.4.0")
(source (origin
(method url-fetch)
- (uri (string-append "https://gforge.inria.fr/frs/download.php/latestfile/"
- "2699/gappa-" version ".tar.gz"))
+ (uri (string-append "https://gappa.gitlabpages.inria.fr/releases/"
+ "gappa-" version ".tar.gz"))
(sha256
(base32
- "0q1wdiwqj6fsbifaayb1zkp20bz8a1my81sqjsail577jmzwi07w"))))
+ "12x42z901pr05ldmparqdi8sq9s7fxbavhzk2dbq3l6hy247dwbb"))))
(build-system gnu-build-system)
(inputs
(list boost gmp mpfr))
@@ -1382,7 +1383,7 @@ filters for CGAL and it is used to certify elementary functions in CRlibm.
While Gappa is intended to be used directly, it can also act as a backend
prover for the Why3 software verification platform or as an automatic tactic
for the Coq proof assistant.")
- (license (list license:gpl3+ license:cecill-c)))) ; either/or
+ (license (list license:gpl3+ license:cecill)))) ; either/or
(define-public givaro
(package
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index e968fd2480..c209b1538f 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -1,11 +1,11 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 John Darrington <jmd@gnu.org>
;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2019 by Amar Singh <nly@disroot.org>
;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021, 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2021, 2022 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
@@ -297,7 +297,7 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
(define-public gnuastro
(package
(name "gnuastro")
- (version "0.16")
+ (version "0.17")
(source
(origin
(method url-fetch)
@@ -305,19 +305,19 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
version ".tar.lz"))
(sha256
(base32
- "07xr0r5dmjpnrz7ylf7k3vmjjna2jafi16lfvkqwxj9fyssmz207"))))
+ "1gq37axs9l556pxxmnh47h088gbmp7sk3xjg59qzk2bsycg3dkgh"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags '("--disable-static")))
(inputs
- `(("cfitsio" ,cfitsio)
- ("curl" ,curl-minimal)
- ("gsl" ,gsl)
- ("libgit2" ,libgit2)
- ("libjpeg" ,libjpeg-turbo)
- ("libtiff" ,libtiff)
- ("wcslib" ,wcslib)
- ("zlib" ,zlib)))
+ (list cfitsio
+ curl-minimal
+ gsl
+ libgit2
+ libjpeg-turbo
+ libtiff
+ wcslib
+ zlib))
(native-inputs
(list libtool lzip))
(home-page "https://www.gnu.org/software/gnuastro/")
@@ -614,13 +614,13 @@ accurately in real time at any rate desired.")
(define-public python-astropy
(package
(name "python-astropy")
- (version "5.0")
+ (version "5.0.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "astropy" version))
(sha256
- (base32 "09rr9z2kn5qw34fqpwxgcwsn9m5aw6f0dd0pm232aa8k3qakw83h"))
+ (base32 "09wh589ywjsgjvi76v2d2zqd9sri0461rrnml0b0pah5lbkcv0k3"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -826,21 +826,20 @@ of astronomical sources.")
(define-public python-pyvo
(package
(name "python-pyvo")
- (version "1.2")
+ (version "1.2.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pyvo" version))
(sha256
- (base32 "1lap703wxbyxqlbk85myirp4pkdnc6cg10xhfajfsvz5k0hm5ffw"))))
+ (base32 "1ri5yp6903386lkn79mdcmlax7zsfrrrjbcvb91wxydcc9yasc1n"))))
(build-system python-build-system)
(arguments
- `(#:phases
+ '(#:phases
(modify-phases %standard-phases
(replace 'check
- (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (lambda* (#:key tests? #:allow-other-keys)
(when tests?
- (add-installed-pythonpath inputs outputs)
(invoke "python" "-m" "pytest" "--pyargs" "pyvo" "-k"
(string-append ; these tests use the network
"not test_access_with_string"
@@ -1460,34 +1459,221 @@ of stand-alone functions and classes.")
(define-public python-asdf
(package
(name "python-asdf")
- (version "2.7.4")
+ (version "2.8.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "asdf" version))
(sha256
- (base32 "1mj52l2m8pbhiqacgjakjpvqi8kyx470yw151lcsswbq5wp0rsc6"))))
+ (base32 "0i4vq1hsympjgb1yvn4ql0gm8j1mki9ggmj03533kmg0nbzp03yy"))))
(build-system python-build-system)
(arguments
- ;; TODO: (Sharlatan-20210207T165820+0000): Tests depend on astropy, astropy
- ;; depends on asdf. Disable circular dependence.
+ ;; NOTE: (Sharlatan-20211229T201059+0000): Tests depend on astropy and
+ ;; gwcs, astropy gwcs depend on asdf. Disable circular dependence.
`(#:tests? #f))
(native-inputs
- `(("packaging" ,python-packaging)
- ("semantic-version" ,python-semantic-version)
- ("setuptools-scm" ,python-setuptools-scm)))
- (inputs
- `(("importlib-resources" ,python-importlib-resources)
- ("jsonschema" ,python-jsonschema)
- ("numpy" ,python-numpy)
- ("pyyaml" ,python-pyyaml)))
- (home-page "https://github.com/asdf-format/asdf")
- (synopsis "Python tools to handle ASDF files")
- (description
- "The Advanced Scientific Data Format (ASDF) is a next-generation
+ (list python-setuptools-scm
+ python-semantic-version
+ python-packaging))
+ (propagated-inputs
+ (list python-importlib-resources
+ python-jsonschema
+ python-jmespath
+ python-numpy
+ python-pyyaml))
+ (home-page "https://github.com/asdf-format/asdf")
+ (synopsis "Python tools to handle ASDF files")
+ (description
+ "The Advanced Scientific Data Format (ASDF) is a next-generation
interchange format for scientific data. This package contains the Python
implementation of the ASDF Standard.")
- (license license:bsd-3)))
+ (license license:bsd-3)))
+
+(define python-asdf-transform-schemas
+ (package
+ (name "python-asdf-transform-schemas")
+ (version "0.2.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "asdf_transform_schemas" version))
+ (sha256
+ (base32 "1gmzd81hw4ppsvzrc91wcbjpcw9hhv9gavllv7nyi7qjb54c837g"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ (add-installed-pythonpath inputs outputs)
+ (invoke "python" "-m" "pytest")))))))
+ (native-inputs
+ (list python-pytest
+ python-semantic-version
+ python-setuptools-scm))
+ (propagated-inputs
+ (list python-asdf))
+ (home-page "https://github.com/asdf-format/asdf-transform-schemas")
+ (synopsis "ASDF schemas for transforms")
+ (description
+ "This package provides ASDF schemas for validating transform tags. Users
+should not need to install this directly; instead, install an implementation
+package such as asdf-astropy.")
+ (license license:bsd-3)))
+
+(define python-asdf-coordinates-schemas
+ (package
+ (name "python-asdf-coordinates-schemas")
+ (version "0.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "asdf_coordinates_schemas" version))
+ (sha256
+ (base32 "0ahwhsz5jzljnpkfd2kvspirg823lnj5ip9sfkd9cx09z1nlz8jg"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ (add-installed-pythonpath inputs outputs)
+ (invoke "python" "-m" "pytest")))))))
+ (native-inputs
+ (list python-pytest
+ python-semantic-version
+ python-setuptools-scm))
+ (propagated-inputs
+ (list python-asdf))
+ (home-page "https://github.com/asdf-format/asdf-coordinates-schemas")
+ (synopsis "ASDF coordinates schemas")
+ (description "This package provides ASDF schemas for validating
+coordinates tags. Users should not need to install this directly; instead,
+install an implementation package such as asdf-astropy.")
+ (license license:bsd-3)))
+
+(define-public python-asdf-astropy
+ (package
+ (name "python-asdf-astropy")
+ (version "0.1.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "asdf_astropy" version))
+ (sha256
+ (base32 "0bzgah7gskvnz6jcrzipvzixv8k2jzjkskqwxngzwp4nxgjbcvi4"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ (add-installed-pythonpath inputs outputs)
+ (invoke "python" "-m" "pytest")))))))
+ (native-inputs
+ (list python-coverage
+ python-h5py
+ python-matplotlib
+ python-pandas
+ python-pytest-astropy
+ python-scipy
+ python-semantic-version
+ python-setuptools-scm))
+ (propagated-inputs
+ (list python-asdf
+ python-asdf-coordinates-schemas
+ python-asdf-transform-schemas
+ python-astropy
+ python-numpy
+ python-packaging))
+ (home-page "https://github.com/astropy/asdf-astropy")
+ (synopsis "ASDF serialization support for astropy")
+ (description
+ "This package includes plugins that provide ASDF serialization support for
+Astropy objects.")
+ (license license:bsd-3)))
+
+(define python-asdf-wcs-schemas
+ (package
+ (name "python-asdf-wcs-schemas")
+ (version "0.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "asdf_wcs_schemas" version))
+ (sha256
+ (base32 "0khyab9mnf2lv755as8kwhk3lqqpd3f4291ny3b9yp3ik86fzhz1"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ (add-installed-pythonpath inputs outputs)
+ (invoke "python" "-m" "pytest")))))))
+ (native-inputs
+ (list python-pytest
+ python-setuptools-scm
+ python-semantic-version))
+ (propagated-inputs
+ (list python-asdf))
+ (home-page "https://github.com/asdf-format/asdf-wcs-schemas")
+ (synopsis "ASDF WCS Schemas")
+ (description
+ "This package provides ASDF schemas for validating World Coordinate
+System (WCS) tags. Users should not need to install this directly; instead,
+install an implementation package such as gwcs.")
+ (license license:bsd-3)))
+
+(define-public python-gwcs
+ (package
+ (name "python-gwcs")
+ (version "0.18.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "gwcs" version))
+ (sha256
+ (base32 "194j49m8xjjzv9pp8cnj06igz8sdxb0nphyybcc7mhigw0f0kr30"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (when tests?
+ (add-installed-pythonpath inputs outputs)
+ (invoke "python" "-m" "pytest")))))))
+ (native-inputs
+ (list python-jsonschema
+ python-jmespath
+ python-pytest
+ python-pytest-doctestplus
+ python-pyyaml
+ python-semantic-version
+ python-setuptools-scm))
+ (propagated-inputs
+ (list python-asdf
+ python-asdf-astropy
+ python-asdf-wcs-schemas
+ python-astropy
+ python-numpy
+ python-scipy))
+ (home-page "https://gwcs.readthedocs.io/en/latest/")
+ (synopsis "Generalized World Coordinate System")
+ (description "Generalized World Coordinate System (GWCS) is an Astropy
+affiliated package providing tools for managing the World Coordinate System of
+astronomical data.
+
+GWCS takes a general approach to the problem of expressing transformations
+between pixel and world coordinates. It supports a data model which includes
+the entire transformation pipeline from input coordinates (detector by
+default) to world coordinates.")
+ (license license:bsd-3)))
(define-public python-astroalign
(package
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index b186c79451..13e0f02837 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1,10 +1,10 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2016 Nikita <nikita@n0.is>
;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
@@ -254,6 +254,45 @@ softsynth library that can be use with other applications.")
(sha256
(base32 "1gsx7k77blfy171b6g3m0k0s0072v6jcawhmx1kjs9w5zlwdkzd0"))))
(build-system gnu-build-system)
+ (arguments
+ ;; TODO: Move this to a snippet/patch or remove with the upgrade to 1.0.
+ (if (or (target-riscv64?)
+ (target-powerpc?))
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-source
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((patch-file
+ #$(local-file
+ (search-patch
+ "webrtc-audio-processing-big-endian.patch"))))
+ (invoke "patch" "--force" "-p1" "-i" patch-file)
+ (substitute* "webrtc/typedefs.h"
+ (("defined\\(__aarch64__\\)" all)
+ (string-append
+ ;; powerpc-linux
+ "(defined(__PPC__) && __SIZEOF_SIZE_T__ == 4)\n"
+ "#define WEBRTC_ARCH_32_BITS\n"
+ "#define WEBRTC_ARCH_BIG_ENDIAN\n"
+ ;; powerpc64-linux
+ "#elif (defined(__PPC64__) && defined(_BIG_ENDIAN))\n"
+ "#define WEBRTC_ARCH_64_BITS\n"
+ "#define WEBRTC_ARCH_BIG_ENDIAN\n"
+ ;; aarch64-linux
+ "#elif " all
+ ;; riscv64-linux
+ " || (defined(__riscv) && __riscv_xlen == 64)"
+ ;; powerpc64le-linux
+ " || (defined(__PPC64__) && defined(_LITTLE_ENDIAN))"))))))))
+ '()))
+ (native-inputs
+ (if (or (target-riscv64?)
+ (target-powerpc?))
+ (list
+ (local-file (search-patch "webrtc-audio-processing-big-endian.patch"))
+ patch)
+ '()))
(synopsis "WebRTC's Audio Processing Library")
(description "WebRTC-Audio-Processing library based on Google's
implementation of WebRTC.")
@@ -383,13 +422,13 @@ Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
(inputs
`(("alsa" ,alsa-lib)
("flac" ,flac)
- ("mpg123" ,mpg123)
("portaudio" ,portaudio)
("pulseaudio" ,pulseaudio)
("sdl2" ,sdl2)
- ("sndfile" ,libsndfile)
- ("vorbis" ,libvorbis)
- ("zlib" ,zlib)))
+ ("sndfile" ,libsndfile)))
+ (propagated-inputs
+ ;; In Requires.private
+ (list libogg libvorbis mpg123 zlib))
(synopsis "Audio tracking library")
(description "LibOpenMPT is a cross-platform C++ and C module playback
library. It is based on the player code of the Open ModPlug Tracker project.")
@@ -728,14 +767,17 @@ engineers, musicians, soundtrack editors and composers.")
(version "3.1.3")
(source
(origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/audacity/audacity")
- (commit (string-append "Audacity-" version))))
- (file-name (git-file-name name version))
+ ;; If built from the release tag, Audacity will describe itself
+ ;; as an "Alpha test version" and suggest to users that they use
+ ;; the "latest stable released version".
+ (method url-fetch)
+ (uri (string-append "https://github.com/audacity/audacity/releases/download/"
+ "Audacity-" version "/audacity-" version
+ "-source.tar.gz"))
(sha256
(base32
- "1689q9apbjf9nnda62shb8j7hm4hxd47mhk4l5h3c728mjjkilmi"))
+ "189agx11361k9j958s6q5bngnnfx0rwaf0dwbjxy6fwvsb1wv3px"))
+ (patches (search-patches "audacity-ffmpeg-fallback.patch"))
(modules '((guix build utils)))
(snippet
;; Remove bundled libraries.
@@ -763,10 +805,10 @@ engineers, musicians, soundtrack editors and composers.")
alsa-lib
jack-1
expat
- ffmpeg
lame
linux-libre-headers
flac
+ ffmpeg
libid3tag
libjpeg-turbo
libmad
@@ -4080,6 +4122,40 @@ with support for HD extensions.")
(home-page "https://github.com/foo86/dcadec")
(license license:lgpl2.1+)))
+(define-public drc
+ (package
+ (name "drc")
+ (version "3.2.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/drc-fir/drc-fir/"
+ version "/drc-" version ".tar.gz"))
+ (sha256
+ (base32
+ "08ljj4776pjx119zjmfqa8w56bf7x0m7spmi27yk1m455bmiglrj"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #false ;there are none
+ #:make-flags
+ #~(list (string-append "INSTALL_PREFIX=" #$output)
+ "-C" "source")
+ #:phases
+ '(modify-phases %standard-phases
+ (delete 'configure))))
+ (inputs (list fftw))
+ (home-page "http://drc-fir.sourceforge.net/")
+ (synopsis "Digital room correction")
+ (description
+ "DRC is a program used to generate correction filters for acoustic
+compensation of HiFi and audio systems in general, including listening room
+compensation. DRC generates just the FIR correction filters, which can be
+used with a real time or offline convolver to provide real time or offline
+correction. DRC doesn't provide convolution features, and provides only some
+simplified, although really accurate, measuring tools.")
+ (license license:gpl2+)))
+
(define-public bs1770gain
(package
(name "bs1770gain")
diff --git a/gnu/packages/autogen.scm b/gnu/packages/autogen.scm
index 1fe742bbae..7213776f07 100644
--- a/gnu/packages/autogen.scm
+++ b/gnu/packages/autogen.scm
@@ -40,7 +40,13 @@
(uri (string-append "mirror://gnu/autogen/rel" version
"/autogen-" version ".tar.xz"))
(sha256
- (base32 "16mlbdys8q4ckxlvxyhwkdnh1ay9f6g0cyp1kylkpalgnik398gq"))))
+ (base32 "16mlbdys8q4ckxlvxyhwkdnh1ay9f6g0cyp1kylkpalgnik398gq"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; 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-2.2 perl)) ; for doc generator mdoc
diff --git a/gnu/packages/aux-files/guix.vim b/gnu/packages/aux-files/guix.vim
index 7dc359e52b..9397c53701 100644
--- a/gnu/packages/aux-files/guix.vim
+++ b/gnu/packages/aux-files/guix.vim
@@ -1,7 +1,13 @@
" This appends all of the vim plugins to the end of Vim's runtimepath.
-for directory in ["/run/current-system/profile", $HOME . "/.guix-profile", $GUIX_PROFILE, $GUIX_ENVIRONMENT]
+for directory in ["/run/current-system/profile", $HOME . "/.guix-profile", $HOME ."/.guix-home/profile", $GUIX_PROFILE, $GUIX_ENVIRONMENT]
let vimplugins = directory . "/share/vim/vimfiles"
if isdirectory(vimplugins)
let &rtp = join([&rtp,vimplugins], ',')
endif
endfor
+" Unconditionally add */after directories last, as intended by upstream
+" TODO: Remove duplicate */after directories
+for directory in [$VIM . "/vimfiles", $HOME ."/.vim"]
+ let vimplugins = directory . "/after"
+ let &rtp = join([&rtp,vimplugins], ',')
+endfor
diff --git a/gnu/packages/aux-files/linux-libre/4.14-arm.conf b/gnu/packages/aux-files/linux-libre/4.14-arm.conf
index 03d11b4f53..6da3c1fdf1 100644
--- a/gnu/packages/aux-files/linux-libre/4.14-arm.conf
+++ b/gnu/packages/aux-files/linux-libre/4.14-arm.conf
@@ -5437,6 +5437,8 @@ CONFIG_SND_INDIGOIO=m
CONFIG_SND_INDIGODJ=m
CONFIG_SND_INDIGOIOX=m
CONFIG_SND_INDIGODJX=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1_SEQ=m
# CONFIG_SND_EMU10K1_SEQ is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
diff --git a/gnu/packages/aux-files/linux-libre/4.14-i686.conf b/gnu/packages/aux-files/linux-libre/4.14-i686.conf
index b7a07b5fe3..16a7817115 100644
--- a/gnu/packages/aux-files/linux-libre/4.14-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/4.14-i686.conf